私はニューラルネットを持っており、非常に大量のデータを訓練しています。データは私のコンピュータのメモリに収まらないので、それを分解してまとめて読み込む必要があります。だから、むしろのようなエポックカウンタに建て使用kerasより:データセットがメモリに収まらない場合のKerasオプティマイザの状態
model.fit(x=X,y=Y,epochs=20)
私はforループのようなトレーニングを明示的に書いている:
for i in range(iter): #iter is now my counter for epochs
shuffle(datachunks) #pseudocode to shuffle the data around
for j in range(datachunks):
model.fit(x=X_chunk,y=Y_chunk,epochs=1)
私の質問は、速度減衰を学習することを伴います。崩壊は、私は推測している「各アップデートは、」(各バッチでであるおそらくここ
keras.optimizers.Adam(lr=0.001,decay=1e-6)
:私は1つのようオプティマイザにそれを実装することで、kerasに学習率の減衰を実現するための二つの方法を知っていますか?これは私が持っている副次的な質問です...私はかなりの崩壊スケジュールがここにあるかどうかはまだ分かりません)。私は学習率の減衰を実装するために知っている第二の方法はそうのようなコールバックでの学習率スケジューラ経由で:
keras.callbacks.LearningRateScheduler(schedule)
スケジュール機能は、入力としてエポックを取る必要がありますので、このスケジューラで反復変数はエポックであるべきで、新しい学習率を出力する。私の質問は、これらの学習率低下メカニズムのいずれかが私のために働くのでしょうか?私は明示的なforループを持っており、model.fitを呼び出すたびに1回の訓練しか行いません。コールバックメソッドを使用すると、スケジュールに「1」を送り続けるだけで、学習率は決して低下しませんか?オプティマイザで内蔵ディケイを使用すると、オプティマイザは各反復でリセットされ、元の学習率に戻りますか、またはすべてのループを通じて学習率を引き続き低下させることを忘れませんか?この同じ質問は、以前の勾配の移動するウィンドウ平均である運動量(該当する場合)などの他の超過パラメータにも適用されます。このようにデータを分割すると、kerasはこれらの移動するウィンドウの平均をデータチャンクとエポックで追跡しますか?
データが大きすぎてワンショットで読み込めない場合は、 'fit'の代わりに' fit_generator'を使用してください。 – scarecrow