Прогноз будущего временного ряда с помощью LSTM застаивается через несколько шагов

#python #tensorflow #keras #lstm #recurrent-neural-network

Вопрос:

Я сделал эту модель LSTM :

 masmPred_input = Input(shape=(timeStep,1),name  = "previous days")

# Define lstm layers.
masmPred_lstm1 = LSTM(75,return_sequences = True ,input_shape = (timeStep,1),name = "RF_analysis1")(masmPred_input)
masmPred_lstm2 = LSTM(25,return_sequences = False ,input_shape = (timeStep,1),name = "RF_analysis2")(masmPred_lstm1)
#define dropout layers that prevents overfitting
masmPred_dropout1 = Dropout(0.25)(masmPred_lstm2)
densePred_1 = Dense(150,activation= "relu")(masmPred_dropout1)
masmPred_dropout2 = Dropout(0.5)(densePred_1)
densePred_2 = Dense(10,activation= "relu")(masmPred_dropout2)
masmPred_output = Dense(1,activation = "linear")(densePred_2)

# Define output layer.
masm_output = tf.keras.layers.Dense(1,activation="relu",name="predicted_RF")(masm_dropout1)

# Define model using inputs and outputs
MASMForecastModel = tf.keras.Model(inputs=masmPred_input,outputs=masmPred_output)

MASMForecastModel.compile(loss="mse", optimizer="adam")
 

Я пытаюсь делать прогнозы на будущее за пределами набора проверки, поэтому я подгоняю все свои данные к своей модели и делаю следующее :

 def Make_predictions(windows, forecast_horizon, timeStep):
    pred = np.zeros(forecast_horizon) #predictions that will eventually be plotted
    for i in range(forecast_horizon):
        p = MASMForecastModel.predict(windows)[0][0] # p looks like [[this]]
        #print(MASMForecastModel.predict(windows))
        pred[i] = p
        new_window = windows[-1][1:]
        new_window = np.append(new_window,p)
        new_window = new_window.reshape(-1,1)
        windows = Append_to_list_of_ts(windows, new_window, timeStep) # adds the new window to the list of windows
        #print("Windows : n%sn"%windows)
    pred = pred.reshape(1,-1)
    return(pred)

windows = np.array([my_data[-timeStep:].reshape(-1,1)]) #the list of all sliding windows
forecast_horizon = 100 #how many days I'd like to predict
timeStep = 10 the lenghth of my sliding window

pred = Make_predictions(windows, forecast_horizon, timeStep)
 

Однако, когда я действую подобным образом, прогнозы просто стационарны (или очень быстро сходятся к одному и тому же значению).

Я думаю, это связано с тем, что мое окно каждый раз обновляется только на одно значение, и это не приводит к значительному улучшению моего алгоритма для получения другого прогноза.

Как я могу предотвратить возникновение этой проблемы ?

Заранее благодарю вас за вашу помощь.