Tensorboard上直方图的含义

时间:2016-02-23 01:26:23

标签: histogram tensorflow tensorboard

我正在使用Google Tensorboard,我对Histogram Plot的含义感到困惑。我阅读了教程,但对我来说似乎不太清楚。如果有人能帮我弄清楚Tensorboard Histogram Plot的每个轴的含义,我真的很感激。

来自TensorBoard的样本直方图

enter image description here

5 个答案:

答案 0 :(得分:14)

我之前遇到过这个问题,同时也在寻找有关如何解释TensorBoard中直方图的信息。对我来说,答案来自绘制已知分布的实验。 因此,使用以下代码可以在TensorFlow中生成具有mean = 0和sigma = 1的传统正态分布:

import tensorflow as tf

cwd = "/tmp/TF/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.histogram_summary("weights-stdev 1.0", W1)
w2_hist = tf.histogram_summary("weights-stdev 0.13", W2)

summary_op = tf.merge_all_summaries()

init = tf.initialize_all_variables()
sess = tf.Session()

writer = tf.train.SummaryWriter(cwd)

sess.run(init)

for i in xrange(2):
    writer.add_summary(sess.run(summary_op),i)

writer.flush()
writer.close()
sess.close()

以下是结果: histogram of normal distribution with 1.0 standard deviation。 横轴表示时间步长。 该图是等高线图,其垂直轴的等值线为-1.5,-1.0,-0.5,0.0,0.5,1.0和1.5。

由于图表表示正态分布,均值= 0且sigma = 1(并记住西格玛表示标准差),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个将超出此范围。

虽然维基百科有一个非常详尽的解释,但您可以获得最相关的掘金here

实际直方图将显示几件事。随着监测值的变化增加或减少,绘图区域将在垂直宽度上增大和缩小。随着监测值的平均值增加或减少,图也可能向上或向下移动。

(您可能已经注意到代码实际上产生了第二个直方图,标准偏差为0.13。我这样做是为了清除绘图轮廓线和垂直轴刻度线之间的任何混淆。)

答案 1 :(得分:3)

绘制直方图时,我们在x轴上放置 bin限制,在y轴上放置 count 。但是,直方图的重点是显示张量如何随时间变化。因此,您可能已经猜到了,包含数字100和300的深度轴(z轴)显示了历元数字。

默认直方图模式为 Offset 模式。此处,每个时期的直方图在z轴上都偏移了某个值(以适合图中的所有时期)。这就像从房间天花板的一个角(准确地说是从天花板的前边缘的中点)看到所有直方图一个接一个地放置一样。

Overlay 模式下,z轴处于折叠状态,直方图变为透明,因此您可以移动并悬停以突出显示对应于特定纪元的那个。这更像是 Offset 模式的正视图,只显示直方图的轮廓。

如文档here中所述:

tf.summary.histogram 取任意大小和形状的张量,并将其压缩为 直方图数据结构,包含许多宽度和 计数。例如,假设我们要将数字[0.5, 1.1, 1.3, 2.2, 2.9, 2.99]整理到箱中。我们可以制作三个垃圾箱:

  • 一个容器,其中包含从0到1的所有内容(它将包含一个元素0.5
  • 一个容器,其中包含1-2的所有内容(它将包含两个元素1.11.3
  • 一个容器,其中包含2-3的所有内容(它将包含三个元素:2.22.92.99)。

enter image description here

TensorFlow使用类似的方法来创建垃圾箱,但是与我们的方法不同 例如,它不会创建整数仓。对于大型稀疏数据集, 可能会导致成千上万个垃圾箱。而是使用the bins are exponentially distributed, with many bins close to 0 and comparatively few bins for very large numbers。但是,可视化 指数分布的垃圾箱很棘手;如果高度用于编码 数,那么更宽的垃圾箱会占用更多空间,即使它们具有相同的空间 元素数量。相反,该区域中的编码计数使 高度比较不可能。而是将直方图resample the data分成统一的bin。这可能会导致不幸的伪影 一些情况。

请进一步阅读文档,以全面了解直方图选项卡中显示的图。

答案 2 :(得分:1)

@marc_alain,你是制作如此简单的TB脚本的明星,很难找到。

添加他所说的直方图显示权重的分布的1,2,3西格玛。相当于第68百分位,第95百分位和第98百分位数。因此,如果您的模型具有784个权重,则直方图显示这些权重的值如何随着训练而变化。

对于浅层模型,这些直方图可能不是那么有趣,你可以想象,对于深层网络,由于逻辑函数已经饱和,高层中的权重可能需要一段时间才能增长。当然,我只是盲目地鹦鹉学舌this paper by Glorot and Bengio,他们通过训练研究权重分布,并展示逻辑函数在较长时间内是如何饱和的。

答案 3 :(得分:0)

Roufan,

直方图允许您绘制图表中的变量。

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可能会有用。

答案 4 :(得分:0)

图表上的每一行代表数据分布的百分位数:例如,底线显示最小值如何随时间变化,中间的线显示中位数的变化情况。从上到下阅读,这些行具有以下含义:[maximum, 93%, 84%, 69%, 50%, 31%, 16%, 7%, minimum]

这些百分位数也可以被视为正态分布的标准偏差边界:[maximum, μ+1.5σ, μ+σ, μ+0.5σ, μ, μ-0.5σ, μ-σ, μ-1.5σ, minimum],以便从内到外读取的彩色区域分别具有宽度[σ, 2σ, 3σ]

相关问题