tensorflow 学习笔记4 搭建神经网络基本流程

本文详细介绍使用TensorFlow搭建并训练简单神经网络的过程。通过生成模拟数据,定义网络结构包括隐藏层与输出层,并采用梯度下降法最小化损失函数完成训练。文中还展示了训练过程中的损失函数变化情况。

搭建神经网络主要有以下几步:

1.训练的数据
2.定义节点准备接收数据
3.定义神经层:隐藏层和预测层
4.定义 loss 表达式
5.选择 optimizer 使 loss 达到最小

import tensorflow as tf
import numpy as np
# 添加层
def add_layer(inputs,in_size,out_size,activation_function):
    # add one more layer and return the output of this layer
    #变量Weights in_size行 out_size列
    Weights=tf.Variable(tf.random_normal([in_size,out_size]))
    #变量biases 1行 out_size列 由于biases最好不为0加上0.1
    biases=tf.Variable(tf.zeros([1,out_size])+0.1)
    #Wx_plus_b=inputs*Weights+biases
    Wx_plus_b=tf.matmul(inputs,Weights)+biases
    #激活函数
    if activation_function is None:
        outputs=Wx_plus_b
    else:
        outputs=activation_function(Wx_plus_b)
    return outputs
#x值
# 1.生成训练的数据
# Make up some real data
x_data=np.linspace(-1,1,300)[:,np.newaxis]
#噪声 均值为mean 0,标准差为stdev的高斯随机数 0.05,size与x一致
noise = np.random.normal(0, 0.05, x_data.shape)
#y值 x的平方减去0.5  加上噪声
y_data=np.square(x_data)-0.5+noise
# 2.定义节点准备接收数据
# define placeholder for inputs to network
#placeholder x与y 类型tf.float32,输入的行任意,列为1
xs=tf.placeholder(tf.float32,[None,1])
ys=tf.placeholder(tf.float32,[None,1])
# 3.定义神经层:隐藏层和预测层
# add hidden layer 输入值是 xs,为1个神经元,在隐藏层有 10 个神经元,激活函数为relu
l1=add_layer(xs,1,10,activation_function=tf.nn.relu)
# add output layer 输入值是隐藏层 l1,在预测层输出 1 个结果,预测层是输出层,参数为l1输入值,10个输入神经元,1个输出神经元,激活函数为None
prediction=add_layer(l1,10,1,activation_function=None)
# 4.定义 loss 表达式
# the error between prediciton and real
# datareduction_indices是指沿tensor的哪些维度求和
loss=tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction),reduction_indices=[1]))

# 5.选择 optimizer 使 loss 达到最小
# 这一行定义了用什么方式去减少 loss,学习率是 0.1
#选择 Gradient Descent 这个最基本的 Optimizer
train_step=tf.train.GradientDescentOptimizer(0.1).minimize(loss)
# important step 对所有变量进行初始化 前面是定义,在运行模型前先要初始化所有变量
init=tf.initialize_all_variables()
sess=tf.Session()
# 上面定义的都没有运算,直到 sess.run 才会开始运算
sess.run(init)

# 迭代 1000 次学习,sess.run optimizer
for i in range(1000):
    # training train_step 和 loss 都是由 placeholder 定义的运算,所以这里要用 feed 传入参数
    sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
    if i%50==0:
        print(sess.run(loss,feed_dict={xs:x_data,ys:y_data}))
结果输出损失函数值:

0.340238
0.0130477
0.00919954
0.00656035
0.0058786
0.00552345
0.00522962
0.00498196
0.00478004
0.0046019
0.00443302
0.00429828
0.00418443
0.00408815
0.00399037
0.00389503
0.00380764
0.00371589
0.00362369
0.00353318


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值