「ケラス」の「密度」と「タイムディストリビュードデンセ」の違い
-
16-10-2019 - |
解決
$ n $ rowsと$ 700 $列の時代シリーズデータがあるとしましょう。 SimpleRNN(200, return_sequence=True)
ケラスのレイヤー。それをRNNに送る前に、以前のデータを3Dテンソルに再構築する必要があります。したがって、$ n times 700 times 1 $になります。
$ $
画像はから取られます 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出力を平らにしてみませんか?各タイムステップ値を分離したいからです。
各タイムステップ値を分離するのはなぜですか?なぜなら:
- あなたはそれ自身のタイムステップの間で値を相互作用したいだけです
- 異なるタイムステップとチャネルの間にランダムな相互作用を持ちたくありません。