【问题标题】:Keras VAE example on non-image/text data非图像/文本数据的 Keras VAE 示例
【发布时间】:2019-07-21 07:22:47
【问题描述】:

我正在尝试将此处给出的 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(采样, output_shape=(latent_dim,))([z_mean,z_log_sigma])

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

【问题讨论】:

    标签: keras autoencoder


    【解决方案1】:

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

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

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

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

    即例如,假设latent_dim 为2,则处理从正态分布采样的随机值epsilon,使得sampled[0] = (random_values[:, 0] + z_mean[0]) * exp(z_log_sigmal[0]) 和第1 列相同。

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

    【讨论】:

    • 所以 zmean 和 zlogvar 是采样的输入;并获得一些随机潜在维度向量,用于生成新的(新数据点),如果我想生成 200 个新的潜在向量作为解码器的输入,我将不得不将采样函数的 batch_size 更改为例如 200?
    • 没有。您必须更改 latent_dims 大小以获得不同的潜在维度。 batch_size 控制用于每个 SGD 小批量的样本数量。我建议您将其保留为默认值,直到您开始使用模型的学习率。
    猜你喜欢
    • 2021-04-25
    • 1970-01-01
    • 2023-01-22
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 2017-06-01
    • 2018-02-09
    • 2021-12-28
    相关资源
    最近更新 更多