LoginSignup
31
22

More than 5 years have passed since last update.

Keras で学習するとき、 initial_epoch を使って学習を途中から始める方法

Last updated at Posted at 2018-06-11

背景

Keras では、 model.fit() を何度もコールすると続きから学習を再開することが可能です。しかし、 Tensorboad でのログを出力する必要がある場合、epochsinitial_epoch を適切に設定する必要があります。

問題点

model.fit() を単純に何度も呼ぶと、 Tensorboard 用のログには、毎回 0 epoch から始まったとして記録されます。そうすると、下記の画像のように、同じ範囲を何度も繰り返すグラフができてしまいます。

スクリーンショット 2018-06-11 18.12.29.png

この図の例では、 epochs = 100 を設定し model.fit() を繰り返しました。
model.fit() を複数回に分けて実行し、かつ、グラフも正しく途中からはじまり、自然につながったものを書くには、 initial_epochepochs を適切に設定する必要があります。

解決方法

initial_epoch を設定したとき、 epochs は最終 epoch を意味します。最終 epoch というのが何を表しているのか、具体例とともに説明します。
ここでは、一回の施行で 100 epochs の学習を行い、これを 1 step として、合計 5 steps 行うとします。
はじめの step では、


model.fit(x, y, initial_epoch=0, epochs=100)  # step1

とすることで学習できます。
次の step では、 initial_epoch=100 とします。このときに、 epochs=100 のままではなくて、 epochs=200 にする必要があります。この epochs=200 というのが最終 epoch という言葉の意味を表しています。
言い換えると、 epochs は実際に学習する epoch の数ではなく、 N epochs まで学習するという、 epoch の終わりを意味していると言えます。公式ドキュメントにも下記のように書かれています。

initial_epochと組み合わせると,epochsは「最終エポック」として理解されることに注意してください.
このモデルはepochsで与えられた反復回数の訓練をするわけではなく,単にepochsという指標に試行が達するまで訓練します.

では、残りの 4 step を一度に書いてみます。


model.fit(x, y, initial_epoch=100, epochs=200)  # step2
model.fit(x, y, initial_epoch=200, epochs=300)  # step3
model.fit(x, y, initial_epoch=300, epochs=400)  # step4
model.fit(x, y, initial_epoch=400, epochs=500)  # step5

ちなみに、 例えば step 5 では、 initial_epoch=400, epochs=500 となっていますが、 initial_epoch=401 のように開始を 1 ずらさなくてもいいのでしょうか?
keras のコードを確認してみると、


for epoch in range(initial_epoch, epochs):
    ...

というように記述されています。このことから、 initial_epoch=400, epochs=500 で問題ないことがわかります。

該当コード: https://github.com/keras-team/keras/blob/a80ecd78daf7d464a6ff915111f62b8cd21c8b6b/keras/engine/training_arrays.py#L140

では、以上を踏まえて、 code snippet としてまとめて終わりとします。


epochs = 100
step = 5
for s in range(step):
    start_epochs = epochs * s
    end_epochs = start_epochs + epochs
    model.fit(x, y, initial_epoch=start_epochs, epochs=end_epochs)

スクリーンショット 2018-06-11 18.36.48.png

参考

31
22
0

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
  3. You can use dark theme
What you can do with signing up
31
22