TensorFlow中的批处理是什么?

Jef*_*own 30 machine-learning neural-network deep-learning tensorflow tensor

我正在阅读的介绍性文档(TOC在这里)没有定义的情况下引入了这个术语.

[1] https://www.tensorflow.org/get_started/
[2] https://www.tensorflow.org/tutorials/mnist/tf/
Run Code Online (Sandbox Code Playgroud)

kma*_*o23 48

假设您想要进行数字识别(MNIST),并且已经定义了网络架构(CNN).现在,您可以开始将训练数据中的图像逐个输送到网络,获得预测(直到此步骤称为推理),计算损失,计算梯度,然后更新网络参数(即权重偏见)然后继续下一个图像......这种训练模型的方式有时被称为在线学习.

但是,您希望训练更快,渐变更少噪声,并且还利用GPU的功能,这些GPU在执行阵列操作时非常有效(nD阵列是特定的).所以,你反而做的是一次输入100张图像(这个尺寸的选择取决于你(即它是一个超参数)并且也取决于你的问题).例如,看看下面的图片,(作者:Martin Gorner)

批量大小为100

在这里,由于您一次输入100张图像(28x28)而不是在线培训案例中的1张,因此批量大小为100.通常这被称为小批量或简单mini-batch.


以下图片:(作者:Martin Gorner)

再次批量大小

现在,矩阵乘法将完美地完成,您还将利用高度优化的阵列操作,从而实现更快的训练时间.

如果你观察到上面的图片,只要它适合你的(GPU)硬件的存储器,你是否给出100或256或2048或10000(批量)图像并不重要.你只需要做出那么多的预测.

但是,请记住,此批量大小会影响培训时间,您实现的错误,梯度变化等.对于哪种批量大小最佳,没有一般的经验法则.只需尝试几种尺寸,然后选择最适合您的尺寸.但是尽量不要使用大批量,因为它会过度填充数据.人们通常使用小批量的32, 64, 128, 256, 512, 1024, 2048.


奖励:为了更好地掌握这个批量大小的疯狂程度,请给这篇论文一个读物:并行化CNN的奇怪技巧

  • @ kmario23如果将批量大小设置为1,那基本上是随机梯度下降?如果将其设置为数据集的大小,那么批量梯度是否下降?介于两者之间(上例中为100)最小批量梯度下降? (6认同)
  • 是的,但实际上是100次!(10*100 = 1000次火车图像) (4认同)
  • @ eggie5具有较大的批处理量会导致模型的方差较小,因为模型了解到的是整个数据集中的“一般”趋势。这对于凸优化问题很有用。但是,如果存在高度非凸的优化问题,这意味着损失函数中有很多局部最小值,则最好选择较小的批量。这将有效地使您的模型跳出局部最小值。它还可以缩短培训时间。因此,足够小的批处理大小可确保您不会陷入局部最小值,而足以保留全局最小值。 (3认同)
  • 顺便说一句,我认为如果您按批次进行训练,尤其是在批次大小较小的情况下,打乱训练数据是个好主意。 (2认同)