3.3.3 TensorBoard可视化

在训练大型深度学习神经网络时,中间的计算过程可能非常复杂。出于理解、调试和优化网络的目的,我们可以使用TensorBoard将模型训练过程中各种汇总数据都展示出来。TensorBoard是TensorFlow官方推出的可视化工具,并不需要额外的安装过程,在TensorFlow安装完成时,TensorBoard会被自动安装。其界面基于Web,在程序运行过程中可以输出汇总了各种类型数据的日志文件。可视化程序的运行状态就是使用TensorBoard读取这些日志文件,解析数据并生成可视化的Web界面,使我们可以在浏览器中观察各种汇总的数据。

在训练模型时运行TensorBoard非常简单,只需在开始训练之前启动即可。

> library(keras)
> tensorboard("logs/run_a")
TensorBoard 2.0.2 at http://127.0.0.1:7209/ (Press CTRL+C to quit)
Started TensorBoard at http://127.0.0.1:7209

运行以上两行程序代码后,会自动在当前目录中创建logs/run_a的空文件夹,且给出一个打开服务端口7209的链接(每次运行的端口可能不同)。通过浏览器打开http://127.0.0.1:7209,得到TensorBoard初始界面,如图3-16所示。

081-1

图3-16 TensorBoard初始界面

TensorBoard初始界面没有任何数据,当我们在训练模型中完成第一个训练周期时会显示数据。此处我们以MNIST数据集为例,数据预处理和网络定义、编译代码都存放在mnist_mlp.R脚本中。使用load()函数将其导入R中,并通过以下程序代码训练模型。

> # load minst_mlp.R
> source('mnist_mlp.R')
> # fit the model with the TensorBoard callback
> history <- model %>% fit(
+   x_train, y_train,
+   batch_size = 128,
+   epochs = 10,
+   verbose = 1,
+   callbacks = callback_tensorboard("logs/run_a"),
+   validation_split = 0.2
+ )

Keras在每次迭代结束时都会写入TensorBoard数据,因此直到第一次迭代结束后10~20秒(在训练过程中,TensorBoard会每30秒自动刷新一次),我们才会在TensorBoard中看到数据。训练结束后,打开的TensorBoard界面会默认进入SCALARS选项卡,如图3-17所示。

082-1

图3-17 SCALARS选项卡界面

SCALARS选项卡显示了TensorFlow中标量数据随着迭代变化的趋势。主图中的epoch_accuracy折线图按照训练周期展示了正确率的值;epoch_loss折线图按照训练周期展示了计算损失的值。将光标停在折现上时会紧挨着图表的下方显示一个黑色的提示框,里面有折线上某一步更精确的数值信息,包括得到数值的时间,如图3-18所示。

082-2

图3-18 提示框显示更丰富的信息

紧挨着图表的右下方有三个按钮,单击左边的按钮可以放大这个图表;单击中间的按钮可以调整纵坐标的范围,以便更清楚地展示;单击右边的按钮可以使图表恢复到之前的数据域。图3-19展示了epoch_accuracy折线图放大之后的效果。

083-1

图3-19 放大之后的准确率可视化结果

界面的左侧是一些显示控制选项,下面分别进行详细介绍。

首先在中部有一个Horizontal Axis选项,用于控制图表中横坐标的含义,默认是STEP,表示按照训练周期展示相关汇总信息。我们也可以选择RELATIVE,表示相对于训练开始,完成汇总时所用的时间,单位是小时。我们还可以选择WALL,表示横坐标是完成汇总时的运行时间。图3-20展示了横坐标是RELATIVE时的情况。

在Horizontal Axis选项的上部有一个Smoothing选项,通过调整参数Smoothing可以控制对折线的平滑处理。Smoothing数值越小越接近实际值,但具有较大的波动;Smoothing数值越大则折线越平缓,但与实际值可能偏差较大。(实际值是图3-20中一条颜色较浅的折线,展示的是在此基础上经过平滑处理的结果。)

084-1

图3-20 横坐标设置为相对于实际时间的用时

在Smoothing选项上有一个Show data download links选项(默认没有选中),用于从页面下载图表或数据到本地。如果勾选这个复选框,则会在所有折线图下面出现下载箭头(Download Current as SVG)、CSV和JSON三个链接项,如图3-21所示。

084-2

图3-21 从网页下载数据到本地

最后,在Horizontal Axis下方有一个Runs选项,可以勾选train、validation,默认是两者都勾选,即在图表中同时显示训练和验证数据图表。当只勾选train时,右边图表只显示训练集的统计,如图3-22所示。

085-1

图3-22 只显示train的统计结果

SCALARS选项卡右侧是GRAPHS选项卡,在GRAPHS选项卡中可以看到整个TensorFlow计算图的结构,如图3-23所示。

086-1

图3-23 计算图可视化的结果

你还可以同时给tensorboard()函数传递多组保存好的TensorBoard数据的文件目录,此时SCALARS选项卡的右边主图会将多次模型训练的准确率或误差呈现在同一个折线图中,以便对比不同模型的效果差异。比如在logs文件目录下有两个子目录run_a(模型迭代10次的训练结果)和run_b(模型迭代50次的训练结果),通过运行以下程序代码可以得到如图3-24所示的SCALARS选项卡。

> library(keras)
> tensorboard('logs')
TensorBoard 2.0.2 at http://127.0.0.1:3399/ (Press CTRL+C to quit)
Started TensorBoard at http://127.0.0.1:3399
086-2

图3-24 同时查看两个训练结果的SCALARS选项卡

从图3-24可知,两次训练模型的四条准确率曲线或误差曲线均在同一个折线图中呈现。可以很容易得出模型迭代10次的结果并不能达到最优效果,迭代50次又出现过拟合现象,在迭代20次时大概能得到不错的效果。