``temen''和`timeStributeddense''的差异
-
16-10-2019 - |
解决方案
假设您有$ n $行的时间序列数据和$ 700 $列的列,您想喂给一个 SimpleRNN(200, return_sequence=True)
层中的层。在将其馈送到RNN之前,您需要将先前的数据重塑为3D张量。因此,它变成了$ n times 700 times 1 $。
$ $
图像取自 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输出变平?因为您想将每个时间步度保持分开。
为什么要保持每个时间段值分开?因为:
- 您只想在其自己的时间步之间进行交互
- 您不想在不同的时间段和频道之间进行随机交互。