「Keras」の「Dense」と「TimeDistributedDense」の違い


34

私はまだの違いについて混乱していますDenseTimeDistributedDenseKeras、すでにいくつかの同様の質問が尋ねているにもかかわらず、ここここ。人々は多くのことを議論していますが、共通の結論はありません。

それでも、ここでは、@ fcholletは次のように述べています。

TimeDistributedDenseDense3Dテンソルのすべてのタイムステップに同じ(完全に接続された)操作を適用します。

それらの違いを正確に説明する必要があります。

回答:


41

700列の時系列データがあり、Kerasのレイヤーにフィードするとします。それをRNNにフィードする前に、以前のデータを3Dテンソルに変形する必要があります。したがって、N × 700 × 1になります。N700SimpleRNN(200, return_sequence=True)N×700×1

展開されたRNN

画像はhttps://colah.github.io/posts/2015-08-Understanding-LSTMsから取得されます

t=1 to 700h1h700h1h200N×700×200

TimeDistributedDenseDenseDenseh1h2hth1h7001×1×2001×1×200

なぜこれを行うのですか?RNN出力をフラット化したくないためです。

RNN出力をフラット化しないのはなぜですか?各タイムステップ値を個別に保持する必要があるためです。

各タイムステップ値を別々に保つのはなぜですか?なぜなら:

  • 独自のタイムステップ間で値をやり取りしたいだけです
  • 異なるタイムステップとチャンネル間でランダムなやり取りをしたくありません。

そして、TimeDistributedDenseを適用すると、各タイムステップに密なレイヤーが適用されます->これは、各タイムステップが密なレイヤーの重みを共有するということですか?高密度レイヤーでは、最後のタイムステップにのみ適用されませんか?
o0omycomputero0o

2
なぜTimeDistributedDenseでKerasの例で使用されていないされていないblog.keras.io/...
user1934212

TimeDistributedDenseはすでに廃止されているためです。Keras 2.0以降、Denseは2次元以上のテンソルをうまく処理できます
rilut
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.