Ich habe ein Netzwerkmodell, das mit Batch-Training trainiert wird. Sobald es trainiert ist, möchte ich die Ausgabe für ein einzelnes Beispiel vorhersagen.Verwenden von Keras LSTM, um ein einzelnes Beispiel nach Verwendung von Batch-Training vorherzusagen
Hier ist mein Modellcode:
model = Sequential()
model.add(Dense(32, batch_input_shape=(5, 1, 1)))
model.add(LSTM(16, stateful=True))
model.add(Dense(1, activation='linear'))
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
ich eine Folge von einzelnen Eingängen zu einzelnen Ausgänge haben. Ich mache einen Testcode, um Zeichen den nächsten Zeichen zuzuordnen (A-> B, B-> C, usw.).
I schaffen eine Eingangsdaten von Form (15,1,1) und einen Ausgangsdaten der Form (15, 1) und rufen die Funktion:
model.fit(x, y, nb_epoch=epochs, batch_size=5, shuffle=False, verbose=0)
den Modelleisenbahnen, und jetzt will ich nimm ein einzelnes Zeichen und sage das nächste Zeichen voraus (Eingabe A, es sagt B voraus). Ich erstelle eine Eingabe von Form (1, 1, 1) und rufen:
pred = model.predict(x, batch_size=1, verbose=0)
Das gibt:
ValueError: Shape mismatch: x has 5 rows but z has 1 rows
Ich sah eine Lösung bestand darin, "Blinddaten" um Ihre Werte vorhersagen, so Die Eingabeform für die Vorhersage wäre (5,1,1) mit Daten [x 0 0 0 0] und Sie würden einfach das erste Element der Ausgabe als Ihren Wert nehmen. Dies scheint jedoch bei größeren Chargen ineffizient zu sein.
Ich habe auch versucht die Losgröße von der Modellerstellung zu entfernen, aber ich habe die folgende Meldung:
ValueError: If a RNN is stateful, a complete input_shape must be provided (including batch size).
Gibt es eine andere Art und Weise? Danke für die Hilfe.