使用批量大小作为“2的幂”在张量流上更快吗?

时间:2017-06-11 11:17:37

标签: tensorflow machine-learning deep-learning batchsize

我从某个地方读到,如果你选择的批量大小是2,那么训练会更快。这个规则是什么?这适用于其他应用吗?你能提供参考文件吗?

3 个答案:

答案 0 :(得分:3)

从算法上讲,使用较大的迷你批次可以减少随机梯度更新的方差(通过获取小批量中梯度的平均值),这反过来又可以让你采取更大的步长,这意味着优化算法将加快进度。

然而,在目标中达到一定精度的完成工作量(根据梯度计算的数量)将是相同的:如果小批量大小为n,则更新方向的方差将减小通过因子n,理论上允许您采用n倍大的步长,这样一步就可以使您获得与n个步骤的SGD大致相同的精度,且小批量为1。

至于tensorFlow,我没有发现你的肯定证据,而且这个问题已经在github上关闭了:https://github.com/tensorflow/tensorflow/issues/4132

请注意,将图像调整为2的幂是有意义的(因为池化通常在2X2窗口中完成),但这完全是另一回事。

答案 1 :(得分:1)

我也听说过这个。这是一篇关于CIFAR-10培训的白皮书,其中一些英特尔研究人员声称:

  

通常,如果批量大小为2的幂,则处理器的性能会更好。

(参见:https://software.intel.com/en-us/articles/cifar-10-classification-using-intel-optimization-for-tensorflow。)

然而,由于作者不提供任何培训持续时间数据,目前尚不清楚其优势有多大:/

答案 2 :(得分:1)

  

该概念来自将计算(C)对齐到物理上   GPU的处理器(PP

由于PP的数量通常是2的幂,因此使用C而不是2的幂将导致性能下降。

您可以看到CPP上的映射,就像一堆大小为PP的切片一样。 假设您有16个PP。 您可以在它们上映射16 C:1 C被映射到1 PP。 您可以在它们上映射32 C:2个16 C的切片,1 PP将负责2 C

这是由于GPU使用了SIMD范式。这通常称为数据并行性:所有PP都在同一时间执行相同的操作,但是对不同的数据进行了