更高效的 Keras LSTM 输入?

More Efficient Keras LSTM Input?

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

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

没有,但您可以尝试使用 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' padding,否则未来的值也会影响结果)。