深度学习总结:GAN,3种方式实现fixedGtrainD,fixedDtrainG, retain, detach
文章目錄
- retain和detach
- 先更新D,再更新G,這個也是GAN論文的實現方式
- 先更新G,再更新D,實際上他兩誰先誰后都一樣,都是相互對抗:
- 第三種是第一種的改進, 先更新D,再更新G,計算最少,還沒見到別人實現,估計知名框架這么實現,每具體檢查過:
retain和detach
pytorch有兩個功能:retain和detach:
retain:意思是保持原來graph,可以還在原圖上進行forward pass,下次計算backward還是在原圖上計算;
detach:阻斷,意思是backward pass到這兒就停止了
這兩個東西可以用于實現fixedGtrainD,fixedDtrainG。
先更新D,再更新G,這個也是GAN論文的實現方式
先forward整個網絡;
再backward整個網絡的梯度但是只更新D的參數(相當于G的部分的梯度白算了),這時還需要retain graph一下;
用fake data forward一下D,再backward整個網絡的梯度但是只更新G的參數;
至此完成了一輪G和D的對抗。
先更新G,再更新D,實際上他兩誰先誰后都一樣,都是相互對抗:
先forward整個網絡;
再backward整個網絡的梯度但是只更新G的參數(相當于D的部分的梯度只是用來傳遞G的梯度);
先forward整個網絡,這時還需要detach一下G;
再backward到G就停止了,更新D的參數;
至此完成了一輪G和D的對抗。
第三種是第一種的改進, 先更新D,再更新G,計算最少,還沒見到別人實現,估計知名框架這么實現,每具體檢查過:
先forward整個網絡,同時detach一下G,retain一下graph;
再backward到G停止了,但是只更新D的參數,同時undetach一下G,retain一下graph;用fake data forward一下D;
再backward整個網絡,更新G的參數(相當于D的部分的梯度只是用來傳遞G的梯度);
至此完成了一輪G和D的對抗。
總結
以上是生活随笔為你收集整理的深度学习总结:GAN,3种方式实现fixedGtrainD,fixedDtrainG, retain, detach的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习总结:GAN,原理,算法描述,p
- 下一篇: 深度学习总结:用pytorch做drop