Pytorch,即使在最简单的网络上也不能 运行 backward() 而不会出错

Pytorch, can't run backward() on even the most simple network without getting an error

我是 pytorch 的新手,即使在最简单的网络上我也无法 运行 backward() 而不产生错误。 例如:

(Linear(6, 6)(Variable(torch.zeros([10, 6]))) - Variable(torch.zeros([10, 6]))).backward()

抛出以下错误

{RuntimeError}element 0 of variables does not require grad and does not have a grad_fn

我在代码中做错了什么导致了这个问题?

尝试添加一个 grad_output 匹配形状作为向后的参数:

(线性(6, 6)(变量(torch.zeros([10, 6]))) - 变量(torch.zeros([10, 6]))).backward(torch.zeros([10, 6]))

下面的回答有更多的细节:

PyTorch 找不到具有 requires_grad = True 的模型参数时会发生此错误,即所有模型参数都具有 requires_grad = False.

有不同的原因,但可能是您冻结了所有模型,或者您没有正确交换模型的最后一层 - 例如,在 rest net 中它应该是 model.fc 而不是 model.classifier-.

你总是要小心你把这个放在哪里:

for param in model.parameters():
    param.requires_grad = False