GAN使用填坑过程:
1、RuntimeError: Trying to backward through the graph a second time, but the buffers have already been freed. Specify retain_graph=True when calling backward the first time.
原因:GAN的训练过程中,存在两个loss的梯度更新,loss.backward(),如果没有交替更新判别网络和生成网络,嵌套的GAN网络训练时就会出现该问题。在默认情况下,网络在反向传播中不允许多个backward()。
解决方法:需要在第一个backward设置retain_variables=True,即loss1.backward(retain_variables=True).