保存并加载keras自动编码器

保存并加载keras自动编码器,keras,autoencoder,Keras,Autoencoder,看看这种奇怪的加载/保存模型情况。我保存了可变自动编码器模型及其编码器和解码器: autoencoder.save(“autoencoder\u save”,overwrite=True) encoder.save(“encoder\u save”,overwrite=True) decoder.save(“decoder\u save”,overwrite=T) 之后,我从磁盘加载了所有内容: autoencoder_disk=load_model(“autoencoder_save”,自定

看看这种奇怪的加载/保存模型情况。我保存了可变自动编码器模型及其编码器和解码器:

autoencoder.save(“autoencoder\u save”,overwrite=True)
encoder.save(“encoder\u save”,overwrite=True)
decoder.save(“decoder\u save”,overwrite=T)
之后,我从磁盘加载了所有内容:

autoencoder_disk=load_model(“autoencoder_save”,自定义_对象={'kldiversioncellayer':kldiversioncellayer,
“nll”:nll})
编码器\u磁盘=加载\u模型(“编码器\u保存”,自定义\u对象={'KLDivergenceLayer':KLDivergenceLayer,
“nll”:nll})
decoder_disk=load_model(“decoder_save”,自定义_对象={'KLDivergenceLayer':KLDivergenceLayer,
“nll”:nll})
如果我尝试

x\u test\u encoded=encoder\u disk.predict(x\u test,batch\u size=batch\u size)
x_test_decoded=解码器_disk.predict(x_test_encoded)
打印(np.圆形(x_测试_解码[3]))
一切都很好,就像我从内存中使用编码器/解码器一样,但是如果我尝试

vae=autoencoder\u disk.predict(x\u test\u encoded)
我得到

ValueError:检查模型时出错:您传递给模型的Numpy数组列表的大小不是模型预期的大小。期望看到2个数组,但得到了以下1个数组的列表:。。。

虽然我可以从记忆中预测变化的自动编码器。为什么自动编码器从磁盘加载时不工作?

您正在将编码输出
x\u test\u encoded
作为输入传递到自动编码器
autoencoder\u磁盘。predict(x\u test\u encoded)
。您应该通过编码器期望的原始输入
x\u测试

提供可复制的代码来理解如何定义模型是很有帮助的。我猜
vae=autoencoder\u disk.predict(x\u test\u encoded)
应该是
vae=autoencoder\u disk.predict(x\u test)
,因为
x\u test\u encoded
似乎是编码器的输出。是的,你是对的。应该和你写的一样。模型定义如下:根据您的代码,
vae
需要一个包含2个输入的列表。您只提供了1个输入。因此您看到了错误。我尝试将eps放入自定义:\对象中,就像所有其他变量一样:自定义\对象={'KLDivergenceLayer':KLDivergenceLayer,'nll':nll,'潜伏期:潜伏期,'epsilon_std','eps':eps,'z':z:不幸的是没有成功。我还将vae.predict()行更正为vae.predict(x_测试)关键是,当我在内存中有模型时,它就工作了,而当我加载它时,它就不工作了。我很抱歉,因为误解。我的意思是,我在一个问题中写错了,而不是在我的代码中。答案是根据链接的变量?不幸的是,我找不到遗漏的变量。