归一化方法 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)

浙公网安备 33010602011771号