normalization对比

1.batch normalization

per channel across mini-batch

对于四维张量[N, C, W, H],取每个批次的均值 torch.mean(dim=(0,2,3), keepdim=True)得到[1, C, 1, 1]形状的张量,即在批次的每个通道上求一个均值做归一化。

2.layer normalization

per sample,per layer

对于四维张量[N, C, W, H],取每个样本的每层的均值 torch.mean(dim=(1,2,3), keepdim=True)得到[N,1,1, 1]形状的张量,即在对每个样本的每层求一个均值做归一化。

在NLP中[N, L, C]得到的均值统计量为[N, L]torch.mean(dim=-1, keepdim=True),这与CV的大不相同。

3.Instance normalization

per sample,per channel

对于四维张量[N, C, W, H],取每个样本的每层的均值 torch.mean(dim=(2,3), keepdim=True)得到[N,C,1, 1]形状的张量,即在对每个样本的每层(每个通道)求一个均值做归一化。在风格迁移中使用较多。

4.验证

# pytorch官方API
inputs = torch.randn((4, 3, 2, 2))
batch_norm = torch.nn.BatchNorm2d(3,affine=False) # affine=False关闭可学习参数的映射
api_out = batch_norm(inputs)

#手动实现
mean = inputs.mean(dim=(0, 2, 3), keepdim=True)
std = inputs.std(dim=(0, 2, 3), keepdim=True, unbiased=False) # unbiased=False设置有偏估计
out = (inputs-mean)/std

# 输出验证
print(api_out)
print(out)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值