有关Pytorch中批处理规范化的问题

问题描述

最近,当我在PyTorch中使用BN时,我有几个问题。

  1. 基于PyTorch中的BN2d文档,进行推断(评估)时,它将自动使用BN层的均值和方差(训练时的运行估计)。但是,我的第一个问题是,当我们在训练后保存模型时,它是否包含运行均值和方差?我本来以为模型只会保存可学习的参数。但是,运行中的均值和方差不是真的可以学习吗?

    enter image description here

  2. 默认情况下,当我们在PyTorch中使用eval()时,BN层将使用特定变量的运行平均值和方差(也许是训练的结果),对吗?但是不计算小批量的均值和方差吗? (因为我看到一些答案提到,当以1大小的批次进行推理时,BN的性能较差。但是它应使用训练的运行平均值和方差,为什么测试的批次大小会产生影响?
  3. 第三个问题有点类似于第二个问题。 BN会在推理时执行相同的操作。例如,当我迭代测试集两次时。结果的表现会有所不同吗? (也许更直接的问题是,推断时均值和方差会改变吗?)
  4. 我还想知道是否可以使用小批量均值和方差或运行均值和方差进行推断。如果仅将BN层设置为训练,则其可学习参数也会更新。但是也许我只是希望他们获得新的均值和方差。有没有办法做到这一点?
  5. 最后一个问题与第四个问题有关。那么,使用所有测试数据的均值和方差,或一批测试数据来计算均值和方差是否公平?我的意思是,这里公平地使用测试集的某些属性是否不恰当?

期待您的回答。我是一种新鸟,愿意与您学习和讨论!

提前谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)