環境
- 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は上がらない様子が確認できる