LSTM Keras目标大小错误

时间:2018-02-18 18:49:41

标签: python keras lstm

#x_train.shape = 7x5x5 numpy array
#y_train.shape = 3x5x5 numpy array
#x_test.shape = (7,) numpy array
#y_test.shape = (3,)  numpy array I have binary output as 0 or 1.
timeteps = 5
data_dim = 5

model = Sequential()
model.add(LSTM(32, return_sequences=True, input_shape=`(timesteps,data_dim)))
model.add(LSTM(32, return_sequences=True))
model.add(LSTM(32))
model.add(Dense(1,activation='sigmoid'))


model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=5, batch_size=1)
score = model.evaluate(X_test,y_test,batch_size=1)
ValueError: Error when checking target: expected dense_1 to have 2 dimensions, but got array with shape (3, 5, 5)

我正在尝试使用随机数据对LSTM进行建模,并发生此错误。我尝试了很多东西但是我没能成功。

提前致谢。

1 个答案:

答案 0 :(得分:0)

这里有一些问题/误解?

你可以看到你的y实际上是3维的。但是,在最后一个lstm层中,返回序列为false,这意味着LSTM返回一个32长的向量并将其发送到密集层。

此外,在这里使用多个LSTMS似乎缺乏目的,尽管它不一定会伤害任何东西。

为了适应您假设的数据,您希望最后一个lstm具有__PRETTY_FUNCTION__作为return_sequences,并且该lstm中的神经元数量不是32,而是5,如您的y数据的最终维度。

你可能根本就没有它(因为你之前已经有两个lstms,而是让第二个lstm只有5个神经元并且完全删除了最后的lstm层。然后你将使用时间分布式包装器最后一个密集层

True

表示将相同的密集层应用于数据的每个时间步长,这是y数据形状所需要的。