【发布时间】:2016-06-04 16:13:01
【问题描述】:
我正在研究 Google Tensorboard,我对直方图的含义感到困惑。我阅读了教程,但对我来说似乎不清楚。如果有人能帮我弄清楚 Tensorboard Histogram Plot 的每个轴的含义,我真的很感激。
来自 TensorBoard 的样本直方图
【问题讨论】:
标签: histogram tensorflow tensorboard
我正在研究 Google Tensorboard,我对直方图的含义感到困惑。我阅读了教程,但对我来说似乎不清楚。如果有人能帮我弄清楚 Tensorboard Histogram Plot 的每个轴的含义,我真的很感激。
【问题讨论】:
标签: histogram tensorflow tensorboard
我之前遇到过这个问题,同时也在寻找有关如何解释 TensorBoard 中的直方图的信息。对我来说,答案来自绘制已知分布的实验。 因此,可以使用以下代码在 TensorFlow 中生成均值 = 0 和 sigma = 1 的常规正态分布:
import tensorflow as tf
cwd = "test_logs"
W1 = tf.Variable(tf.random_normal([200, 10], stddev=1.0))
W2 = tf.Variable(tf.random_normal([200, 10], stddev=0.13))
w1_hist = tf.summary.histogram("weights-stdev_1.0", W1)
w2_hist = tf.summary.histogram("weights-stdev_0.13", W2)
summary_op = tf.summary.merge_all()
init = tf.initialize_all_variables()
sess = tf.Session()
writer = tf.summary.FileWriter(cwd, session.graph)
sess.run(init)
for i in range(2):
writer.add_summary(sess.run(summary_op),i)
writer.flush()
writer.close()
sess.close()
结果如下所示: 。 横轴代表时间步长。 该图是等高线图,在纵轴值为 -1.5、-1.0、-0.5、0.0、0.5、1.0 和 1.5 处具有等高线。
由于该图表示平均值 = 0 和 sigma = 1 的正态分布(请记住,sigma 表示标准差),0 处的等高线表示样本的平均值。
-0.5 和 +0.5 处等高线之间的面积表示正态分布曲线下的面积,该面积与平均值相差 +/- 0.5 个标准差,这表明它是采样的 38.3%。
-1.0 和 +1.0 处等高线之间的面积代表正态分布曲线下的面积,该面积与平均值相差 +/- 1.0 标准差,这表明它是抽样的 68.3%。
-1.5 和 +1-.5 处等高线之间的面积代表正态分布曲线下的面积,该面积与平均值相差 +/- 1.5 个标准差,这表明它是抽样的 86.6%。
最苍白的区域稍微超出平均值的 +/- 4.0 个标准偏差,每 1,000,000 个样本中只有大约 60 个超出此范围。
虽然 Wikipedia 有非常详尽的解释,但您可以获得最相关的掘金here。
实际的直方图将显示几件事。随着监测值的变化增加或减少,绘图区域的垂直宽度将增加或缩小。随着监测值的平均值增加或减少,这些图也可能向上或向下移动。
(您可能已经注意到,代码实际上生成了标准差为 0.13 的第二个直方图。我这样做是为了消除绘图等高线和垂直轴刻度线之间的任何混淆。)
【讨论】:
@marc_alain,你是一个明星,因为你制作了如此简单的结核病脚本,很难找到。
添加到他所说的直方图,显示权重分布的 1,2,3 sigma。这相当于第 68、95 和 98 个百分位数。所以想想如果你的模型有 784 个权重,直方图会显示这些权重的值如何随着训练而变化。
这些直方图可能对浅层模型没有那么有趣,您可以想象,对于深层网络,由于逻辑函数已饱和,高层的权重可能需要一段时间才能增长。当然,我只是盲目地模仿this paper by Glorot and Bengio,他们在其中通过训练研究权重分布,并展示了逻辑函数如何在一段时间内在较高层中饱和。
【讨论】:
绘制直方图时,我们将 bin 限制放在 x 轴上,将 count 放在 y 轴上。然而,直方图的全部意义在于显示张量如何随时间变化。因此,您可能已经猜到了,包含数字 100 和 300 的 深度轴(z 轴)显示了 epoch 数字。
默认直方图模式是偏移模式。这里每个时期的直方图在 z 轴上偏移一个特定值(以适合图中的所有时期)。这就像从房间天花板的一个角落(准确地说是从前天花板边缘的中点)看到所有直方图一个接一个的位置。
在叠加模式下,z 轴折叠,直方图变为透明,因此您可以移动并悬停在上方以突出显示与特定时期对应的那个。这更像是 Offset 模式的前视图,只有直方图的轮廓。
如文档here中所述:
tf.summary.histogram 取一个任意大小和形状的张量,并将其压缩成一个 直方图数据结构由许多具有宽度和 计数。例如,假设我们要将数字
[0.5, 1.1, 1.3, 2.2, 2.9, 2.99]组织到 bin 中。我们可以做三个箱子:
- 一个包含从 0 到 1 的所有内容的 bin(它将包含一个元素,
0.5),- 一个包含从 1 到 2 的所有内容的 bin(它将包含两个元素,
1.1和1.3),- 一个包含 2-3 的所有内容的 bin(它将包含三个元素:
2.2、2.9和2.99)。
TensorFlow 使用类似的方法来创建 bin,但与我们的 例如,它不会创建整数箱。对于大型稀疏数据集, 这可能会导致成千上万的垃圾箱。相反,the bins are exponentially distributed, with many bins close to 0 and comparatively few bins for very large numbers。然而,可视化 指数分布的 bin 很棘手;如果使用高度编码 计数,然后更宽的垃圾箱占用更多空间,即使它们具有相同的 元素的数量。相反,该区域中的编码计数使 身高比较是不可能的。相反,直方图resample the data 放入统一的箱中。这可能会导致不幸的伪影 一些情况。
请进一步阅读文档以全面了解直方图选项卡中显示的图。
【讨论】:
肉饭,
直方图允许您从图表中绘制变量。
w1 = tf.Variable(tf.zeros([1]),name="a",trainable=True)
tf.histogram_summary("firstLayerWeight",w1)
对于上面的示例,垂直轴将具有我的 w1 变量的单位。水平轴将包含我认为在此处捕获的步长单位:
summary_str = sess.run(summary_op, feed_dict=feed_dict)
summary_writer.add_summary(summary_str, **step**)
了解如何为张量板制作summaries 可能很有用。
不要
【讨论】:
w_hist、b_hist 和y_hist 的纵轴含义。谢谢!
图表上的每条线代表数据分布中的一个百分位数:例如,底线显示最小值随时间的变化情况,中间的线显示中位数的变化情况。从上往下读,各行含义如下:[maximum, 93%, 84%, 69%, 50%, 31%, 16%, 7%, minimum]
这些百分位数也可以视为正态分布的标准差边界:[maximum, μ+1.5σ, μ+σ, μ+0.5σ, μ, μ-0.5σ, μ-σ, μ-1.5σ, minimum],因此从内到外读取的彩色区域分别具有 [σ, 2σ, 3σ] 的宽度。
【讨论】: