TensorBoard 涉及到的運(yùn)算,通常是在訓(xùn)練龐大的深度神經(jīng)網(wǎng)絡(luò)中出現(xiàn)的復(fù)雜而又難以理解的運(yùn)算。
為了更方便 TensorFlow 程序的理解、調(diào)試與優(yōu)化,我們發(fā)布了一套叫做 TensorBoard 的可視化工具。你可以用 TensorBoard 來展現(xiàn)你的 TensorFlow 圖像,繪制圖像生成的定量指標(biāo)圖以及附加數(shù)據(jù)。
當(dāng) TensorBoard 設(shè)置完成后,它應(yīng)該是這樣子的:
http://wiki.jikexueyuan.com/project/tensorflow-zh/images/mnist_tensorboard.png" alt="MNIST TensorBoard" />
TensorBoard 通過讀取 TensorFlow 的事件文件來運(yùn)行。TensorFlow 的事件文件包括了你會在 TensorFlow 運(yùn)行中涉及到的主要數(shù)據(jù)。下面是 TensorBoard 中匯總數(shù)據(jù)(Summary data)的大體生命周期。
首先,創(chuàng)建你想?yún)R總數(shù)據(jù)的 TensorFlow 圖,然后再選擇你想在哪個節(jié)點(diǎn)進(jìn)行匯總(summary)操作。
比如,假設(shè)你正在訓(xùn)練一個卷積神經(jīng)網(wǎng)絡(luò),用于識別 MNISt 標(biāo)簽。你可能希望記錄學(xué)習(xí)速度(learning rate)的如何變化,以及目標(biāo)函數(shù)如何變化。通過向節(jié)點(diǎn)附加scalar_summary操作來分別輸出學(xué)習(xí)速度和期望誤差。然后你可以給每個 scalary_summary 分配一個有意義的 標(biāo)簽,比如 'learning rate' 和 'loss function'。
或者你還希望顯示一個特殊層中激活的分布,或者梯度權(quán)重的分布??梢酝ㄟ^分別附加 histogram_summary 運(yùn)算來收集權(quán)重變量和梯度輸出。
所有可用的 summary 操作詳細(xì)信息,可以查看summary_operation文檔。
在TensorFlow中,所有的操作只有當(dāng)你執(zhí)行,或者另一個操作依賴于它的輸出時才會運(yùn)行。我們剛才創(chuàng)建的這些節(jié)點(diǎn)(summary nodes)都圍繞著你的圖像:沒有任何操作依賴于它們的結(jié)果。因此,為了生成匯總信息,我們需要運(yùn)行所有這些節(jié)點(diǎn)。這樣的手動工作是很乏味的,因此可以使用tf.merge_all_summaries來將他們合并為一個操作。
然后你可以執(zhí)行合并命令,它會依據(jù)特點(diǎn)步驟將所有數(shù)據(jù)生成一個序列化的Summary protobuf對象。最后,為了將匯總數(shù)據(jù)寫入磁盤,需要將匯總的protobuf對象傳遞給tf.train.Summarywriter。
SummaryWriter 的構(gòu)造函數(shù)中包含了參數(shù) logdir。這個 logdir 非常重要,所有事件都會寫到它所指的目錄下。此外,SummaryWriter 中還包含了一個可選擇的參數(shù) GraphDef。如果輸入了該參數(shù),那么 TensorBoard 也會顯示你的圖像。
現(xiàn)在已經(jīng)修改了你的圖,也有了 SummaryWriter,現(xiàn)在就可以運(yùn)行你的神經(jīng)網(wǎng)絡(luò)了!如果你愿意的話,你可以每一步執(zhí)行一次合并匯總,這樣你會得到一大堆訓(xùn)練數(shù)據(jù)。這很有可能超過了你想要的數(shù)據(jù)量。你也可以每一百步執(zhí)行一次合并匯總,或者如下面代碼里示范的這樣。
merged_summary_op = tf.merge_all_summaries()
summary_writer = tf.train.SummaryWriter('/tmp/mnist_logs', sess.graph)
total_step = 0
while training:
total_step += 1
session.run(training_op)
if total_step % 100 == 0:
summary_str = session.run(merged_summary_op)
summary_writer.add_summary(summary_str, total_step)
現(xiàn)在已經(jīng)準(zhǔn)備好用 TensorBoard 來可視化這些數(shù)據(jù)了。
輸入下面的指令來啟動TensorBoard
python tensorflow/tensorboard/tensorboard.py --logdir=path/to/log-directory
這里的參數(shù) logdir 指向 SummaryWriter 序列化數(shù)據(jù)的存儲路徑。如果logdir目錄的子目錄中包含另一次運(yùn)行時的數(shù)據(jù),那么 TensorBoard 會展示所有運(yùn)行的數(shù)據(jù)。一旦 TensorBoard 開始運(yùn)行,你可以通過在瀏覽器中輸入 localhost:6006 來查看 TensorBoard。
如果你已經(jīng)通過pip安裝了 TensorBoard,你可以通過執(zhí)行更為簡單地命令來訪問 TensorBoard
tensorboard --logdir=/path/to/log-directory
進(jìn)入 TensorBoard 的界面時,你會在右上角看到導(dǎo)航選項卡,每一個選項卡將展現(xiàn)一組可視化的序列化數(shù)據(jù)集 。對于你查看的每一個選項卡,如果 TensorBoard 中沒有數(shù)據(jù)與這個選項卡相關(guān)的話,則會顯示一條提示信息指示你如何序列化相關(guān)數(shù)據(jù)。
更多更詳細(xì)的關(guān)于如何使用 graph 選項來顯示你的圖像的信息。參見 TensorBoard:圖表可視化
原文地址:TensorBoard:Visualizing Learning 翻譯:thylaco1eo 校對:lucky521