首页 > 解决方案 > 非图像/文本数据的 Keras VAE 示例

问题描述

我试图将此处给出的 VAE 示例https://blog.keras.io/building-autoencoders-in-keras.html调整为非图像/文本数据。

首先,我不明白的是以下函数中的“args”:

def sampling(args):
    z_mean, z_log_sigma = args
    epsilon = K.random_normal(shape=(batch_size, latent_dim),
                          mean=0., std=epsilon_std)
    return z_mean + K.exp(z_log_sigma) * epsilon

另外,如何从 z = Lambda(sampling, output_shape=(latent_dim,))([z_mean,z_log_sigma]) 中随机采样一些点

输入解码器网络以生成新数据?

标签: kerasautoencoder

解决方案


首先,我不明白的是以下函数中的“args”:

args 是一个包含两个张量 (z_mean, z_log_sigma) 的元组。这些张量是编码器一分为二的输出。即解码器的输出被解释为正态分布的均值和对数方差。

如何从 z = Lambda(sampling, output_shape=(latent_dim,))([z_mean,z_log_sigma]) 中随机采样一些点

就是sampling这样。它从正态分布中采样一个形状张量,(batch_size, latent_dim)然后通过添加均值并乘以exp(log_sigma)每个latent_dim 来对其进行缩放。

即假设latent_dim 为2,那么从正态分布中采样的随机值epsilon 被处理为sampled[0] = (random_values[:, 0] + z_mean[0]) * exp(z_log_sigmal[0])与第1 列相同。

使用 VAE,编码器的输出被解释为高斯分布的参数。然后,采样函数使用这些参数通过转换正态分布采样过程的输出来为这些分布生成随机值。


推荐阅读