私は数百GBの画像でCNNに取り組んでいます。これらの画像の4Gbチャンクを食い止め、これらの各部分に対してfit
を呼び出すトレーニング関数を作成しました。データセット全体ではなく、最後のピースでのみトレーニングしているのではないかと心配しています。
事実上、私の擬似コードは次のようになります。
DS = lazy_load_400GB_Dataset()
for section in DS:
X_train = section.images
Y_train = section.classes
model.fit(X_train, Y_train, batch_size=16, nb_Epoch=30)
APIとKerasフォーラムは、これがデータセット全体をトレーニングすると言っていることは知っていますが、ネットワークが最後のトレーニングチャンクだけを再学習しない理由を直感的に理解することはできません。
これを理解するのに役立つ人もいます。
ベスト、ジョー
メモリに収まらないデータセットの場合、 Keras Documentation FAQセクション
model.train_on_batch(X, y)
およびmodel.test_on_batch(X, y)
を使用してバッチトレーニングを行うことができます。 models documentation を参照してください。または、トレーニングデータのバッチを生成するジェネレーターを記述し、
model.fit_generator(data_generator, samples_per_Epoch, nb_Epoch)
メソッドを使用できます。CIFAR10の例 でバッチトレーニングの動作を確認できます。
したがって、データセットを現在の方法で繰り返したい場合は、おそらくmodel.train_on_batch
そして、バッチサイズと反復を自分で処理します。
もう1つ注意すべき点は、モデルをトレーニングするサンプルが各エポックの後にシャッフルされる順序を確認する必要があることです。サンプルコードを記述した方法では、データセットをシャッフルしないようです。 here と here のシャッフルについてもう少し読むことができます。
この質問は Keras github repository in Issue#4446:クイック質問:モデルを複数回適合させることができますか? でクローズされました FrançoisChollet 次の statement で:
はい、
fit
を連続して呼び出すと、モデルが徐々にトレーニングされます。
そのため、はい、複数回fitを呼び出すことができます。