2017-04-17 11 views
7

で「samples_per_epoch」と「steps_per_epoch」の違いは何...私は数日間、この問題で混乱していたfit_generator

私の質問は、トレーニング時間はそれとの間の、このような大規模な違いがあり、なぜ私はBATCH_SIZEを設定することです私のジェネレータには "1"と "20"を指定します。

私はするBATCH_SIZEを設定した場合は、トレーニング時間 のエポックは約180〜200秒です。 は私がBATCH_SIZEが、トレーニング時間1エポックになるように設定した場合、およそ3000〜3200秒です。

しかし、これらのトレーニング時間のこの恐ろしい違いは、逆の結果になるはずです... batch_size = 1、トレーニング時間 - > 3000〜3200秒です。 batch_size = 20、トレーニング時間 - > 180〜200秒。

私のジェネレータへの入力は、ファイルパスではなく、 "np.load()"を呼び出して メモリに既にロードされているnumpy配列です。 I/Oトレードオフの問題は存在しないと思います。

私はKeras-2.0.3を使用していて、私のバックエンドは、私がこれの更新がPR、 を合併見てきました

tensorflow-GPU 1.0.1ですが、それは、この変更はでは何も影響しないだろうと思われますすべて。 (使用方法は元のものとまったく同じです)

ここでlinkは私の自己定義ジェネレータと私のfit_generatorの要点です。

誰かがこの問題を説明するのに手伝ってもらえますか? ありがとうございました:)

答えて

11

fit_generatorを使用する場合、各エポックで処理されるサンプルの数はbatch_size * steps_per_epochsです。 https://keras.io/models/sequential/

steps_per_epoch:1つのエポック完成を宣言し、次のエポックを開始する前に、発電機から生成するステップ(サンプルのバッチ)の総数fit_generatorためKerasドキュメントから。これは通常、データセットの一意のサンプル数をバッチサイズで割った値に等しくなければなりません。

これは 'fit'の動作とは異なり、通常はbatch_sizeを大きくすると処理速度が向上します。

結論として、fit_generatorを使用してbatch_sizeを増やす場合、トレーニング時間を同じまたはそれ以下に保つには、同じ要因でsteps_per_epochsを減らす必要があります。

+0

お返事ありがとうございます!私は私のオリジナルはそれと同じだと思う(steps_per_epochsは#samples/batch_sizeの合計に等しくなければならない)。 しかし、結合されたプル要求は私を多く混乱させました... OK、私はそれをついに得ました!どうもありがとうございました! – HappyStorm

+2

私は、fit_generator()ルーチンのどこにでも指定されたbatch_sizeを見ていません。バッチサイズはどこから推測されますか?彼らはbatch_sizeを(あなたのジェネレータの長さ)/(steps_per_epoch)として定義していますか?彼らはそれが「典型的には等しい」と言っているが、これはまったく等しいことを意味する。 –

関連する問題