我正在使用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)
问题: 无论之前的序列是什么,递归预测总是会收敛到某个值。
当然这不是我想要的,我期望生成的序列会根据我之前的情况而有所不同,并且我想知道是否有人对这种行为有所了解以及如何避免这种行为。也许我做错了什么......
我尝试了不同的时代数,并没有多大帮助,实际上更多的时代使它变得更糟。更改批量大小,单位数,图层数和窗口大小对避免此问题也没有帮助。
我使用MinMaxScaler获取数据。
修改
缩放新输入以进行测试:
dataset_test = sc.transform(dataset_test.reshape(-1, 1))