如果我理解正确,在 CNTK Python API Trainer.previous_minibatch_sample_count 应该返回前一个小批量中的样本数(而不是序列)。我可以看到它在 LanguageUnderstanding 示例中按预期工作(即最后一个小批量中的样本数量确实接近使用的 minibatch_size):
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
然而,如果我修改(单独的)SequenceClassification 示例以使用 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
在上面的输出中,trainer (40-50) 报告的“样本数”远小于 minibatch_size (200)。我已经手动确认 Trainer 正在返回小批量中的 SEQUENCES 数量,而不是上述案例中的样本。
这是预期的吗?如果是这样,这里的逻辑是什么?
我可以看到一些教程/示例依赖于从 Trainer.previous_minibatch_sample_count 返回的值来确定 epoch 的结束......这是否总是可靠地工作?