使用 lstm 进行基本时间序列预测

Posted

技术标签:

【中文标题】使用 lstm 进行基本时间序列预测【英文标题】:Basic time series prediction with lstm 【发布时间】:2019-12-26 18:19:58 【问题描述】:

我有一个序列,我想做最简单的 LSTM 来预测序列的其余部分。 这意味着我想从仅使用上一步来预测下一个步骤开始,然后添加更多步骤。 我也想使用预测值作为输入。 所以我相信我想要的是实现Understanding Keras LSTMs 的答案中提到的多对多。

我已经阅读了有关 *** 主题的其他问题,但仍然无法使其发挥作用。在我的代码中,我使用这里的教程 https://machinelearningmastery.com/time-series-prediction-lstm-recurrent-neural-networks-python-keras/ 和函数 create_dataset 来创建两个数组,只需移动一步。

这是我的代码和我得到的错误。

"Here I'm scaling my data as advised"
scaler = MinMaxScaler(feature_range=(0, 1))
Rot = scaler.fit_transform(Rot)

"I'm creating the model using batch_size=1 but I'm not sure why this is necessary"

batch_size = 1
model = Sequential()
model.add(LSTM(1,batch_input_shape=(batch_size,1,1),stateful=True,return_sequences=True,input_shape=(None,1)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')

"I want to use only the previous value for now"
look_back = 1
"as len(Rot) = 41000 I'm taking 36000 for training"
train_size = 36000
X,Y = create_dataset(Rot[:train_size,:],look_back)
X = numpy.reshape(X,(X.shape[0], X.shape[1], 1))
Y = numpy.reshape(Y,(X.shape[0], X.shape[1], 1))

And now I train my network as advised by @Daniel Möller. 

epochs = 10

for epoch in range(epochs):
    model.reset_states()
    model.train_on_batch(X,Y)

" And I get this error "
" PartialTensorShape: Incompatible shapes during merge: [35998,1] vs. [1,1]
     [[node lstm_11/TensorArrayStack/TensorArrayGatherV3]]."

你知道我为什么会出现这样的错误吗,因为我似乎按照上面提到的主题做了所有事情?

【问题讨论】:

【参考方案1】:

在这个 LSTM 网络中,batch_size=1,因为它是有状态的。当 stateful=True 时,train_set 大小和 test_set 大小除以 batch_size 后的模数应为零。

batch_input_shape=(batch_size,1,1) 已经定义了,那又为什么,input_shape=(None,1)

当 return_sequences=True 时,另一个 LSTM 正在跟随现有的 LSTM 层。但这里不是。

【讨论】:

以上是关于使用 lstm 进行基本时间序列预测的主要内容,如果未能解决你的问题,请参考以下文章

使用 LSTM 进行时间序列预测

如何使用 LSTM 单元训练 RNN 以进行时间序列预测

如何使用 LSTM 对图像进行时间序列预测?

使用 LSTM 进行预测

在Python中使用LSTM和PyTorch进行时间序列预测

使用 LSTM 进行多元二进制序列预测