在 Notebook 中使用 TensorBoard

在 TensorFlow.org 上檢視 在 Google Colab 中執行 在 GitHub 上檢視原始碼 下載 notebook

TensorBoard 可直接在 notebook 體驗 (例如 ColabJupyter) 中使用。這對於分享結果、將 TensorBoard 整合到現有工作流程,以及在不需在本機安裝任何項目的情況下使用 TensorBoard 很有幫助。

設定

首先安裝 TF 2.0 並載入 TensorBoard notebook 擴充功能

Jupyter 使用者:如果您已將 Jupyter 和 TensorBoard 安裝到相同的 virtualenv 中,那麼一切就緒。如果您使用更複雜的設定,例如全域 Jupyter 安裝和適用於不同 Conda/virtualenv 環境的核心,那麼您必須確保 tensorboard 二元檔位於 Jupyter notebook 環境定義內的 PATH 上。其中一種做法是修改 kernel_spec,將環境的 bin 目錄前置到 PATH如此處所述

Docker 使用者:如果您執行 Docker 映像檔的 Jupyter Notebook 伺服器 (使用 TensorFlow 的 nightly 版本),則不僅需要公開 notebook 的連接埠,還需要公開 TensorBoard 的連接埠。因此,請使用以下命令執行容器

docker run -it -p 8888:8888 -p 6006:6006 \
tensorflow/tensorflow:nightly-py3-jupyter 

其中 -p 6006 是 TensorBoard 的預設連接埠。這會為您分配一個連接埠來執行一個 TensorBoard 執行個體。若要擁有並行執行個體,則必須分配更多連接埠。此外,將 --bind_all 傳遞至 %tensorboard,以在容器外部公開連接埠。

# Load the TensorBoard notebook extension
%load_ext tensorboard

匯入 TensorFlow、datetime 和 os

import tensorflow as tf
import datetime, os

Notebook 中的 TensorBoard

下載 FashionMNIST 資料集並縮放

fashion_mnist = tf.keras.datasets.fashion_mnist

(x_train, y_train),(x_test, y_test) = fashion_mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-labels-idx1-ubyte.gz
32768/29515 [=================================] - 0s 0us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-images-idx3-ubyte.gz
26427392/26421880 [==============================] - 0s 0us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-labels-idx1-ubyte.gz
8192/5148 [===============================================] - 0s 0us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-images-idx3-ubyte.gz
4423680/4422102 [==============================] - 0s 0us/step

建立非常簡單的模型

def create_model():
  return tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28), name='layers_flatten'),
    tf.keras.layers.Dense(512, activation='relu', name='layers_dense'),
    tf.keras.layers.Dropout(0.2, name='layers_dropout'),
    tf.keras.layers.Dense(10, activation='softmax', name='layers_dense_2')
  ])

使用 Keras 和 TensorBoard 回呼訓練模型

def train_model():

  model = create_model()
  model.compile(optimizer='adam',
                loss='sparse_categorical_crossentropy',
                metrics=['accuracy'])

  logdir = os.path.join("logs", datetime.datetime.now().strftime("%Y%m%d-%H%M%S"))
  tensorboard_callback = tf.keras.callbacks.TensorBoard(logdir, histogram_freq=1)

  model.fit(x=x_train, 
            y=y_train, 
            epochs=5, 
            validation_data=(x_test, y_test), 
            callbacks=[tensorboard_callback])

train_model()
Train on 60000 samples, validate on 10000 samples
Epoch 1/5
60000/60000 [==============================] - 11s 182us/sample - loss: 0.4976 - accuracy: 0.8204 - val_loss: 0.4143 - val_accuracy: 0.8538
Epoch 2/5
60000/60000 [==============================] - 10s 174us/sample - loss: 0.3845 - accuracy: 0.8588 - val_loss: 0.3855 - val_accuracy: 0.8626
Epoch 3/5
60000/60000 [==============================] - 10s 175us/sample - loss: 0.3513 - accuracy: 0.8705 - val_loss: 0.3740 - val_accuracy: 0.8607
Epoch 4/5
60000/60000 [==============================] - 11s 177us/sample - loss: 0.3287 - accuracy: 0.8793 - val_loss: 0.3596 - val_accuracy: 0.8719
Epoch 5/5
60000/60000 [==============================] - 11s 178us/sample - loss: 0.3153 - accuracy: 0.8825 - val_loss: 0.3360 - val_accuracy: 0.8782

使用 magic 指令 在 notebook 中啟動 TensorBoard

%tensorboard --logdir logs

您現在可以檢視儀表板,例如時間序列圖表分佈和其他儀表板。某些儀表板在 Colab 中尚無法使用 (例如設定檔外掛程式)。

%tensorboard magic 指令的格式與 TensorBoard 命令列調用完全相同,但前面加上 % 符號。

您也可以在訓練之前啟動 TensorBoard,以監控其進度

%tensorboard --logdir logs

透過發出相同的命令,即可重複使用相同的 TensorBoard 後端。如果選擇了不同的記錄目錄,則會開啟新的 TensorBoard 執行個體。連接埠會自動管理。

開始訓練新模型,並觀看 TensorBoard 每 30 秒自動更新,或使用右上角的按鈕重新整理

train_model()
Train on 60000 samples, validate on 10000 samples
Epoch 1/5
60000/60000 [==============================] - 11s 184us/sample - loss: 0.4968 - accuracy: 0.8223 - val_loss: 0.4216 - val_accuracy: 0.8481
Epoch 2/5
60000/60000 [==============================] - 11s 176us/sample - loss: 0.3847 - accuracy: 0.8587 - val_loss: 0.4056 - val_accuracy: 0.8545
Epoch 3/5
60000/60000 [==============================] - 11s 176us/sample - loss: 0.3495 - accuracy: 0.8727 - val_loss: 0.3600 - val_accuracy: 0.8700
Epoch 4/5
60000/60000 [==============================] - 11s 179us/sample - loss: 0.3282 - accuracy: 0.8795 - val_loss: 0.3636 - val_accuracy: 0.8694
Epoch 5/5
60000/60000 [==============================] - 11s 176us/sample - loss: 0.3115 - accuracy: 0.8839 - val_loss: 0.3438 - val_accuracy: 0.8764

您可以使用 tensorboard.notebook API 進行更多控制

from tensorboard import notebook
notebook.list() # View open TensorBoard instances
Known TensorBoard instances:

  - port 6006: logdir logs (started 0:00:54 ago; pid 265)
# Control TensorBoard display. If no port is provided, 
# the most recently launched TensorBoard is used
notebook.display(port=6006, height=1000)