使用TensorBoard可视化loss和accuracy,分析神经网络训练情况
参考:https://blog.****.net/weixin_39674098/article/details/79242073
你的神经网络训练或者验证效果如何,靠简单的打印输出无法判别,需要对训练过程中各个参数的变化情况进行分析进而得出结论。TensorFlow自带的TensorBoard可以很好地实现这一目的。
这是一个示例图,从图中我们可以看出,loss处于震荡状态,模型无法收敛。因此我们可以据此分析模型无法收敛的原因。
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