Source:tensorboard@github
Translated by:哪咔吗
Date:2018-10-12 15:05
TensorBoard是一套web应用程序,用于监视和理解您的 TensorFlow 的运行过程和graphs。
下面描述了TensorBoard 中的关键概念,以及如何解释TensorBoard中的可视化图表。有关使用 TensorBoard 的例子,请参阅教程: TensorBoard: Visualizing Learning。 有关graph可视化的信息,请参见本教程: TensorBoard: Graph Visualization。
你也可以观看这个视频教程,这个视频介绍了如何设置和使用 TensorBoard。视频中还举例介绍了如何使用tensorflow进行一个端到端的训练,并配合使用TensorBoard。
在运行 TensorBoard 之前,请确保您已经通过创建一个summary writer在日志目录中生成了摘要数据:
# sess.graph中包含了graph的定义,这为graph的可视化提供了支持
file_writer = tf.summary.FileWriter('/path/to/logs', sess.graph)
有关更多细节,请参见 TensorBoard 教程。 一旦有了事件文件(tensorboard输出目录中的那些文件),运行 TensorBoard 并提供日志目录。 如果您使用预编译的 TensorFlow 包(例如通过 pip 安装的) ,运行:
tensorboard --logdir path/to/logs
或者,如果你是从源码编译的:
bazel build tensorboard:tensorboard
./bazel-bin/tensorboard/tensorboard --logdir path/to/logs
# or even more succinctly
bazel run tensorboard -- --logdir path/to/logs
这个时候console中应该会提示TensorBoard 正在运行。 接下来,在浏览器中打开这个地址。 http://localhost:6006。
tensorboard需要一个日志目录来读取日志。有关tensorboard的配置信息,请运行tensorboard --help。
TensorBoard可以在 Google Chrome 或者 Firefox 上使用。 其他浏览器可能有用,但可能存在 bug 或性能问题。
使用 TensorBoard 的第一步是从你的 TensorFlow run中获取数据。 为此,你需要做summary ops。 summary ops是一种操作,就像 tf.matmul 或 tf.nn.relu,这意味着他们需要输入张量,输出张量,并且是 TensorFlow graph中的一个节点。 然而,summary ops有一个不同点: 他们输出的张量包含了序列化的信息,它们被写入磁盘并发送给 TensorBoard。 要在 TensorBoard 中对摘要数据进行可视化,您应该执行summary ops,获得输出的结果,然后使用 summary.FileWriter 将结果写入磁盘。 一个完整的解释,包括例子,都在教程中。
当你做一个summary op的时候,你也会给它一个标签。标签基本上就是该操作所记录的数据的名称,并将用于在前端组织数据。 scalar和histogram仪表板通过标签组织数据,并根据类似目录的层次结构将标签分组成文件夹。 如果你有很多标签,我们建议你把它们进行分组。
summary.FileWriters从 TensorFlow 中获取摘要数据,然后将它们写入指定的目录,也就是所谓的 logdir。 具体来说,数据被写入一个只允许追加写入内容的文件,在文件名中会有"tfevents"。TensorBoard从一个完整的目录中读取数据,并将它组织到单个 TensorFlow 执行的历史中。
为什么它读的是整个目录,而不是一个单独的文件? 您可能已经使用supervisor.py 来运行您的模型,在这种情况下,如果 TensorFlow 崩溃,supervisor会从一个记录点重新启动它。 当它重新启动时,它将开始编写一个新的事件文件,并且 TensorBoard 将把多个事件文件组合在一起,以便对发生的事情有一个一致的历史记录。
您可能想要在视觉上比较模型的多个执行过程; 例如,假设您已经改变了超参数并且想要看看它是否正在更快地收敛。 通过不同的"运行",TensorBoard 可以实现这一点。 当 TensorBoard 在启动时传入了一个 logdir,它递归地遍历在以logdir为根目录的目录树中,寻找包含 tfevents 数据的子目录。 每次它遇到这样一个子目录,它就会作为一个新的运行来加载它,而且前端会相应地组织数据。
例如,这里有一个组织良好的 TensorBoard 日志目录,有两个运行过程,“run1"和"run2”。
/some/path/mnist_experiments/
/some/path/mnist_experiments/run1/
/some/path/mnist_experiments/run1/events.out.tfevents.1456525581.name
/some/path/mnist_experiments/run1/events.out.tfevents.1456525585.name
/some/path/mnist_experiments/run2/
/some/path/mnist_experiments/run2/events.out.tfevents.1456525385.name
/tensorboard --logdir /some/path/mnist_experiments
您也可以传入一个逗号分隔的日志目录列表,并且 TensorBoard 会监视每个目录。您也可以通过在名称和路径之间放置冒号来为单个日志目录分配名称。
tensorboard --logdir name1:/path/to/logs/1,name2:/path/to/logs/2
TensorBoard的 Scalar Dashboard 展示了会随时间变化的标量统计信息;例如,您可能想要跟踪模型的loss或学习率。正如在 Key Concepts 中所描述的,您可以比较多个运行,并且数据是由标签组织的。线条图有以下交互作用:
此外,您可以通过在仪表板左上角的框中写入正则表达式来创建新的文件夹来组织标签。
直方图显示了张量的统计分布随时间的变化。在代码中通过函数tf.summary.histogram记录需要统计的数据。每个图表显示数据的时间"切片",其中每个切片是一个给定张量的直方图(张量实际上是一个多维数组)。时间上最近的在最前面。直方图模式有两种,分别是"偏移"和"叠加",“叠加”模式下每一个直方图切片都呈现为一条直线并覆盖在一起。
分布仪表板展示的数据来源也是tf.summary.histogram方法。 它显示了一些关于分布的高级统计数据。 图表中的每一行代表了数据分布中的百分比: 例如,底线显示了最小值是如何随着时间的推移发生变化的,中间线显示了中位数是如何变化的。从头到尾,这些线条有以下含义: [最大值,93% ,84% ,69% ,50% ,31% ,16% ,7% ,最小]
这些百分位数也可以被视为正态分布上的标准差边界: [最大值,均值+1.5个标准差,均值+1个标准差 ,均值+ 0.5个标准差,均值,均值-0.5个标准均值-1个标准差,均值-1.5个标准差,最小] ,这样有色区域,从内到外分别对应宽度[1个标准差,2个标准差,3个标准差]。
图像仪表板可以显示通过 tf.summary.Image 保存的图片。仪表板被设置为每行对应不同的标记类别,每一列对应一个run。由于图像仪表板支持任意的 pngs,您可以使用这个将自定义可视化(如 matplotlib scatterplot)嵌入到 TensorBoard 中。 这个仪表板总是为你显示每个标签的最新图片。
音频仪表板嵌入了可播放音频的小部件,音频可以通过方法tf.summary.Audio来保存。仪表板上每行对应不同的标签,并且每个列对应一个run(参考图像仪表盘)。这个仪表板总是显示每个标签最新的音频数据。
Graph页签可以可视化一个 TensorBoard graph,使得 TensorFlow 模型能够进行检查。 为了最好地利用图形可视化器,您应该使用name scopes来对graph中的ops进行层次化分组——否则,graph会晦涩难懂。 有关更多信息,包括示例,请参见图形可视化教程。
内嵌投影仪允许您可视化高维数据; 例如,当你的输入数据经过模型计算成高维数据的时候,你可以在这里查看他们。内嵌投影仪从您的模型checkpoint文件中读取数据,并且可以配置额外的元数据,比如vocabulary file或者sprite image(拼合图片)。 有关更多细节,请参见内嵌投影仪教程。
文本仪表板显示通过 tf.summary.Text方法保存的文本片段。包括超链接、列表和表的 Markdown 功能都是支持的。