更有效的Keras LSTM输入?

问题描述 投票:0回答:1

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

  • [1、2、3、4、5、6、7、8]和标签[9]。下一个将是:
  • 带有标签[10]的[[2、3、4、5、6、7、8、9]。
  • [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个回答
0
投票

没有,但是您可以尝试使用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'填充,否则将来的值也会影响结果)。
© www.soinside.com 2019 - 2024. All rights reserved.