ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

为什么batchnorm是对channel外的参数进行运算,而不是对batchsize外的参数运算

2021-09-16 22:03:52  阅读:262  来源: 互联网

标签:运算 方差 卷积 BN 均值 参数 batchnorm mean


BN是卷积网络中的常见操作,在我们学习BN的过程中,配套的公式通常是这样的

 我曾经理所当然的认为,BN是对(N,C,H,W)中,N以外的参数进行求均值和方差的计算

直到我查看pytorch指令nn.BatchNorm2d时,看到了这么一句

Because the Batch Normalization is done over the C dimension, computing statistics on (N, H, W) slices, it’s common terminology to call this Spatial Batch Normalization.

这打破了我曾经的认知。

这表明BN的计算其实是对C以外的 (N, H, W)进行计算,并不是传统意义上的对n个x进行运算。

为什么会这样?

要了解这个,首先要理解卷积层的参数共享,即对于不同的特征图选用一系列相同的卷积核,可以参考 一张图理解卷积层的参数共享

理解了这个,就可以理解BN原论文3.2节的这一段了

尤其是我高亮的这一句,so that different elements of the same feature map, at different locations, are normalized in the same way. 这里就借鉴了卷积的参数共享的思想,卷积核保持不变,对一个卷积核的所有输入进行相同的归一化,也就是在N*H*W个z=wx+b计算均值和方差,也就是对除了channel外所有维度,来计算均值和方差。

理论需要结合实践,pytorch已经为我们写好BN,那如果自己写的话,如何计算一个batch的均值和方差呢?

大概是类似这样的操作:

mean = X.mean(dim=(0, 2, 3), keepdim=True)
var = ((X - mean) ** 2).mean(dim=(0, 2, 3), keepdim=True)

 

标签:运算,方差,卷积,BN,均值,参数,batchnorm,mean
来源: https://blog.csdn.net/weixin_39518984/article/details/120338242

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有