Epoch数が少ないと学習が足りず、多すぎると過学習になりますが
なんか自動で止める方法はないものだろうか・・・と調べると
灯台下暗し本家にありました
#何ができるのか
Epoch終了後の各数値(acc,loss,val_acc,val_loss)を監視して条件が揃った場合モデルを保存します
例えば下記の使い方の設定方法を設定し学習を行うと「Val_loss」を監視します
1Epoch終了後に「保存されている重みの「Val_loss」>学習後の「Val_loss」」
の場合の時だけモデル全体を保存します
これにより適当にEpochを決めて過学習となってしまった場合でも
モデルファイルはそれ以前の「Val_loss」が最小の時のモデルファイルが
保存されるのでやり直しがなくて便利です
#確認環境
python3.6.6
Tensorflow:1.10.0
Keras:2.2.2
#使い方
直接model.fitやmodel.fit_generatorに書いても良いですが
見づらいので、設定をしたものを利用します
#1)設定
from keras.callbacks import ModelCheckpoint
modelCheckpoint = ModelCheckpoint(filepath = 'XXX.h5',
monitor='val_loss',
verbose=1,
save_best_only=True,
save_weights_only=False,
mode='min',
period=1)
引数説明
filepath: 重みのファイル名そのものを指示(ex. XXX.h5)
monitor: 監視する値(acc,loss,val_acc,val_loss)
verbose: 0=結果非表示 1=結果表示
save_best_only: True=判定結果から保存を決定。False=後述の'period'の間隔で保存
mode: 判定条件(auto、max、min)max=「acc、val_acc」、min=「loss、val_loss」
save_weights_only: True=モデルの重みが保存。False=モデル全体を保存
period: 何エポックごとに保存するか
#2)model.fit、model.fit_generatorの設定例
callbacks=[modelCheckpoint]を記述します
model.fit_generator(train_generator,
steps_per_epoch = steps_per_epoch,
validation_steps = validation_steps,
epochs=100,
verbose=1,
validation_data=validation_generator,
callbacks=[modelCheckpoint])