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

 完结,撒花!!

posted @ 2021-11-24 16:40  我太想努力了  阅读(332)  评论(0)    收藏  举报