下面我们以一个神经网络为例,讲解 TensorFlow 的运行方式。在这个例子中,我们构造一
个满足一元二次函数 y = ax2+b 的原始数据,然后构建一个最简单的神经网络,仅包含一个输入层、一个隐藏层和一个输出层。通过 TensorFlow 将隐藏层和输出层的 weights 和 biases 的值学习出来,看看随着训练次数的增加,损失值是不是不断在减小。
import tensorflow as tf
import numpy as np
"""生成和加载数据"""
x_data=np.linspace(-1,1,300)[:,np.newaxis]
noise=np.random.normal(0,0.05,x_data.shape)
y_data=np.square(x_data)-0.5+noise
xs=tf.placeholder(tf.float32,[None,1])
ys=tf.placeholder(tf.float32,[None,1])
"""构建网络模型,一个隐藏层一个输出层"""
def add_layer(inputs,in_size,out_size,activetion_function=None):
weights=tf.Variable(tf.random_normal([in_size,out_size]))
biase=tf.Variable(tf.zeros([1,out_size])+0.1)
Wx_plus_b=tf.matmul(inputs,weights)+biase
if activetion_function is None:
outputs=Wx_plus_b
pass
else:
outputs=activetion_function(Wx_plus_b)
pass
return outputs
h1=add_layer(xs,1,20,activetion_function=tf.nn.relu)
prediction=add_layer(h1,20,1,activetion_function=None)
loss=tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction),reduction_indices=[1]))
train_step=tf.train.GradientDescentOptimizer(0.1).minimize(loss)
"""训练模型"""
init=tf.global_variables_initializer()
sess=tf.Session()
sess.run(init)
for i in range(1000):
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}))
输出:
2.20421
0.014282387
0.0062070857
0.005400587
0.0050143315
0.00467034
0.0043301485
0.00404618
0.0038027836
0.00350036
0.0033497384
0.0031849453
0.00305977
0.00291904
0.0028882492
0.0028230734
0.0027652562
0.0027166638
0.0026825215
0.002653961