pytorch使用——(十五)BN、LN、IN and GN

一、Why Normalization

因为在深度神经网络中,数据在训练过程(前向传播)中会出出现数据尺度和分布的异常。当这些异常累积的一定程度时,就会导致训练困难。

二、 常见Normalization

1、种类

  • Batch Normalization(BN)
  • Layer Normalization(LN)
  • Instance Normalization(IN)
  • Group Normalization(GN)

2、对比

相同:

不同: 均值和方差求取方式

三、Batch Normalization

1、计算方式

2、模块

1)_BatchNorm

__init__(self, num_features,eps=1e-5,momentum=0.1,affine=True,track_running_stats=True)

• num_features:一个样本特征数量(最重要)
• e p s:分母修正项
• momentum:指数加权平均估计当前mean/var
• affine:是否需要affine transform
• track_running_stats:是训练状态,还是测试状态

2)nn.BatchNorm1d/2d/3d

  • 训练:均值和方差采用指数加权平均计算
  • 测试:当前统计值
  • 输出:nn.BatchNorm1d input= B*特征数*1d特征/nn.BatchNorm2d input= B*特征数*2d特征/nn.BatchNorm3d input= B*特征数*3d特征

running_mean = (1 - momentum) * pre_running_mean + momentum * mean_t
running_var = (1 - momentum) * pre_running_var + momentum * var_t

  • running_mean:均值
  • running_var:方差
  • weight:affine transform中的gamma
  • bias: affine transform中的beta

四、 Layer Normalization,nn.LayerNorm

起因:BN不适用于变长的网络,如RNN
思路:逐层计算均值和方差

注意事项:

  • 不再有running_mean和running_var
  • gamma和beta为逐元素的
nn.LayerNorm(normalized_shape,eps=1e-05,elementwise_affine=True)

• normalized_shape:该层特征形状
• eps:分母修正项
• elementwise_affine:是否需要affine
transform

五、Instance Normalization,nn.InstanceNorm

起因:BN在图像生成(Image Generation)中不适用
思路:逐Instance(channel)计算均值和方差

nn.InstanceNorm2d(num_features,eps=1e-05,momentum=0.1,affine=False,track_running_stats=False)

主要参数:
• num_features:一个样本特征数量(最重要)
• eps:分母修正项
• momentum:指数加权平均估计当前mean/var
• affine:是否需要affine transform
• track_running_stats:是训练状态,还是测试状态 

六、Group Normalization,nn.GroupNorm

起因:小batch样本中,BN估计的值不准
思路:数据不够,通道来凑

nn.GroupNorm(num_groups,num_channels,eps=1e-05,affine=True)

注意事项:
1. 不再有running_mean和running_var
2. gamma和beta为逐通道(channel)的

主要参数:
• num_groups:分组数
• num_channels:通道数(特征数)
• eps:分母修正项
• affine:是否需要affine transform

猜你喜欢

转载自blog.csdn.net/weixin_37799689/article/details/106486248