深度学习中的Batchnorm和Layernorm

Batchnorm

对于Batchnorm, 其有三种形式

BatchNorm1d的输入为 ( B , N ) \left(B,N\right) (B,N)或者是 ( B , N , D ) \left(B,N,D\right) (B,N,D).

BatchNorm2d的输入为 ( B , C , H , W ) \left(B,C,H,W\right) (B,C,H,W).

BatchNorm3d的输入为 ( B , D , D , H , W ) \left(B,D,D,H,W\right) (B,D,D,H,W).

我一般遇到的数据是 ( B , N ) \left(B,N\right) (B,N)或者是 ( B , N , D ) \left(B,N,D\right) (B,N,D), 因此只需要用到BatchNorm1d(N).

Layernorm

对于Layernorm, 我一般只用到LayerNorm(D)或LayerNorm([N,D])

归一化是对取出的矩阵的每一个元素都参与计算均值与方差, 相当于矩阵层面的标准化而不仅仅是变量或者样本。

import torch

x = torch.randn(32, 96)
norm = torch.nn.BatchNorm1d(96)
x = norm(x)
print(x[:,0].mean())
print(x[:,0].std())


x = torch.randn(32, 96)
norm = torch.nn.LayerNorm(96)
x = norm(x)
print(x[0,:].mean())
print(x[0,:].std())


x = torch.randn(32, 96, 64)
norm = torch.nn.BatchNorm1d(96)
x = norm(x)
print(x[:,0,:].mean())
print(x[:,0,:].std())


x = torch.randn(32, 96, 64) 
norm = torch.nn.LayerNorm(64)
x = norm(x)
print(x[0,0,:].mean())
print(x[0,0,:].std())


x = torch.randn(32, 96, 64) 
norm = torch.nn.LayerNorm([96,64])
x = norm(x)
print(x[0,:,:].mean())
print(x[0,:,:].std())
  • 归一化是对取出的矩阵的每一个元素都参与计算均值与方差。

  • Batchnorm是从前往后的, Layernorm是从后往前的。

  • Layernorm参数是什么维度就对那一种维度进行归一化; Batchnorm是相反的参数是哪一个维度就把那个维度剩下的去做归一化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值