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

2024-01-06

我目前正在使用 Keras 使用 Tensorflow 作为后端。我有一个 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 注意到我没有缩放完全相同)次所以任何偏移图像之间因此,目的是显示预测和真实数据之间的水平偏移在每个图像内):

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

注意: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 https://github.com/ebirck/lstm_sequence_prediction


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Keras 中的 LSTM 序列预测仅输出输入中的最后一步 的相关文章

  • 如何在 keras 中添加可训练的 hadamard 产品层?

    我试图在训练样本中引入稀疏性 我的数据矩阵的大小为 比如说 NxP 我想将其传递到一个层 keras 层 该层的权重大小与输入大小相同 即可训练权重矩阵W的形状为NxP 我想对这一层的输入矩阵进行哈达玛乘积 逐元素乘法 W 按元素与输入相乘
  • 带有 CUDA 的 Tensorflow:导入错误

    我已经按照 NVIDIA 教程中的说明一步步安装了 TensorFlow Ubuntu 16 04 桌面版 GTX 970 http www nvidia com object gpu accelerated applications te
  • 无法加载动态库“libcudart.so.11.0”;

    我尝试将 Tensorflow 2 7 0 与 GPU 结合使用 但我不断遇到同样的问题 2022 02 03 08 32 31 822484 W tensorflow stream executor platform default ds
  • 异常:加载数据时 URL 获取失败

    我正在尝试设置我的机器来运行 Tensorflow 2 我从未使用过 Tensorflow 只是下载了 Python 3 7 我不确定这是否是我的机器的问题 我按照上面列出的安装说明进行操作TensorFlow 的网站 https www
  • 张量流服务错误:参数无效:JSON 对象:没有命名输入

    我正在尝试使用 Amazon Sagemaker 训练模型 并且希望使用 Tensorflow 服务来为其提供服务 为了实现这一目标 我将模型下载到 Tensorflow 服务 docker 并尝试从那里提供服务 Sagemaker 的训练
  • tf.gather_nd 直观上是做什么的?

    你能直观地解释一下或者举更多例子吗tf gather nd用于在 Tensorflow 中索引和切片为高维张量 我读了API https www tensorflow org api docs python tf gather nd 但它保
  • 使用大数据集在 Google Colab TPU 上训练 seq2seq 模型 - Keras

    我正在尝试使用 Google Colab TPU 上的 Keras 训练用于机器翻译的序列到序列模型 我有一个可以加载到内存中的数据集 但我必须对其进行预处理才能将其提供给模型 特别是 我需要将目标单词转换为一个热向量 并且在许多示例中 我
  • 错误:分配具有形状的张量时出现 OOM

    在使用 Apache JMeter 进行性能测试期间 我面临着初始模型的问题 错误 分配形状为 800 1280 3 和类型的张量时出现 OOM 通过分配器浮动在 job localhost replica 0 task 0 device
  • Tensorflow 对 Python3.11 的支持

    我在 Windows10 PC 上安装了 Python3 11 0 尝试使用以下命令安装张量流 pip install tensorflow 给出错误 访问tensorflow网站后 我意识到它仅支持3 7 3 10 我应该降级 pytho
  • 在张量流的卷积层中使用自定义过滤器

    我一直在从各种教程中学习 Tensorflow 并且想知道是否可以定义一个自定义过滤器供卷积网络使用 例如 如果我知道特征中有有意义的结构 使得每个其他特征都是相关的 我想定义一个看起来像 0 1 0 1 0 1 的过滤器 tf nn co
  • 使用 Keras np_utils.to_categorical 的问题

    我正在尝试将整数的 one hot 向量数组制作为 keras 将能够使用的 one hot 向量数组来拟合我的模型 这是代码的相关部分 Y train np hstack np asarray dataframe output vecto
  • 使用 tf.estimator.Estimator 加载检查点和微调

    我们正在尝试将旧的训练代码转换为更符合 tf estimator Estimator 的代码 在初始代码中 我们针对目标数据集微调原始模型 在使用以下组合进行训练之前 仅从检查点加载一些层要恢复的变量 and init fn与监控培训课程
  • 在 Tensorflow 中使用 tf.while_loop 更新变量

    我想更新 Tensorflow 中的变量 因此我使用 tf while loop 例如 a tf Variable 0 0 0 0 0 0 dtype np int16 i tf constant 0 size tf size a def
  • 精度类型

    使用 keras 库获得的精度如下 model compile optimizer sgd loss mse metrics tf keras metrics Precision sklearn 计算出的哪种精度与 keras 计算出的精度
  • 无法使用tensorflow 2.0.0 beta1保存模型

    我已尝试了文档中描述的所有选项 但没有一个允许我将模型保存在tensorflow 2 0 0 beta1中 我还尝试升级到 也不稳定 TF2 RC 但这甚至破坏了我在测试版中工作的代码 所以我很快就回滚到测试版 请参阅下面的最小复制代码 我
  • LSTM - 一段时间后预测相同的常数值

    我有一个变量 我想预测未来 30 年的情况 不幸的是我没有很多样品 df pd DataFrame FISCAL YEAR 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 199
  • keras 模型拟合:ValueError:无法找到可以处理输入的数据适配器:

    我正在构建一个简单的 CNN 模型用于多类分类 训练和测试数据位于data path根据所需的类子目录flow from directory的函数ImageDataGenerator 这是我根据数据构建和训练模型的代码 from tenso
  • 如何从 Pandas DataFrame 转换为 Tensorflow BatchDataset 以进行 NLP?

    老实说 我想弄清楚如何转换数据集 格式 pandasDataFrame或 numpy 数组 转换为简单文本分类张量流模型可以训练用于情感分析的形式 我使用的数据集类似于 IMDB 包含文本和标签 正面或负面 我看过的每个教程要么以不同的方式
  • 如何使用tensorFlow C++ API中的fileWrite摘要在Tensorboard中查看它

    无论如何 我是否可以获得与 FileWriter 相对应的张量名称 以便我可以写出我的摘要以在 Tensorboard 中查看它们 我的应用程序是基于C 的 所以我必须使用C 来进行训练 FileWriter 不是张量 import ten
  • tensorflow:检查标量布尔张量是否为 True

    我想使用占位符控制函数的执行 但不断收到错误 不允许使用 tf Tensor 作为 Python bool 这是产生此错误的代码 import tensorflow as tf def foo c if c print This is tr

随机推荐