在 LSTM 层之后 TimeDistributed 有什么好处?

数据挖掘 时间序列 lstm 预言
2022-03-03 11:33:59

我已经看过几个类似的问题,但我什么都不懂,TimeDistributed 的兴趣是什么?为什么我们需要在 LSTM 之后插入一个 TimeDistributed 层来建立时间序列预测

2个回答

好的,假设您有一个带有集合的LSTM()图层。return_sequences = True这意味着其中的每个 LSTM 单元都在输出其值。因此,该层的输出是一系列输出,而不仅仅是最后一个。这意味着输出是经过处理的时间序列,其中包含顺序信息。

您希望Dense()图层获取此信息并使用它来进一步处理信号。特别是,您需要一些密集架构来逐个处理这些顺序输出中的每一个。通过使用TimeDistributed()包装器,就像您Dense()在此顺序输出上迭代相同的架构一样。

我通常TimeDistributed(Dense())在 seq2seq 解码器的底部使用,以产生最终的输出序列。

我认为您的意思是 TimeDistributedDense?无论如何,这应该以一种或另一种方式澄清你的理解。

TimeDistributedDense 将相同的 Dense(全连接)操作应用于 3D 张量的每个时间步长。

使用 TimeDistributedDense 最常见的场景是使用循环 NN 来标记任务。例如 POS 标记或槽填充任务。

在这种任务中:对于每个样本,输入是一个序列 ( ),输出是一个序列 ( )长度。可以被视为的标签。a1,a2,a3,a4...aNb1,b2,b3,b4...bNbiaia1 进入循环神经网络以获得输出b1. 比推a2和隐藏的输出a1要得到b2...

如果您想通过 Keras 对此进行建模,您只需要在 RNN 或 LSTM 层(return_sequence=True)之后使用 TimeDistributedDense 即可在所有时间步输出上计算成本函数。如果不使用 TimeDistributedDense 并设置 RNN 的 return_sequence=False,则成本是在最后一个时间步输出上计算的,你只能得到最后一个 bN。

此外,这里是更多信息的链接-> https://github.com/keras-team/keras/issues/1029