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就好啦

你可能感兴趣的:(Pytorch,pytorch,人工智能,python)