我仍然对之间的区别感到困惑 DenseTimeDistributedDenseKeras 即使已经提出了一些类似的问题 这里这里. 。人们正在讨论很多,但没有共同的结论。

即使 这里, ,@fchollet说:

TimeDistributedDense 适用 Dense (完全连接的)操作到3D张量的每个时间步。

我仍然需要详细说明它们之间的区别。

有帮助吗?

解决方案

假设您有$ n $行的时间序列数据和$ 700 $列的列,您想喂给一个 SimpleRNN(200, return_sequence=True) 层中的层。在将其馈送到RNN之前,您需要将先前的数据重塑为3D张量。因此,它变成了$ n times 700 times 1 $。

$ $

unrolled RNN

图像取自 https://colah.github.io/posts/2015-08-ENDECTANDING-LSTMS

$ $

在RNN中,您的列(“ 700列”)是RNN的时间段。您的数据从$ t = 1 到 700 $处理。将数据馈送到RNN之后,现在它具有700个输出,为$ H_1 $ to $ H_ {700} $,而不是$ H_1 $到$ H_ {200} $。请记住,现在您的数据形状为$ n times 700 times 200 $,是 样本(行)x TimeSteps(列)x通道.

然后,当您应用 TimeDistributedDense, ,您正在申请 Dense 每个时间步上的一层,这意味着您要应用 Dense 每个$ h_1 $,$ h_2 $,...,$ h_t $上的一层。这意味着:实际上,您分别在其每个频道(“ 200”一个)上应用完全连接的操作,从$ H_1 $到$ H_ {700} $。第一个“ $ 1 times 1 times 200 $”,直到第700 $ 1 times 1 times 200 $”。

我们为什么这样做呢?因为您不想弄平RNN输出。

为什么不使RNN输出变平?因为您想将每个时间步度保持分开。

为什么要保持每个时间段值分开?因为:

  • 您只想在其自己的时间步之间进行交互
  • 您不想在不同的时间段和频道之间进行随机交互。
许可以下: CC-BY-SA归因
scroll top