Kaggle上使用Tensorboard 1. 前言 想在Kaggle上使用Tensorboard,找了一圈。 參考了Kaggle上的一個Code:Tensorboard on Kaggle 但發現有些變化,Code中用到的內網穿透工具Ngrok需要加一個Token,所以需要註冊一個Ngrok賬號, ...
Kaggle上使用Tensorboard
1. 前言
- 想在Kaggle上使用Tensorboard,找了一圈。
- 參考了Kaggle上的一個Code:Tensorboard on Kaggle
- 但發現有些變化,Code中用到的內網穿透工具Ngrok需要加一個Token,所以需要註冊一個
Ngrok
賬號,免費獲取一個通道的Token。
2. Kaggle上使用Tensorboard
2.1. 方法一
- 其實直接把在Kaggle上跑出來的Tensorboard日誌文件下載到本地,在本地啟動Tensorboard即可查看。
- 當然,這裡主要講線上的方法。
2.2. 方法二
- 線上使用Tensorboard
2.2.1. 獲取一個Ngrok的免費通道
- 訪問Ngrok,註冊一個賬號並登錄
- 登錄後界面如下,複製並保存你的Token
2.2.2. 調試運行代碼
- 主要參考Kaggle上的一個Code:Tensorboard on Kaggle
- 建議分段運行,以避免中間出錯,全部重新運行一次
- 以下代碼在Kaggle的Notebook中運行
(1) 環境準備
import tensorflow as tf # This is how we import tf
# Clear any logs from previous runs
# 清除以前運行的所有日誌
!rm -rf ./logs/
!mkdir ./logs/
(2) 啟動Tensorboard
# Download Ngrok to tunnel the tensorboard port to an external port
# 下載 Ngrok 以將 tensorboard 埠隧道傳輸到外部埠
!wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
!unzip ngrok-stable-linux-amd64.zip
# 添加自己在 Ngrok 上獲取的專屬Token
!./ngrok authtoken 粘貼你的專屬Token
- 註意這一步需要添加自己在 Ngrok 上獲取的專屬Token
# Run tensorboard as well as Ngrok (for tunneling as non-blocking processes)
# 運行 tensorboard 和 Ngrok(用於作為非阻塞進程的隧道)
import os
import multiprocessing
pool = multiprocessing.Pool(processes = 10)
# --logdir ./logs/ 是 TensorBoard 的日誌文件(log)路徑
# 你可以修改為你訓練時的log保存路徑(可以用絕對/相對路徑),但相關的代碼路徑也要記得修改
results_of_processes = [pool.apply_async(os.system, args=(cmd, ), callback = None )
for cmd in [
f"tensorboard --logdir ./logs/ --host 0.0.0.0 --port 6006 &",
"./ngrok http 6006 &"
]]
- 獲取訪問 Tensorload 的
URL
,訪問生成的URL
即可看到 Tensorload 界面 - 但還沒有產生日誌文件,所以現在還看不到有圖形
! curl -s http://localhost:4040/api/tunnels | python3 -c \
"import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"
(3) 創建和訓練模型
(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
def create_model():
return tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])
import datetime
model = create_model()
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
log_dir = "logs/fit/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)
model.fit(x=x_train,
y=y_train,
epochs=10,
validation_data=(x_test, y_test),
callbacks=[tensorboard_callback])
- 產生日誌文件後,就可以在打開的 Tensorboard 界面點擊刷新,看到實時訓練趨勢了
到底了