搭建神经网络主要有以下几步:
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