TensorBoard是Tensorflow自带的一个可视化学习插件
通过TensorBoard 可以记录学习过程中的参数变化以及将网络结构以图的方式展现
要使用Tensorboard
在构建网络的过程中需要定义命名空间以及添加记录参数
如在定义网络层级的时候
with tf.name_scope('hidden_1'):
w_H_F = weight_variable([7, 64])
b_H_F = bias_variable([64])
t_X = tf.reshape(X, [-1, 7])
h_fc1 = tf.nn.relu(tf.matmul(t_X, w_H_F) + b_H_F)
将with段内的变量概括为Hidden_1层
这样在TensorBoard的Graph界面就可以看到被概括的该层
点击右上的加号可以显示详细信息(如图)PS:大概是错误的网络结构2333
如果要记录训练过程中的参数变化如Cost
则需要在命名空间内添加记录变量
with tf.name_scope('cost'):
cost = tf.div(tf.reduce_sum(tf.div(tf.abs(Y - y_out), tf.add(Y, 1.0))), train_step)
# cost = tf.div(tf.reduce_sum(tf.abs(Y - y_out)), train_step)
tf.scalar_summary('cost', cost)
tf.scalar_summary(变量名, 变量值)
这样在运行的时候可以在Events里看到对应的曲线图(唔,一个不收敛的网络…谁能告诉我为什么
注意:曲线图并不是实时刷新会有1-2分钟的延迟
所以在训练刚开始时没有显示图像是正常现象
最后,归并设置的所有命名空间和变量,并设定日志保存的地方:
merged_summary_op = tf.merge_all_summaries()
summary_writer = tf.train.SummaryWriter('./mnist_logs', sess.graph)
之后每隔一定训练次数输出日志
result = sess.run(merged_summary_op, feed_dict={X: test_x, Y: test_y})
summary_writer.add_summary(result, epoch)
因为合并了所有变量后也同时包含了定义的cost变量(本文中)
所以也需要使用数据run一遍
之后在命令行使用
tensorboard --logdir=[日志存储目录]
启动tensorboard服务,然后访问http://localhost:6006/ 即可