使用批量大小为'2的幂'在张量流上更快?

Cha*_*ine 7 machine-learning deep-learning tensorflow batchsize

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

mrk*_*mrk 13

这个概念来自将计算 ( C)对齐到PPGPU的物理处理器 ( )。

由于PP数量通常是 2 的幂,因此使用C与 2 的幂不同的数量会导致性能不佳。

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

这是由于GPU 使用的SIMD范例。这通常称为数据并行性:所有数据都PP在同一时间但在不同的数据上做同样的事情。


bol*_*old 6

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

但是,为达到目标的特定精度而完成的工作量(就梯度计算的次数而言)将是相同的:如果小批量大小为n,则更新方向的方差将减少一个因子。 n,因此该理论允许您采用n倍大的步长,因此单步步距将使您获得与n步SGD大致相同的精度,并且最小批量为1。

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

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