首頁  >  文章  >  後端開發  >  為什麼 Keras 密集層輸入會意外重塑?

為什麼 Keras 密集層輸入會意外重塑?

Barbara Streisand
Barbara Streisand原創
2024-10-21 07:57:30231瀏覽

Why Does the Keras Dense Layer Input Reshape Unexpectedly?

Keras 密集層輸入中的意外重塑:揭開謎底

在Keras 中,密集層是神經網路常用的構建塊。但是,使用者可能會遇到意外行為,即在套用圖層操作之前輸入未展平。

在提供的程式碼片段中:

input1 = layers.Input((2,3))
output = layers.Dense(4)(input1)

而不是使用以下方式展平輸入張量input1維度(2,3) 中,我們令人驚訝地觀察到維度為(?, 2, 4) 的輸出張量輸出。這與文件中關於秩大於 2 的輸入應該被展平的說法相矛盾。

然而,檢查目前的 Keras 實現,揭示了不同的行為:Dense 層實際上應用於輸入張量的最後一個軸。這意味著在給定的範例中,input1 的每個 2D 行都獨立地通過密集連接層。因此,輸出保留第一個維度,並將指定數量的單位 (4) 加到最後一個維度。

與文件的這種背離有重大影響:

  • 等效操作多維輸入上的 TimeDistributed(Dense(...)) 和 Dense(...)。
  • Dense 層中各單元共享權重矩陣。

範例:

model = Sequential()
model.add(Dense(10, input_shape=(20, 5)))

model.summary()

儘管密集連接層有 10 個單元,但產生的模型摘要僅顯示 60 個可訓練參數。這是因為每個單元以相同的權重連接到每行的 5 個元素。

視覺插圖:

[圖像:在Keras 中具有二維或更多維度的輸入]

總之,Keras 中的Dense 層獨立應用於輸入張量的最後一個軸,導致在某些場景下輸出不平坦。此行為對模型設計和參數共享具有影響。

以上是為什麼 Keras 密集層輸入會意外重塑?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn