在网络训练的过程中,通过Web 端监控网络的训练进度,可视化网络的训练结果对于
提高开发效率是非常重要的。
TensorFlow 提供了一个专门的可视化工具,叫做TensorBoard,他通过TensorFlow 将监控数据写入到文件系统,并利用Web 后端监控对应的文件目录,从而可以允许用户从远程查看网络的监控数据。
TensorBoard 的使用需要训练部分和浏览器交互工作。
在模型端,需要创建写入监控数据的Summary 类,并在需要的时候写入监控数据。首
先通过tf.summary.create_file_writer
创建监控对象,并制定监控数据的写入目录:
# 创建监控类,监控数据将写入log_dir 目录
summary_writer = tf.summary.create_file_writer(log_dir)
我们以监控误差数据和可视化图片数据为例,介绍如何写入监控数据。在前向计算完成后,对于误差这种标量数据,我们通过tf.summary.scalar
函数记录监控数据,并指定时间戳step:
with summary_writer.as_default():
# 当前时间戳step 上的数据为loss,写入到ID 位train-loss 对象中
tf.summary.scalar('train-loss', float(loss), step=step)
需要注意的是,TensorBoard 通过字符串ID 来区分不同类别的监控数据,因此对于误差数
据,我们将它命名为”train-loss”,其他类的数据不可写入此对象,防止数据污染。
对于图片类型的数据,通过tf.summary.image
函数写入监控图片数据:
with summary_writer.as_default():
# 写入测试准确率
tf.summary.scalar('test-acc', float(total_correct/total),
step=step)
# 可视化测试用的图片,设置最多可视化9 张图片
tf.summary.image("val-onebyone-images:", val_images,
max_outputs=9, step=step)
运行模型程序后,相应的数据将写入到指定文件目录中。
在监控页面的上端可以选择不同类型数据的监控页面,比如标量监控页面SCALARS,图
片可视化页面IMAGES 等等。对于我们的例子,我们需要监控的训练误差和测试准确率的
曲线在SCALARS 页面可以查看
在 IMAGES 页面,可以查看每个step 的图片可视化效果
除了监控标量数据和图片数据外,TensorBoard 还支持通过tf.summary.histogram 查看张量的数据直方图分布,以及通过tf.summary.text 打印文本信息:
with summary_writer.as_default():
# 当前时间戳step 上的数据为loss,写入到ID 位train-loss 对象中
tf.summary.scalar('train-loss', float(loss), step=step)
# 可视化真实标签的直方图分布
tf.summary.histogram('y-hist',y, step=step)
# 查看文本信息
tf.summary.text('loss-text',str(float(loss)))
在HISTOGRAMS 页面即可查看张量的直方图,在TEXT 页面可以查看文本信息