2017-01-09 3 views
2

私が正しく理解していれば、CNTKのPython API Trainer.previous_minibatch_sample_countは、以前のミニバッチのサンプル数(およびシーケンスではない)を返すことになっています。私は(別の)SequenceClassification例を変更した場合、CNTKのエポックサイズを定義する単位は何ですか?

minibatch_size = 70 
... 
Minibatch[ 1- 1]: loss = 4.857261 * 67, metric = 100.0% * 67 
Minibatch[ 2- 2]: loss = 4.835442 * 63, metric = 60.3% * 63 
Minibatch[ 3- 3]: loss = 4.798552 * 68, metric = 36.8% * 68 
Minibatch[ 4- 4]: loss = 4.751775 * 70, metric = 35.7% * 70 
Minibatch[ 5- 5]: loss = 4.678326 * 65, metric = 30.8% * 65 

しかし:私はLanguageUnderstanding例では期待どおりに動作することを確認できる(つまり、最後のminibatchのサンプル数は、実際に近い使用されminibatch_sizeにあります) ProgressPrinter(変更のみ)を使用して、私は次のような出力を得る:上記の出力で

minibatch_size = 200 
... 
Minibatch[ 1- 1]: loss = 1.611397 * 44, metric = 88.6% * 44 
Minibatch[ 2- 2]: loss = 1.611021 * 47, metric = 91.5% * 47 
Minibatch[ 3- 3]: loss = 1.608516 * 42, metric = 88.1% * 42 
Minibatch[ 4- 4]: loss = 1.611613 * 44, metric = 93.2% * 44 
Minibatch[ 5- 5]: loss = 1.610344 * 47, metric = 93.6% * 47 

を、トレーナー(40〜50)によって報告された「サンプル数は」minibatch_size(200)よりもかなり小さいです。 Trainerが上記のサンプルではなく、ミニバッチでSEQUENCESの数を返すように見えることを手動で確認しました。

これは何か予想されますか?もしそうなら、ここでの論理は何ですか?

私はいくつかのチュートリアル/例がTrainer.previous_minibatch_sample_countから返された値に依存していることがわかります。これはエポックの終了を判断するためです...これはいつも確実に機能しますか?チーム内の異なる人々のために複数の回答を照合

答えて

3

  • トレーナーはカウントがこの場合は#sequencesある#labelsで返されました。指定されたminibatch_sizeは#samples(すべてのストリームにわたって)であり、minibatch_sourceはストリームが指定された数を超えないようにサンプルのバッチを返します。この場合、フィーチャストリームは1サンプル当たり複数の語を有し、したがって境界閾値を決定する。

  • トレーナーは、勾配、すなわちラベルの数を生じる#samplesを返します。また、目的関数内で集計された項目の数を考えることもできます。

関連する問題