运行报错one of the variables needed for gradient computation has been modified by an inplace operation

这个错误通常是由于在计算梯度时,某些变量被原地(inplace)操作修改导致的。原地操作是指直接在原始张量上进行修改,而不创建新的张量。

为了解决这个问题,你可以尝试以下几个方法:

        1.使用torch.autograd.set_detect_anomaly(True)开启异常检测模式。这样PyTorch 将会输出更详细的错误信息,帮助你找到具体的原地操作导致错误的位置。

        2.检查你的代码,确保没有在计算梯度的过程中对张量进行原地操作。原地操作可能包括像tensor.add_()tensor.sub_()tensor.mul_()等函数或者形如x += 1,它们会直接修改原始张量的值。你可以尝试使用相应的非原地操作,如tensor.add()tensor.sub()tensor.mul()、x = x + 1等,并将结果赋值给一个新的变量;又或者使用detach()方法。

detach方法icon-default.png?t=N7T8http://t.csdnimg.cn/Oe20A

案例代码片段

regularization_loss = 0
        for param in model.parameters():
            param.requires_grad = True
            regularization_loss += torch.norm(param, p=2)

添加torch.autograd.set_detect_anomaly(True)后报错提示如下

运行报错one of the variables needed for gradient computation has been modified by an inplace operation_第1张图片

可以看到报错位置是这段代码

regularization_loss += torch.norm(param, p=2)

将其改为

regularization_loss += torch.norm(param, p=2).detach()

运行成功

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