批量大小是否应该推断

时间:2016-11-08 18:19:16

标签: machine-learning tensorflow

我正在训练模特

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

由于有7个同等分布的类,随机赌注的准确率将为14%(1/7大约为14%)。 实际准确度为40%。所以网络有点学习..

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

现在更奇怪的事情是:如果我拿到训练网的检查点(准确度为40%,在批量大小为2的情况下进行训练)并以批量大小为32开始,我应该继续使用我的40%至少为前几步,对吧?当我在barch size 2重新启动时,我会这样做。但是bs 32的初始准确度是,猜猜是什么,14%。

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

感谢您的想法

3 个答案:

答案 0 :(得分:0)

在不查看代码的情况下很难分辨,但我认为大批量导致渐变太大而且训练无法收敛。对抗这种影响的一种方法是增加批量大小但降低学习率。您还可以尝试剪切渐变幅度。

答案 1 :(得分:0)

您应该在模型收敛时查看准确度,而不是在训练时。在训练步骤中比较不同批量大小的效果很难,因为他们可以获得幸运"并遵循良好的渐变路径。通常,较小的批量大小往往会更嘈杂,并且可能会给您带来良好的峰值和精确度下降。

答案 2 :(得分:0)

批处理归一化层在推断时有两种可能的工作模式:

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

例如,在Pytorch中,BatchNorm2D layertrack_running_stats参数设置为True,换句话说,选项2 是默认设置:

enter image description here

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

因此,γβ是在训练中学习并按原样使用的,并且,如果不更改默认行为,则E[x]和{{1} Var[x]。我特意在引号中写了“相同”,因为这些只是来自培训的批处理统计信息。

如果我们已经在讨论批处理大小,我会提到在培训中使用非常大的批处理大小,具有更准确的统计信息以及对SGD步骤的损失函数有更好的近似可能听起来很诱人。但是,将损失函数很好地逼近也有缺点,例如过度拟合。