1. 程式人生 > >cnn系列文章 --池化層和簡單卷積網路示例

cnn系列文章 --池化層和簡單卷積網路示例

出去吃了個飯,突然感覺好沒胃口,好落寞。。。。 哎,繼續吧 一句歌詞繼續中:

《霜雪千年》 苔綠青石板街 斑駁了流水般歲月 小酌三盞兩杯 理不清纏繞的情結

典型的卷積神經網路

  • convolution (Conv) 卷積層
  • pooling (pool) 池化層
  • fully connected (FC) 全連線層

池化層

1. max pooling(最大池化)

簡單的說就是使用過濾器對影象進行區域分割,然後輸出每個區域的最大值。

比如下圖使用2×2的過濾器,選擇步長為2,則然後輸出422+1=22

×2的影象,每個畫素點的值為原影象中過濾器覆蓋區域的最大值 這裡寫圖片描述

最大池化的直觀理解:

還記得垂直邊緣檢測的例子嗎,在邊緣處,輸出影象的值很大。也就是說,當輸出影象的值很大時,意味著提取了某些特徵。

而最大池化的操作就是,只要在任何一個象限中提取到某個特徵,就都會保留到最大池化的輸出結果中。如果提取到某個特徵,則保留其最大值,比如上圖中左上角的9,而如果為提取到特徵,則最大池化後的輸出仍很小,比如右上角的2.

在實際工作中,加入最大池化後,通常網路表現的會很好。

注意當有多個通道時:是對每一通道分別進行最大池化操作,不會改變影象的通道數目。 這裡寫圖片描述

2.average pooling (平均池化)

顧名思義,就是在每個區域上求平均值,作為平均池化的輸出值 這裡寫圖片描述

平均池化用的很少

總結

  1. 池化操作不需要訓練引數,只有兩個超引數:

    • f:filtersize
    • s:stride

    常見的超引數有:

    f=2,s=2將影象的高度和寬度減半

    f=3,s=2

  2. 很少用padding,即p=0

  3. input: nH×nW×nC

    output: nHfs+1×nWfs+1×nC

卷積神經網路示例

引數設計收LeNet-5啟發。我的建議還是在紙上推導一下呢。

這裡寫圖片描述

接下來看一下網路結構和引數:

這裡寫圖片描述

來計算幾個引數: 我發現208這個引數數量有點沒太搞懂

不是5×5×3×8+8=608嗎?

  • 引數大多集中在全連線層
  • 隨著網路層深度增加,啟用數量在減小,但是數量不能下降的太快,否則會影響網路的表現效能。

卷積神經網路的優勢

這裡寫圖片描述

若是全連線層需要的引數大概是14 million。

  • 引數共享 這裡寫圖片描述 某一個特徵檢測器可以在所有影象上使用,大量減少引數數量
  • 稀疏連線 這裡寫圖片描述 每一個輸出畫素值緊依賴於輸入很小的輸入值,而非全連線層的所有輸入值。更容易發現區域性特徵

通過以上兩種方式,cnn結構大量減少引數數量。

接下來講解tensorflow卷積和池化兩個函式。