在Pytorch练习求梯度时出现错误
错误:RuntimeError: Trying to backward through the graph a second time, but the saved intermediate results have already been freed. Specify retain_graph=True when calling backward the first time.
因为pytorch求梯度时累加的,所以为了看第二次的梯度需要把以前的清零。
x.grad.data.zero_()
运行完之后再次求梯度出现了上面的错误。
解决办法其实就在错误中说明了`Specify retain_graph=True when calling backward the first time.``
这就需要我们在每次求梯度时加一个参数(注意是连续的,也就是backward之间没有forward运算)。
out.backward(retain_graph=True)
注意是每次都要加(如果你下次需要清零),我试了第一次加,第二次没加,再次清零并再次求梯度时依然会报错。