什么单位用于定义 CNTK 的纪元大小?

What units are used to define CNTK's epoch size?

如果我理解正确,在 CNTK 中 Python API Trainer.previous_minibatch_sample_count 应该 return 前一个小批量中的样本数(而不是序列) .我可以看到它在 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

在上面的输出中,培训师 (40-50) 报告的“样本数”远少于 minibatch_size (200)。我已经手动确认,看起来 Trainer 正在 returning 小批量中的 SEQUENCES 数量,而不是上述情况中的样本。

这是意料之中的事情吗?如果是这样,这里的逻辑是什么?

我可以看到一些 tutorials/examples 依赖 return 从 Trainer.previous_minibatch_sample_count 中编辑的值来确定纪元的结束......这会始终可靠地工作吗?

为团队中不同的人整理多个答案:

  • 培训师返回的计数是#labels,在这种情况下是#sequences。 minibatch_size 指定的是 #samples(跨所有流)和 minibatch_source returns 一批样本,这样没有流超过指定的计数。在这种情况下,特征流每个样本有多个单词,因此确定了边界阈值。

  • 训练器returns产生梯度的#samples,即标签的数量。也可以认为是objective函数中求和的项数。