实验小测 BatchNorm2D 层对梯度传导的影响 (batchnorm层减去均值和除以标准差这两个步骤所使用的tensor是否detach)

        如今BatchNorm层已经广泛被应用于各种神经网络内,为了更加深入的了解该层的输出结果反向传播梯度的细节,提出问题:batchnorm层减去均值和除以标准差这两个步骤所使用的tensor是否做了detach处理?做了简单的测试,测试过程如下:
        首先建立好实验所需数据,图片的batchsize=2,其CHW三个属性都为1,方便计算。对于bn层,为了更直观的得到结果,将affine设置为False,eps设置为0.

from torch.nn import functional as F
import torch.nn as nn
import torch

img  = torch.tensor([0, 2.0]).view(2, 1, 1, 1)
conv = nn.Conv2d(in_channels=1, out_channels=1, kernel_size=1, bias=False)
conv.weight.data = torch.tensor([1.0]).view(1, 1, 1, 1)
bn   = nn.BatchNorm2d(num_features=1, affine=False, eps=0.0)
out = conv(img)
print(out)
out = bn(out)
print(out)
out[1][0][0][0].backward()
print(conv.weight.grad)
#打印结果
tensor([[[[0.]]],


        [[[2.]]]], grad_fn=<MkldnnConvolutionBackward>)
tensor([[[[-1.]]],


        [[[ 1.]]]], grad_fn=<NativeBatchNormBackward>)
tensor([[[[0.]]]])

Process finished with exit code 0

结果中的梯度值为0,如果batchnorm层减去均值和除以标准差这两个步骤所使用的tensor做了detach处理,即(ax - m) / var中m和war是常数 梯度值不应为 0 而应该为 x / var = 2,batchnorm层减去均值和除以标准差这两个步骤所使用的tensor没有进行detach处理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值