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