我是Keras的新手,想知道如何用不同长度的(中断的)时间序列训练LTSM . 例如,考虑从第1天到第10天的连续序列以及从第15天到第20天的另一个连续序列 . 简单地将它们连接到单个系列可能会产生错误的结果 . 我基本上看到两个选项可以让它们形成 (batch_size, timesteps, output_features)
:
- 将较短的系列延伸一些默认值(0),即对于上面的例子,我们将有以下批次:
d1, ..., d10
d15, ..., d20, 0, 0, 0, 0, 0
- 计算长度的GCD,将系列切成碎片,并使用有状态的LSTM,即:
d1, ..., d5
d6, ..., d10
reset_state
d15, ..., d20
还有其他/更好的解决方案吗?正在训练一个没有状态的LSTM,其完整序列相当于训练有状态的LSTM吗?
1 回答
您是否尝试过输入不同长度的LSTM层?当使用LSTM时,输入时间序列可以具有不同的长度(即使批次大小可以从一个批次到另一个批次不同,但显然特征的维度应该相同) . 以下是Keras的一个例子:
输出:
如您所见,输入图层的第一个和第二个轴是
None
. 这意味着它们没有预先指定,可以是任何值 . 您可以将LSTM视为循环 . 无论输入长度如何,只要存在相同长度的剩余数据向量(即n_feats
),LSTM层就会对它们进行处理 . 因此,正如您在上面所看到的,LSTM层中使用的参数数量不依赖于批量大小或时间序列长度(它仅取决于输入要素向量的长度和LSTM的潜在维度) .但是,根据您正在处理的具体问题,这可能不起作用;虽然我现在脑子里没有任何具体的例子,但这种行为可能不合适,你应该确保所有的时间序列都有相同的长度 .