NotFoundError: No Output(X@GRAD) found for BatchNormGrad operator.

  • 这几天在学习paddle的过程中遇到一个问题,写了一个网络,前向传播很nice,加上优化器、损失啥啥的反向传播就GG了,报错的行在.backward()这个地方,内容如下
----------------------
Error Message Summary:
----------------------
NotFoundError: No Output(X@GRAD) found for BatchNormGrad operator.
[Hint: Expected ctx->HasOutput(framework::GradVarName("X")) == true, but received ctx->HasOutput(framework::GradVarName("X")):0 != true:1.] at (/paddle/paddle/fluid/operators/batch_norm_op.cc:466)
  • 粗看应该是BatchNorm出了什么问题。回到网络中两个BatchNorm,注释一个留下一个进行测试,发现是第一个BatchNorm出了问题,只要注释掉就能正常反向传播了
  • 检查num_channels,没问题,百思不得其解。最后终于发现了,由于我是在测试,只传入了一张图片,Tensor的形状是[1,1,256,256],网络的顺序是BN+ReLU+CONV+······在第一个BatchNorm,传入的通道数为1,这时BatchNorm反向就会报错,只要在forward()中,在使用第一个BatchNorm时进行一个判断就行了
_, c, h, w = x.shape
if c != 1:
	x = self.bn1(x)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值