你使用TensorFlow来进行的某些大规模深度神经网络,可能是很复杂,并且令人困惑的。为了使它更容易被理解、调试、并且优化TensorFlow程序,我们引入了一套可视化工具,它就是TensorBoard。你可以使用TensorBoard来可视化你的TensorFlow计算图,绘制关于图形执行的定量指标,以及显示其他数据的图像。
当TensorBoard完全配置好时,它看起来是这样的:
本教程旨在帮助您学习TensorBoard的基本使用方式。当然,还有其他介绍资源!TensorBoard README有大量关于TensorBoard的信息,包括提示和技巧和调试信息。
序列化数据
TensorBoard通过读取TensorFlow事件文件进行操作,这些文件包含运行TensorFlow时可以生成的摘要数据。下面是TensorBoard中摘要数据的一般生命周期。
首先,创建要从其中收集摘要数据的TensorFlow图,并决定要使用summary operations注释哪些节点。
例如,假设你正在训练一个卷积神经网络来识别MNIST数字。你想记录学习速率随时间的变化,以及目标函数如何变化。通过将tf.summary.scalar
操作分别附加到输出学习速率和损失的节点来收集这些信息。然后,给每个scalar_summary
赋予有意义的tag
,如learning rate
或loss function
。
也许你也想要可视化来自特定层的激活的分布,或梯度或权重的分布。通过将tf.summary.histogram
操作附加到梯度输出和分别保存您的权重的变量来收集此数据。
有关所有可用摘要操作的详细信息,请查看摘要操作的文档。
在您运行TensorFlow中的操作之前,它们都不会被运行,依赖于它们的输出的操作也不会被执行。我们刚刚创建的汇总节点是图形的外设:您当前运行的任何操作都不依赖于它们。因此,要生成摘要,我们需要运行所有这些摘要节点。手动管理它们将是一项乏味的工作,因此我们使用tf.summary.merge_all
将它们组合到一个单独的操作中,生成所有的摘要数据。
然后,您可以运行合并的摘要操作,这将生成一个包含有所有给定步骤的摘要数据的序列化的Summary
(摘要)protobuf对象。最后,要将此摘要数据写入磁盘,将摘要protobuf传递给tf.summary.FileWriter
。
FileWriter
在它的构造函数中接受一个logdir - 这个logdir是非常重要的,它是所有事件将被写出的目标目录。此外,FileWriter
可以选择在其构造函数中接受一个Graph
。如果它接收到一个Graph
对象,那么TensorBoard将与Tensor形状信息一起显示到界面上。这将使您更好地了解通过图形流动的信息:请参阅Tensor shape信息。
现在,你已经修改好了你的图,并且有了一个FileWriter
,并且做好了开始运行网络的准备!如果需要,您可以每一步运行一次摘要合并,并记录大量的训练数据。这可能会产生很多你不需要的数据。所以换一种方式,请考虑每n个步骤运行一次摘要合并操作。
下面的代码示例是一个简单的MNIST教程的修改,其中我们添加了一些摘要操作,并且每十步运行它们一次。如果你运行这个代码,然后启动tensorboard --logdir=/tmp/mnist_logs
,你将能够可视化统计,例如权重或精度在训练期间如何变化。下面是部分代码,全部源码在这里。
|
|
在我们初始化FileWriter
之后,我们在训练和测试模型时,必须向FileWriter
添加摘要。
|
|
现在,你就可以通过TensorBoard来可视化数据了。
启动TensorBoard
要运行TensorBoard,请使用以下命令(或者python -m tensorflow.tensorboard
):
|
|
其中logdir
指向FileWriter
将其数据序列化的目录。如果此logdir目录包含包含单独运行的序列化数据的子目录,则TensorBoard将可视化所有这些运行的数据。TensorBoard开始运行之后,就可以打开您的Web浏览器到localhost:6006
来查看TensorBoard了。
当你看着TensorBoard,你会看到在右上角的导航选项卡。每个选项卡表示可以可视化的一组序列化数据。
有关如何使用图形选项卡可视化图形的详细信息,请参阅TensorBoard:图形可视化。
有关TensorBoard的更多使用信息,请参阅TensorBoard README。