本篇是 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)的畫面,它會將每個純量在每一次迭代所輸出的值畫在圖形上,所以我們可以觀察其值收斂的情況。
影像(IMAGES)這一頁則會呈現所有影像的輸出。
GRAPHS 這一頁會顯示整個 TensorFlow 的模型。
這是 DISTRIBUTIONS 頁面。
這是 HISTOGRAMS 頁面。
參考資料:TensorFlow 的文件、The Codacus