训练生成对抗网络的过程中,训练gan的地方为什么这里没有detach,怎么保证训练生成器的时候不会改变判别器
答:
detach的作用是凍結(jié)梯度下降,無(wú)論是對(duì)于判別網(wǎng)絡(luò)還是生成網(wǎng)絡(luò)而言,我們更新的都是關(guān)于logD(G(z)),對(duì)于判別網(wǎng)絡(luò)而言,凍結(jié)G并不影響整體的梯度更新(就是內(nèi)層函數(shù)看成是一個(gè)常數(shù),不影響外層函數(shù)求梯度),但是反過(guò)來(lái),如果凍結(jié)D,就沒(méi)有辦法完成梯度更新了。所以,我們?cè)谟?xùn)練生成器的時(shí)候沒(méi)用凍結(jié)D的梯度。所以,對(duì)于生成器而言,我們的確計(jì)算了D的梯度,但是我們沒(méi)有更新D的權(quán)重(只寫(xiě)了optimizer_g.step),所以訓(xùn)練生成器的時(shí)候也就不會(huì)改變判別器了。你可能會(huì)問(wèn),那既然如此,為什么訓(xùn)練判別器的時(shí)候還要加上detach呢,這不是多此一舉嗎?
因?yàn)槲覀儍鼋Y(jié)梯度下降,可以加快訓(xùn)練速度,所以能用的地方就可以用一下,不是多此一舉。然后我們?cè)谟?xùn)練生成器的時(shí)候,因?yàn)閘ogD(G(z))的原因,凍結(jié)D的梯度根本就沒(méi)有辦法計(jì)算了,所以,這里就不寫(xiě)detach了
總結(jié)
以上是生活随笔為你收集整理的训练生成对抗网络的过程中,训练gan的地方为什么这里没有detach,怎么保证训练生成器的时候不会改变判别器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何对batch的数据求Gram矩阵
- 下一篇: Pytorch中的optimizer.z