簡體   English   中英

Keras Dense圖層的輸入未展平

[英]Keras Dense layer's input is not flattened

這是我的測試代碼:

from keras import layers
input1 = layers.Input((2,3))
output = layers.Dense(4)(input1)
print(output)

輸出是:

<tf.Tensor 'dense_2/add:0' shape=(?, 2, 4) dtype=float32>

但是什么是重要的?

文件說:

注意:如果圖層的輸入的排名大於2,則在使用內核的初始點積之前將其展平。

輸出重塑了嗎?

目前,與文檔中所述相反, Dense圖層應用於輸入張量的最后一個軸

與文檔相反,我們實際上並沒有將其扁平化。 它獨立應用於最后一個軸。

換句話說,如果在形狀的輸入張量(n_dim1, n_dim2, ..., n_dimk)上應用具有m單位的Dense層,則其輸出形狀將為(n_dim1, n_dim2, ..., m)


作為旁注:這使得TimeDistributed(Dense(...))Dense(...)彼此等效。


另一方面注意:請注意這具有共享權重的效果。 例如,考慮這個玩具網絡:

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

model.summary()

模型摘要:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_1 (Dense)              (None, 20, 10)            60        
=================================================================
Total params: 60
Trainable params: 60
Non-trainable params: 0
_________________________________________________________________

如您所見, Dense圖層只有60個參數。 怎么樣? Dense層中的每個單元連接到輸入中每行的5個元素,具有相同的權重 ,因此10 * 5 + 10 (bias params per unit) = 60


更新。 以下是上述示例的直觀說明:

在Keras中具有兩個或更多維度的輸入上應用密集層的視覺圖示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM