Как я могу отредактировать batch_size в Прогнозировании временных рядов с помощью LSTM в Python - PullRequest
0 голосов
/ 23 января 2019

когда я редактирую приведенный ниже код для установки batch_size = 5, я получаю эту ошибку:

ValueError: не удалось преобразовать входной массив из формы (5,1) в форму (1,1)

в строке, указанной ниже:

from keras.layers import Dense
from keras.layers import Dropout
from keras.layers import LSTM
from keras.models import Sequential

# make a one-step forecast
def forecast_lstm(model, batch_size, X):
    X = X.reshape(1, 1, len(X))
    yhat = model.predict(X, batch_size=batch_size)#<- error here
    return yhat[0,0]

if __name__ == '__main__':

    my_batch_size = 5

    # load dataset
    series = read_csv('my_dataset.csv')

    # transform data to be stationary
    raw_values = series.values
    diff_values = difference(raw_values, 1)

    # transform data to be supervised learning
    supervised = timeseries_to_supervised(diff_values, 1)
    supervised_values = supervised.values

    # split data into train and test-sets
    train, test = supervised_values[0:-30], supervised_values[-30:]

    # transform the scale of the data
    scaler, train_scaled, test_scaled = scale(train, test)

    # fit the model
    lstm_model = fit_lstm(train_scaled, my_batch_size, 3000, 4)
    # forecast the entire training dataset to build up state for forecasting
    train_reshaped = train_scaled[:, 0].reshape(len(train_scaled), 1, 1)
    lstm_model.predict(train_reshaped, batch_size=my_batch_size)

    # walk-forward validation on the test data
    predictions = list()
    for i in range(len(test_scaled)):
        # make one-step forecast
        X, y = test_scaled[i, 0:-1], test_scaled[i, -1]
        yhat = forecast_lstm(lstm_model, my_batch_size, X)#<- when I call this function I get error
        # invert scaling
        yhat = invert_scale(scaler, X, yhat)
        # invert differencing
        yhat = inverse_difference(raw_values, yhat, len(test_scaled)+1-i)
        # store forecast
        predictions.append(yhat)
        expected = raw_values[len(train) + i + 1]
        print('Month=%d, Predicted=%f, Expected=%f' % (i+1, yhat, expected))

    # report performance
    rmse = sqrt(mean_squared_error(raw_values[-30:], predictions))
    print('Test RMSE: %.3f' % rmse)
    # line plot of observed vs predicted
    pyplot.plot(raw_values[-30:])
    pyplot.plot(predictions)
    pyplot.show()

Я уже знаю, что я пытаюсь изменить форму X с размером batch_size другой длины, но не могли бы вы предложить мне решение?Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...