深度学习系列27:VAE生成模型
Posted IE06
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习系列27:VAE生成模型相关的知识,希望对你有一定的参考价值。
1. AE
AE(Autoencoder),自动编码器。
我们常用的encoder-decoder即为最简单的一种AE。训练过程中加上一些扰动,就可以变成去噪自编码器(DAE):
或者用遮盖(MIM,mask image modeling)的方法来加扰动:
2. VAE
损失为重构误差+KL散度,对应GAN中的判别器。
对于每一个样本,需要用神经网络拟合均值
u
u
u和方差
δ
2
\\delta^2
δ2,然后用标准正态分布采样得到Z,然后再恢复成X。其中方差项是核心,是用来进行对抗生成的关键。重构部分误差项会让
u
u
u尽量接近真实值,而KL散度会保证生成器拥有标准的随机性。
我们来简单看下keras版本代码:
from keras.layers import Input, Dense, Lambda
from keras.models import Model
from keras import backend as K
# 输入
x = Input(shape=(original_dim,))
h = Dense(intermediate_dim, activation='relu')(x)
# 全连接层计算p(Z|X)的均值和方差
z_mean = Dense(latent_dim)(h)
z_log_var = Dense(latent_dim)(h)
def sampling(args):
z_mean, z_log_var = args
epsilon = K.random_normal(shape=K.shape(z_mean))
return z_mean + K.exp(z_log_var / 2) * epsilon
# 使用均值和方差生成编码结果
z = Lambda(sampling, output_shape=(latent_dim,))([z_mean, z_log_var])
# 使用解码器恢复数据
decoder_h = Dense(intermediate_dim, activation='relu')
decoder_mean = Dense(original_dim, activation='sigmoid')
h_decoded = decoder_h(z)
x_decoded_mean = decoder_mean(h_decoded)
# 建立模型
vae = Model(x, x_decoded_mean)
# xent_loss是重构loss,kl_loss是KL loss
xent_loss = K.sum(K.binary_crossentropy(x, x_decoded_mean), axis=-1)
kl_loss = - 0.5 * K.sum(1 + z_log_var - K.square(z_mean) - K.exp(z_log_var), axis=-1)
vae_loss = K.mean(xent_loss + kl_loss)
vae.add_loss(vae_loss)
vae.compile(optimizer='rmsprop')
vae.summary()
# 开始训练
vae.fit(x_train,
shuffle=True,
epochs=epochs,
batch_size=batch_size,
validation_data=(x_test, None))
3. CVAE
CVAE是有标签下的条件VAE,最简单的方法,就是通过控制均值来控制生成图像的类别,只需要修改KL散度,从
改成
以上是关于深度学习系列27:VAE生成模型的主要内容,如果未能解决你的问题,请参考以下文章
机器学习中的概率模型和概率密度估计方法及VAE生成式模型详解之四(第2章)
深度学习100例-生成对抗网络(DCGAN)生成动漫小姐姐 | 第20天
深度学习100例-生成对抗网络(DCGAN)生成动漫小姐姐 | 第20天
深度学习100例-生成对抗网络(DCGAN)手写数字生成 | 第19天