一文深刻理解BN、LN、IN、GN、WN五种归一化方式的原理及代码实现

1. 本篇文章所用数据:

文本数据——size(2, 3, 5) (N, C, L) 例如:我爱吃苹果   你爱吃吗?  可以理解为: 两句话,每句话五个字,每个字的特征长度为3(批次大小为2,每一批有五个特征,每个特征尺寸为3),即batch:2  ,channel:3  , length:5

图1 文本数据batch normalization的示意图

2. 五种归一化方式的概念及理解:

图2 五种归一化方式的理解

2.1 BatchNormalization

对多个batch的多个length的每个channel进行归一化,即对于(2, 3, 5)尺寸的数据,会有3个mean和3个stdvar。即每次归一化是以图1中黑色矩形框选的内容作为一个单元。

ps:对于nlp任务而言,基本不使用BN方法,一方面是因为nlp任务中不同的词条长度不同,即难以保持length这个参数是一样的,很不方便使用BN;另一方面是因为,同一句子中的同一个字的特征表示可能完全不同,或者同一句子中的不同字特征完全一样,例如图1中的”我“和”她“特征就是一样的,但是实际上这是完全不同的含义,因此nlp任务中很少使用BN。但是对于图像中的像素来讲就没有这种烦恼,因此更多是图像领域在使用BN。

代码实现如下:

import torch
import torch.nn as nn

batch_size = 2  # batch数
channel = 3  # 句子中每个字的特征长度
length = 5  # 句子长度

torch.manual_seed(5)
inputX = torch.randn(batch_size, length, channel)  # N*L*C

#- 1.batch normalization的实现

#= 调用batch_norm API
batch_norm_op = torch.nn.BatchNorm1d(channel, affine=False)
bn_re = batch_norm_op(inputX.transpose(-1, -2)).transpose(-1, -2)
print(bn_re)

#= 手写 batch_norm
bn_mean = inputX.mean(dim=(0, 1),keepdim=True)
print(bn_mean)
bn_std = inputX.std(dim=(0, 1), unbiased=Fa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值