2017-01-09 37 views
2

如果我理解正确,在CNTK中,Python API Trainer.previous_minibatch_sample_count应该返回前一个小批量中的样本数(而不是序列)。我可以看到,它的工作原理是在LanguageUnderstanding例如预期(即样本的最后minibatch数量确实接近使用minibatch_size):什么单位用来定义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 

但是,如果我修改(独立的)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正在返回minibatch中的SEQUENCES数量,而不是上述情况中的样本。

这是预期的吗?如果是这样,这里的逻辑是什么?

我可以看到,一些教程/示例依赖于从Trainer.previous_minibatch_sample_count返回的值,以确定该纪元的结束......这会始终可靠地工作吗?

回答

3

整理在球队不同的人可多选:

  • 教练员返回的计数是#labels这是在这种情况下#sequences。指定的minibatch_size采用#samples(跨所有流),minibatch_source返回一批样本,使得没有流超过指定的计数。在这种情况下,特征流每个样本具有多个词,从而确定边界阈值。

  • 培训师返回产生渐变的#samples,即标签数量。也可以考虑目标函数中总结的项目数量。