在 Keras 中,密集層在其權重和輸入張量之間執行點積。如文件中所述,預設行為是在輸入張量的秩大於 2 時壓平輸入張量。但是,與本文檔相反,密集層實際上應用於輸入張量的最後一個軸。
讓我們用一個例子來澄清。假設一個具有 m 個單位的密集層應用於形狀為 (n_dim1, n_dim2, ..., n_dimk) 的輸入張量。輸出形狀將為 (n_dim1, n_dim2, ..., m)。
此觀察結果意味著 TimeDistributed(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 _________________________________________________________________
發生這種情況是因為密集層中的每個單元都連接到每個單元的所有五個元素輸入中具有相同權重的行。因此,只需要 10 × 5 10(每單位偏差參數)= 60 個參數。
為了進一步說明此行為,請考慮以下視覺表示:
[密集層的圖像Keras 中二維或多維輸入上的應用]
在此圖像中,Dense 層(以紅色顯示)應用於三維輸入張量。輸出張量也是三維的,輸入張量中的每一列獨立地對應到輸出張量中的一列。
以上是Keras 中的密集層會使輸入張量變平嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!