gpt4 book ai didi

tensorflow - Keras 中的 LSTM 序列预测仅输出输入中的最后一步

转载 作者:行者123 更新时间:2023-12-01 22:10:23 25 4
gpt4 key购买 nike

我目前正在使用 Tensorflow 作为后端使用 Keras。我有一个如下所示的 LSTM 序列预测模型,我用它来预测数据系列中的前一步(输入 30 个步骤 [每个步骤具有 4 个特征],输出预测步骤 31)。

model = Sequential()

model.add(LSTM(
input_dim=4,
output_dim=75,
return_sequences=True))
model.add(Dropout(0.2))

model.add(LSTM(
150,
return_sequences=False))
model.add(Dropout(0.2))

model.add(Dense(
output_dim=4))
model.add(Activation("linear"))

model.compile(loss="mse", optimizer="rmsprop")
return model

我遇到的问题是,在训练模型并对其进行测试之后 - 即使使用与训练相同的数据 - 它输出的内容基本上是输入中的第 30 步。我的第一个想法是我的数据模式必须太复杂而无法准确预测,至少对于这个相对简单的模型来说是这样,所以它可以返回的最佳答案基本上是输入的最后一个元素。为了限制过度拟合的可能性,我尝试将训练时期降低到 1,但出现了相同的行为。不过,我以前从未观察到过这种行为,而且我之前使用过这种类型的数据并取得了成功的结果(对于上下文,我使用的是从具有主动稳定器的复杂物理系统上的 4 个点获取的振动数据;使用预测在 pid 循环中稳定因此为什么,至少现在,我使用一个更简单的模型来保持快速)。

这听起来是最有可能的原因吗,或者有人有其他想法吗?有没有人见过这种行为?如果它有助于可视化,这里是一个振动点的预测与所需输出相比的样子(注意,这些屏幕截图放大了一个非常大的数据集的较小选择 - 因为@MarcinMożejko 注意到我没有缩放完全相同次,所以图像之间的任何偏移 都是由于此,目的是显示预测和真实数据之间的水平偏移在每个图像中):

enter image description here

...和输入的第30步相比:

enter image description here

注意:Keras 模型看到的每个数据点都是许多实际测量的平均值,并且平均值的窗口会及时处理。这样做是因为振动数据在我可以测量的最小分辨率下非常困惑,所以我使用这种移动平均技术来预测更大的运动(无论如何这是更重要的抵消)。这就是为什么第一张图像中的偏移量显示为多点而不是一个,它是“一个平均值”或 100 个单独的偏移点。 .

-----编辑 1,用于从输入数据集 'X_test, y_test' 获取上图的代码-----

model_1 = lstm.build_model()  # The function above, pulled from another file 'lstm'

model_1.fit(
X_test,
Y_test,
nb_epoch=1)

prediction = model_1.predict(X_test)

temp_predicted_sensor_b = (prediction[:, 0] + 1) * X_b_orig[:, 0]

sensor_b_y = (Y_test[:, 0] + 1) * X_b_orig[:, 0]

plot_results(temp_predicted_sensor_b, sensor_b_y)
plot_results(temp_predicted_sensor_b, X_b_orig[:, 29])

对于上下文:

X_test.shape = (41541, 30, 4)

Y_test.shape = (41541, 4)

X_b_orig 是来自 b 传感器的原始(如上所述平均)数据。这乘以预测和输入数据时绘制撤消归一化我做改善预测。它的形状为 (41541, 30)。

----编辑2----

这是一个完整项目设置的链接,用于演示此行为:

https://github.com/ebirck/lstm_sequence_prediction

最佳答案

那是因为对于您的数据(股票数据?),第 31 个值的最佳预测是第 30 个值本身。模型是正确的并且适合数据。我在预测股票数据方面也有类似的经验。

关于tensorflow - Keras 中的 LSTM 序列预测仅输出输入中的最后一步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48286122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com