修改了网络结构开始运行后先是报了无法反向传播的错误,在损失反向传播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、保持良好的代码习惯,尽量不要进行原地操作。