2016-09-02 18 views
0

Ich versuche den nächsten Wert in der Zeitreihe mit den vorherigen 20 Werten vorherzusagen. Hier ist ein Beispiel aus meinem Code:Zeitreihenvorhersage mit LSTM mit Keras: Falsche Anzahl der Dimensionen: erwartet 3, 2 mit Form erhalten

X_train.shape ist (15015, 20)

Y_train.shape ist (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 

Obwohl, wenn ich meinen Code lief ich folgende Fehlermeldung bekam:

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).')

Ich habe versucht, die Ergebnisse in diesem Beitrag zu replizieren: neural networks for algorithmic trading. Hier ist ein Link zum Git Repo: link

Es scheint ein konzeptioneller Fehler zu sein. Bitte posten Sie alle Quellen, in denen ich LSTMS für die Zeitreihenvorhersage besser verstehen kann. Bitte erläutern Sie mir auch, wie ich diesen Fehler behebe, damit ich die in dem oben genannten Artikel erwähnten Ergebnisse reproduzieren kann.

Antwort

0

Wenn ich Ihr Problem richtig verstehe, haben Ihre Eingabedaten einen Satz von 15015 1D-Sequenzen der Länge 20. Nach Keras doc ist die Eingabe ein 3D-Tensor mit Shape (nb_samples, timesteps, input_dim). In Ihrem Fall sollte die Form X dann (15015, 20, 1) sein.

Auch müssen Sie nur input_dim auf die erste LSTM Schicht geben. input_shape ist überflüssig und die zweite Schicht wird seine Eingangsform automatisch ableiten:

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 in Keras hat einen Eingang Tensor Form von (nb_samples, timesteps, feature_dim)

In Ihrem Fall X_train sollte wohl eine Eingabeform (15015, 20, 1) haben. Ändern Sie es einfach entsprechend und das Modell sollte laufen.

Verwandte Themen