TensorFlow学习之TensorBoard使用方法

参考:https://blog.csdn.net/u010099080/article/details/77426577

在使用tensorflow训练神经网络之后,可以输出训练日志,然后用tensorboard打开进行可视化,本文目的是整理tensorboard的使用方法以及里边曲线的含义。

1 运行过程

  1. 添加记录节点:tf.summary.scalar/image/histogram()等
  2. 汇总记录节点:merged = tf.summary.merge_all()
  3. 运行汇总节点:summary = sess.run(merged),得到汇总结果
  4. 日志书写器实例化: summary_writer = tf.summary.FileWriter(logdir, graph=sess.graph),实例化的同时传入 graph 将当前计算图写入日志
  5. 调用日志书写器实例对象summary_writer的add_summary(summary, global_step=i)方法将所有汇总日志写入文件
  6. 调用日志书写器实例对象summary_writer的close()方法写入内存,否则它每隔120s写入一次

2 运行tensorboard

tensorboard的运行很简单,只需要在终端输入tensorboard,然后带上日志目录就可以了

tensorboard --logdir=/path/to/log

运行以上命令会启动一个服务,这个服务的默认端口是6006。然后在浏览器中输入 localhost:6006或者本机IP地址如10.1.1.101:6006即可打开如图所示的界面

TensorFlow学习之TensorBoard使用方法_第1张图片

我们看到在主页打开的是SCALARS选项页面,该页面显示了程序运行过程中的各种监控指标,tensorboard总共提供了多种界面来可视化监控指标,包括SCALARS(标量)、GRAPHS(计算图)、IMAGES(图片)、AUDIO(音频)、DISTRIBUTIONS(数据分布)、HISTOGRAMS(直方图)、EMBEDDINGS(嵌入向量)。你用到的面板会在顶部导航栏直接显示,而其它用不到的(你代码中没有相关代码)则会收起到INACTIVE中。

其中GRAPHS可视化计算图的结构以及在计算图上的信息;IMAGES用于可视化当前使用的训练/测试图片;AUDIO显示使用的音频数据;DISTRIBUTIONS提供了对张量取值分布的可视化界面,可以直观地观察到不同层神经网络中参数的取值变化;HISTOGRAMS展示了参数取值分布于训练迭代轮数之间的关系。

3 SCALARS

tf.summary.scalar(name, tensor, collections=None, family=None)

'''
可视化训练过程中随着迭代次数准确率(val acc)、损失值(train/test loss)、学习率(learning rate)、每一层的权重和偏置的统计量(mean、std、max/min)等的变化曲线
输入参数:
--name:此操作节点的名字,TensorBoard 中绘制的图形的纵轴也将使用此名字
--tensor: 需要监控的变量 A real numeric Tensor containing a single value.
输出:
--A scalar Tensor of type string. Which contains a Summary protobuf.
'''

SCALARS面板主要用于记录诸如准确率、损失和学习率等单个值的变化趋势。在代码中用tf.summary.scalar()来将其记录到文件中。每个图的右下角都有 3 个小图标,第一个是查看大图,第二个是是否对 y 轴对数化,第三个是如果你拖动或者缩放了坐标轴,再重新回到原始位置。

页面左上是 Show data download links 和 Ignore outliers in chart scaling,这两个比较好理解,第一个就是显示数据下载链接,可以把 TensorBoard 作图用的数据下载下来,点击后可以在图的右下角可以看到下载链接以及选择下载哪一个 run 的,下载格式支持 CSV 和 JSON。第二个是排除异常点,默认选中。

当我们用鼠标在图上滑过的时候可以显示出每个 run 对应的点的值,这个显示顺序是由 Tooltip sorting method 来控制的,有 default、descending(降序)、asceding (升序)和 nearest 四个选项,大家可以试试点几下。

而下面的 Smoothing 指的是作图时曲线的平滑程度,使用的是类似指数平滑的处理方法。如果不平滑处理的话,有些曲线波动很大,难以看出趋势。0 就是不平滑处理,1 就是最平滑,默认是 0.6。

Horizontal Axis 顾名思义指的是横轴的设置:

  • STEP:默认选项,指的是横轴显示的是训练迭代次数
  • RELATIVE:这个相对指的是相对时间,相对于训练开始的时间,也就是说是训练用时 ,单位是小时
  • WALL:指训练的绝对时间 最下面的 Runs 列出了各个 run,你可以选择只显示某一个或某几个。

4 IMAGES

tf.summary.image(name, tensor, max_outputs=3, collections=None, family=None)
'''
可视化当前轮训练使用的训练/测试图片或者 feature maps
输入参数:
--name:此操作节点的名字,TensorBoard 中绘制的图形的纵轴也将使用此名字
--tensor: A r A 4-D uint8 or float32 Tensor of shape [batch_size, height, width, channels] where channels is 1, 3, or 4
--max_outputs:Max number of batch elements to generate images for
输出:
--A scalar Tensor of type string. Which contains a Summary protobuf.
'''

如果你的模型输入是图像(的像素值),然后你想看看模型每次的输入图像是什么样的,以保证每次输入的图像没有问题(因为你可能在模型中对图像做了某种变换,而这种变换是很容易出问题的),IMAGES 面板就是干这个的,它可以显示出相应的输入图像,默认显示最新的输入图像,如下图:

5 GRAPHS

这个应该是最常用的面板了。很多时候我们的模型很复杂,包含很多层,我们想要总体上看下构建的网络到底是什么样的,这时候就用到 GRAPHS 面板了,在这里可以展示出你所构建的网络整体结构,显示数据流的方向和大小,也可以显示训练时每个节点的用时、耗费的内存大小以及参数多少。默认显示的图分为两部分:主图(Main Graph)和辅助节点(Auxiliary Nodes)。其中主图显示的就是网络结构,辅助节点则显示的是初始化、训练、保存等节点。我们可以双击某个节点或者点击节点右上角的 + 来展开查看里面的情况,也可以对齐进行缩放,每个节点的命名都是我们在代码中使用 tf.name_scope() 定义好的。下面介绍下该面板左侧的功能。

TensorFlow学习之TensorBoard使用方法_第2张图片

左上是 Fit to screen,顾名思义就是将图缩放到适合屏幕。下面的 Download PNG 则是将图保存到本地。Run 和 Session Run 分别是不同的训练和迭代步数。比如我这里以不同的超参训练了 6 次,那么 就有 6 个 run,而你所记录的迭代次数(并不是每一步都会记录当前状态的,那样的话太多了,一般都是每隔多少次记录一次)则显示在 Session Run 里。再下面大家应该都能看懂,我就不详细说每个功能的意思了。

我们也可以将某个节点从主图移除,将其放到辅助节点中,以便于我们更清晰的观察整个网络。具体操作是 右键该节点,选择 Remove from main graph 

你可能感兴趣的:(TensorFlow,人工智能)