[英]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
。
更新。 以下是上述示例的直觀說明:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.