以下內容純屬經驗之談,無公式推斷!部分內容源自其他部落格或課程,並已標註**。
問題篇[1]
1.模式崩潰
在某個模式(mode)下出現大量重複樣本,如左圖中,生成的樣本分佈靠得很近,較聚集,視覺化如右圖,表現為生成多個相同或相似度很高的樣本,缺乏多樣性。
2.模式丟失
顧名思義,某些模式(mode)沒有,同樣缺乏多樣性,雖然生成的樣本已經盡可能擬合真實分布,分布也不聚集,但是存在某些模式的丟失,例如下圖中人物,除了膚色變化,人物沒有任何變化。
設計篇
1.在上取樣階段,慎用transpose2d,推薦使用upsample + conv2d組合,如下圖所以,利用transpose2d上取樣得到的生成影象,存在「方形格仔」,生成的影象不平滑。
(a)輸入影象 (b)transpose2d上取樣生成影象
2.一些部落格提到輸入網路前將影象縮放到(-1,1),最後一次新增tanh()啟用層將輸出對映到(-1,1),在儲存結果和視覺化時需要(image+1)/2縮放到(0,1).
3. 取樣cyclegan類似結構可以學到影象的解耦的表示,可用於表情編輯、影象風格遷移等(異父異母的三胞胎:cyclegan, discogan, dualgan[3])。
4.[4]中提到的(1)利用推土機距離替代js散度;(2)ttur:低速(小學習率)更新生成器,高速更新判別器;(3)梯度懲罰;(4)譜歸一化;(5)單側標籤平滑等
訓練篇
1.當生成器損失從很大的值迅速變為0,而判別器損失維持不變。
有可能時生成器生成能力較弱,因此一種可行的方法是增加生成器的層數來增加非線性。
2.某些文獻採用生成器與判別器交叉訓練的方法,即先訓練判別器,再訓練生成器,其目的是先訓練判別器並更新其引數,先讓其具有較好判別能力,而在訓練生成器時因為判別器已具有一定判定能力,生成器的目的是盡可能騙過判別器,所以生成器會朝著生成更真實的影象前進;也可以採用先訓練生成器,再訓練判別器,但是此種訓練方法不推薦;同時也可以採用先更新生成器或判別器多次,再更新另乙個一次的方法。
3. 生成器損失、判別器損失,其中乙個很大或者逐漸變大,另乙個很小或者逐漸變小。
為什麼gan的loss一直降不下去。gan到底什麼時候才算收斂?其實,作為乙個訓練良好的gan,其loss就是降不下去的。衡量gan是否訓練好了,只能由人肉眼去看生成的質量是否好。不過,對於沒有乙個很好的評價是否收斂指標的問題,也有許多學者做了一些研究,後文提及的wgan就提出了一種新的loss設計方式,較好的解決了難以判斷收斂性的問題。下面我們分析一下gan的loss為什麼降不下去?參考[1] 李巨集毅gan開放課程生成器和判別器的目的相反,也就是說兩個生成器網路和判別器網路互為對抗,此消彼長。不可能loss一直降到乙個收斂的狀態。[5]
對於生成器,其loss下降快,很有可能是判別器太弱,導致生成器很輕易的就"愚弄"了判別器。
對於判別器,其loss下降快,意味著判別器很強,判別器很強則說明生成器生成的影象不夠逼真,才使得判別器輕易判別,導致loss下降很快。
也就是說,無論是判別器,還是生成器。loss的高低不能代表生成器的好壞。乙個好的gan網路,其gan loss往往是不斷波動的。
————————————————
[2]gan訓練心得
[3] 異父異母的三胞胎:cyclegan, discogan, dualgan
[4] gan效能不穩?這九大技術可「鎮住」四類缺陷
[5]
caffe 訓練安裝測試問題集錦
1 check failed target blobs.size source layer.blobs size 2 vs.1 incompatible number of blobs for layer conv0 測試的時候出現此問題 2 cudasuccess 2 vs.0 out of me...
面試集錦(十三)設計模式
在spring中,bean可以被定義為兩種模式 prototype 多例 和singleton 單例 只有乙個共享的例項存在,所有對這個bean的請求都會返回這個唯一的例項。每次請求都會新建乙個bean例項,相當於new 通過配置bean的 父類定義了建立物件的介面,但是由子類來具體實現,工廠方法讓...
測試設計與測試專案實戰訓練
格志測試 最新課程 測試設計與測試專案實戰訓練 物件導向 測試工程師 測試分析與設計工程師 測試經理 訓練大綱 1 測試用例設計 1 等價類設計法 2 邊界值設計法 3 正交表設計法與tcg的應用 4 組合覆蓋設計法 5 分類樹設計法與cte的應用 6 基本路徑分析法 7 場景設計法 8 狀態轉換圖...