web-dev-qa-db-ja.com

Kerasで「フィット」を複数回呼び出す

私は数百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フォーラムは、これがデータセット全体をトレーニングすると言っていることは知っていますが、ネットワークが最後のトレーニングチャンクだけを再学習しない理由を直感的に理解することはできません。

これを理解するのに役立つ人もいます。

ベスト、ジョー

28
jonas smith

メモリに収まらないデータセットの場合、 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つ注意すべき点は、モデルをトレーニングするサンプルが各エポックの後にシャッフルされる順序を確認する必要があることです。サンプルコードを記述した方法では、データセットをシャッフルしないようです。 herehere のシャッフルについてもう少し読むことができます。

24

この質問は Keras github repository in Issue#4446:クイック質問:モデルを複数回適合させることができますか? でクローズされました FrançoisChollet 次の statement で:

はい、fitを連続して呼び出すと、モデルが徐々にトレーニングされます。

そのため、はい、複数回fitを呼び出すことができます。

12