【问题标题】:Should batch size matter at inference批量大小在推理时是否重要
【发布时间】:2020-04-30 20:58:45
【问题描述】:

我正在训练一个模型

  • 5 层非常窄的 CNN,
  • 随后是 5 层高速公路,
  • 然后完全连接并
  • softmax 超过 7 个类别。

由于有 7 个均匀分布的类别,随机投注分类准确率为 14%(1/7 约为 14%)。 实际准确度为 40 %。所以网络有点学..

现在奇怪的是,它只在批量大小为 2 的情况下学习。批量大小为 16、32 或 64 根本不学习。

现在更奇怪的是:如果我采用经过训练的网络的检查点(准确度 40%,以批量大小 2 进行训练)并以批量大小 32 开始,我应该至少持续获得 40%前几步,对吧?当我以 barch 大小 2 重新启动时,我会这样做。但是对于 bs 32,初始准确度是,你猜怎么着,14 %。

知道为什么批量大小会破坏推理吗?我担心我可能在某个地方出现形状错误,但我找不到任何东西。

谢谢你的想法

【问题讨论】:

  • 你说得对,这不重要。看起来你一定有一个错误。
  • 很难说没有看到你的代码。你能提供给我们你的实现吗?
  • 是的,亚伦,我遇到了一个错误。卷积看起来是跨批次的。已解决,模型学习和批次大小在推理时并不重要。

标签: machine-learning tensorflow


【解决方案1】:

批量标准化层在推理时有两种可能的工作模式:

  1. 计算给定推理批次的激活均值和方差
  2. 使用训练批次的平均均值和方差

以Pytorch为例,BatchNorm2D layertrack_running_stats参数设置为True,或者换句话说,选项2是默认的:

如果您选择选项 1,那么推理批次的大小和其中每个样本的特征当然会影响其他样本的输出。

所以γβ 在训练中被学习并按原样用于推理,如果您不更改默认行为,则E[x]Var[x] 的“相同”是正确的。我故意在引号内写了“相同”,因为这些只是训练中的批量统计数据。

如果我们已经在讨论批量大小,我想提一下,在训练中使用非常大的批量大小可能听起来很诱人,以获得更准确的统计数据并更好地逼近 SGD 步骤的损失函数.然而,过分逼近损失函数也有缺点,例如过拟合。

【讨论】:

    【解决方案2】:

    您应该查看模型收敛时的准确性,而不是仍在训练时。在训练步骤中很难比较不同批大小的效果,因为它们可以“幸运”并遵循良好的梯度路径。一般来说,较小的批量往往会产生更大的噪音,并且可能会给您带来好的峰值和不好的准确度下降。

    【讨论】:

      【解决方案3】:

      不看代码很难判断,但我认为大batch size会导致梯度太大,训练无法收敛。对抗这种影响的一种方法是增加批量大小但降低学习率。您也可以尝试裁剪梯度幅度。

      【讨论】:

      • 我的困惑不在于缺乏训练效果,而在于训练的推理精度在更改批量大小时会消失这一事实。突然完全随机。
      猜你喜欢
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      • 2016-10-04
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      • 2019-04-17
      相关资源
      最近更新 更多