归一化方法 BN LN GN

Batch Normalization

  BN是最常用的一种归一化方式,以batch的维度做归一化,但这个维度并不是固定不变的,如训练和测试时一般不一样,训练的时候使用的是每个batch数据的方差和均值;BN训练时不使用全量训练集的均值和方差的原因是容易过拟合,不同batch的均值和方差存在差异,可以提升模型的泛化能力,所以再训练时需要将训练集完全打乱,并使用一个较大的batch值,否则一个batch的数据无法较好的获得训练集的分布,影响模型训练效果。

 

 

  在测试的时候,一般都是训练的时候在训练集上通过滑动平均法预先计算好平均-mean和方差-variance参数,直接调用这些预计算好的参数来用。但是当训练数据和测试数据分布存在差别时,训练集上训练好的权重并不能代表测试数据,导致在训练、验证、测试三个阶段存在不一致。

      

torch.nn.BatchNorma2d(num_features, eps = 0, affine = False, track_running = False)

 

Layer Normalization

  BN的一个缺点是需要较大的batchsize才能合理利用训练数据的均值和方差,这就导致内存很可能不够用。Layer Normalization(LN)的一个优势是不需要批训练,在单条数据内部就能归一化.

torch.nn.LayerNorm(normalized_shape = [c,h,w], eps = 0, elementwise_affine = False)

 

 

 

 

Group Normalization

  Group Normalization(GN)适用于占用显存比较大的任务,如图像分割。对于这一类任务,batchsize设置大会占用相当多的显存,而batchsize是个位数时,BN的表现就会很差。GN是独立于batch的,它是LN和IN的折中。

 

   GN在计算均值和标准差时,把每一个样本的feature map的channel分成G组,每组有C/G各channel,然后将这些channel中的元素求均值和标准差,各组channel用 其对应的归一化参数独立的归一化。

torch.nn.GroupNorm(num_group = , num_channels = , eps = 0,affine = False)

 

 

 

posted @ 2021-12-08 14:40  Liang-ml  阅读(269)  评论(0)    收藏  举报