人工智能TensorFlow(十)-TensorBoard可视化神经网络

通过上期的分享TensorBoard可视化基础,我们分享了TensorBoard的基础操作,但是上期的文章,只是显示了一个TensorFlow的基本层的GRAPHS,并没有实际的训练,本期修改一下上期的代码,用TensorBoard显示下图biases 与weights信息以及其他训练信息

TensorFlow可视化

定义数据

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

定义一个一元二次函数,TensorFlow来训练拟合此函数

添加层

with tf.name_scope('inputs'):
 xs=tf.placeholder(tf.float32,[None,1],name='x_input')
 ys=tf.placeholder(tf.float32,[None,1],name='y_input')
#添加层
lay_one=add_layer(xs,1,10,n_layer=1,activation_function=tf.nn.relu)#hidden layer
predition=add_layer(lay_one,10,1,n_layer=2,activation_function=None)#output layer

添加隐藏层与输出层

定义loss 与train

with tf.name_scope('loss'):
 loss=tf.reduce_mean(tf.reduce_sum(tf.square(ys-predition),reduction_indices=[1]))
 tf.summary.scalar('loss',loss)#搜集loss信息
with tf.name_scope('train'):
 train_step=tf.train.GradientDescentOptimizer(0.1).minimize(loss)

通过summary.scalar方法,可以在TensorBoard下scalars视图看到loss的变化信息,通过查看loss的变化,能够分析出你的TensorFlow是否在训练

loss

loss越来越小,说明TensorFlow在优化训练

初始化TensorFlow

在这里,我们可以看到除了变量需要初始化外,tf.summary需要搜集所有的summary信息,并合并到一起

init = tf.global_variables_initializer()
merged=tf.summary.merge_all()

训练TensorFlow

with tf.Session() as sess:
#写summary文件到log文件夹
 writer=tf.summary.FileWriter("logs/",sess.graph)
 sess.run(init)
 for i in range(1000):
 sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
 if i%50==0:
#每50step搜集一个summary信息
 result=sess.run(merged,feed_dict={xs:x_data,ys:y_data})
#添加summary信息到log文件
 writer.add_summary(result,i)

运行TensorBoard(参考上期),可以看到完整的可视化数据

TensorFlow可视化

不仅能够看到每层的biases与weights训练过程,也可以清楚的看到loss的变化曲线

下期预告

下期分享TensorFlow中的过拟合(Overfitting)与dropout的概念