使用 Keras 构建 LSTM 单元
Building a LSTM Cell using Keras
我正在尝试构建用于文本生成的 RNN。我一直在构建我的 LSTM 单元。数据的形状是这样的——X是dim(90809,2700)的输入稀疏矩阵,Y是dimension(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)
如有任何帮助,我们将不胜感激。谢谢!
您应该了解 input_shape
、batch_input_shape
和 input_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)))
我正在尝试构建用于文本生成的 RNN。我一直在构建我的 LSTM 单元。数据的形状是这样的——X是dim(90809,2700)的输入稀疏矩阵,Y是dimension(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)
如有任何帮助,我们将不胜感激。谢谢!
您应该了解 input_shape
、batch_input_shape
和 input_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)))