`Keras`的`Dense`和`TimeDistributedDense`之间的区别


34

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

即使在这里,@fchollet指出:

TimeDistributedDenseDense对3D张量的每个时间步应用相同(完全连接)的操作。

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

Answers:


41

假设您有ñ行和700列的时间序列数据,希望将其馈送到SimpleRNN(200, return_sequence=True)Keras中的图层。在将其提供给RNN之前,您需要将先前的数据重塑为3D张量。因此它变为ñ×700×1个

展开的RNN

该图像取自https://colah.github.io/posts/2015-08-Understanding-LSTMs

在RNN中,您的列(“ 700列”)是RNN的时间步。您的数据从。将数据馈送到RNN之后,现在它具有700个输出,分别是至,而不是至。请记住,现在数据的形状为,这是样本(行)x时间步长(列)x channelŤ=1个 ŤØ 700H1个H700H1个H200ñ×700×200

然后,当您应用时TimeDistributedDense,您将Dense在每个时间步上应用一个图层,这意味着您将分别Dense在每个,,...,上应用一个图层。这意味着:实际上,您实际上是在从到每个通道(“ 200”通道)上分别应用完全连接的操作。第一个“ ”,直到第700个“ ”。H1个H2HŤH1个H7001个×1个×2001个×1个×200

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

为什么不展平RNN输出?因为您想将每个时间步的值都分开。

为什么将每个时间步的值分开?因为:

  • 您只需要在自己的时间步长之间交互值
  • 您不希望在不同的时间步长和渠道之间进行随机互动。

然后,当您应用TimeDistributedDense时,您将在每个时间步上应用一个Dense层->这意味着每个时间步都共享Dense层的权重吗?使用“密集”层,它是否仅适用于最后一个时间步?
o0omycomputero0o

2
为什么在blog.keras.io/…的Keras示例中未使用TimeDistributedDense
user1934212

因为TimeDistributedDense已被弃用。从Keras 2.0开始,Dense可以很好地处理二维张量
rilut
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.