本篇是 TensorBoard 的基本使用方法教學,以視覺化呈現 TensorFlow 的計算結果。

通常實務上以 TensorFlow 建立的模型(例如深度神經網路)都相當複雜,若要對模型進行觀察、除錯與最佳化,都有一定的難度,而 TensorBoard 是一個專門用來呈現 TensorFlow 模型與資料的視覺化工具,其支援好幾種資料的呈現方式,讓程式設計者更容易掌握複雜的模型與資料。

準備工作

TensorBoard 本身是一個網頁應用程式,可以讀取從 TensorFlow 所輸出的資料,以網頁的方式呈現。

TensorBoard 的網頁服務預設會使用 6006 這個連接埠,如果是在 Docker 環境中執行 TensorFlow 程式以及 TensorBoard 的話,啟動 Docker 時要記得把這個連接埠打開,這樣才能使用外部的瀏覽器觀看,例如:

nvidia-docker run -it -p 6006:6006 tensorflow/tensorflow:latest-gpu bash

輸出資料至 TensorBoard

如果要在 TensorBoard 中觀察各種資料,首先要在 TensorFlow 的程式中以 tf.summary 將要觀察的模型或資料以事件檔案(events files)的方式輸出,讓 TensorBoard 從這些事件檔案取得資料,並且繪製各種圖形。

tf.summary 底下有一系列的函數,可以輸出各種不同型態的資料。假設我們在訓練一個數字辨識的 CNN 模型,而我們想要觀察模型的學習率(learning rate)以及目標函數(object function)的變化情況,這兩個值都是屬於純量值(scalar),所以我們可以利用 tf.summary.scalar 來輸出,而在輸出時記得要標示清楚的資料名稱:

# 輸出純量值
tf.summary.scalar('my learning rate', my_learning_rate)

如果是要觀察整群資料的分布狀況,可以使用 tf.summary.histogram 畫出資料的分布圖:

# 輸出資料分布
tf.summary.histogram('my data histogram', my_data)

另外點陣圖的輸出也是很常用的功能,tf.summary.image 可以將 TensorFlow 模型內的圖片顯示在 TensorBoard 上:

# 輸出圖形
tf.summary.image('my image', my_image)

在 TensorFlow 中所有的運算都要放在 session 的 run 中,或是有其他運算需要該運算的輸出時,該運算才會被執行,而我們在 TensorFlow 中可能會建立非常多的 tf.summary 節點,逐一管理這些節點會很麻煩,我們可以使用 tf.summary.merge_all 一次將所有的 tf.summary 節點匯集起來,一次放進 session 中執行。

隨後將 tf.summary.merge_all 計算的結果(包含所有當次迭代的數值),以 tf.summary.FileWriter 寫入硬碟,而 FileWriter 在建立時會需要指定一個寫入資料用的目錄,另外也可以再加上一個 graph 的物件,讓資料呈現時可以同時顯示 tensor shape 的資訊,讓我們更了解整個模型內部的資料流狀況。

以上就是輸出資料至 TensorBoard 大致上的流程,我們可以將每一次迭代的資料都輸出(當然這樣資料量會很大),或是每隔幾次迭代輸出一次。

mnist_with_summaries.py 這個 Python 指令稿是根據 MNIST 手寫辨識範例所改寫的程式,其中加入許多的 summary 運算,這個指令稿可直接執行。

python mnist_with_summaries.py

執行 TensorBoard

在執行 TensorFlow 的同時,我們就可以開啟 TensorBoard 來觀察模型中各種即時的數據,執行方式為:

tensorboard --logdir=/tmp/tensorflow/mnist

其中 --logdir 所指定的目錄就是我們在 TensorFlow 程式中使用 tf.summary.FileWriter 寫入資料的目錄。

執行 TensorBoard 之後,他預設會在本機的 6006 連接埠開啟一個網頁伺服器,請開啟這個網址:

http://localhost:6006/

開啟之後,應該就可以看到 TensorBoard 的畫面了。第一頁是純量值(SCALARS)的畫面,它會將每個純量在每一次迭代所輸出的值畫在圖形上,所以我們可以觀察其值收斂的情況。

TensorBoard 畫面(SCALARS)

影像(IMAGES)這一頁則會呈現所有影像的輸出。

TensorBoard 畫面(IMAGES)

GRAPHS 這一頁會顯示整個 TensorFlow 的模型。

TensorBoard 畫面(GRAPHS)

這是 DISTRIBUTIONS 頁面。

TensorBoard 畫面(DISTRIBUTIONS)

這是 HISTOGRAMS 頁面。

TensorBoard 畫面(HISTOGRAMS)

參考資料:TensorFlow 的文件The Codacus