【问题标题】:More Efficient Keras LSTM Input?更高效的 Keras LSTM 输入?
【发布时间】:2026-01-04 08:35:01
【问题描述】:

在 Keras 中为 LSTM 创建张量时,时间序列输入似乎效率很低。还有另一种方法吗?例如,在转换为张量之前,序列可能是:

  • [1, 2, 3, 4, 5, 6, 7, 8] 带有标签 [9]。接下来是:
  • [2, 3, 4, 5, 6, 7, 8, 9] 带有标签 [10]。
  • [3, 4, 5, 6, 7, 8 ,9, 10] --> [11]

等等,不管我的系列中有多少数字。在这种情况下,我每个样本只有 8 个时间步长,但本质上,在将数据发送到 LSTM 之前,我创建的数据量仍然是最初的 8 倍——其中绝大多数是冗余的。对于具有 50 个时间步长的系列,我创建了大约 50 倍的原始数据。这似乎太低效了。当所有数据都来自一个长序列时,是否有更有效的方法将该数据加载到 LSTM 中? tf.data 是否提供了我忽略的任何此类功能?

【问题讨论】:

    标签: tensorflow keras lstm tensorflow2.0 tensorflow-datasets


    【解决方案1】:

    没有,但您可以尝试使用return_sequences=True(此模型也将支持Conv1D,但不支持Flatten 或池)。

    然后您可以使用移位输出:

    • 输入[1, 2, 3, 4, 5, 6, 7, 8] 和标签[2,3,4,5,6,7,8,9]
    • 输入[a, b, c, d, e, f, g, h] 和标签[b,c,d,e,f,g,h,i]

    基本上:

    • x_train = original_sequences[:, :-1]
    • y_train = original_sequences[:, 1: ]

    后果是:

    • 可能的边框效果(在序列的开头,模型不会很好)
    • 无限的输入步骤(模型将依赖超过 8 个步骤来进行预测) - 根据数据,结果可能过于依赖于比您最初想要的更长的序列
      • 这可能发生也可能不会发生,值得一试
      • 如果发生这种情况,它可能是也可能不是问题,这取决于您使用此模型的意图
    • 不能使用Bidirectional,因为结果会受到未来值的影响。 (在同一行,卷积应该使用'causal' 填充,否则未来的值也会影响结果)。

    【讨论】:

      最近更新 更多