平稳的LSTM预测

时间:2020-07-23 09:39:36

标签: python deep-learning lstm prediction

我是深度学习模型的新手。这是我的第一篇文章,因此,如果您需要其他详细信息,请告诉我。

这是我的方法的一般摘要:

  • 我使用了具有两个时间序列的数据集进行训练
  • 我将它们转换为keras的LSTM / Bi-LSTM层接受的数据集,格式为:
    [1,0.99,0.98,0.97] ==输出==> [0.96]
    等等。
  • 输入和输出容器(数组)的形状:input(794,5,1)和output(794,)
  • 无错误的培训
  • 预测形状(1、5、1)的数据(窗口)的初始点
  • 预测的输出是一个值,该值将附加到一个单独的列表(用于绘制)以及窗口中,并且该窗口的第一个值会退出。然后将此窗口作为模型的输入,以生成下一个预测点。
  • 继续此操作,直到获得两个模型(LSTM和Bi-LSTM)的整个曲线

但是,预测结果与实际数据甚至还不接近。

Obtained curves

通过批量大小和其他参数的一些更改,我仍然能够获得TREND(在这种情况下为向下),但无法获得数据的SHAPE(边缘,中间变化,绝对没有)。

是因为仅使用两个时间序列进行训练吗?我无法确切地找出问题所在。
模型(Bi-LSTM模型使用类似的代码):

model_lstm = Sequential()
model_lstm.add(LSTM(128, input_shape=(timesteps, 1), return_sequences= True))
model_lstm.add(Dropout(0.1))
model_lstm.add(LSTM(128, return_sequences= True))
model_lstm.add(Dropout(0.1))
model_lstm.add(LSTM(128, return_sequences= False))
model_lstm.add(Dropout(0.1))
model_lstm.add(Dense(1))
model_lstm.compile(loss = 'mean_squared_error', optimizer = optimizers.Adam(0.001))

曲线预测代码:
timesteps = 5
start = cell_to_test[0:timesteps].reshape(1, timesteps, 1)   # Has the initial data points
yhat = 1.0
y_curve_lstm = list(start.flatten())                         # The list for storing the curve points
y_window = start                                             # Window


用于预测单个点直到达到极限的循环:(我正在预测其曲线的像元数据的极限):

while len(y_curve_lstm) <= len(cell_to_test):
  yhat = model_lstm.predict(y_window)
  yhat = float(yhat)
  y_curve_lstm.append(yhat)
  y_window = list(y_window.flatten())
  y_window.append(yhat)
  y_window.remove(y_window[0])
  y_window = np.array(y_window).reshape(1, timesteps, 1)
  #print(yhat)

0 个答案:

没有答案