對抗神經網絡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的錯誤,解決辦法:d_loss.backward(retain_graph=True),或者在計算d_loss時,使用fake_img.detach(),這樣在d_loss.backward()時只會釋放【fake_img -> D】這段計算圖,不會釋放【real_img -> G -> fake_img】這段計算圖,進而影響g_loss.backward();
  • 如果先計算g_loss,在g_loss.backward()後會默認自動釋放掉【real_img -> G -> fake_img】這個計算圖,在計算d_loss時只需要將fake_img.detach()【將fake_img與計算圖“脫鉤”】就不會影響d_loss.backward()的計算,因爲更新只需要【fake_img -> D】這一段計算圖。

參考

發佈了28 篇原創文章 · 獲贊 35 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章