Python Keras变分自动编码器示例-潜在输入的使用

Python Keras变分自动编码器示例-潜在输入的使用,python,keras,autoencoder,Python,Keras,Autoencoder,我是Keras的新手,一直在努力理解变量z在其官方版本的变分自动编码器示例中的用法。我不明白为什么没有使用z来代替变量潜在的\u输入。我运行了代码,它似乎起了作用,但我不知道z是否在幕后使用,以及Keras中的机制是什么。 以下是相关的代码片段: 您的编码器被定义为一个模型,它接受输入输入,并给出输出[z_平均值,z_log_var,z]。然后分别定义解码器以获取一些输入,这里称为潜在输入,以及输出输出。最后,您的整体模型在以下行中定义: outputs = decoder(encoder(i

我是Keras的新手,一直在努力理解变量
z
在其官方版本的变分自动编码器示例中的用法。我不明白为什么没有使用
z
来代替变量
潜在的\u输入
。我运行了代码,它似乎起了作用,但我不知道
z
是否在幕后使用,以及Keras中的机制是什么。 以下是相关的代码片段:


您的
编码器
被定义为一个模型,它接受输入
输入
,并给出输出
[z_平均值,z_log_var,z]
。然后分别定义解码器以获取一些输入,这里称为
潜在输入
,以及输出
输出
。最后,您的整体模型在以下行中定义:

outputs = decoder(encoder(inputs)[2])
这意味着您将在
输入上运行
编码器
,这将产生
[z_mean,z_log_var,z]
,然后将其中的第三个元素(称为
结果[2]
)作为输入参数传递给
解码器。换句话说,当您实现网络时,您将
潜在输入设置为等于编码器的第三个输出,或
[z_mean,z_log_var,z][2]=z
。您可以将其视为(可能不是有效代码):


它们只是单独定义编码器和解码器,以便可以单独使用:

  • 给定一些
    输入
    编码器
    计算它们的潜在向量/低维表示法
    z_-mean,z_-log_-var,z
    (您可以单独使用
    编码器
    ,例如存储这些低维表示法,或者更容易比较)

  • 给定这种低维表示
    潜在输入
    解码器
    返回解码信息
    输出
    (例如,如果需要重用存储的低维表示)


为了训练/使用完整的VAE,两种操作都可以按照实际操作的方式进行链接:
输出=解码器(编码器(输入)[2])
解码器的
潜在输入
,接收
编码器的
z
输出。

最后一行
输出=解码器(编码器输出[2])
——VAE仅将
z
作为输入,而忽略
z_平均值
z_log_var
outputs = decoder(encoder(inputs)[2])
encoder_outputs = encoder(inputs)  # [z_mean, z_log_var, z]
outputs = decoder(latent_inputs=encoder_outputs[2])  # latent_inputs = z