【发布时间】:2020-12-27 04:26:39
【问题描述】:
最近在PyTorch中使用BN,有几个问题。
- 基于 PyTorch 中的 BN2d 文档,在推理(评估)时,它将自动使用 BN 层的均值和方差(训练时的运行估计)。但是,我的第一个问题是,当我们在训练后保存模型时,它是否包含运行均值和方差?我原本以为模型只会保存可学习的参数。但是运行均值和方差不是真的可以学习的吗?
- 默认情况下,当我们在 PyTorch 中使用 eval() 时,BN 层将使用来自特定变量(可能是训练结果)的一些运行均值和方差,对吧?但不计算小批量的均值和方差? (因为我看到一些答案提到BN在推理时的糟糕表现是由1-size的batch造成的。但它应该使用训练的running mean和variance,为什么测试的batch size会影响?
- 第三个问题与第二个问题有点相关。 BN 在推理时会执行相同的操作吗?例如,当我迭代测试集两次时。结果会有不同的表现吗? (也许更直接的问题是,在推理时均值和方差会发生变化吗?)
- 我还想知道是否可以使用小批量均值和方差或运行均值和方差进行推理。如果我只设置 BN 层进行训练,它的可学习参数也会更新。但也许我只是希望他们获得新的均值和方差。有没有办法做到这一点?
- 最后一个问题与第四个问题有关。那么使用所有测试数据或一批测试数据的均值和方差来计算均值和方差是否公平?我的意思是公平的是,使用测试集的某些属性是否不合适(棘手?)?
期待您的回答。我是一种新鸟,愿意和你一起学习讨论!!
提前致谢!!!
【问题讨论】:
标签: python tensorflow pytorch batch-normalization