2017-07-07 63 views
2

我正在玩機器學習,並試圖跟隨一些例子,但我堅持試圖讓我的數據進入Keras LSTM層。Keras LSTM Shape for Pandas DataFrame

我在Pandas DataFrame中有一些股票行情數據,它以15分鐘的時間間隔對ohlc進行重新採樣,併爲每行加載其他指標。

我的代碼如下。 DF是我的數據框:

x = df.iloc[:, :-1].values 
y = df.iloc[:, -1:].values 

dimof_input = x.shape[1] 
dimof_output = len(set(y.flat)) 

model = Sequential() 
model.add(LSTM(4, input_dim=dimof_input, return_sequences=True)) 
model.compile(loss='mse', optimizer='rmsprop') 

model.fit(x, y, nb_epoch=1, batch_size=1, verbose=2) 

當我嘗試和適應,我得到:

Error when checking input: expected lstm_16_input to have 3 dimensions, 
but got array with shape (33, 100) 

我從其他地方的例子複製本。我不太明白如何將正確的數據形狀引入此模型。誰能幫忙?

謝謝加載。

+0

你真的想用LSTM實現什麼? – DarkCygnus

+0

我正在關注股票價格預測的一些教程。雖然不是什麼嚴肅的事情,但這只是一個問題。 – Ludo

+0

好的......也許它和你通過'x.shape [1]'得到的'dimof_input'有關......'x'的形狀是什麼?通常我只是沒有索引的'x.shape' ... – DarkCygnus

回答

3

輸入形狀

具有形狀(batch_size, timesteps, input_dim)三維張量,(可選的)2D張量與形狀(batch_size, output_dim)。 (從there)。
而你指定的input_dim=dimof_input。模型期望3D張量作爲輸入,但得到2D。如果您提供正在實施的教程的參考資料,我可能會更多地說出問題的原因。
你可以嘗試重塑你的輸入數據如下:

x = x.reshape(x.shape[0], 1, x.shape[1]) 

此外,關於Keras LSTM層輸入數據的輸入數據的一些信息可以發現here

+0

謝謝!嘗試你建議的重塑現在更改爲: ValueError:檢查輸入時出錯:期望lstm_17_input有形狀(無,無,1),但有形狀的陣列(33,1,100) 我想我一定是從根本上誤解了這些輸入形狀的工作原理。 我現在已經設法丟失了我正在跟隨的教程。讓我試着找到它。謝謝你的幫助。 – Ludo