對抗生成網路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,而正值不變,這種操作被成為單側抑制。可別小看這個簡單的操作,正因為有了這單側抑制,才使得神經網路中的神經元也具有了稀疏啟用性...