使用Keras构建LSTM单元

时间:2016-10-10 03:23:43

标签: python keras recurrent-neural-network lstm

我正在尝试为文本生成构建RNN。我坚持建立我的LSTM细胞。数据的形状如下:X是dim的输入稀疏矩阵(90809,2700),Y是维度的输出矩阵(90809,27)。以下是我定义LSTM Cell的代码 -

model = Sequential()
model.add(LSTM(128, input_shape=(X.shape[0], X.shape[1])))
model.add(Dropout(0.2))
model.add(Dense(Y.shape[1], activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam')

我的理解是input_shape应该是输入矩阵的维度,而密集层应该是每个观察的输出大小,即在这种情况下为27。但是,我收到以下错误 -

Exception: Error when checking model input: expected lstm_input_3 to have 3 dimensions, but got array with shape (90809, 2700)

我无法弄清楚出了什么问题。任何人都可以帮我弄清楚为什么lstm_input需要3个尺寸?

我也尝试了以下内容 -

X= np.reshape(np.asarray(dataX), (n_patterns, n_vocab*seq_length,1))
Y=np.reshape(np.asarray(dataY), (n_patterns, n_vocab,1))

这给了我以下错误 -

Exception: Error when checking model input: expected lstm_input_7 to have shape (None, 90809, 2700) but got array with shape (90809, 2700, 1)

任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:2)

您应该了解input_shapebatch_input_shapeinput_dim here之间的区别。

对于input_shape,我们无需定义batch_size。这就是你的LSTM层的样子。

model.add(LSTM(128, input_shape=(X.shape[1], 1)))

model.add(LSTM(128, batch_input_shape=(X.shape[0], X.shape[1], 1)))