BN层的running_mean更新机制

在这里插入图片描述
running_mean是各通道的样本像素均值,也就是shape为(batch_size, C_out, H, W )的输入,running_mean的shape为(C_out,).
Pytorch对BatchNorm2d的官方解释文档如上所示,一般momentum是0.1,所以:

running_mean = 0.1 * mean + 0.9 * running_mean

也就是说,当前批次在某通道的均值 * 0.1 + 之前得到的running_mean * 0.9,而如果是第0批次,之前得到的running_mean初始化为0.0,也就是第0批次的running_mean = 0.1 * mean.
eval时直接使用训练时得到的running_mean。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
`bn.weight.data`和`bn.bias.data`是Bn层的可学习参数,`bn.running_mean`和`bn.running_var`是Bn层的非可学习参数,它们的计算方法和各维度代表的意义如下: 1. `bn.weight.data`和`bn.bias.data`: 这两个参数的形状都是`(num_features,)`,其中`num_features`是Bn层的通道数。`bn.weight.data`代表缩放系数,`bn.bias.data`代表偏移系数。在Bn层的前向传播中,对归一化后的数据进行缩放和平移操作,具体计算公式为: $$y = \gamma \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} + \beta$$ 其中,$y$是经过Bn层归一化、缩放和平移后的输出,$x$是输入,$\gamma$和$\beta$分别是`bn.weight.data`和`bn.bias.data`,$\mu$和$\sigma$分别是所有输入数据的均值和方差,$\epsilon$是一个非常小的数,用来避免方差为0的情况。 2. `bn.running_mean`和`bn.running_var`: 这两个参数的形状都是`(num_features,)`,其中`num_features`是Bn层的通道数。`bn.running_mean`代表所有输入数据的均值的移动平均值,`bn.running_var`代表所有输入数据的方差的移动平均值。在训练过程中,Bn层每次使用指数加权移动平均法来更新`bn.running_mean`和`bn.running_var`,具体计算公式为: $$\begin{aligned}&\mathrm{mean}_{\text{new}} = (1 - \mathrm{momentum}) \cdot \mathrm{mean}_{\text{old}} + \mathrm{momentum} \cdot \mathrm{mean}_{\text{batch}}\\&\mathrm{var}_{\text{new}} = (1 - \mathrm{momentum}) \cdot \mathrm{var}_{\text{old}} + \mathrm{momentum} \cdot \mathrm{var}_{\text{batch}}\end{aligned}$$ 其中,$\mathrm{mean}_{\text{new}}$和$\mathrm{var}_{\text{new}}$是更新后的均值和方差,$\mathrm{mean}_{\text{old}}$和$\mathrm{var}_{\text{old}}$是上一次更新后的均值和方差,$\mathrm{mean}_{\text{batch}}$和$\mathrm{var}_{\text{batch}}$是当前批次输入数据的均值和方差,$\mathrm{momentum}$是一个衰减系数,一般取0.9。 在测试过程中,Bn层使用`bn.running_mean`和`bn.running_var`来对输入数据进行归一化,具体计算公式为: $$y = \gamma \frac{x - \mathrm{running\_mean}}{\sqrt{\mathrm{running\_var} + \epsilon}} + \beta$$ 其中,$\mathrm{running\_mean}$和$\mathrm{running\_var}$分别是`bn.running_mean`和`bn.running_var`,$\epsilon$是一个非常小的数,用来避免方差为0的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

little student

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值