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