Batch Normalization 批量归一化的运算过程
Batch Normalization 批量归一化
具体的运算过程:
假设经过卷积计算过后得到的feature map的尺寸为 2*3*2*2。
其中2代表的是batch的大小,3代表的是通道channel的个数,2*2代表的是feature map的长和宽。
对应图片如下所示:

过程:我们要对batch中的每一个通道channel中的元素求均值和方差,对于这里而言,就是2*2*2 这8个数相加再除以8得到元素的均值。方差根据公式进行计算。这一步完成之后得到方差和均值。
下一步,对这8个元素中的每一个元素分别进行 这个数减去均值和方差,得到的数乘以γ+β。
对应的公式如下所是:

然后,对于每一个BN层,均值和方差只是对应channel的。每个channel都有一个,不能混用。
PS:最终经过BN层计算之后得到一个什么东西呢?
效果:
1、训练过程中遇到收敛速度很慢的问题时,可以通过引入BN层来加快网络模型的收敛速度。
2、遇到梯度消失或者梯度爆炸的问题时,可以考虑引入BN层来解决。
3、一般情况下,还可以通过引入BN层来加快网络的训练速度。
代码如下所是:
import torch from torch import nn # 在(0-1)范围内随机生成数据 # 其中2代表的是batch的大小 # 3代表的是通道channel的个数 # 2*2代表的是feature map的长和宽。 random_data=torch.rand(2,3,2,2) # BatchNorm2d(3) 这里的3代表输入的通道数 bn=nn.BatchNorm2d(3) ater_bn=bn(random_data) # 随机生成的数据 print(random_data) # BN之后的数据 print(ater_bn)
随机生成的图:4维的 2*3*2*2 全是 0到1之间的数据

BN之后的图:4维的 2*3*2*2

完结,撒花!!

浙公网安备 33010602011771号