質問

私はまだ違いについて混乱しています DenseTimeDistributedDenseKeras すでにいくつかの同様の質問がありますが ここここ. 。人々は多くについて議論していますが、共通の結論はありません。

そして、でも、 ここ, 、@fcholletはそれを述べました:

TimeDistributedDense 同じことを適用します Dense (完全に接続)3Dテンソルのすべてのタイムステップへの操作。

それらの違いについては、まだ詳細な説明が必要です。

役に立ちましたか?

解決

$ n $ rowsと$ 700 $列の時代シリーズデータがあるとしましょう。 SimpleRNN(200, return_sequence=True) ケラスのレイヤー。それをRNNに送る前に、以前のデータを3Dテンソルに再構築する必要があります。したがって、$ n times 700 times 1 $になります。

$ $

unrolled RNN

画像はから取られます https://colah.github.io/posts/2015-08-understanding-lstms

$ $

RNNでは、列(「700列」)はRNNのタイムステップです。データは$ t = 1 から 700 $から処理されます。データをRNNにフィードした後、$ h_1 $ h_ {700} $である700の出力があり、$ h_1 $から$ h_ {200} $ではありません。データの形状は$ n times 700 times 200 $です。 サンプル(行)xタイムステップ(列)xチャネル.

そして、あなたが適用するとき TimeDistributedDense, 、あなたはaを適用しています Dense 各タイムステップのレイヤー、つまり、あなたが適用していることを意味します Dense それぞれ$ h_1 $、$ h_2 $、...、$ h_t $をレイヤーします。つまり、実際には、$ H_1 $から$ h_ {700} $からそれぞれの各チャネル(「200」のチャネル)に完全に接続された操作をそれぞれ適用しています。最初の「$ 1 Times 1 Times 200 $」は、700番目の "$ 1 Times 1 Times 200 $"まで」まで。

なぜ私たちはこれをしているのですか? RNN出力を平らにしたくないからです。

RNN出力を平らにしてみませんか?各タイムステップ値を分離したいからです。

各タイムステップ値を分離するのはなぜですか?なぜなら:

  • あなたはそれ自身のタイムステップの間で値を相互作用したいだけです
  • 異なるタイムステップとチャネルの間にランダムな相互作用を持ちたくありません。
ライセンス: CC-BY-SA帰属
所属していません datascience.stackexchange
scroll top