2.9 使用TensorBoard可视化数据
在机器学习中,最耗时的部分不是编写程序,而是等待程序的运行,除非你使用早停或者观察到过拟合而提前终止训练过程。例如,著名的ImageNet数据集包含了1400多万张图片,可以用于机器学习环境。有时,在一个大数据集上完成算法训练需要几天或几周的时间。TensorFlow的指示板TensorBoard可以让你快速了解图中每个节点的值的变化,并让你了解代码的执行情况。
让我们看一个真实的例子:如何可视化随时间变化的变量的趋势?在本节中,你将在TensorFlow中实现一个移动平均算法,然后在TensorBoard中仔细追踪你关心的变量。
想知道这本书为什么会有第2版吗
本书存在的一个关键原因是:有时,在一个大数据集上完成算法训练需要几天或几周的时间。为这本书中的经历做好准备吧!在本书的后面,我将重建一些著名的(大的)模型,包括用于面部识别的VGG-Face模型,以及在自然语言处理中使用所有Netflix评论数据生成一个情感分析模型。在这种情况下,准备好让TensorFlow在你的笔记本计算机上运行一整夜,或者在你访问的超级计算机上运行好几天。别担心,我会一路陪着你并在感情上支持你!
2.9.1 实现移动平均
在本节中,你会通过TensorBoard来可视化数据的变化。假设你想计算一家公司的平均股价。通常,计算平均值就是把所有的值相加并除以总个数:
当值的个数未知时,你可以使用一种被称为指数平均的技术来估算未知数量的数据的平均值。指数平均算法将当前的估计平均作为前一个估计平均以及当前值的函数来计算。
更直接地,。α是一个需要被调整的参数,它代表在计算平均值时最近一个值所占的权重。α的值越大,估计平均值与前一个估计平均值的偏离就越大。图2.8(在清单2.15后面)展示了TensorBoard如何可视化这些值以及对应估计的平均值。
在编写移动平均程序时,最好考虑清楚每个计算迭代中的主要部分。在本问题中,每次迭代都会计算。因此,你可以设计一个TensorFlow运算符(如清单2.11所示),它完全按照公式设计。要运行这段代码,最终必须定义alpha
、curr_value
和prev_avg
。
清单2.11 定义平均更新操作
你将在后面定义那些未定义的变量。以这种后向方式编码的原因是,先定义接口迫使你实现外围代码来满足接口。略过前面,让我们直接跳到会话部分,看看算法应该如何运行。清单2.12建立了主循环,并在每个迭代中调用update_avg
运算符。运行update_avg
运算符依赖curr_value
,它是通过feed_dict
参数传入的。
清单2.12 迭代运行指数平均算法
好极了!现在大体结构已经清晰了,剩下要做的就是写出未定义的变量。让我们完成它,实现一段TensorFlow的工作代码。复制清单2.13以便你运行它。
清单2.13 填补缺失的代码,以完成指数平均算法
2.9.2 可视化移动平均
现在你已经实现了移动平均算法,让我们通过TensorFlow来可视化结果。使用TensorBoard来可视化通常有两个步骤:
1. 选择你关注的节点并使用summary操作对其进行注释。
2. 对它们调用add_summary
来排队将数据写入磁盘。
假设你有一个img
占位符和一个cost
运算符,如清单2.14所示。你可以对它们做注解(通过为它们指定名称,例如img
或cost
)以便它们能够在TensorBoard中可视化。你可以在你的移动平均例子中做一些类似的事。
清单2.14 使用summary操作进行注释
更普遍地说,要与TensorBoard通信,必须使用summary操作,它通过SummaryWriter
生成序列化的字符串将更新保存到指定路径。每次从SummaryWriter
调用add_summary
方法时,TensorFlow都会将数据保存到磁盘供TensorBoard使用。
警告 注意不要太频繁地调用add_summary
方法。尽管这样做可以对要可视化的变量产生更高的分辨率,但是那将以更多的计算和缓慢的学习速度为代价。
执行以下命令,在源代码所在路径下创建一个叫logs的文件夹:
$ mkdir logs
运行TensorBoard,并将logs的路径作为其参数:
$ tensorboard --logdir=./logs
打开浏览器,导航地址为http://localhost:6006,这是TensorBoard的默认URL地址。清单2.15展示了如何将SummaryWriter
嵌入你的代码。运行它,并刷新TensorBoard查看可视化效果。
清单2.15 编写summary以便在TensorBoard中显示
提示 在启动TensorBoard之前,你要确保TensorFlow会话已经结束。如果你重新运行清单2.15,记得清除日志路径。
图2.8 清单2.15所创建的摘要展示在TensorBoard。TensorBoard提供了一个用户友好的界面来可视化TensorFlow中产生的数据