2016-10-10 59 views
1

我正在嘗試構建用於文本生成的RNN。我被困在建立我的LSTM單元。數據的形狀如下所示 - X是dim(90809,2700)的輸入稀疏矩陣,Y是維(90809,27)的輸出矩陣。以下是我的用於限定LSTM細胞代碼使用Keras構建LSTM單元

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

您應該瞭解有關input_shape,batch_input_shapeinput_dimhere之間的差異。對於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)))