版权归属:

更多关注:

对抗神经网络GAN中d_loss g_loss两种更新参数的图解释

  • 如果先计算d_loss,在d_loss.backward()后会默认自动释放掉【real_img -> G -> fake_img -> D】这个计算图,但是在执行g_loss.backward()时需要【real_img -> G -> fake_img】这一段的计算图,所以会报告retain graph的错误,解决办法:g_loss.backward(retain_graph=True);
  • 如果先计算g_loss,在g_loss.backward()后会默认自动释放掉【real_img -> G -> fake_img】这个计算图,在计算d_loss时只需要将fake_img.detach()【将fake_img与计算图“脱钩”】就不会影响d_loss.backward()的计算,因为更新只需要【fake_img -> D】这一段计算图。