Keras では、密層はその重みと入力テンソルの間のドット積を実行します。ドキュメントに記載されているように、デフォルトの動作は、ランクが 2 より大きい場合に入力テンソルを平坦化することです。ただし、このドキュメントとは異なり、Dense レイヤーは実際には入力テンソルの最後の軸に適用されます。
例を挙げて説明しましょう。 m 単位の密層が形状 (n_dim1、n_dim2、...、n_dimk) の入力テンソルに適用されると仮定します。出力形状は (n_dim1, n_dim2, ..., m) になります。
この観察は、TimeDistributed(Dense(...)) と Dense(...) が機能的に同等であることを意味します。さらに、共有ウェイトを使用して Dense レイヤーを適用すると、興味深い効果が得られます。次のおもちゃのネットワークを考えてみましょう:
<code class="python">model = Sequential() model.add(Dense(10, input_shape=(20, 5))) model.summary()</code>
以下のモデルの概要には、トレーニング可能なパラメーターが 60 個のみ示されています:
_________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense_1 (Dense) (None, 20, 10) 60 ================================================================= Total params: 60 Trainable params: 60 Non-trainable params: 0 _________________________________________________________________
これは、Dense 層の各ユニットがそれぞれの 5 つの要素すべてに接続しているために発生します。同じ重みを持つ入力内の行。結果として、必要なパラメータは 10 × 5 10 (ユニットあたりのバイアス パラメータ) = 60 個だけです。
この動作をさらに詳しく説明するために、次の視覚的表現を考慮してください:
[高密度層のイメージ] Keras の 2 次元以上の入力への適用]
この画像では、Dense レイヤー (赤で表示) が 3 次元の入力テンソルに適用されています。出力テンソルも 3 次元であり、入力テンソルの各列が出力テンソルの列に個別にマッピングされます。
以上がKeras の高密度レイヤーは入力テンソルを平坦化しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。