使用TensorBoard可视化loss和accuracy,分析神经网络训练情况

参考:https://blog.****.net/weixin_39674098/article/details/79242073

你的神经网络训练或者验证效果如何,靠简单的打印输出无法判别,需要对训练过程中各个参数的变化情况进行分析进而得出结论。TensorFlow自带的TensorBoard可以很好地实现这一目的。

这是一个示例图,从图中我们可以看出,loss处于震荡状态,模型无法收敛。因此我们可以据此分析模型无法收敛的原因。
使用TensorBoard可视化loss和accuracy,分析神经网络训练情况

TensorBoard可视化过程大概是这样的:代码中将每一次迭代过程中产生的数据保存为log,接着使用TensorBoard命令打开这个log,可视化后的数据显示在TensorFlow官方提供的网页上,可以通过浏览器访问。代码中的实现步骤如下:

1.声明scalar_summary对象,不同版本之间的声明差异可以用try…catch解决

try:
	image_summary = tf.image_summary
	scalar_summary = tf.scalar_summary
	histogram_summary = tf.histogram_summary
	merge_summary = tf.merge_summary
	SummaryWriter = tf.train.SummaryWriter
except:
	image_summary = tf.summary.image
	scalar_summary = tf.summary.scalar
	histogram_summary = tf.summary.histogram
	merge_summary = tf.summary.merge
	SummaryWriter = tf.summary.FileWriter

2.将accuracy和loss等参数添加到scalar_summary对象中

# 第一个参数是可视化后的图名,第二个参数是模型中实际的变量
loss_summary = scalar_summary('loss', cost)
acc_summary = scalar_summary('accuracy', acc)

3.将需要保存的变量合并

# 也可以使用 tf.merge_all_summaries() 或者 tf.summary.merge_all()
merged = merge_summary([loss_summary, acc_summary])

4.定义保存路径

# 从命名可以知道这是一个写对象
writer = SummaryWriter('./logs', sess.graph)

5.运行训练过程,将过程数据写入log中

summary = sess.run([merged])
writer.add_summary(summary, step)

等待模型训练完成,在模型工程目录下输入以下代码即可启动TensorBoard服务:

TensorBoard --logdir=logs

最后在浏览器中输入以下代码,即可浏览可视化后的accuracy和loss

# 注意,不同机器上的地址要相应修改其中机器名
http://DESKTOP-EEOS6SO:6006