2017-02-19 232 views
2

EDITED爲簡明起見。Keras的第二層(但不是第一層)的輸入形狀錯誤LSTM

我想在

https://keras.io/layers/recurrent/

from keras.models import Sequential 
from keras.layers import LSTM 

建立一個LSTM模型,工作過的文檔,例如下面三行代碼(加註釋)直接從文檔的鏈接採取以上:

model = Sequential() 
model.add(LSTM(32, input_dim=64, input_length=10)) 

# for subsequent layers, not need to specify the input size: 
model.add(LSTM(16)) 

ValueError: Input 0 is incompatible with layer lstm_2: expected ndim=3, found ndim=2

我得到上述執行第二model.add()語句後錯誤,但exposi前將模型添加到我的數據中,甚至編譯它。

我在這裏做錯了什麼?任何幫助深表感謝。 僅供參考我正在使用Keras 1.2.1。編輯:剛剛升級到目前的1.2.2,仍然有同樣的問題。

回答

4

由於patyork回答此上github

「第二LSTM層是沒有得到的3D輸入,它預計(具有(的batch_size,時間步長,特徵的形狀)。這是因爲該第一LSTM層具有(通過運算的默認值)return_sequences = False,這意味着它僅輸出在時間t-1具有形狀(batch_size,32)的最後一個特徵集,或者不包括時間的兩個維度。「

因此,爲了提供如何使用堆棧LSTM實現多對一(return_sequences = False)序列分類的代碼示例,請確保在中間層上使用return_sequences = True,例如thi S:

model = Sequential() 
model.add(LSTM(32, input_dim=64, input_length=10, return_sequences=True)) 
model.add(LSTM(24, return_sequences=True)) 
model.add(LSTM(16, return_sequences=True)) 
model.add(LSTM(1, return_sequences=False)) 

model.compile(optimizer = 'RMSprop', loss = 'categorical_crossentropy') 

(沒有錯誤)