pytorch debug 整理
错误一:RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation
1、错误原因
某个变量在前向计算时是一个值,在求梯度时变成了另一个值(inplace 操作导致),使得pytorch在反向梯度求导时产生了错误
2、解决方法
tranceback报错时只提示loss.backward()这一行产生了错误,并没有给出具体是哪个语句的问题。导致很难debug,用 torch.autograd.set_detect_anomaly(True) 可回溯问题语句。
替换所有的in-place操作:
(1)x += 1 改成 x = x + 1
(2)x[:, :, 0:3] = x[:, :, 0:3] + 1 改成 x[:, :, 0:3] = x[:, :, 0:3].clone() + 1
(我的问题是改完这个解决的)
错误二:RuntimeError: Only Tensors created explicitly by the user (graph leaves) support the deepcopy protocol at the moment
1、错误原因
试图copy.deepcopy tensor的时候产生
2、解决方法
这个bug的出现可能是因为在调用copy.deepcopy的时候,复制的是含有梯度信息的可求导的非叶子节点(也就是非用户创建的tensor)。
因此,对于在计算图中的tensor,我们需要先用XX.detach()将其从计算图中脱离,单独拷贝一份下来。然后如果需要求导则再torch.requires_grad = True就好啦
更多推荐
所有评论(0)