Keras 高密度層入力での予期せぬ再形成: 謎の解明
Keras では、高密度層はニューラル ネットワークによく使用される構成要素です。ただし、ユーザーは、レイヤーの操作を適用する前に入力が平坦化されないという予期しない動作に遭遇する可能性があります。
提供されたコード スニペットでは:
input1 = layers.Input((2,3)) output = layers.Dense(4)(input1)
入力テンソル input1 を次のように平坦化する代わりに、次元 (2,3) の場合、驚くべきことに、次元 (?, 2, 4) の出力テンソル出力が観察されます。これは、ランクが 2 より大きい入力は平坦化されるべきであるというドキュメントの主張と矛盾します。
しかし、現在の Keras 実装を調べると、異なる動作が明らかになります。つまり、Dense レイヤーは実際には入力テンソルの最後の軸に適用されます。これは、指定された例では、input1 の各 2D 行が独立して密に接続された層を通過することを意味します。その結果、出力は最初の次元を保持し、指定された単位数 (4) を最後の次元に追加します。
このドキュメントからの逸脱は重大な影響を及ぼします。
例:
model = Sequential() model.add(Dense(10, input_shape=(20, 5))) model.summary()
結果として得られるモデルの概要には、高密度に接続された層に 10 個のユニットがあるにもかかわらず、トレーニング可能なパラメーターが 60 個しか表示されません。これは、各ユニットが各行の 5 つの要素に同じ重みで接続されているためです。
ビジュアルイラスト:
[画像: 高密度レイヤーをレイヤーに適用するビジュアルイラストKeras の 2 次元以上の入力]
結論として、Keras の Dense 層は入力テンソルの最後の軸に独立して適用され、特定のシナリオでは出力が平坦化されません。この動作は、モデルの設計とパラメーターの共有に影響を与えます。
以上がKeras の高密度レイヤー入力が予期せず変形するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。