当前位置:   article > 正文

一文弄懂BatchNorm1d和BatchNorm2d_nn.batchnorm2d

nn.batchnorm2d

nn.BatchNorm1d()和nn.BatchNorm2d()的作用是使我们一批feature map满足均值为0,方差为1的分布规律,官方有说明用途和计算过程,但是题主觉得介绍过于官方,所以特写此文用以快速理解两个函数具体是怎么工作的,解释到底是哪些数据和哪些数据进行归一化操作

1.nn.BatchNorm1d():

这个函数可以用于2维tensor和3维的tensor。举个例子,他可以用于下列两种tensor

1.torch.Tensor([[1,2,3],[6,4,5]])
2.torch.Tensor([[[1,2],[3,4]],[[5,6],[7,8]]])
  • 1
  • 2

用法:

对于第一种Tensor,他会将1,6视为一个整体,2,4视为一个整体,3,5视为一个整体,将这三个整体分别的进行归一化操作。即16和24之间没有关系,1和6做单独的归一化,2和4做单独的归一化。
注意:这里调用的nn.BatchNorm1d的参数为最里面一维Tensor的长度,且batch_size个Tensor的长度要保持一致,不然会出现报错行为(通俗理解就是[1,2,3]要和[6,4,5]这个Tensor的长度保持一致)。
验证代码如下所示:

batchnorm = nn.BatchNorm1d(3)
input_data = torch.Tensor([[1,2,3],[6,4,5]])
print (input_data)
output = batchnorm(input_data)
print (output)
  • 1
  • 2
  • 3
  • 4
  • 5

对于第二种Tensor,他会将第一个的12和第二个的56视为一个整体,第一个的34和第二个的78视为整体进行归一化处理。通俗点来讲就是他在第一种的用法上,把最后一维的Tensor整体看做了第一种用法的第二维,相当于第二种用法里的[1,2]对应了第一种的[1],第二种的[5,6]对应了第一种用法里的6
注意:这里调用的nn.BatchNorm1d的参数为倒数第二维Tensor的长度,他相当于把最里面一维的Tensor变成了一个数,可以理解为最里面的一个Tensor里面包含的所有数+别的batch_size里面同一维度的Tensor包含的所有数,合起来作为一个整体来进行归一化处理。即第一个整体里面的[1,2]和第二个整体里面的[5,6]合成一个[1,2,5,6]来进行归一化操作
验证代码如下:

batchnorm = nn.BatchNorm1d(2)
input_data = torch.Tensor([[[1,2],[3,4]],[[5,6],[7,8]]])
print (input_data)
output = batchnorm(input_data)
print (output)
  • 1
  • 2
  • 3
  • 4
  • 5

1.nn.BatchNorm2d():

这个函数只能用于conv2d的输入格式那样的数进行归一化,即他只能对下面这种Tensor格式进行归一化

torch.Tensor([[[[1,2],[3,4]],[[100,102],[4,3]]],[[[2,3],[4,5]],[[101,103],[5,3]]]])
  • 1

输入的格式为(batch_size, num_channels,height,width),这个归一化操作在num_channels维度上进行操作。用大白话具体说就是。上述例子中我们有两个数据,放到一个batch_size中来了,他们的in_channels都为2,第一个数据第一个in_channels里面的值为[1,2]和[3,4],然后他就和第二个数据的第一个in_channels里面的[2,3],[4,5]组成了一个整体,这(1,2,3,4,2,3,4,5)八个数进行归一化操作,然后后面的(100,102,4,3,101,103,5,3)这八个数据进行归一化操作,所以BatchNorm2d的参数为四维Tensor里面第二维的大小,即num_channels的大小,验证的代码如下:

batchnorm = nn.BatchNorm2d(2)
input_data = torch.Tensor([[[[1,2],[3,4]],[[100,102],[4,3]]],[[[2,3],[4,5]],[[101,103],[5,3]]]])
print (input_data)
output = batchnorm(input_data)
print (output)
  • 1
  • 2
  • 3
  • 4
  • 5

码字测试不易,点个赞再走吧

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/606382
推荐阅读
  

闽ICP备14008679号