Python/Keras/Theano 深度自编码器维度错误

我在尝试按照深度自编码器的Keras 示例进行操作时,遇到了维度不匹配的异常,但我怎么也找不出原因。当我只使用一个编码维度时它可以工作,但当我堆叠它们时就不行了。

异常:输入 0 与层 dense_18 不兼容:
预期形状=(None, 128),发现形状=(None, 32)*

错误出现在代码行 decoder = Model(input=encoded_input, output=decoder_layer(encoded_input))

from keras.layers import Dense,Inputfrom keras.models import Modelimport numpy as np# 这是编码表示的大小encoding_dim = 32#NPUT LAYERinput_img = Input(shape=(784,))#ENCODE LAYER# "encoded" 是输入的编码表示encoded = Dense(encoding_dim*4, activation='relu')(input_img)encoded = Dense(encoding_dim*2, activation='relu')(encoded)encoded = Dense(encoding_dim, activation='relu')(encoded)#DECODED LAYER# "decoded" 是输入的有损重建decoded = Dense(encoding_dim*2, activation='relu')(encoded)decoded = Dense(encoding_dim*4, activation='relu')(decoded)decoded = Dense(784, activation='sigmoid')(decoded)#MODELautoencoder = Model(input=input_img, output=decoded)#SEPERATE ENCODER MODELencoder = Model(input=input_img, output=encoded)# 为编码后的(32维)输入创建一个占位符encoded_input = Input(shape=(encoding_dim,))# 检索自编码器模型的最后一层decoder_layer = autoencoder.layers[-1]# 创建解码器模型decoder = Model(input=encoded_input, output=decoder_layer(encoded_input))#COMPILERautoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')

回答:

感谢Marcin的提示。原来所有解码层都需要展开才能使其工作。

# 检索自编码器模型的最后一层decoder_layer1 = autoencoder.layers[-3]decoder_layer2 = autoencoder.layers[-2]decoder_layer3 = autoencoder.layers[-1]# 创建解码器模型decoder = Model(input=encoded_input, output=decoder_layer3(decoder_layer2(decoder_layer1(encoded_input))))

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注