1. 程式人生 > 實用技巧 >入門卷積神經網路學習(一):卷積層

入門卷積神經網路學習(一):卷積層

卷積層

當一個深度神經網路以卷積層為主體時,我們稱為卷積神經網路。

卷積運算:

圖片分黑白和彩色,在影象裡我們相應地有灰度影象和灰色影象。對於灰度影象,由於只有陰暗的區別,因此我們只需要一個數字就可以表示出不同的灰度。如:0表示最暗的黑色,255表示為最亮的白色。對於彩色影象我們就用(R,G,B)三個數字表示一個顏色。
也就是說影象是三維形狀的。當輸入物件為影象時,卷積層會以3維資料的形式接受輸入資料,並同樣以3維資料的形式輸出者下一層。
神經網路的卷積層就是運用卷積運算對原始影象或者上一層的特徵進行變換的層。我們利用多個不同的卷積核(filter)【也可以叫做濾波器】對輸入進來的三維影象提取特徵,一個卷積核就可以得到一個張量。最後就可以獲得一個全新的三維張量(特徵圖),通常一個深度神經網路的第一個卷積核會以影象作為輸入,而之後的卷積核會以前面的層輸出的特徵圖作為輸入。

通過動圖來形象的瞭解卷積運算。
Filter則為卷積核,而w代表權重,b則代表偏執

從這兩幅圖中,我們大概明白了卷積運算的方法,但是拿2圖來說,一個5x5的輸入在經過3x3的卷積核時,會輸出3x3的輸入。但是會造成經過幾次運算後,我們得到的輸入可能就變成了1x1.
{卷積運算:一個輸入時m維,一個卷積核時n維,且m>n時,輸出為m-n+1}
接著我們回頭看1圖。引出了填充與步幅。
1圖中的輸入的藍色部分為5x5,卷積核為3x3,那麼得到的輸入應該是3x3.
為了防止出現上述的情況,我們在藍色部分外增加了以幅度為1的0填充。使用填充的目的是為了調整輸出的大小。當然這個填充的數值可以為0,可以為1,2,3等等。
那現在的輸入時7x7了,為什麼我們的輸出還是3x3呢。
是因為這次運算的步幅為2。也就是一個7行的張量,卷積核從第一行做完緊接著要從第二行開始,但是因為步幅為2所以我們從第三行開始。
所以說(增大填充,輸出增大。增大步幅,輸出減小。)
代入公式就是輸出大小為(H,W),卷積核為(FH,FW),輸出大小為(OH,OW),填充為P,步幅為S。
OH=(H+2P-FH)/S+1
OW=(W+2P-FW)/S+1
舉個例子:
輸入大小為(4*4),填充為1,步幅為1,卷積核的大小為(3,3)
OH=(4+2x1-3)/1+1=4
OW=(4+2x1-3)/1+1=4
得到的輸出結果就為(4,4)

現在再來看1圖,1圖中所展現的不是(7x7)的輸入,而是(7x7x3)的輸入,也就是三維輸入。

我們將它拆開為了3個二維,與三個卷積核進行卷積運算。
在這裡插入圖片描述
結合一下1圖和3圖能更清楚的明白卷積運算對三維輸入時怎麼去做的。

再看一次3圖。我們用一個三維的輸入和一個三維的卷積核,得到一個二維的輸出。那當我們再次做卷積的時候輸入變成了二維的不就出錯了?
所以我們回頭看向1圖,1圖中,我們設定了兩個不同的卷積核與兩個不同的偏置。得到了兩個不同的二維輸出,將這兩個二維的輸出一組合就是一個三維的輸出了。
我們接著看圖4.

一個三維的輸入資料。(C,H,W)。我們想讓輸出資料也是三維的,我們需要FN個卷積核()。我們需要注意的是輸入資料和卷積核的C值一定要相同。
這就是三維的輸出數值。