uni memo

kerasでtensorboardの表示とmodelの保存

kerasでtensorboardの表示とmodelの保存

環境

  • ubuntu: 17.04
  • python: 3.6
  • keras: 2.0.8
  • tensorflow: 1.3.0
  • tensorflow-tensorboard: 0.1.5

実装

tensorboard用callbackの指定

model.fit()のcallbacks引数に、keras.callbacks.TensorBoard()を指定する また、histogram_freqを指定する場合はvalidation_data引数が必要になる 具体的には以下のようにする

tb_cb = keras.callbacks.TensorBoard(log_dir=log_filepath, 
histogram_freq=1, write_graph=True, write_images=True)

model.fit(x_train, y_train,
          epochs=20, batch_size=128,
          callbacks=[tb_cb], validation_data=(x_test, y_test))

modelファイルの保存

model.save("ファイルパス")

とすればよい

ソースコード

学習モデルは https://keras.io/ja/getting-started/sequential-model-guide/#sequentialkeras の”多層パーセプトロン (MLP) を用いた多値分類:“を用いた

main.py
# config utf-8
import keras
from keras.models import Sequential
from keras.layers import Dense, Activation, Dropout
from keras.optimizers import SGD

import numpy as np

classes = 10
def create_dummy():
    # 20種類からなる1000個のデータ
    x_train = np.random.random((1000, 20))
    # 1000個のデータにランダムでラベル付
    # categorical 4 = [0,0,0,1,0,0,0,0,0,0] みたいにする
    y_train = keras.utils.to_categorical(np.random.randint(classes, size=(1000, 1)), num_classes=classes)
    x_test = np.random.random((100, 20))
    y_test = keras.utils.to_categorical(np.random.randint(classes, size=(100, 1)), num_classes=classes)
    return x_train, y_train, x_test, y_test

def add_model():
    model = Sequential()

    model.add(Dense(units=64, activation='relu', input_dim=20))
    model.add(Dropout(0.5))
    model.add(Dense(units=64, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(units=classes, activation='softmax'))

    sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
    model.compile(loss='categorical_crossentropy',
                  optimizer=sgd,
                  metrics=['accuracy'])
    return model

def main():
    print("loading data...")
    x_train, y_train, x_test, y_test = create_dummy()

    log_filepath = "./logs/"
    tb_cb = keras.callbacks.TensorBoard(log_dir=log_filepath, histogram_freq=1, write_graph=True, write_images=True)

    print("create model...")
    model = add_model()
    model.fit(x_train, y_train,
              epochs=20, batch_size=128,
              callbacks=[tb_cb], validation_data=(x_test, y_test))

    score = model.evaluate(x_test, y_test, batch_size=128)
    print('Test loss:', score[0])
    print('Test accuracy:', score[1])

    model.save("model.h5")

if __name__ == '__main__':
    main()

実行

python main.py
Using TensorFlow backend.
loading data...
create model...
Train on 1000 samples, validate on 100 samples
...

終了するとlogsディレクトリとモデルファイルが作成される

ls
logs  main.py  model.h5

tensorboard表示

—logdirオプションにログファイルの入ったディレクトリを指定

tensorboard --logdir=./logs
TensorBoard 0.1.5 at http://xxxx:6006 (Press CTRL+C to quit) 

http://localhost:6006
にアクセスすると表示される

学習データとテストデータはランダムに生成したデータなので、互いに無関係である 実際、学習してもテストデータのaccuracyは上がらない様子が確認できる

参考

2024, Built with Gatsby. This site uses Google Analytics.