Kerasには過学習を防止するためのEarlyStopping Callbackが存在します。
使い方
使い方は簡単で、modelのfitメソッドのcallbackに渡すだけです。
from keras.callbacks import EarlyStopping model.fit(X_train, Y_train, callbacks=[EarlyStopping(), validation_split=0.25])
デフォルトでは val_loss
の値を監視するため、fitメソッドには validation_data
もしくは validation_split
を渡す必要があります。
私の場合、training setとvalidation setとtest setを6:2:2の割合にするため、training setとtest setを8:2に分けた上で、validation_splitには0.25をセットしています。*1
結果
val_loss
に変化が無くなったEpochでtrainingが打ち切られるため、過学習による局所最適化に陥ることを防止できます。
これにより、最適なEpoch数を手動で調整する手間が省けます。
以下の図は実際にEarlyStopping Callbackを用いたtrainingの結果です。val_lossに変化が無くなったタイミングで打ち切られているのが確認できると思います。*2
まとめ
KerasのEarlyStopping Callbackを用いることで過学習が防止できます。 手動で最適なEpoch数を調整する必要もなく、お手軽です。
参考
*1:CourseraのMachine Learningコースでおすすめされていた割合
*2:keras-tqdmを用いて可視化しています