Keras を使った簡単な Deep Learning はできたものの、そういえば学習結果は保存してなんぼなのでは、、、と思ったのでやってみた。
準備
公式の FAQ に以下のような記載があるので、h5py を入れておく。
モデルのweightパラメータを保存する場合,以下のようにHDF5を使います。
注: HDF5とPythonライブラリの h5pyがインストールされている必要があります(Kerasには同梱されていません)。
$ pip install h5py
モデルと学習結果を保存する
前回描いたコード に以下を追加して、モデルを mnist_mlp_model.json
に、学習結果を mnist_mlp_weights.h5
に保存する。
model_json_str = model.to_json()
open('mnist_mlp_model.json', 'w').write(model_json_str)
model.save_weights('mnist_mlp_weights.h5');
保存したモデルと学習結果を利用する
# -*- coding: utf-8 -*-
import numpy as np
np.random.seed(20160717)
from keras.datasets import mnist
from keras.models import model_from_json
from keras.utils import np_utils
import matplotlib.pyplot as plt
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.reshape(60000, 784).astype('float32') / 255
X_test = X_test.reshape(10000, 784).astype('float32') / 255
Y_train = np_utils.to_categorical(y_train, 10)
Y_test = np_utils.to_categorical(y_test, 10)
# モデルを読み込む
model = model_from_json(open('mnist_mlp_model.json').read())
# 学習結果を読み込む
model.load_weights('mnist_mlp_weights.h5')
model.summary();
model.compile(loss='categorical_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
score = model.evaluate(X_test, Y_test, verbose=0)
print('Test loss :', score[0])
print('Test accuracy :', score[1])
結果は以下。きちんと学習後に近いスコアが出ている。
Using TensorFlow backend.
____________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
====================================================================================================
dense_1 (Dense) (None, 512) 401920 dense_input_1[0][0]
____________________________________________________________________________________________________
activation_1 (Activation) (None, 512) 0 dense_1[0][0]
____________________________________________________________________________________________________
dropout_1 (Dropout) (None, 512) 0 activation_1[0][0]
____________________________________________________________________________________________________
dense_2 (Dense) (None, 512) 262656 dropout_1[0][0]
____________________________________________________________________________________________________
activation_2 (Activation) (None, 512) 0 dense_2[0][0]
____________________________________________________________________________________________________
dropout_2 (Dropout) (None, 512) 0 activation_2[0][0]
____________________________________________________________________________________________________
dense_3 (Dense) (None, 10) 5130 dropout_2[0][0]
____________________________________________________________________________________________________
activation_3 (Activation) (None, 10) 0 dense_3[0][0]
====================================================================================================
Total params: 669706
____________________________________________________________________________________________________
Test loss : 0.118880221067
Test accuracy : 0.9829