Ich bin neu in Deep Learning und LSTM (mit Keras). Ich versuche, eine mehrreihige Vorhersage von Zeitreihen zu lösen. Ich habe 3 Zeitreihen: A, B und C und möchte die Werte von C vorhersagen. Ich trainiere ein LSTM, das Datenpunkte mit 3 Schritten zurückspeist, um die nächsten 3 Schritte in der Zukunft vorherzusagen. Die Eingabedaten sehen wie folgt aus:
X = [[[A0, B0, C0],[A1, B1, C1],[A2, B2, C2]],[[ ...]]]
mit Abmessungen : (1000, 3, 3)
. Die Ausgabe ist:
y = [[C3, C4, C5],[C4, C5, C6],...]
mit Abmessungen : (1000, 3)
.
Ich benutze ein einfaches LSTM mit 1 versteckten Schicht (50 Neuronen). Ich habe ein LSTM mit Keras eingerichtet als:
n_features = 3
neurons = 50
ahead = 3
model = Sequential()
model.add(LSTM(input_dim=n_features, output_dim=neurons))
model.add(Dropout(.2))
model.add(Dense(input_dim=neurons, output_dim=ahead))
model.add(Activation('linear'))
model.compile(loss='mae', optimizer='adam')
model.fit(X, y, epochs=50)
Dieses Modell funktioniert gut. Jetzt möchte ich auch die Werte von B vorhersagen (unter Verwendung derselben Eingabe). Deshalb habe ich versucht, die Ausgabe auf ähnliche Weise umzugestalten wie für das Training mit mehreren Funktionen:
y = [[[B3, C3],[B4, C4],[B5, C5]],[[ ...]]]
so dass es Abmessungen hat : (1000, 3, 2)
. Dies gibt mir jedoch einen Fehler:
Error when checking target: expected activation_5 to have 2 dimensions,
but got array with shape (1000, 3, 2)
Ich denke, die Struktur des Netzwerks muss sich ändern. Ich habe versucht, model.add(Dense(input_dim=neurons, output_dim=ahead))
ohne Erfolg zu ändern . Soll ich das y
anders umformen ? Ist die Struktur des Netzwerks falsch?