NLP(自然言語処理)訓練の中断と再開(ModelCheckpoint)
訓練に用いるデータが大きくなると,訓練に必要な時間も長くなり,一度に訓練するのが困難になります。
そこで,それぞれのエポックが終了したときにモデルを保存し,あとで訓練を再開する方法を導入します。
ModelCheckpoint
from keras.callbacks import ModelCheckpoint
cp_callback = ModelCheckpoint(
filepath="model.h5",
verbose=1,
save_weights_only=False,
save_freq="epoch")
ModelCheckpoint()
はそれぞれのエポックが終了したときに,モデルの重みやモデルそのものを保存します。
filepath
は保存するファイル名です。ここではモデルそのもを保存するので,h5形式を指定します。
verbose=1
は,保存するときにメッセージを表示します。verbose=0
とするとメッセージは表示されません。
save_weights_only=True
は,モデルの重みのみを保存します。一方でsave_weights_only=False
はモデルそのものを保存します。
モデルが保存されるとき,モデルは重みを含みます。したがって,あとで学習を再開するときに,重みとモデルの両方を読み込む必要はなく,モデルのみを読み込みます。
save_freq="epoch"
はそれぞれのエポックが終了したときに,ファイルを上書きします。この値は変更しないことが推奨されています。
model.fit(
...... ,
callbacks=cp_callback)
最終的に,ModelCheckpoint()
はfit()
のcallbacks
で呼び出します。
訓練の再開
model = load_model('model.h5')
load_model()
は保存されたモデルを読み込みます。
モデルそのものを読み込んだ場合,再びモデルを構築する必要はありません。具体的には,Sequential()
,mode.add()
,model.compile()
が不要です。
これらのコードを削除またはコメントアウトし,model.fit()
を実行します。
model.fit(
...... ,
initial_epoch=10,
callbacks=cp_callback)
initial_epoch
は訓練を何番目のepochから開始するかを表します。例えば,前回の訓練を10 epochで終了した場合,initial_epoch=10
とすると,11 epochから訓練を再開します。
initial_epoch
を使用しない場合,1 epochから数えることになります。
initial_epoch
は必ずしも値を指定する必要はありませんが,訓練の量と結果の関係が分からなくなるので,値を指定した方がよいでしょう。
SNSでシェア