【问题标题】:What is a batch in TensorFlow?TensorFlow 中的批处理是什么?
【发布时间】:2017-05-01 17:15:53
【问题描述】:

我正在阅读的介绍性文档 (TOC here) 使用了术语“批处理”(for instance here),但没有对其进行定义。

【问题讨论】:

标签: tensorflow machine-learning neural-network deep-learning tensor


【解决方案1】:

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

但是,您希望训练速度更快,梯度噪声更小,并且还希望利用 GPU 的强大功能,这些 GPU 可以有效地进行数组操作(具体来说是 nD-arrays )。因此,您改为一次输入 100 张图像(此尺寸的选择取决于您(即,它是一个超参数)并取决于您的问题也)。例如,看下图,(作者:Martin Gorner)

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


还有下图:(作者:Martin Gorner)

现在,矩阵乘法将完美无缺,您还将利用高度优化的数组操作,从而实现更快的训练时间。

如果你观察上面的图片,你提供 100 或 256 或 2048 或 10000 (batch size) 图像并不重要,只要它适合你的 ( GPU)硬件。你会得到这么多的预测。

但是,请记住,这个batch size会影响训练时间、你达到的误差、梯度变化等,对于哪种batch size有效,没有一般的经验法则最好的。只需尝试几种尺寸并选择最适合您的尺寸。但尽量不要使用大批量,因为它会过度拟合数据。人们通常使用32, 64, 128, 256, 512, 1024, 2048 的小批量大小。


奖励:为了更好地了解使用这个批量大小可以实现多疯狂,请阅读这篇论文:weird trick for parallelizing CNNs

【讨论】:

  • 那么如果我的训练集是 1000 张图像,并且我使用 10 的批量大小,那么每次处理完整的训练集时,模型参数会改变 10 次?
  • 是的,但实际上是 100 次! (10 * 100 = 1000 张火车图像)
  • @kmario23 如果您将批量大小设置为 1,这本质上是随机梯度下降吗?如果将其设置为数据集的大小,那是批量梯度下降吗?以及介于两者之间的所有内容(在上面的示例中为 100)最小批量梯度下降?
  • @eggie5 具有较大的批大小会导致模型的方差较低,因为模型学习的是整个数据集中的“一般”趋势。这对凸优化问题很有用。但是,如果您有一个高度非凸优化问题,这意味着您的损失函数中有很多局部最小值,那么最好选择较小的批量大小。这将有效地使您的模型跳出局部最小值。它还导致更快的训练时间。因此,足够小的批大小可确保您不会陷入局部最小值,但足够大以保持在全局最小值中。
  • 顺便说一句,如果您按批次进行训练,我认为打乱您的训练数据是个好主意,尤其是在批量较小的情况下。
猜你喜欢
  • 2018-03-20
  • 2019-05-26
  • 1970-01-01
  • 2013-09-23
  • 2017-01-22
  • 1970-01-01
  • 2011-02-09
  • 2017-06-01
  • 2012-01-19
相关资源
最近更新 更多