LoginSignup
3

More than 3 years have passed since last update.

GoogleColabo上のKerasからTensorBoardを使う例

Last updated at Posted at 2019-05-11

概要

機械学習入門者向け。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'])"

公開用URLが取得できる
image.png

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'])

モデルのサマリーが表示
image.png

モデルの学習、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)

image.png

TensorBoardにアクセス

Ngrockの公開用URLにアクセスしてTensorBoardを開く

image.png

image.png

以上。

その他

TensorBoardの使い方がよくわからない。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3