卷積核



以一張圖片作為開始吧:




這里的輸入數據是大小為(8×8)的彩色圖片,其中每一個都稱之為一個feature map,這里共有3個。所以如果是灰度圖,則只有一個feature map。


進行卷積操作時,需要指定卷積核的大小,圖中卷積核的大小為3,多出來的一維3不需要在代碼中指定,它會自動擴充至圖片的channel數。這里一共定義了5個卷積核,進行卷積操作后,得到了5個feature map。 需要注意的是,**feature map的數量就等於卷積核的數量**。

卷積層尺寸的計算原理
輸入矩陣格式:四個維度,依次為:樣本數、圖像高度、圖像寬度、圖像通道數
輸出矩陣格式:與輸出矩陣的維度順序和含義相同,但是后三個維度(圖像高度、圖像寬度、圖像通道數)的尺寸發生變化。
權重矩陣(卷積核)格式:同樣是四個維度,但維度的含義與上面兩者都不同,為:卷積核高度、卷積核寬度、輸入通道數、輸出通道數(卷積核個數)
輸入矩陣、權重矩陣、輸出矩陣這三者之間的相互決定關系
卷積核的輸入通道數(in depth)由輸入矩陣的通道數所決定。
輸出矩陣的通道數(out depth)由卷積核的輸出通道數所決定。
輸出矩陣的高度和寬度(height, width)這兩個維度的尺寸由輸入矩陣、卷積核、掃描方式所共同決定。計算公式如下。
\(height_{out} = (height_{in} - height_{kernel} + 2*padding) / stride + 1\)
\(width_{out} = (width_{in} - width_{kernel} + 2*padding) / stride + 1\)




下面這張圖展示了卷積操作具體是如何計算的:




這里用到的就是Conv2D,事實上還有Conv1D,Conv3D。這里再介紹一下Conv1D。

Conv1D是專門針對序列信息的,上面的輸入為seq_len=3,dim=3,卷積核的大小為2,由於詞向量維度為3,所以卷積核會自動擴充到3維,這和上面自動等於通道個數是相似的。


舉個栗子:

這里定義了兩個Conv1D,卷積核的大小分別設為5和3,隨機生成input,代表的意義分別為【batch,seq_len,dim】。
運行的結果:



特別值得注意的是,1*1的卷積核可以用來代替全連接層來使用。它的好處有很多,可以參考:一文讀懂卷積神經網絡中的1x1卷積核
要求是卷積核的個數等於全連接層的神經元個數
每一個卷積核都可以生成一個feature map,但是在全連接層中就變成了一個值,破壞了空間信息,卷積核的話可以保留空間信息。同時可以簡化參數,因為卷積核是權重共享的。





參考:
【1】CNN中卷積層的計算細節
【2】一維卷積tensorflow2版本的Conv1D以及Pytroch的nn.Conv1d用法
【3】一文讀懂卷積神經網絡中的1x1卷積核


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM