1epochごとに学習データを保存する(keras)
部活とかプログラミングコンテストとかcszpとか忙しい今日この頃。 応募するプログラムで引っかかったのでメモ。
環境
今回から環境書いておく。
OS: ubuntu 20.04LTS
CPU: Intel core i7
GPU: GTX 1050Ti
python: 3.6.4
tensorflow: 1.15.3
keras: 2.1.6
どーでもいい情報入っているかもしれんが定型文だからしょうがない()
求めてるもの
タイトル通り、1epochごとに学習済みデータを保存させたい。
あった。
めっちゃ記事出てる。ひとまず、kerasのwikiに逃げ込む。なんかコールバックってやつを使えばいいっぽい。
コールバックの使い方
コールバックは訓練中で適用される関数集合です.訓練中にモデル内部の状態と統計量を可視化する際に,コールバックを使います.SequentialとModelクラスの.fit()メソッドに(キーワード引数callbacksとして)コールバックのリストを渡すことができます.コールバックに関連するメソッドは,訓練の各段階で呼び出されます.
ちょっと何言ってるかわからん。要約すると
コールバックはモデルの内部の状態とか統計とかを可視化してパラメータを動的に変更したりなんだりできる便利なやつだよ。
ということ。kerasでtensorboardを使用するときとか学習率を動的に変更するときとかに大活躍する。
使い方
使い方はwikiがしっかりしすぎているから使い方だけ。
keras.callbacks.ModelCheckpoint(filepath, monitor='val_loss', verbose=0, save_best_only=False, save_weights_only=False, mode='auto', period=1)
デフォルト値はこんな感じ。説明は割愛。filepathのところに保存したいファイル名を入れると保存してくれる。
keras.callbacks.ModelCheckpoint("model-{epoch:02d}.hdf5")
とやると、epochがファイル名に追加できる。なので、epochの部分をaccとかlossとかにするとaccとかlossが入っているファイル名にすることができる。 書式はstr.format形式でかけるので便利。
最後に
kerasってwiki充実してるよね。ほんと助かってます。kerasチームの皆さん。
個人的な質問等はこちらまで。
https://forms.gle/V6NRhoTooFw15hJdA
また、自分が参加しているRobocup soccer シミュレーションリーグのチームでは参加者募集中です!活動の見学、活動に参加したい方、ご連絡お待ちしております!
詳しくはこちら