解决pytorch反向传播过程中出现 RuntimeError: Trying to backward through the graph a second time 问题

修改了网络结构开始运行后先是报了无法反向传播的错误,在损失反向传播loss.backward()直接加了retain_graph=Ture ,然后出现错误RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation,意思是无法计算梯度,问了gpt以及查阅了csdn上许多博客,给出的建议是检查是否出现原地修改,如+=,add()等从操作,但此时由于使用了retain_graph=Ture,导致torch.autograd.set_detect_anomaly(True)代码放在训练文件开始,并没有准确定位出错误所在的位置。于是将retain_graph=Ture先去掉,再使用torch.autograd.set_detect_anomaly(True)就准确定位出来错误所在的位置。

错误:

self.beta = self.alpha_lamda * self.beta 

self.beta被原地更新。

建议:

1、遇到上述问题时,不要直接使用retain_graph=Ture,还是要找出代码的根本问题。

2、使用torch.autograd.set_detect_anomaly(True)代码,加在开始训练处,准确定位出 出现问题的代码。

3、保持良好的代码习惯,尽量不要进行原地操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值