更高效的 Keras LSTM 输入?
More Efficient Keras LSTM Input?
在 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 是否提供了我忽略的任何此类功能?
没有,但您可以尝试使用 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,否则未来的值也会影响结果)。
在 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 是否提供了我忽略的任何此类功能?
没有,但您可以尝试使用 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,否则未来的值也会影响结果)。