【问题标题】:How can I properly train a model to predict a moving average using LSTM in keras?如何正确训练模型以在 keras 中使用 LSTM 预测移动平均值?
【发布时间】:2021-01-23 17:31:20
【问题描述】:

我正在学习如何在 Keras 上训练 RNN 模型,我期待训练一个模型来预测最后 N 步的移动平均线会很容易。

我有一个包含数千步的时间序列,我能够创建一个模型并使用批量数据对其进行训练。

如果我使用以下模型对其进行训练,则测试集的预测与实际值有很大不同。 (批次 = 30,移动平均窗口 = 10)

inputs = tf.keras.Input(shape=(batch_length, num_features))
x = tf.keras.layers.LSTM(10, return_sequences=False)(inputs)
outputs = tf.keras.layers.Dense(num_labels)(x)
model = tf.keras.Model(inputs=inputs, outputs=outputs, name="test_model") 

为了能够获得良好的预测,我需要添加另一层 TimeDistributed,获得 2D 预测而不是 1D 预测(每个时间步都会得到一个预测)

inputs = tf.keras.Input(shape=(batch_length, num_features))
x = tf.keras.layers.LSTM(10, return_sequences=True)(inputs)
x = tf.keras.layers.TimeDistributed(tf.keras.layers.Dense(num_labels))(x)
outputs = tf.keras.layers.Dense(num_labels)(x)
model = tf.keras.Model(inputs=inputs, outputs=outputs, name="test_model")

【问题讨论】:

  • 预测最后 10 个时间步长?您正在尝试训练 RNN 来学习如何平均?
  • 是的,是最后10个时间步长的线性函数,所以节点少应该不难,还是第一个版本做不到。

标签: tensorflow machine-learning keras deep-learning lstm


【解决方案1】:

我建议,如果您的目标是提供最后 10 个时间步长作为输入,并以移动平均值作为预测,则尝试使用具有密集连接层而不是 RNN 的回归模型。 (带正则化的线性激活可能效果很好)

与 LSTM 相比,该选项的训练和运行成本更低

【讨论】:

  • 感谢您的回答,如果我只是想解决这个问题,那肯定是一个有效的解决方案。不过,在这种情况下,我更关心的是如何创建一个有效的 RNN(我将使用 LSTM,但 GRU 也可以),然后在现实世界的场景中使用它。
  • 您通常使用 RNN 来预测未来的某些事情。训练您的模型以预测下一步。 (N+1) 使用前 N 个样本。 (例如)毕竟,这完全取决于您想要什么,尤其是如何训练它。祝你好运!
猜你喜欢
  • 2018-01-30
  • 2020-03-18
  • 2018-04-15
  • 1970-01-01
  • 2018-09-27
  • 1970-01-01
  • 2022-10-19
  • 2017-05-29
  • 1970-01-01
相关资源
最近更新 更多