概要
機械学習入門者向け。GoogleColaboのKerasからTensorBoardを使う例。
モデルサンプルはXOR、
Ngrok経由でTensorBoardにアクセスする
環境
- Google Colaboratory
- Keras
参考
TensorBoradの準備(ngrok, tensorboard)
下記を実行するとngrokのインストール、tensorBoard起動、公開用URL出力が行われる
colabo
import os
# ngrokのインストール
!wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
!unzip -o ngrok-stable-linux-amd64.zip
# TensorBoardのlogフォルダ
LOG_DIR = './log'
if not os.path.exists(LOG_DIR):
os.makedirs(LOG_DIR)
# TensorBoardをバックグラウンドで実行
get_ipython().system_raw(
'tensorboard --logdir {} --host 0.0.0.0 --port 6006 &'
.format(LOG_DIR))
# ngrokバックグラウンドプロセスを起動
# TensorBoardのポート6006を開放します。
get_ipython().system_raw('./ngrok http 6006 &')
# TensorBoard表示のURLを取得
# localhost:4040でNgrokのステータスをJsonで取得してpublicUrlをPrintしている
!curl -s http://localhost:4040/api/tunnels | python3 -c \
"import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"
Kerasでモデル実行
モデルの定義
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.optimizers import SGD, RMSprop
from keras.callbacks import TensorBoard
np.random.seed(123)
'''
データの生成
'''
# XORゲート
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
Y = np.array([[0], [1], [1], [0]])
'''
モデル設定
'''
model = Sequential()
# 入力層 - 隠れ層
model.add(Dense(input_dim=2, units=2))
model.add(Activation('sigmoid'))
# 隠れ層 - 出力層
model.add(Dense(units=1))
model.add(Activation('sigmoid'))
# summary
model.summary()
##モデルコンパイル
model.compile(loss='binary_crossentropy',
optimizer=SGD(lr=0.1) ,
metrics=['accuracy'])
モデルの学習、TensorBoardへの書込み
コールバックを設定することでTensorBoardへの書込ができる
batch_size = 4
epochs = 4000
histogram_freq=500 # TensorBoardのhistogram書込頻度設定
'''
モデル学習
'''
# 訓練中に適応するコールバックを作成
# https://keras.io/ja/callbacks/#tensorboard
tb = TensorBoard(log_dir=LOG_DIR, histogram_freq=histogram_freq,
batch_size=batch_size,
write_graph=True, write_grads=True, write_images=True)
history = model.fit(X, Y
, epochs=epochs
, batch_size=batch_size
, verbose=0
, validation_data=(X, Y)
, callbacks=[tb] # Call Back
)
モデル評価、学習結果の確認
'''
モデル評価
'''
# 損失値と正解率を取得
score = model.evaluate(X, Y, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
'''
学習結果の確認
'''
classes = model.predict_classes(X, batch_size=4)
prob = model.predict_proba(X, batch_size=4)
print('classified:')
print(Y == classes)
print()
print('output probability:')
print(prob)
TensorBoardにアクセス
Ngrockの公開用URLにアクセスしてTensorBoardを開く
以上。
その他
TensorBoardの使い方がよくわからない。