2017-10-17 5 views
1

Ich habe eine Testdaten von 1025643 Einträgen und 72 Features/Attribute. Ich habe ein lstm mit EingabedatentrainX mit Shape (245, 30, 72) und trainY mit Shape (245,) trainiert. Beachten Sie auch, dass ich Look-Back angegeben habe, um 30 Schritte zurück zu sein (245, 30, 72) Form von trainX.Output_shape von lstm Modell

Jetzt, nach dem Modell der Ausbildung, wenn ich

model.output_shape

Die Ausgabe lautet:

(None, 1)

Was ich verstehe, ist, dass es geben Einschritt-Vorhersage für den Testsatz. Aber ich möchte, dass es 30 Reihen von Vorhersagen gibt, eine für jeden zukünftigen Schritt, für jede Reihe im Testsatz (wie die Ausgabe sollte in meinem Fall eine Form haben (1025643, 30, 1)). Welche Änderungen muss ich mit Datenformen machen? Ich benutze keras lstm mit Tensorflow Backend und Python 3.6.

-Code für mein Modell ist:

model = Sequential() 
model.add(LSTM(100, return_sequences=True, input_shape = (trainX.shape[1], trainX.shape[2]))) 
model.add(LSTM(100, return_sequences = False)) 
model.add(Dense(1, activation='linear')) 

model.compile(loss='mse', optimizer='adam') 

model.fit(trainX, trainY, epochs=50, shuffle=False, verbose=1) 

Antwort

1

Der return_sequences=False Parameter auf der letzten LSTM Schicht die LSTM verursacht nur die Ausgabe nach allen 30 Zeitschritten zurückzukehren. Wenn Sie 30 Ausgänge (einen nach jedem Zeitschritt) verwenden möchten, verwenden Sie return_sequences=True auf der letzten LSTM-Ebene. Dies führt zu einer Ausgabeform von (None, 30, 1).

Weitere Informationen zu LSTMs in Keras finden Sie unter here.

+0

Vielen Dank :) Nun muss ich Zeitschritte von 30 für jede Probe in Testdaten machen, um es mit Form zu haben (None, 30, 1), weil das Modell mich dazu auffordert? Was wäre, wenn ich nur eine einzige Zeile bereitstellen wollte und das Modell gab mir 30 Zeilen (30 Mal hintereinander) aus. Wie meine Testdaten haben noch Form (1025643, 72) und Ergebnisse habe ich Form (1025643, 30, 1). –

+0

Wenn ich richtig verstehe, möchten Sie einen einzigen Zeitschritt der Eingabe bereitstellen und die nächsten 30 Zeitschritte der Ausgabe erstellen. Der LSTM benötigt für jeden Zeitschritt eine Eingabe. Um 30 Zeitschritte der Ausgabe von einer einzelnen Eingabe zu erzeugen, könnten Sie die erste Eingabe bei jedem Zeitschritt duplizieren oder die Ausgabe des LSTM als Eingabe für den nächsten Zeitschritt verwenden (die Eingabedimension Ihres LSTM stimmt also nicht mit der Ausgabe überein) Letzteres ist für Ihre Architektur nicht möglich). –

+0

Ja, die Idee der Duplizierung macht Sinn. Danke nochmal :) –