2017-04-21 12 views
4

私はKerasの新しいユーザーです。 Kerasを使用したトレーニング手順について質問があります。KerasのModelCheckpointを使用してモデルをトレーニングする方法

私のサーバーの時間制限のため(各ジョブは24時間以内に実行することができません)、複数の10エポック期間を使用してモデルをトレーニングする必要があります。

トレーニングの第1期間では、10エポック後に、モデルのモデルチェッカポイントを使用して最良のモデルの重みが格納されます。

conf = dict() 
conf['nb_epoch'] = 10 
callbacks = [ 
      ModelCheckpoint(filepath='/1st_{epoch:d}_{val_loss:.5f}.hdf5', 
      monitor='val_loss', save_best_only=True, 
      save_weights_only=False, verbose=0) 
      ] 

「1st_10_1.00000.hdf5」というモデルがベストだとします。次に、10個のエポックを使って自分のモデルを訓練し、次のようにベストモデルの重みを格納します。

model.load_weights('1st_10_1.00000.hdf5') 
model.compile(...) 
callbacks = [ 
      ModelCheckpoint(filepath='/2nd_{epoch:d}_{val_loss:.5f}.hdf5', 
      monitor='val_loss', save_best_only=True, 
      save_weights_only=False, verbose=0) 
      ] 

しかし、私には問題があります。 2回目のトレーニングの第1回は1.20000のval_lossを与え、スクリプトは '2nd_1_1.20000.hdf5'というモデルを生成します。明らかに、新しいval_lossは、最初のトレーニングの最高val_loss(1.00000)よりも大きい。そして、次の訓練の次のエポックは、 '1st_10_1.00000.hdf5'ではなく '2nd_1_1.20000.hdf5'というモデルに基づいて訓練されているようです。

'2nd_1_1.20000.hdf5' 
'2nd_1_2.15000.hdf5' 
'2nd_1_3.10000.hdf5' 
'2nd_1_4.05000.hdf5' 
... 

最初のトレーニング期間の方が良い結果を使用していないと思います。誰でも私にそれを修正する方法を教えてもらえますか、それとも前のトレーニング期間のベストモデルを使うべきかをプログラムに伝える方法ですか?事前に多くの感謝!

+1

誰でも私を助けることができますか?どうもありがとう! –

答えて

1

興味深いケースがありましたが、大きな改善ができました...現在、APIが独自のコールバック機能を作成するのと同じように、このような解決策をサポートしているとは思いません。

私はそれが難しいとは思わない。元のmodelcheckpointコールバッククラスをベースにして変更するだけで済みます。

このライン: https://github.com/fchollet/keras/blob/master/keras/callbacks.py#L390

それはアイテムであることloggetの現在の最高値を格納し、それは-inf/infを状況に応じてどちらかとif文で初期化されています。

あなたの場合、ファイルのファイル名を読み込み、文字列を操作して代わりに追加する方法を見つける必要があります。

私はそれを別の声明として追加するか、else ifとして追加することを提案します。

コアコードが多すぎるのを避けるためです。

はそれが私は同じ問題に走った、と私も質問をしていたまで、あなたの質問を見ていない...

関連する問題