训练生成对抗网络的过程中,训练gan的地方为什么这里没有detach,怎么保证训练生成器的时候不会改变判别器
生活随笔
收集整理的這篇文章主要介紹了
训练生成对抗网络的过程中,训练gan的地方为什么这里没有detach,怎么保证训练生成器的时候不会改变判别器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
答:
detach的作用是凍結梯度下降,無論是對于判別網絡還是生成網絡而言,我們更新的都是關于logD(G(z)),對于判別網絡而言,凍結G并不影響整體的梯度更新(就是內層函數看成是一個常數,不影響外層函數求梯度),但是反過來,如果凍結D,就沒有辦法完成梯度更新了。所以,我們在訓練生成器的時候沒用凍結D的梯度。所以,對于生成器而言,我們的確計算了D的梯度,但是我們沒有更新D的權重(只寫了optimizer_g.step),所以訓練生成器的時候也就不會改變判別器了。你可能會問,那既然如此,為什么訓練判別器的時候還要加上detach呢,這不是多此一舉嗎?
因為我們凍結梯度下降,可以加快訓練速度,所以能用的地方就可以用一下,不是多此一舉。然后我們在訓練生成器的時候,因為logD(G(z))的原因,凍結D的梯度根本就沒有辦法計算了,所以,這里就不寫detach了
總結
以上是生活随笔為你收集整理的训练生成对抗网络的过程中,训练gan的地方为什么这里没有detach,怎么保证训练生成器的时候不会改变判别器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何对batch的数据求Gram矩阵
- 下一篇: Pytorch中的optimizer.z