iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 8
1

前言

TensorBoard 是 Tensorflow 提供的視覺化工具,功能非常強大,除了可以顯示訓練的過程,也可以顯示圖片及語音。在訓練的過程中就可以啟動TensorBoard,即時觀看訓練資訊。PyTorch 安裝時也會包括 TensorBoardX,表示PyTorch 雖是競爭對手,但是,好東西也是要分享一下的。

上一篇使用 TensorBoard callback 寫入 TensorBoard Log,事實上,我們也可以直接使用程式寫入 Log,這部份的寫法,在 Tensorflow 1.x 版與 2.x 版有所差異,以下僅就 2.x 版作一詳細說明。

TensorBoard 功能

  1. 追蹤損失和準確率等效能衡量指標(Metrics),並以視覺化呈現。
    https://ithelp.ithome.com.tw/upload/images/20200907/20001976EfEkR2rcH4.png

  2. 顯示運算圖(Computational Graph):包括張量運算(tensor operation)和層(layers)。
    https://ithelp.ithome.com.tw/upload/images/20200907/2000197660yOao0l6k.png

  3. 直方圖(histogram):顯示訓練過程中的權重(weights)、偏差(bias)分佈。
    https://ithelp.ithome.com.tw/upload/images/20200908/20001976gZnDu6NqCD.png

  4. 詞嵌入展示:將詞嵌入(Word Embedding)投影至三維空間顯示。畫面右邊可輸入任意單字,例如 King,就會出現下圖,將相近字顯示出來,原理是透過詞向量(Word2Vec)將每個字轉為向量,再利用 Cosine_Similarity 計算相似性。
    https://ithelp.ithome.com.tw/upload/images/20200908/20001976xKXltf6C9o.png

  5. 顯示圖片、文字和音訊資料。
    https://ithelp.ithome.com.tw/upload/images/20200908/20001976vGgP2VCqCb.png

  6. 剖析 TensorFlow 程式流程。

測試

同樣拿 MNIST 辨識作測試,前面抓取資料與建立模型程序均未改變,以下僅說明關鍵的程式碼,完整的範例檔請參考08_01_TensorBoard.ipynb,。

  1. 先設定優化器(optimizer)、損失函數(loss)、效能衡量指標(metrics)。
# 設定優化器(optimizer)、損失函數(loss)、效能衡量指標(metrics)的類別
loss_object = tf.keras.losses.SparseCategoricalCrossentropy()
optimizer = tf.keras.optimizers.Adam()

# Define 訓練及測試的效能衡量指標(Metrics)
train_loss = tf.keras.metrics.Mean('train_loss', dtype=tf.float32)
train_accuracy = tf.keras.metrics.SparseCategoricalAccuracy('train_accuracy')
test_loss = tf.keras.metrics.Mean('test_loss', dtype=tf.float32)
test_accuracy = tf.keras.metrics.SparseCategoricalAccuracy('test_accuracy')
  1. 撰寫訓練與測試的效能衡量指標計算:使用自動微分的方式訓練(tf.GradientTape)。
def train_step(model, optimizer, x_train, y_train):
    # 自動微分
    with tf.GradientTape() as tape:
        predictions = model(x_train, training=True)
        loss = loss_object(y_train, predictions)
    grads = tape.gradient(loss, model.trainable_variables)
    optimizer.apply_gradients(zip(grads, model.trainable_variables))

    # 計算訓練的效能衡量指標
    train_loss(loss)
    train_accuracy(y_train, predictions)

def test_step(model, x_test, y_test):
    # 預測
    predictions = model(x_test)
    # 計算損失
    loss = loss_object(y_test, predictions)

    # 計算測試的效能衡量指標
    test_loss(loss)
    test_accuracy(y_test, predictions)
  1. 開啟log檔案
train_summary_writer = tf.summary.create_file_writer(train_log_dir)
test_summary_writer = tf.summary.create_file_writer(test_log_dir)
  1. 寫入字串至log檔案
    with train_summary_writer.as_default():
        tf.summary.scalar('loss', train_loss.result(), step=epoch)
        tf.summary.scalar('accuracy', train_accuracy.result(), step=epoch)

開啟cmd,啟動 Tensorboard,也可以在 jupyter notebook 啟動 Tensorboard,分兩步驟:

  1. 載入擴充程式【TensorBoard notebook extension】
# 載入 TensorBoard notebook extension
%load_ext tensorboar
  1. 啟動 Tensorboard
%tensorboard --logdir logs/gradient_tape

註: % 為jupyter notebook的魔術方法前置符號。

使用瀏覽器輸入以下網址,即可觀看訓練資訊:
http://localhost:6006/

寫入圖片

示範如何將圖片寫入 Log,關鍵程式碼如下:

# 任意找一張圖片
img = x_train[0].numpy().reshape((-1, 28, 28, 1))

# 指定 log 檔名
logdir = ".\\logs\\train_data\\" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
# Creates a file writer for the log directory.
file_writer = tf.summary.create_file_writer(logdir)

# Using the file writer, log the reshaped image.
with file_writer.as_default():
    # 將圖片寫入 log 檔
    tf.summary.image("Training data", img, step=0)

使用瀏覽器觀看圖片:
http://localhost:6006/

結果如下:
https://ithelp.ithome.com.tw/upload/images/20200908/20001976vGgP2VCqCb.png

我們可以在圖片處理中,把每一層的輸出轉換為圖片,寫入 Log,就可以更瞭解神經網路的訓練過程,亦即所謂的【可解釋的AI】(Explainable AI, XAI)。

結論

以上作了很簡單的實驗,如果需要更詳細的資訊,可以參考【官網】。下一篇我們繼續探討Tensorboard 其他強大的功能,Happy coding。

本篇範例包括08_01_TensorBoard.ipynb,可自【這裡】下載。


上一篇
Day 07:Keras Callback 的使用
下一篇
Day 09:再探TensorBoard
系列文
輕鬆掌握 Keras 及相關應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言