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 中具有二維或更多維度的輸入]
總之,Keras 中的Dense 層獨立應用於輸入張量的最後一個軸,導致在某些場景下輸出不平坦。此行為對模型設計和參數共享具有影響。
以上是為什麼 Keras 密集層輸入會意外重塑?的詳細內容。更多資訊請關注PHP中文網其他相關文章!