TensorBoard 是如何工作的?
簡單來說,TensorBoard 是通過一些操作(summary operations)將數(shù)據(jù)記錄到文件(event files)中,然后再讀取文件來完成作圖的。想要在瀏覽器上看到 TensorBoard 頁面,大概需要這幾步:
? ? summary。在定義計算圖的時候,在適當?shù)奈恢眉由弦恍?summary 操作 。
? ? merge。你很可能加了很多 summary 操作,我們需要使用 tf.summary.merge_all 來將這些 summary 操作聚合成一個操作,由它來產(chǎn)生所有 summary 數(shù)據(jù)。
? ? run。在沒有運行的時候這些操作是不會執(zhí)行任何東西的,僅僅是定義了一下而已。在運行(開始訓練)的時候,我們需要通過 tf.summary.FileWriter() 指定一個目錄來告訴程序把產(chǎn)生的文件放到哪。然后在運行的時候使用 add_summary() 來將某一步的 summary 數(shù)據(jù)記錄到文件中。
當訓練完成后,在命令行使用 tensorboard --logdir=path/to/log-directory 來啟動 TensorBoard,按照提示在瀏覽器打開頁面,注意把 path/to/log-directory 替換成上面指定的目錄。
1. tf.summary.histogram(生成Histogram 和distribution),
代碼示例:
tf.summary.histogram('layer'+str(i+1)+'weights',weights)
2. tf.summary.scalar: 主要用于記錄諸如:準確率、損失和學習率等單個值的變化趨勢。
? ? 代碼示例:
? ? with tf.name_scope('accuracy'):
? ? ? ? correct_prediction = tf.equal(tf.argmax(logits, 1), tf.argmax(y, 1))
? ? ? ? accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
? ? ? ? tf.summary.scalar('accuracy', accuracy)
3. tf.summary.image:?
? ? 作用:如果你的模型輸入是圖像,想檢查每次輸入的圖像以保證正確性。iamges面板就可以顯示出相應的輸入圖像,默認顯示最新的輸入圖像。
代碼示例:
? ? x = tf.placeholder(tf.float32, shape=[None, N_FEATURES], name='x')
? ? x_image = tf.transpose(tf.reshape(x, [-1, 3, 32, 32]), perm=[0, 2, 3, 1])
? ? tf.summary.image('input', x_image, max_outputs=3)
? ? y = tf.placeholder(tf.float32, [None, N_CLASSES], name='labels')
其中參數(shù)max_outputs表示最多顯示幾張圖片。
4. tf.summary.FileWriter(分別生成日志), 指定一個目錄來告訴程序把文件放到哪里。然后運行的時候使用add_summary()來將某一步的summary數(shù)據(jù)記錄到文件中
代碼示例:
? ? eval_writer = tf.summary.FileWriter(LOGDIR + '/eval')# Some other code
? ? seval_writer.add_summary(tf.Summary(value=[tf.Summary.Value(tag='eval_accuracy', simple_value=np.mean(test_acc))]), i)
5. tf.summary.merge_all(整理日志操作的,sess.run一次就不用對上述分別run)

Graphs面板
用于從總體上看所構建的網(wǎng)絡結構,可以顯示訓練數(shù)據(jù)流的方向和大小,訓練時每個節(jié)點的用時,耗費內存的大小,以及參數(shù)的多少。主要分為兩部分:主圖(網(wǎng)絡結構)和輔助節(jié)點(初始化、訓練、保存等節(jié)點)。每個節(jié)點都是用tf.name_scope()來定義的。
tensorboard默認不記錄每個節(jié)點的用時、耗費內存大小等信息的,要顯示這些信息,需要再sess.run()中加入options和run_metadata參數(shù)。添加下列代碼:
? ? run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)
? ? run_metadata = tf.RunMetadata()
? ? s, lss, acc , _ = sess.run([merged_summary, loss, accuracy, train_step],
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? feed_dict={x: batch_x, y: batch_y, phase: 1},
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? options=run_options,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? run_metadata=run_metadata)
? ? summary_writer.add_run_metadata(run_metadata, 'step{}'.format(i))
? ? summary_writer.add_summary(s, i)
Distributions面板
用于展示網(wǎng)絡中各參數(shù)隨訓練步數(shù)增加的變化情況。如:權重的分布
? ? with tf.name_scope(name):
? ? ? ? W = tf.Variable(tf.truncated_normal(
? ? ? ? ? ? [k, k, channels_in, channels_out], stddev=0.1), name='W')
? ? ? ? b = tf.Variable(tf.constant(0.1, shape=[channels_out]), name='b')
? ? ? ? conv = tf.nn.conv2d(inpt, W, strides=[1, s, s, 1], padding='SAME')
? ? ? ? act = tf.nn.relu(conv)
? ? ? ? tf.summary.histogram('weights', W)
? ? ? ? tf.summary.histogram('biases', b)
? ? ? ? tf.summary.histogram('activations', act)
Histograms面板
和distributions是對同一數(shù)據(jù)不同方式的展現(xiàn)。是頻數(shù)直方圖的堆疊。