2016-09-02 82 views
0

我試圖預測使用以前的20個值時間序列的下一個值。下面是我的代碼示例:的時間序列預測使用Keras LSTM:維錯誤號:預計3,拿到了2形狀

X_train.shape(15015, 20)

Y_train.shape(15015,)

EMB_SIZE = 1 
HIDDEN_RNN = 3 

model = Sequential() 
model.add(LSTM(input_shape = (EMB_SIZE,), input_dim=EMB_SIZE, output_dim=HIDDEN_RNN, return_sequences=True)) 
model.add(LSTM(input_shape = (EMB_SIZE,), input_dim=EMB_SIZE, output_dim=HIDDEN_RNN, return_sequences=False)) 
model.add(Dense(1)) 
model.add(Activation('softmax')) 
model.compile(optimizer='adam', 
       loss='binary_crossentropy', 
       metrics=['accuracy']) 

model.fit(X_train, 
      Y_train, 
      nb_epoch=5, 
      batch_size = 128, 
      verbose=1, 
      validation_split=0.1) 
score = model.evaluate(X_test, Y_test, batch_size=128) 
print score 

雖然當我跑我的代碼,我得到了以下錯誤:

TypeError: ('Bad input argument to theano function with name "/usr/local/lib/python2.7/dist-packages/keras/backend/theano_backend.py:484" at index 0(0-based)', 'Wrong number of dimensions: expected 3, got 2 with shape (32, 20).')

我試圖在這篇文章中複製結果:neural networks for algorithmic trading。這裏是一個鏈接到混帳回購協議:link

這似乎是一個概念上的錯誤。請發佈任何資料,以便我可以更好地瞭解LSTMS以進行時間序列預測。另外請解釋我如何解決這個錯誤,以便我可以重現上述文章中提到的結果。

回答

0

如果我正確理解您的問題,輸入數據的一組長度20.根據Keras DOC,所述輸入是具有形狀(nb_samples,時間步長,input_dim)三維張量的15015個1D序列。在你的情況下,X的形狀應該是(15015, 20, 1)

而且,你只需要給input_dim到第一LSTM層。 input_shape是多餘的,並且第二層將自動推斷其輸入的形狀:

model = Sequential() 
model.add(LSTM(input_dim=EMB_SIZE, output_dim=HIDDEN_RNN, return_sequences=True)) 
model.add(LSTM(output_dim=HIDDEN_RNN, return_sequences=False)) 
0

LSTM在Keras具有(nb_samples, timesteps, feature_dim)

在你的情況的輸入張量的形狀,X_train可能應該具有的(15015, 20, 1)輸入形狀。只需對其進行相應的重塑,模型即可運行。

相關問題