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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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