shobylogy

叩けシンプルの杖

Kerasで過学習を防止するためにEarlyStopping Callbackを使う

Kerasには過学習を防止するためのEarlyStopping Callbackが存在します。

コールバック - Keras Documentation

使い方

使い方は簡単で、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

f:id:shoby:20170607223917p:plain

まとめ

KerasのEarlyStopping Callbackを用いることで過学習が防止できます。 手動で最適なEpoch数を調整する必要もなく、お手軽です。

参考

KerasでMNIST - 人工知能に関する断創録

*1:CourseraのMachine Learningコースでおすすめされていた割合

*2:keras-tqdmを用いて可視化しています