pytorch的BatchNorm1d到底是如何计算的?手绘可视化解释

【原创文章,转载请注明出处,栓Q】
众所周知,Batchnorm1d是用来归一化2D和3D数据的,即input的shape是<batch_size,channels>或者<batch_size,channels,sequence_length>,看了很多介绍,有还原计算的,但是没有清晰地说明到底在哪个维度上进行的归一化,所以根据咱这“凑数”的本事亲自试验了一下,终于搞懂了,看下面的例子,看代码头疼的可以直接看图:
首先看input的shape是<batch_size,channels>的例子:

import torch
bn=torch.nn.BatchNorm1d(num_features=2)
input = torch.tensor([[-1.,8.],[0.,0.],[1.,-8.]])
output=bn(input)
print(input)
print(output)
print(output.shape)

运行结果为:

tensor([[-1.,  8.],
        [ 0.,  0.],
        [ 1., -8.]])
tensor([[-1.2247,  1.2247],
        [ 0.0000,  0.0000],
        [ 1.2247, -1.2247]], grad_fn=<NativeBatchNormBackward0>)
torch.Size([3, 2])

看图:
在这里插入图片描述
2D数据的BN挺好理解的,就是在不同样本的同一个特征下做归一化。

----------------------------------------------------------------------------------------
然后看input的shape是<batch_size,channels,sequence_length>的例子:

import torch
bn=torch.nn.BatchNorm1d(num_features=4)
input = torch.tensor([[[1.,2.],[3.,-2.],[-1.,-2.],[-3.,2.]],[[-1.,-2.],[-3.,2.],[1.,2.],[3.,-2.]]])
output=bn(input)
print(input)
print(output)
print(output.shape)

运行结果为:

tensor([[[ 1.,  2.],
         [ 3., -2.],
         [-1., -2.],
         [-3.,  2.]],
        [[-1., -2.],
         [-3.,  2.],
         [ 1.,  2.],
         [ 3., -2.]]])
tensor([[[ 0.6325,  1.2649],
         [ 1.1767, -0.7845],
         [-0.6325, -1.2649],
         [-1.1767,  0.7845]],
        [[-0.6325, -1.2649],
         [-1.1767,  0.7845],
         [ 0.6325,  1.2649],
         [ 1.1767, -0.7845]]], grad_fn=<NativeBatchNormBackward0>)
torch.Size([2, 4, 2])

看图:
在这里插入图片描述
这里为了清晰地说明通道和序列,特意画成行是序列,列是通道的样子,但是不影响理解,就是说哈,BN1d在BN 3D数据时的原理是,以通道一,也就是图中的c1为例,将c1下的两个样本的s1归一化,将c1下的两个样本的s2归一化。c2,c3,c4以此类推。宏观的理解是,假设input是2个样本的含有2个字的向量(比如是*[你,好][宝,贝]*),其中,每个字的词嵌入维度是4(就是每个字用4个数表示),BN1d是将“你”和“宝”的字向量按照对应的词嵌入维度进行归一化,然后再将“好”和“贝”的字向量按照对应的词嵌入维度进行归一化。

洞妖洞妖,over over

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值