Batch Normalization到底是怎么对数据进行操作的(举例说明)

对于BN的定义公式网上都能查到,但在具体应用的时候对于不同维度的数据到底是怎么进行操作的呢?
Tensorflow,Pytorch,Keras对于BN都有现成的包,使用时直接调用就行,其中pytorch中又具体分了bn1,bn2,bn3,首先看看他们的文档说明

help(nn.BatchNorm1d)

在这里插入图片描述

help(nn.BatchNorm2d)

在这里插入图片描述
可以看到,不管是二维、三维或者是四维数据,核心是通道数C,在pytorch中就是数据的第二个维度,然后接下来的操作就是对各个维度上的N个数据进行求平均、标准差、归一化操作。
举例说明
对于数据
input1 = torch.tensor([[1., 2, 3],[4, 5, 6]])
维度为(2,3)其中2是batch size 的大小,3是通道数,那BN的过程就是对3个通道上的所有数据进行操作
在这里插入图片描述

直接用BN函数得到结果为:
在这里插入图片描述
其中3是通道数,也就是需要归一化的维度
接下来是验证
①计算各个通道数的均值,注意,单个有3个维度,一共有batch size=2个数据,均值就是对各个维度上的2个数据进行求平均,后面的多维数据也可以这样想
在这里插入图片描述

②计算标准差
在这里插入图片描述

③得到BN输出
在这里插入图片描述
那么如果将上述数据维度变化为(2,1,3),那对于这个3维数据,2是输入的batch-size,1就变成了通道数,这时候就是对这一个通道上的所有数据进行求平均、方差
在这里插入图片描述

直接用BN函数得到结果:

在这里插入图片描述
验证
①求均值
在这里插入图片描述

②求标准差
在这里插入图片描述

③得到BN输出

在这里插入图片描述
对于深度学习中常用的四维数据,一文搞懂BN的原理及其实现过程 这篇文章里的两幅图很容易帮助我们理解
在这里插入图片描述
在这里插入图片描述
在Tensorflow中,默认是对最后一维数据,比如(N,256,256,3),此时就是分别对3个通道上的N256256个数据求平均。而Pytorch中数据形式是(N,C,H,W),即第一个是batch样本数,第二个是通道数。
总之,不管是哪个框架下的BN,在理解的时候要找到是对数据的哪一个维度进行操作的,然后再结合上面的几个例子,应该就可以很好的理解BN操作的具体过程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值