機械学習をやっているとき、過学習の抑止や時間の節約のためにモデルの改善が止まった時点で学習を止めたいことがあります。
kerasでは CallBack に EarlyStopping というオブジェクトを設定するおことでそれを実現できます。
モデル本体やデータについてのコードは省略しますので別記事を参照してください、該当部分だけ紹介します。
# インポート
from keras.callbacks import EarlyStopping
# EaelyStoppingの設定
early_stopping = EarlyStopping(
monitor='val_loss',
min_delta=0.0,
patience=2,
)
# 学習
history = model.fit(
X_train,
y_train,
epochs=100,
batch_size=16,
validation_data=[X_test, y_test],
callbacks=[early_stopping] # CallBacksに設定
)
これで、 monitor に設定した値が、 patienceの値の回数続けてmin_delta以上改善しないと、
学習がストップします。
monitor には ‘val_loss’ の他、 ‘val_acc’なども設定可能です。
patience の設定が0の時と1の時は挙動が全く同じに見えますね。
特にデメリットも感じられないので、kerasで機械学習を試す時はほぼ確実に使っています。
あまりにも学習が進まないうちに止まってしまう時は、EarlyStopping無しで試したりするのですが、
経験上、EarlyStoppingが悪いことは少なく、モデルの設計が悪かったり、その他どこかにミスがあることが多いです。