【问题标题】:What is the batchSize in TensorFlow's model.fit() function?TensorFlow model.fit() 函数中的批量大小是多少?
【发布时间】:2020-04-04 13:07:23
【问题描述】:

使用 TensorFlow.js 定义模型后,您可以运行 model.fit() 对其进行训练。此函数接受许多参数,包括配置对象。这个对象有一个属性batchSizedocumentation on model.fit() 只是说:

每次梯度更新的样本数。如果未指定,则默认为 32。

虽然这可能是一个技术上正确的答案,但它并没有真正的帮助。我为什么要更改这个号码?我已经意识到,如果我增加它,训练会变得更快,如果我减少它,它会变得更慢。但是我在这里究竟要改变什么?我为什么要改变它?我需要注意什么?

对此有任何提示吗?

【问题讨论】:

  • 您好,欢迎来到 AI SE!不幸的是,这个问题在这里是题外话。一般的编程问题(例如“这个库或函数是如何工作的?”)或错误在这里是题外话。有关详细信息,请参阅ai.stackexchange.com/help/on-topic。我会将这篇文章迁移到 Stack Overflow。
  • @nbro 感谢您的提示,我不知道这一点!
  • 现在我再想一想,你的问题也是概念性的。您还询问批量大小如何影响总体训练。也许我不应该快速迁移这篇文章。
  • 我们可以迁移回来吗????
  • 嗯,我不知道。我无法迁移它,但也许 SO 版主可以。无论如何,我认为这篇文章仍然是关于 SO 的主题,因为您的问题仍然与 fit 方法有关。相信会有人给出答案。无论如何,如果您有一个不需要与代码或库相关的概念性问题,请随时在 AI SE 上再次提问!

标签: tensorflow tensorflow.js


【解决方案1】:

批量大小是您用于执行随机梯度下降 (SGD) 一步的训练示例数。

什么是新加坡元? SGD 是梯度下降 (GD),但不是使用所有训练数据来计算损失函数相对于网络参数的梯度,而是仅使用训练数据集的子集。因此,形容词“随机”,因为通过仅使用训练数据的一个子集,您将随机地近似(即您将引入噪声)将通过使用所有训练来计算的梯度数据,这将被视为损失函数相对于参数的“实际”梯度。

我为什么要更改此号码?我已经意识到,如果我增加它,训练会变得更快,如果我减少它,它会变得更慢。但我到底要在这里改变什么?我为什么要改变它?我需要注意什么?

如果批量太小,例如1,那么您将仅使用一个训练示例计算梯度。这会使你的训练损失波动很大,因为每次你只用一个训练样本来近似梯度,这通常不能代表整个训练数据。因此,根据经验,您使用的训练示例越多,您对梯度的逼近就越好(这将对应于所有训练示例),因此这可能会导致更快的收敛。 但是,在实践中,如果您使用许多训练示例,计算量也会很大。例如,假设您的训练数据由数百万个训练示例组成。在这种情况下,要执行一步梯度下降,您需要遍历所有这些训练示例,这可能会花费大量时间。因此,您可能需要等待很多时间才能看到模型的参数是如何更新的。这可能并不理想。

总而言之,小批量可能会使您的训练过程出现波动,这会使您的损失函数需要很长时间才能达到局部最小值。但是,也可能不希望使用大批量,因为它也可能需要很多时间。

批量大小的典型值为 32、64 和 128。为什么?人们之所以使用这些数字,是因为根据经验,它们似乎是小批量和大批量之间的良好折衷(在收敛性、训练时间等方面)。

【讨论】:

    【解决方案2】:

    其实很简单。例如,假设您有一个包含 50,000 个样本和相关标签的训练集。在经典理论中,您将为模型提供所有 50,000 个输入(批量大小 = 50,000),然后通过反向传播调整网络权重。因此,对于 50,000 个样本,您只能获得 1 次网络权重迭代(1 个 epoch)。这有两个问题。一是训练网络所需的时间。假设要获得高水平的准确度,需要 50 次迭代(Epochs)。在这种情况下,您必须为您的网络提供 50 X 50,000 个样本。这将花费大量的处理时间。其次,批量大小为 50,000,所有 50,000 个样本都驻留在内存中。例如,如果您正在处理图像,这将占用大量内存并可能导致资源耗尽错误。现在让我们采取不同的策略。将您的训练集分成 1000 个样本的组,因此您将拥有 50 个组(批次)。现在您向网络提供第一批 1000 个样本,然后通过反向传播 (Epoch1) 调整权重。然后对下一批 1000 个样本再次执行此操作,并再次执行反向传播(Epoch2)。对所有 50 个批次重复此操作。最后,您已经为网络提供了 50,000 个样本,并且您已经调整了 50 次权重。结果是你训练得更快,如果你批量获取样本,你只有 1000 个样本驻留在内存中。这里有一个权衡。例如,如果您设置批量大小=1,训练将需要很长时间,因为您将进行 50,000 次反向传播。所以最好选择一个适中的batch size。我通常选择它在 30 到 80 之间,如果你有 16G 的 GPU 内存,这似乎也适用于更大的图像,如 254 X 254 X 3。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-21
      • 2023-03-31
      • 2016-02-14
      • 1970-01-01
      • 2020-05-20
      • 2021-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多