我正在使用 LSTM 进行时间序列预测。我的目标是使用 25 个过去值的窗口来生成对接下来 25 个值的预测。我正在递归地这样做:我使用 25 个已知值来预测下一个值。将该值附加为已知值,然后移动 25 个值并再次预测下一个值,直到我有 25 个新生成的值(或更多)
我正在使用“Keras”来实现 RNN 架构:
regressor = Sequential()
regressor.add(LSTM(units = 50, return_sequences = True, input_shape = (X_train.shape[1], 1)))
regressor.add(Dropout(0.1))
regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.1))
regressor.add(LSTM(units = 50))
regressor.add(Dropout(0.1))
regressor.add(Dense(units = 1))
regressor.compile(optimizer = 'rmsprop', loss = 'mean_squared_error')
regressor.fit(X_train, y_train, epochs = 10, batch_size = 32)
问题:无论之前是什么序列,递归预测总是收敛到某个值。
当然这不是我想要的,我期待生成的序列会根据我之前的情况而有所不同,我想知道是否有人对这种行为以及如何避免这种行为有所了解。也许我做错了什么......
我尝试了不同的时期数并没有太大帮助,实际上更多的时期使情况变得更糟。更改 Batch Size、Number of Units、Number of Layers 和窗口大小也无助于避免这个问题。
我正在使用 MinMaxScaler 获取数据。
编辑:
缩放新输入以进行测试:
dataset_test = sc.transform(dataset_test.reshape(-1, 1))