参考:https://blog.csdn.net/u010099080/article/details/77426577
在使用tensorflow训练神经网络之后,可以输出训练日志,然后用tensorboard打开进行可视化,本文目的是整理tensorboard的使用方法以及里边曲线的含义。
tensorboard的运行很简单,只需要在终端输入tensorboard,然后带上日志目录就可以了
tensorboard --logdir=/path/to/log
运行以上命令会启动一个服务,这个服务的默认端口是6006。然后在浏览器中输入 localhost:6006或者本机IP地址如10.1.1.101:6006即可打开如图所示的界面
我们看到在主页打开的是SCALARS选项页面,该页面显示了程序运行过程中的各种监控指标,tensorboard总共提供了多种界面来可视化监控指标,包括SCALARS(标量)、GRAPHS(计算图)、IMAGES(图片)、AUDIO(音频)、DISTRIBUTIONS(数据分布)、HISTOGRAMS(直方图)、EMBEDDINGS(嵌入向量)。你用到的面板会在顶部导航栏直接显示,而其它用不到的(你代码中没有相关代码)则会收起到INACTIVE中。
其中GRAPHS可视化计算图的结构以及在计算图上的信息;IMAGES用于可视化当前使用的训练/测试图片;AUDIO显示使用的音频数据;DISTRIBUTIONS提供了对张量取值分布的可视化界面,可以直观地观察到不同层神经网络中参数的取值变化;HISTOGRAMS展示了参数取值分布于训练迭代轮数之间的关系。
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 顾名思义指的是横轴的设置:
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 面板就是干这个的,它可以显示出相应的输入图像,默认显示最新的输入图像,如下图:
这个应该是最常用的面板了。很多时候我们的模型很复杂,包含很多层,我们想要总体上看下构建的网络到底是什么样的,这时候就用到 GRAPHS 面板了,在这里可以展示出你所构建的网络整体结构,显示数据流的方向和大小,也可以显示训练时每个节点的用时、耗费的内存大小以及参数多少。默认显示的图分为两部分:主图(Main Graph)和辅助节点(Auxiliary Nodes)。其中主图显示的就是网络结构,辅助节点则显示的是初始化、训练、保存等节点。我们可以双击某个节点或者点击节点右上角的 + 来展开查看里面的情况,也可以对齐进行缩放,每个节点的命名都是我们在代码中使用 tf.name_scope() 定义好的。下面介绍下该面板左侧的功能。
左上是 Fit to screen,顾名思义就是将图缩放到适合屏幕。下面的 Download PNG 则是将图保存到本地。Run 和 Session Run 分别是不同的训练和迭代步数。比如我这里以不同的超参训练了 6 次,那么 就有 6 个 run,而你所记录的迭代次数(并不是每一步都会记录当前状态的,那样的话太多了,一般都是每隔多少次记录一次)则显示在 Session Run 里。再下面大家应该都能看懂,我就不详细说每个功能的意思了。
我们也可以将某个节点从主图移除,将其放到辅助节点中,以便于我们更清晰的观察整个网络。具体操作是 右键该节点,选择 Remove from main graph