Warum Keras LSTM batch-Größe für die Vorhersage verwendet werden, die gleichen wie passend batch-Größe?

Bei Verwendung eines Keras LSTM zur Vorhersage von Zeitreihen Daten, die ich habe immer Fehler, wenn ich versuche zu trainieren, das Modell mit Hilfe einer batch-Größe von 50, und dann zu versuchen, vorherzusagen, die auf das gleiche Modell mit einer batch-Größe von 1 (d.h. nur die Vorhersage des nächsten Wertes).

Warum bin ich nicht in der Lage zu trainieren und fit Modell mit mehreren Chargen auf einmal, und verwenden Sie dann das Modell, um Vorhersagen für alles andere als die gleiche batch-Größe. Es scheint nicht sinnvoll, aber dann könnte ich mir einfach etwas fehlen zu diesem.

Edit: das ist das Modell. batch_size 50 sl ist Sequenz-Länge, die ist auf 20 festgelegt, derzeit.

    model = Sequential()
    model.add(LSTM(1, batch_input_shape=(batch_size, 1, sl), stateful=True))
    model.add(Dense(1))
    model.compile(loss='mean_squared_error', optimizer='adam')
    model.fit(trainX, trainY, epochs=epochs, batch_size=batch_size, verbose=2)

hier ist die Linie für die Vorhersage auf dem Trainings-set für RMSE

    # make predictions
    trainPredict = model.predict(trainX, batch_size=batch_size)

hier ist die aktuelle Vorhersage der unsichtbaren Zeit, die Schritte

for i in range(test_len):
    print('Prediction %s: ' % str(pred_count))

    next_pred_res = np.reshape(next_pred, (next_pred.shape[1], 1, next_pred.shape[0]))
    # make predictions
    forecastPredict = model.predict(next_pred_res, batch_size=1)
    forecastPredictInv = scaler.inverse_transform(forecastPredict)
    forecasts.append(forecastPredictInv)
    next_pred = next_pred[1:]
    next_pred = np.concatenate([next_pred, forecastPredict])

    pred_count += 1

Dieses Problem ist mit der Zeile:

forecastPredict = model.predict(next_pred_res, batch_size=batch_size)

Den Fehler bei der batch_size hier wird auf 1 gesetzt ist:

ValueError: Cannot feed value of shape (1, 1, 2) for Tensor 'lstm_1_input:0', which has shape '(10, 1, 2)' denen ist der gleiche Fehler wirft, wenn batch_size hier auf 50 eingestellt wie die anderen batch-Größen sowie.

Den total Fehler:

    forecastPredict = model.predict(next_pred_res, batch_size=1)
  File "/home/entelechy/tf_keras/lib/python3.5/site-packages/keras/models.py", line 899, in predict
    return self.model.predict(x, batch_size=batch_size, verbose=verbose)
  File "/home/entelechy/tf_keras/lib/python3.5/site-packages/keras/engine/training.py", line 1573, in predict
    batch_size=batch_size, verbose=verbose)
   File "/home/entelechy/tf_keras/lib/python3.5/site-packages/keras/engine/training.py", line 1203, in _predict_loop
    batch_outs = f(ins_batch)
  File "/home/entelechy/tf_keras/lib/python3.5/site-packages/keras/backend/tensorflow_backend.py", line 2103, in __call__
    feed_dict=feed_dict)
  File "/home/entelechy/tf_keras/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 767, in run
    run_metadata_ptr)
  File "/home/entelechy/tf_keras/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 944, in _run
    % (np_val.shape, subfeed_t.name, str(subfeed_t.get_shape())))
ValueError: Cannot feed value of shape (1, 1, 2) for Tensor 'lstm_1_input:0', which has shape '(10, 1, 2)'

Edit: Nachdem ich das Modell stateful=False dann bin ich in der Lage zu nutzen, unterschiedliche Losgrößen für die Montage/Schulung und Vorhersage. Was ist der Grund dafür?

  • Batch-Größe wird nicht mehr so funktionieren wie das, was Sie beschreiben, ergänzen Sie bitte details und code.
  • Hinzugefügt Fehler und die entsprechende code
  • Wenn Sie übergeben einen Stapel mit Größe 1, stellen Sie sicher, es ist immer noch ein array mit genau der gleichen Form wie die Ausbildung-array, mit der Ausnahme, dass 50 wird 1. Stellen Sie sicher, dass Sie haven ' T verloren eine dimension transformieren (50, 1, sl) in die gerade (1,sl). Es sollte gehalten werden (1,1,sl).
  • hey danke für die Antwort. Ja, ich habe durchgemacht, um zu überprüfen, für die richtige Dimensionalität, ich denke, es ist alles gut so weit als ich kann erzählen. Der Fehler msg ist ValueError: Nicht füttern Wert der Form (1, 1, 2) - Tensor 'lstm_1_input:0', hat die Form '(10, 1, 2)' sowieso
  • Ich habe vor dem ähnlichen Problem. Aber ich habe diesen link gefunden:machinelearningmastery.com/... wirklich hilfreich. Leben retten....
  • auch versuchen Sie, diese zehn-Minuten-Einführung

InformationsquelleAutor McLeodx | 2017-04-30
Schreibe einen Kommentar