2017-10-17 149 views
1

我有1025643個條目和72個特徵/屬性的測試數據。我已經用形狀(245,30,72)和形狀(245,)訓練了帶有輸入數據trainX的lstm。另外請注意,我已經指定了後退30步,因此trainX的形狀(245,30,72)。lstm模型的輸出形狀

現在訓練模型後,如果我做

model.output_shape

輸出是:

(無,1)

我的理解是,它將使對測試集進行一步預測。但我希望它是30行的預測,每個未來的步驟,爲測試集中的每一行(如輸出應該有形狀在我的情況是(1025643,30,1))。我需要用數據形狀做些什麼改變?我用tensorflow後端和python 3.6使用keras lstm。

代碼爲我的模式是:

model = Sequential() 
model.add(LSTM(100, return_sequences=True, input_shape = (trainX.shape[1], trainX.shape[2]))) 
model.add(LSTM(100, return_sequences = False)) 
model.add(Dense(1, activation='linear')) 

model.compile(loss='mse', optimizer='adam') 

model.fit(trainX, trainY, epochs=50, shuffle=False, verbose=1) 

回答

1

最後LSTM層上的return_sequences=False參數使LSTM所有30個年代步驟後,只返回輸出。如果您需要30個輸出(每個時間步後一個),則在最後一個LSTM層上使用return_sequences=True,這將導致輸出形狀爲(None, 30, 1)

關於Keras中LSTM的更詳細的解釋,請參閱here

+0

非常感謝:)現在我必須爲測試數據中的每個樣本製作30個時間步以使其具有形狀(無,30,1),因爲模型要求我這樣做?如果我只想提供單行,並且模型輸出了30行(按順序30次),那該怎麼辦?像我的測試數據仍然有形狀(1025643,72)和結果我有形狀(1025643,30,1)。 –

+0

如果我理解正確,你想提供一個單一的時間步驟的輸入,併產生接下來的30個時間步驟的輸出。 LSTM需要每個時間步的輸入。要從單個輸入產生30個時間步的輸出,您可以在每個時間步重複第一個輸入,或者使用LSTM的輸出作爲下一個時間步的輸入(LSTM的輸入維與輸出不匹配,所以後一種選擇對於你的架構來說是不可能的)。 –

+0

是的,重複的想法是有道理的。再次感謝你 :) –

相關問題