生成對抗網路(三)DCGAN

2021-09-25 03:22:09 字數 2752 閱讀 7523

最近在研究dcgan,全稱為deep convolutional

generative adversarial networks,是在gan的基礎上加入卷積層,使得模型在影象的生成上能夠穩定而不是簡單地對樣本輸入產生記憶。gan採用的是全連線神經網路,訓練時不穩定,容易崩潰,而這篇**針對原始gan進行了改進,並針對生成器的結構進行了設計,使得生成的更加穩定。

作者的工作體現在以下幾個方面:

**採用keras實現,基本設定和**一致,資料集為mnist。

生成器的輸入是100維的向量,每一維的取值為μ=0

,σ=1

\mu=0,\sigma=1

μ=0,σ=

1

def build_generator(self):

model = sequential()

model.add(dense(128 * 7 * 7, activation="relu", input_dim=self.latent_dim))

model.add(reshape((7, 7, 128)))

model.add(upsampling2d())

model.add(conv2d(128, kernel_size=3, padding="same"))

model.add(batchnormalization(momentum=0.8))

model.add(activation("relu"))

model.add(upsampling2d())

model.add(conv2d(64, kernel_size=3, padding="same"))

model.add(batchnormalization(momentum=0.8))

model.add(activation("relu"))

model.add(conv2d(self.channels, kernel_size=3, padding="same"))

model.add(activation("tanh"))

model.summary()

noise = input(shape=(self.latent_dim,))

img = model(noise)

return model(noise, img)

生成器採用了兩次上取樣,將輸出由77變為2828,卷積層採用same padding,保證輸出維度不會變。

判別器的輸入是28*28的,輸出是一維的判別結果,1表示真,0表示假。

def build_discriminator(self):

model = sequential()

model.add(conv2d(32, kernel_size=3, strides=2, input_shape=self.img_shape, padding="same"))

model.add(leakyrelu(alpha=0.2))

model.add(dropout(0.25))

model.add(conv2d(64, kernel_size=3, strides=2, padding="same"))

model.add(zeropadding2d(padding=((0,1),(0,1))))

model.add(batchnormalization(momentum=0.8))

model.add(leakyrelu(alpha=0.2))

model.add(dropout(0.25))

model.add(conv2d(128, kernel_size=3, strides=2, padding="same"))

model.add(batchnormalization(momentum=0.8))

model.add(leakyrelu(alpha=0.2))

model.add(dropout(0.25))

model.add(conv2d(256, kernel_size=3, strides=1, padding="same"))

model.add(batchnormalization(momentum=0.8))

model.add(leakyrelu(alpha=0.2))

model.add(dropout(0.25))

model.add(flatten())

model.add(dense(1, activation='sigmoid'))

model.summary()

img = input(shape=self.img_shape)

validity = model(img)

return model(img, validity)

沒有池化層,全部用步長卷積代替。

訓練了4000輪,最後的結果如下:

以下是mnist:

已經和原很接近了,雖然還有一些不太自然的地方,數字0和數字8的生成效果不太好。

以下是用gan生成的:

與gan相比,dcgan生成的樣本噪點更少,更加清晰,因為cnn網路更能提取的空間特徵。

生成對抗網路GAN及DCGAN實驗

生成對抗網路gan及dcgan實驗 3學習掌握生成對抗網路 gan 和深度卷積生成對抗網路 dcgan 和biggan基本原理 利用dcgan和biggan進行生成。通過pc上位機連線伺服器,登陸 ai平台,熟悉並利用dcgan演算法進行mnist數字手寫體影象生成。在此基礎上,通過查詢資料,分析b...

半監督生成對抗網路 生成對抗網路

一 生成對抗網路相關概念 一 生成模型在概率統計理論中,生成模型是指能夠在給定某些隱含引數的條件下,隨機生成觀測資料的模型,它給觀測值和標註資料序列指定乙個聯合概率分布。在機器學習中,生成模型可以用來直接對資料建模,也可以用來建立變數間的條件概率分布。通常可以分為兩個型別,一種是可以完全表示出資料確...

生成對抗網路

我們提出乙個框架來通過對抗方式評估生成模型,我們同時訓練兩個模型 乙個生成模型g捕捉資料分布,乙個鑑別模型d估計乙個樣本來自於訓練資料而不是g的概率。g的訓練過程是最大化d犯錯的概率。這個框架與minmax兩個玩家的遊戲相對應。在任意函式g和d的空間存在乙個唯一解,g恢復訓練資料的分布,d等於1 2...