Значение гистограммы на тензокарте

Я работаю над Google Tensorboard, и я чувствую смущение о значении Гистограммы. Я прочитал учебник, но мне кажется непонятным. Я очень благодарен, если кто-нибудь может помочь мне разобраться в значении каждой оси для графика гистограмм Tensorboard.

Пример гистограммы из TensorBoard

введите описание изображения здесь

Ответ 1

Я сталкивался с этим вопросом ранее, одновременно ища информацию о том, как интерпретировать графики гистограммы в TensorBoard. Для меня ответ пришел из экспериментов построения известных распределений. Таким образом, обычное нормальное распределение со средним значением = 0 и сигмой = 1 может быть получено в TensorFlow с помощью следующего кода:

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,0. Горизонтальная ось представляет временные шаги. График представляет собой контурный график и имеет контурные линии при значениях по вертикальной оси -1.5, -1.0, -0.5, 0,0, 0,5, 1,0 и 1,5.

Поскольку график представляет нормальное распределение со средним значением = 0 и сигмой = 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 от среднего значения, и только около 60 на 1000000 образцов будут вне этого диапазона.

Хотя в Википедии есть очень подробное объяснение, вы можете получить самые важные самородки здесь.

Фактические гистограммы покажут несколько вещей. Области графика будут расти и уменьшаться по вертикали по мере увеличения или уменьшения изменения контролируемых значений. Графики также могут сдвигаться вверх или вниз по мере того, как среднее значение контролируемых значений увеличивается или уменьшается.

(Вы, возможно, заметили, что код фактически создает вторую гистограмму со стандартным отклонением 0,13. Я сделал это, чтобы устранить путаницу между линиями контура графика и отметками вертикальной оси.)

Ответ 2

@marc_alain, вы - звезда для создания такого простого script для TB, который трудно найти.

Чтобы добавить к тому, что он сказал, гистограммы показывают 1,2,3 сигма распределения весов. что эквивалентно 68-му, 95-му и 98-му процентилям. Поэтому подумайте, что если у вас есть модель весом 784, гистограмма показывает, как значения этих весов меняются с обучением.

Эти гистограммы, вероятно, не так интересны для неглубоких моделей, вы можете себе представить, что при глубоких сетях весы в высоких слоях могут занять некоторое время, чтобы расти из-за насыщения логистической функции. Разумеется, я просто бездумно проглатываю эту статью от Glorot и Bengio, в которой они изучают распределение веса посредством обучения и показывают, как логистическая функция насыщенный для более высоких слоев в течение долгого времени.

Ответ 3

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**)

Может быть полезно увидеть это, как сделать резюме для тензора.

Дон

Ответ 4

Каждая строка диаграммы представляет собой процентиль в распределении по данным: например, нижняя строка показывает, как минимальное значение со временем изменилось, а линия в середине показывает, как изменилась медиана. Чтение сверху вниз, линии имеют следующее значение: [maximum, 93%, 84%, 69%, 50%, 31%, 16%, 7%, minimum]

Эти процентили также можно рассматривать как границы стандартного отклонения при нормальном распределении: [maximum, μ+1.5σ, μ+σ, μ+0.5σ, μ, μ-0.5σ, μ-σ, μ-1.5σ, minimum], так что цветные области, считываемые изнутри наружу, имеют ширину [σ, 2σ, 3σ] соответственно.