CV中的LN与NLP中的BN

CV中的BN:
(N, C, H, W),以(N, H, W)为单位求均值与方差
CV中的LN:
由于在LN初始化的时候需要输入参数normalized_shape,即规范化的单位(目的是为了给单位内部的所有element设置不同的gamma和beta,详情参见我的上一篇文章),因此如果按照图中的这种做法:
在这里插入图片描述
normalized_shape=[C,H,W]
eg.

>>> # Image Example
>>> N, C, H, W = 20, 5, 10, 10
>>> input = torch.randn(N, C, H, W)
>>> # Normalize over the last three dimensions (i.e. the channel and spatial dimensions)
>>> # as shown in the image below
>>> layer_norm = nn.LayerNorm([C, H, W])
>>> output = layer_norm(input)

但是这有一个问题:在__init__定义网络模块初始化的时候需要输入feature的(C,H,W),C还好一点,一般一个stage的C都是相同的,但是不同的图片的(H, W)却是不同的,很难提前定义好,除非把所有图片resize到相同大小之后再输入网络,因此CNN中的LN一般是这样实现:

https://github.com/open-mmlab/mmclassification/blob/master/mmcls/models/backbones/convnext.py

在这里插入图片描述
把channel移到最后一位,规范化单位为所有channel,相当于以pixel为单位进行规范化

NLP中的LN:
设词向量矩阵为(N, sentence_length, embedding_dim)
>>> layer_norm = nn.LayerNorm(embedding_dim)
就是以一个词向量为单位做规范化

NLP中的BN:
把矩阵看成(N,C,H*W)即可,但是实际上NLP中的BN没啥用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值