search
LoginSignup
49

More than 3 years have passed since last update.

posted at

updated at

最良のモデルを保存する(ModelCheckpointの使い方)

 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])

 

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
49