如何在LSTM自动编码器中计算零填充输入的softmax

时间:2018-11-16 09:51:24

标签: keras lstm

我正在实现一个LSTM自动编码器,该编码器的输入为x,并希望获得与x相同的输出。但是,我在执行过程中有几个问题,请在下面查看我的代码:

dict_size = 10
max_sentence_length = 5
embed_dim = 20

x = Input(shape=(max_sentence_length,), dtype='int32')
encoder_input = Embedding(dict_size, embed_dim)(x)
encoder_output=LSTM(32, return_sequences=True)(encoder_input)
deocder_output = LSTM(32, return_sequences=True)(encoder_output)
y = Dense(dict_size, activation='softmax')(deocder_output)

model = Model(inputs=x, outputs=y)
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
print(model.summary())

train_x = np.array([[3, 1, 2]])
train_x = pad_sequences(train_x, max_sentence_length, padding='post')
train_y = np_utils.to_categorical(train_x, dict_size)

model.fit(train_x, train_y, batch_size=1, epochs=1)
predict_y = model.predict(train_x)
print(predict_y)

在此代码中,第一个问题是:“ ValueError:检查目标时出错:预期density_1具有3维,但数组的形状为(5,10)”,我真的不知道如何解决此问题首先。

第二个问题是,x的长度为3,而加上额外的填充,其长度变为5;在最后阶段,输出将是5x10的矩阵,即最终输出的最后两个元素不应参与softmax的计算。有什么方法可以快速解决此问题?

非常感谢!

0 个答案:

没有答案