我正在学习如何在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")

发布于 2021-01-24 01:52:42
我建议,如果你的目标是给出最后10个时间步长作为输入,并将移动平均作为预测,那么可以尝试使用具有密集连接层的回归模型,而不是RNN。(使用正则化的线性激活可能工作得足够好)
该选项的训练和运行成本将比LSTM更低
https://stackoverflow.com/questions/65862277
复制相似问题