1. 程式人生 > 其它 >卷積神經網路(CNN)基礎

卷積神經網路(CNN)基礎

Padding and stride

一個N*N的影象,使用f*f的卷積核,會得到(n-f+1)*(n-f+1)的大小

但是邊緣的影象 使用了一次,而且整個影象縮小了

因此,可以增加一圈padding,假設增加的padding 的長度為p

會得到(n+2p-f+1)*(n+2p-f+1)的影象

通常由兩種卷積方式

“Valid”:不填充

“Same”:填充2p,使得輸入輸出相同大小

(n+2p-f+1)==n→2p+1-f==0→p=(f-1)/2

所以f通常情況下為奇數

如果加入了Stride

那麼輸出的影象大小就變成[(n+2p-f)/s+1]* [(n+2p-f)/s+1]

//n+2p-f 剩餘長度 /s 移動個數 +1 初始位置

如果除法(n+2p-f)/s不是一個整數,一般向下取整數,即放棄最後一個不完全的框

三維卷積

計算方式:對應位置的數字相乘,將乘積的和放在對應的位置

可以為三個通道的過濾器,設定不同的過濾器,但是過濾器的通道數必須和原圖一樣

我們可以設定多個過濾器,例如相對Red層即檢測垂直邊界,又檢測水平邊界,那麼我們可以選擇通過兩個立體過濾器,如下圖中,橙色和黃色為不同的過濾器,將結果組合,就得到下一層的輸入

Summary:

N*N*n_channels * f*f*n_channels → (n-f+1)*(n-f+1)*number of n_channels

6*6*3 3*3*3 4 * 4 * 2

單層卷積網路

Input: Nh[l-1]* Nw[l-1]*Nc[l-1] width*height*channels_num in layer l-1

Output: Nh[l]* Nw[l]*Nc[l] width*height*channels_num in layer l

Each filter is: f[l]*f[l]*Nc[l-1] f*f* channels_num in layer l-1

Activations: a[l]= Nh[l]* Nw[l]*Nc[l] A[l]= m*Nh[l]* Nw[l]*Nc[l]

Weight: Each filter * filter_num f[l]

*f[l]*Nc[l-1]*Nc[l]

Bias: (1,1,1,Nc[l]) 橫向排列組合的一排小立方體

為什麼使用卷積

卷積可以減少引數量

引數共享

同一個卷積核可以在不同區域中使用,例如垂直邊界卷積核可以在多次使用

稀疏連結

每一層中的輸出僅僅和上一層中的幾個引數相關,例如一個3*3的filter僅僅涉及9個引數

池化

特殊的過濾器,對一個塊內的資訊做不同的操作,eg,max、average,

Hyperparameter超參:filter size、stride

全連線

引數=filter_size*filter_size+bias || Activation size(L-1)*Actication size(L)+bias 偏置一般就是1