如何在Python中使用LSTM在时间序列预测中编辑batch_size

时间:2019-01-23 12:12:37

标签: python keras lstm

当我编辑下面的代码以设置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()

我已经知道我正在尝试使用不同长度的batch_size重塑X,但是您可以建议我一个解决方案吗?预先谢谢你

0 个答案:

没有答案