kerasでモデルを学習している時、学習途中のモデルが欲しいことがよくあります。
デフォルトでepockごとに評価スコア出るので、テストデータに限っては過学習する前のモデルが欲しいですし、
前の記事のEarlyStoppingで、patienceを設定しているのであれば、
Stopした最後のバージョンより、そのいくつか前のものの方が評価が高いからです。
このような時、ModelCheckpointというCallBackを使うことで、Epockごとのモデルを保存しておくことができます。
前回同様データの準備やモデルの構築は省略して、ModelCheckpointに必要な部分のコードだけ紹介します。
from keras.callbacks import ModelCheckpoint
# checkpointの設定
checkpoint = ModelCheckpoint(
filepath="model-{epoch:02d}-{val_loss:.2f}.h5",
monitor='val_loss',
save_best_only=True,
period=1,
)
# 学習
history = model.fit(
X_train,
y_train,
epochs=100,
batch_size=16,
validation_data=[X_test, y_test],
callbacks=[early_stopping, checkpoint]
)
これで、filepathに指定したファイル名でepockごとのモデルが保存できます。
見ての通り、ファイル名にはepock数などを変数で埋め込むことができます。
また、save_best_only=True
を設定することで、
前のモデルよりも精度が良い場合のみ保存することができます。
ファイル名に変数を含めないように指定しておけば、ベストのモデルだけが保存されている状態になります。
あとは、保存されているモデルをloadして利用すればOKです。