Chainer, Early Stopping
下記の2つのプルリクエストを通して,
chainerにearly stoppingを追加してもらいました.
(とても丁寧なレビューをしていただいた徳居さんに感謝...!)
このearly stoppingは,kerasのEarlyStoppingを翻訳した形で実装しています.
これの意味するところは,EarlyStoppingTriggerは学習を打ち切る処理
のみを行なっているということです.
学習停止時点までで監視していた指標でもっとも良い性能を発揮した重みを読み込むためには,
@koreyouさんがChainerでのEarly stoppingを再考するで紹介してくださっているように,
MaxValueTrigger(MinValueTrigger)とsave/restoreを組み合わせた機構をtrainerに追加する必要があります.
これはkerasのModelCheckpointに相当します.
early stoppingを使うためには,以下のようにトリガを作成します.
monitor
でearly stoppingが監視する指標を設定します.
max_trigger
はearly stoppingが起きなかった場合にどこまで学習を行うかを指定します.(exampleでの該当箇所)
stop_trigger = triggers.EarlyStoppingTrigger(
monitor='validation/main/loss',
max_trigger=(20, 'epoch'))
あとは,このstop_trigger
をtrainerに渡してあげればよいです.(exampleでの該当箇所)
trainer = training.Trainer(updater, stop_trigger, out=args.out)
つかってください,よろしくお願いします!