程式設計

使用 TensorBoard 視覺化呈現 TensorFlow 計算流程教學

本篇是 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

G. T. Wang

個人使用 Linux 經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。

Share
Published by
G. T. Wang

Recent Posts

光陽 KYMCO GP 125 機車接電發動、更換電瓶記錄

本篇記錄我的光陽 KYMCO ...

1 年 ago

[開箱] YubiKey 5C NFC 實體金鑰

本篇是 YubiKey 5C ...

2 年 ago

[DIY] 自製竹火把

本篇記錄我拿竹子加上過期的苦茶...

2 年 ago