2016-09-02 90 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)输入形状。只需对其进行相应的重塑,模型即可运行。

相关问题