1. 程式人生 > >cnn 系列文章 ----strides,padding詳解,基於andrew ng的DeepLearning

cnn 系列文章 ----strides,padding詳解,基於andrew ng的DeepLearning

慣例,還是分享一句歌詞呢。

《詩話小鎮》 歲月如流沙蒼老了風華 那誓言未長大 流年斑駁眉心硃砂 你畫上哪個她 繁華褪盡薄了紅紗

約定符號:

  • 輸入影象: n×n
  • 過濾器: f×f
  • paddig(填充): p
  • stride(步長): s

    padding

1. padding概念引入

這裡寫圖片描述 當使用一個3×3的過濾器對6×6的影象進行卷積操作後,會得到4×4的輸出影象。 此時輸出影象大小為:

(nf+1)×(nf+1) 但是這樣會帶來兩個缺點:
  1. 影象會越來越小
  2. 如上圖,原影象左上角綠色區域紙杯一個過濾器使用,而中間紅色區域會被多個過濾器使用,這就意味著邊緣資訊的丟失

為此引入padding(填充)的操作,即在卷積操作之前,先在影象邊緣進行畫素填充,畫素值可以是0也可以是影象邊緣畫素,填充寬度為p,例如在上圖中使用畫素0對影象邊緣填充,寬度p=1,此時輸出影象和輸入影象維度相等,並且影象左上角的畫素被多個過濾器使用,邊緣資訊丟失的更少。 此時,輸出影象的維度為:

(nf+2p+1)×(nf+2p+1)

2. padding填充模式

  1. padding=’VALID’

    此時p=0,即不填充, 輸出影象為(nf+1)×(nf+1)

  2. padding=’SAME’

    此時輸入和輸出影象維度相同,此時:

    p=f12 因為 nf+2p+1=n

    注意: 一般 f為奇數,主要有兩個好處:

    • p可以取整數
    • 奇數過濾器有一箇中點,也稱錨點(anchor),便於確認過濾器的位置

stride (卷積步長)

這裡寫圖片描述 不同於之前一次想左移動一格,此時向左移動兩格, 這裡寫圖片描述 同樣的,也是向下移動兩格 這裡寫圖片描述

最終的輸出影象大小為3×3

假設stride移動步長為s,則最後的輸出影象為:

(n+2pfs+1)×(n+2pfs+1) 其中, 為向下取整

比如上圖中:

(7+2×032+1)×(7+2×032+1)=3×3

GRB多通道影象的卷積

比如在6×6×3,過濾器的大小不在是3×3而是3×3×3,最後的3對應為通道數(channels)。

這裡寫圖片描述

卷積過程:比如第一個3×3與R通道卷積,會得到一個數,同理,第二個3×3與G通道卷積,第三個3×3與B通道卷積,然後將三個數累加,作為4×4的左上角第一個位置值,接下來依次在影象上滑動,最終得到4×4的輸出。

我們肯定不能只在影象中檢測一種特徵,而是同時要檢測水平,垂直,45度邊緣等特徵,此時就要使用多個過濾器了。假設我們使用兩個過濾器,最終的輸出為4×4×2,這裡的2是使用兩過濾器的結果,同樣,若是使用5個過濾器呢?輸出結果就是4×4×5了。下面是計算的例子:

這裡寫圖片描述

單層卷積

上一節,得到兩個4×4的矩陣,通過python的廣播機制在兩個矩陣上加入偏差bias,然後經過非線性函式relu,即可得到單層卷積網路的輸出。 圖示如下:

這裡寫圖片描述 公示表示如下:

z[l]=a[l1]f[l]+b[l]