卷積版本的GAN DCGANs

2021-07-29 23:08:00 字數 2428 閱讀 1595

unsupervised representation learning with deep convolutional generative adversarial networks (arxiv 1511.06434)

和gan開上之作: generative adversarial networks(goodfellow 2014)不同點:

1.不要使用pooling。discriminator採用帶stride的convolution,generator採用帶fractional-strided的convolution。作者說這樣可以讓網路自己去學習降取樣\上取樣的方法,效果比用pooling的好。作者指出,deconvolution是錯誤的稱呼,爭取的稱呼是convolution with fractional-strided。

2.batchnormalize的使用。作者指出加bn是讓cnn版本的generator學習好的關鍵,但是不能所有的層都加bn,generator的輸出層和discriminator的輸入層不要加bn。

3.去掉所有的fullconnect層。作者指出去掉fc是乙個趨勢,比如採用global pooling就可以在分類問題上達到state-of-the-art的效果。global pooling增加了模型的穩定性,但是損失了收斂的速度。作者提出了乙個折中的方法:直接把最高層特徵連線到generator的輸入和discriminator的輸出。對於generator,輸入訊號(比如長度100的均勻分布取樣)先經過fc層,然後reshape成乙個4維的tensor,之後就可以用全卷積網路了。而對於discriminator,則是將最後一層的卷積的結果直接拉直輸入到sigmoid中(取max?)。

對於非線性層。作者建議:對於generator,所有的層均採用relu,除了最後的輸出層採用tanh;對於discriminator,所有的層均採用leakyrelu。

作者在三個資料集上進行了實驗:large-scale scene understanding (lsun) (yu et al., 2015), imagenet-1k and a newly assembled faces dataset。

一些細節:

作者強調了對隱層進行分析和視覺化的重要性。

1.對隱層進行分析有主意觀察有沒有memorization的成分。memorization問題是訓練gan需要關心的問題,有點類似ouverfit的概念,就是generator不是真的生成了新的樣本而只是記憶了見過的樣本而已。如果在在隱層中發現明顯的變換(sharp transitions),則可以認為是momorization的訊號。

2.對隱層進行分析有助於理解generator引數空間的架構方式。

3.對隱層進行分析可以觀察是否新的語義變化的引入。這個和memorization問題直接相關,顯然如果generator生成的樣本有新的語義變化,則說明memorization問題不大,也說明模型確實學到了好的representation。下圖展示了generator並不是完全地記憶原有的影象,而是引入了新的語義變化。

4.對discriminator進行的feature map進行視覺化,可以看到特徵學習的效果。

5.對z連續性的分析,可以看到一些語義元素的漸變過程。比如下圖,調節某個z的引數,可以使得畫面從無窗戶漸變成為有窗戶。

6.作者嘗試在generator的feature map中去掉一些語義元素。設計了乙個實驗,去掉所有的窗戶的特徵。首先標註一些樣本,把圖中的窗戶的bounding box標註出來,然後在倒數第二層的feature map之上訓練了乙個logitstic回歸。使用回歸的結果來把判斷為窗戶的地方的特徵去掉。對比實現結果如下,可以看出雖然這種過濾方法很*****,但是確實可以看到效果,第二行確實把第一行對應的樣本中的窗戶用其他語義元素替代了。

作者指出,目前的gan訓練中,會出現乙個問題:訓練輪數多的時候,部分filter會出現振盪。以後會試**決該問題。

另外作者還做了一些有趣的實驗,比如對z進行操作。下圖展示講生成微笑女人的樣本的z減掉生成不微笑女人樣本的z,然後在加上不微笑男人的樣本的z,得到的新的z作為generator的輸入訊號,就可以生成微笑的男人的樣本。

cuda做卷積運算最終版本

include device functions.h include cuda runtime.h include device launch parameters.h include stdlib.h include include using namespace std 返回thread和blo...

膨脹卷積的缺點 卷積 反卷積與膨脹卷積

卷積 多 1 的對映 本質 在對輸入做9 1的對映關係時,保持了輸出相對於input中的位置性關係 對核矩陣做以下變形 卷積核的滑動步驟變成了卷積核矩陣的擴增 卷積的矩陣乘法變成以下形式 核矩陣重排,輸入featuremap變形為向量 反卷積 1 多 的對映 deconvlution transpo...

卷積神經網路的卷積操作

卷積的運算可以分為反轉 平移,相乘,求和。在影象處理中,影象是乙個大矩陣,卷積模板是乙個小矩陣。按照上述過程,就是先把小矩陣反轉,然後平移到某一位置,小矩陣的每乙個小格對應大矩陣裡面的乙個小格,然後把對應小格裡面的數相乘,把所有對應小格相乘的結果相加求和,得出的最後結果賦值給小矩陣 小格對應的影象中...