首页 Paddle框架 帖子详情
报错:Leaf Tensor that doesn't stop gradient can't use inplace stra
收藏
快速回复
Paddle框架 问答模型训练深度学习 757 5
报错:Leaf Tensor that doesn't stop gradient can't use inplace stra
收藏
快速回复
Paddle框架 问答模型训练深度学习 757 5

网络框架是使用了CBAM模块的ResNet网络,在试图手动控制batchnorm里的梯度参数(也许)时,遇到了报错ValueError: (InvalidArgument) Leaf Tensor (batch_norm2d_0.w_0) that doesn't stop gradient can't use inplace strategy.
[Hint: Expected self->IsLeaf() && !self->OverridedStopGradient() == false, but received self->IsLeaf() && !self->OverridedStopGradient():1 != false:0.] (at ..\paddle\fluid\pybind\imperative.cc:994)

这是报错的代码

有无大佬知道这是为啥吗?该咋解决

0
收藏
回复
全部评论(5)
时间顺序
子龙
#2 回复于2022-04

我也遇到了类似的问题,你的 paddle 版本是?

0
回复
子龙
#3 回复于2022-04

可以看一下 paddle issue #42190 (aistudio 不让放链接。。。)

主要原因是 (如下内容来自 paddle 框架研发)

 

这个意思是如果一个Tensor是叶节点并且需要计算梯度的话,这里索引赋值的inplace操作就不能使用

因为如果原来的Tensor值被inplace操作覆盖了,可能就没法往回算梯度了

就比如x = x.reshape_()这种,输出的Tensor和输入是同一个

x[] = val 这种也相当于输入和输出共用了同一个Tensor

0
回复
子龙
#4 回复于2022-04

https://github.com/PaddlePaddle/Paddle/issues/42190

0
回复
上课睡觉WW
#7 回复于2022-09
子龙 #3
可以看一下 paddle issue #42190 (aistudio 不让放链接。。。) 主要原因是 (如下内容来自 paddle 框架研发)   这个意思是如果一个Tensor是叶节点并且需要计算梯度的话,这里索引赋值的inplace操作就不能使用 因为如果原来的Tensor值被inplace操作覆盖了,可能就没法往回算梯度了 就比如x = x.reshape_()这种,输出的Tensor和输入是同一个 x[] = val 这种也相当于输入和输出共用了同一个Tensor
展开

同学你好呀,请问你的问题解决了吗,我也遇到了同样的问题0.0~,想请求帮助呀

0
回复
天下一棵蒜
#8 回复于4天前

paddle 框架中 叶子节点 如参数,如果是需要计算梯度的,不支持 inplace 操作,如 add_(xxx) 等。
如果你需要手动修改参数的值,可以将参数 设置成不需要梯度: p.stop_gradient = True, 并在 with no_grad 上下文里对 参数值做修改。

0
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户