深度學習AAEGan學習筆記,keras版

2021-08-29 23:31:31 字數 3155 閱讀 4939

對抗生成網路gan變體集合 keras版本

一.adversarial autoencoder gan

aae的目的在於訓練出自定義的編碼器,自定義編碼表現在real 真實樣本的分布。

如以下例子,目的就是在訓練將一張進行編碼,而該編碼符合正太分布(np.random.normal)

aae組成

1.編碼器

所謂編碼器其實就是幾層神經網路疊在一起,將一張(batch_size,28,28)變成(batch_size,10)向量

2.解碼器

解碼器就是將原來編碼生成的(batch_size,10)向量,解碼還原成(batch_size,28,28)

3.符合正太分布(np.random.normal)+判別器d

就是讓編碼器的編碼規律符合正太分布

總結一句大白話:

訓練編碼器,和解碼器,而該編碼器的編碼方式符合正太分布。

**位置:

編碼器encoder(針對keras 版本做了些修改,需要自己寫乙個mergelayer層)

class

mergelayer

(layer)

:def

__init__

(self,

**kwargs)

:super

(mergelayer, self)

.__init__(

**kwargs)

defcompute_output_shape

(self, input_shape)

:return

(input_shape[0]

[0], input_shape[0]

[1])

defcall

(self, x, mask=

none):

final_output = x[0]

+ k.random_normal(k.shape(x[0]

))* k.exp(x[1]

/2)return final_output

defbuild_encoder

(self)

:# encoder

img = input(shape=self.img_shape)

h = flatten(

)(img)

h = dense(

512)

(h) h = leakyrelu(alpha=

0.2)

(h) h = dense(

512)

(h) h = leakyrelu(alpha=

0.2)

(h) mu = dense(self.latent_dim)

(h) log_var = dense(self.latent_dim)

(h)# latent_repr = merge([mu, log_var],

# mode=lambda p: p[0] + k.random_normal(k.shape(p[0])) * k.exp(p[1] / 2),

# output_shape=lambda p: p[0])

# output_shape=lambda p: p[0])

latent_repr = mergelayer()(

[mu,log_var]

) model = model(img, latent_repr)

plot_model(model, to_file=

'aae_encoder.png'

,show_shapes=

true

)return model

解碼器decoder

def

build_decoder

(self)

: model = sequential(

) model.add(dense(

512, input_dim=self.latent_dim)

) model.add(leakyrelu(alpha=

0.2)

) model.add(dense(

512)

) model.add(leakyrelu(alpha=

0.2)

) model.add(dense(np.prod(self.img_shape)

, activation=

'tanh'))

model.add(reshape(self.img_shape)

) z = input(shape=

(self.latent_dim,))

img = model(z)

return model(z, img)

判別器d

def

build_discriminator

(self)

: model = sequential(

) model.add(dense(

512, input_dim=self.latent_dim)

) model.add(leakyrelu(alpha=

0.2)

) model.add(dense(

256)

) model.add(leakyrelu(alpha=

0.2)

) model.add(dense(

1, activation=

"sigmoid"))

encoded_repr = input(shape=

(self.latent_dim,))

validity = model(encoded_repr)

return model(encoded_repr, validity)

訓練圖:

深度學習學習筆記

神經網路的隱含層越多 模型引數越多,模型擬合能力更強,同時訓練的難度也會增加。減少模型引數的方法有兩種 逐層訓練和權重共享。權重共享思路是現有深度學習的基礎,它大大減少了模型的引數。深度學習並不需要很多的人工特徵工程,利用其強大的建模能力來代替,整個訓練的過程是端到端的過程 end to end 其...

深度學習 K近鄰演算法

k近鄰演算法定義 k最近鄰 k nearest neighbor,knn 分類演算法,是乙個理論上比較成熟的方法,也是最簡單的機器學習演算法之一。該方法的思路是 在特徵空間中,如果乙個樣本附近的k個最近 即特徵空間中最鄰近 樣本的大多數屬於某乙個類別,則該樣本也屬於這個類別 一句簡單的話幫你理解什麼...

深度學習筆記

在深度神經網路中,通常使用一種叫修正線性單元 rectified linear unit,relu 作為神經元的啟用函式。relu函式其實是分段線性函式,把所有的負值都變為0,而正值不變,這種操作被成為單側抑制。可別小看這個簡單的操作,正因為有了這單側抑制,才使得神經網路中的神經元也具有了稀疏啟用性...