pytorch中的loss.backward()是梯度反传,计算每一个变量的grad。
只是之前在纠结GAN的两个loss什么时候反传,参数什么时候更新的时候,观察到backward()后,内存的存储量下降,原来反传完毕之后,就把中间计算变量都释放了。
所以你重复运行两次loss.backward()会报错:
Trying to backward through the graph a second time, but the buffers have already been freed.
当然你可以加上loss.backward(retain_graph=True)