其他分享
首页 > 其他分享> > Pytorch归一化方法讲解与实战:BatchNormalization、LayerNormalization、nn.BatchNorm1d和LayerNorm()

Pytorch归一化方法讲解与实战:BatchNormalization、LayerNormalization、nn.BatchNorm1d和LayerNorm()

作者:互联网

文章目录

这些Normalization的作用都是让数据保持一个比较稳定的分布,从而加速收敛。Batch Normalization 的处理对象是对一批样本, Layer Normalization 的处理对象是单个样本。不过,他们到底指的是什么呢?有的时候,讲解是多余的,实战一下,你就懂了:

talk is cheap,show me the code
import torch
import torch.nn as nn

LayerNormalization

LayerNormalization通常用于RNN网络或者处理句子的网络中,假设我们有如下数据

a=torch.empty(2,2,3).random_(0,3)
print(a)

在这里插入图片描述
上述a就是我们的模型中某一层的数据,所以其维度代表的意思是(懂的都懂):

#[batch_size=2,seq_len=2,emb_size=3]

那么LayerNormalization是指:我们将我们这个batch中的2个数据,分别处理:

在这里插入图片描述
怎么处理呢?那就是在一个数据的内部,扁平化然后z-score标准化(如下公式),然后处理回原来的形状。
在这里插入图片描述

我们以第一个数据为例:
1.扁平化
在这里插入图片描述
2.求其均值为1,标准差为0.816496580927726。
3.z-score公式带入
在这里插入图片描述
4.还原回原来的形状
在这里插入图片描述
这就是这个batch中第一个数据LayerNormalization的结果,第二个数据也是重复这个流程。

我们使用pytorch验证一下:

ln=nn.LayerNorm(3)#3表示最后一个维度的大小
ln(a)

在这里插入图片描述
完全正确!

BatchNormalization

b=torch.empty(2,3).random_(0,3)
print(b)

在这里插入图片描述
上述b就是我们的模型中某一层的数据,所以其维度代表的意思是(懂的都懂):

#[batch_size=2,feature_size=3]我们可以想象输入的是2个人的信息,这个信息由一个3维向量来表示,比如[身高,体重,胸围],我们要做分类问题。

那么BatchNormalization是指:我们将我们这个batch中的2个数据一起处理(前面是分别处理),这里是分别处理身高,体重和胸围。

即对不同人的身高,体重和胸围分别做z-score:
在这里插入图片描述
我们以身高为例,第一个人为2,第二个人为0,那么均值是1,标准差是1,所以带入z-score的那个公式,结果是[1,-1]。

其他依次类推。

bn=nn.BatchNorm1d(3)#最后一个维度的大小。
bn(b)

在这里插入图片描述


谢谢观看

标签:nn,处理,BatchNormalization,torch,batch,score,归一化,LayerNormalization
来源: https://blog.csdn.net/qq_43391414/article/details/120802176