私は Google Tensorboard に取り組んでおり、ヒストグラム プロットの意味について混乱しています。チュートリアルを読みましたが、よくわかりません。Tensorboard Histogram Plot の各軸の意味を理解するのを手伝ってくれる人がいれば、本当に感謝しています。
5 に答える
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.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 標準偏差を少し超えて広がり、1,000,000 サンプルあたり約 60 のみがこの範囲外になります。
ウィキペディアには非常に詳細な説明がありますが、ここで最も関連性の高いナゲットを入手できます。
実際のヒストグラム プロットは、いくつかのことを示します。プロット領域は、監視された値の変動が増加または減少するにつれて、垂直方向の幅が拡大または縮小します。監視された値の平均値が増加または減少するにつれて、プロットが上下にシフトすることもあります。
(コードが実際に標準偏差 0.13 の 2 番目のヒストグラムを生成することに気付いたかもしれません。これは、プロットの等高線と縦軸の目盛りの間の混乱を解消するために行いました。)
@marc_alain さん、見つけにくい TB 用のこのような単純なスクリプトを作成したことで、あなたはスターです。
彼が言ったことに加えて、重みの分布の 1、2、3 シグマを示すヒストグラム。これは、68、95、および 98 パーセンタイルに相当します。モデルに 784 個の重みがある場合、ヒストグラムはこれらの重みの値がトレーニングによってどのように変化するかを示しています。
これらのヒストグラムは、浅いモデルではおそらくそれほど興味深いものではありません。深いネットワークでは、ロジスティック関数が飽和しているため、高いレイヤーの重みが大きくなるまでに時間がかかる可能性があることを想像できます。もちろん、Glorot と Bengio によるこの論文を無意識にオウム返しにしているだけです。この論文では、トレーニングを通じて重みの分布を研究し、ロジスティック関数が上位層でかなり長い間飽和していることを示しています。
ルーファン、
ヒストグラム プロットを使用すると、グラフから変数をプロットできます。
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**)
テンソルボードの要約を作成する方法についてこれを見ると役立つ場合があります。
ドン