最近,当我在PyTorch中使用BN时,我有几个问题。
期待您的回答。我是一种新鸟,愿意与您学习和讨论!
提前谢谢!
答案 0 :(得分:0)
我从高年级同学那里得到了答案,我认为这对其他人很有用。 (如果您有不同意见,请随时发表评论)
当我们保存整个模型时,它将包含BN层的运行均值和方差。这两个参数不是可学习的(不是在向后过程中更新,而是在向前过程中更新)
如果使用.eval(),则BN层将自动使用该层中存储的运行均值和方差,并且不会在正向过程中再次更新。这意味着在推理时,BN层会使用训练过程中计算出的移动平均值和方差。
是的,如果仅使用.eval(),则BN层将始终使用相同的均值和方差。
可以根据测试集计算运行平均值和方差。只需将BN层设置为train()模式即可。这不会影响BN层的可学习参数。因为在推理时,我们只有一个正向过程(更新均值和方差),而没有一个反向过程。也许我们必须在评估或推断期开始时重新设置均值和方差,以使均值和方差与训练过程完全无关。
有些技巧。我听说有些GAN论文对BN层采用了这种策略。