一直在訓練我的 Pix2Pix GAN,判別器損失在第 20 個 epoch 左右開始變為 0。然后從第 30 個 epoch 左右開始,它始終保持在 0。
然而,發電機損失不斷減少。在前幾個 epoch 開始時,generator loss 在 50 - 60 之間。在第 100 個 epoch 左右,generator loss 約為 4 - 5。然后從第 150 到第 350 個 epoch,generator loss 在 1 - 3 之間徘徊。
那么判別器損失為0是不是很糟糕?我將如何解決它?
uj5u.com熱心網友回復:
基本上,您不希望 Descriminator 損失為零,因為這意味著 Descriminator 做得太好(最重要的是,Generator 做得太差了),即它可以輕松區分假資料和真實資料(即生成器的創作與真實資料不夠接近)。
總而言之,以這種方式定義鑒別器的損失很重要,因為我們確實希望鑒別器嘗試減少這種損失,但整個 GAN 系統的最終目標是平衡損失。因此,如果一個損失變為零,它就是失敗模式(不再發生學習)。
為避免這種情況,您必須確保您的最后一個 Decriminator 層不是 Sigmoid 層,并且您的損失不受 [0, 1] 之間的限制。您可以嘗試使用BCE圖層或類似的東西。
uj5u.com熱心網友回復:
對我來說,GAN 網路是移動網路,對于大多數網路來說,關于訓練和損失值的行為之前的答案是正確的,精確的小損失評估值的數量并不能保證結果。
損失評估值僅與訓練步驟進行比較,目標估計和學習權重看到一些樣本對于損失數計算非常大,但分類任務正在作業。
此外,一些輸出是二進制數輸出或序列,正如前面的答案所說,不使用 sigmoids 函式,但 softmax 或激活函式是你可以在這里扮演的更多角色。
答:損失評估值達到0或大于5或然后還不錯,但它與您如何選擇功能有關。
[示例二進制序列]:
group_1_ShoryuKen_Left = tf.constant([ 0,0,0,0,0,1,0,0,0,0,0,0, 0,0,0,0,0,1,0,1,0,0,0,0, 0,0,0,0,0,0,0,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,1,0,0 ], shape=(1, 1, 1, 48))
group_1_ShoryuKen_Right = tf.constant([ 0,0,0,0,0,1,0,0,0,0,0,0, 0,0,0,0,0,1,1,0,0,0,0,0, 0,0,0,0,0,0,1,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,1,0,0 ], shape=(1, 1, 1, 48))
group_2_HadoKen_Left = tf.constant([ 0,0,0,0,0,1,0,0,0,0,0,0, 0,0,0,0,0,1,0,1,0,0,0,0, 0,0,0,0,0,0,0,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,0 ], shape=(1, 1, 1, 48))
group_2_HadoKen_Right = tf.constant([ 0,0,0,0,0,1,0,0,0,0,0,0, 0,0,0,0,0,1,1,0,0,0,0,0, 0,0,0,0,0,0,1,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,0 ], shape=(1, 1, 1, 48))
group_2_Heriken_kick_Left = tf.constant([ 0,0,0,0,0,1,0,0,0,0,0,0, 0,0,0,0,0,1,1,0,0,0,0,0, 0,0,0,0,0,0,1,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0 ], shape=(1, 1, 1, 48))
group_2_Heriken_kick_Right = tf.constant([ 0,0,0,0,0,1,0,0,0,0,0,0, 0,0,0,0,0,1,0,1,0,0,0,0, 0,0,0,0,0,0,0,1,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0 ], shape=(1, 1, 1, 48))
[ 輸出 ]:

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/476645.html
上一篇:如何在自定義層張量流中修改張量?
