深度學習之卷積和池化

轉載:http://www.cnblogs.com/zf-blog/p/6075286.htmlhtml


卷積神經網絡(CNN)由輸入層、卷積層、激活函數、池化層、全鏈接層組成,即INPUT-CONV-RELU-POOL-FCweb

(1)卷積層:用它來進行特徵提取,以下:網絡

輸入圖像是32*32*3,3是它的深度(即R、G、B),卷積層是一個5*5*3的filter(感覺野),這裏注意:感覺野的深度必須和輸入圖像的深度相同。經過一個filter與輸入圖像的卷積能夠獲得一個28*28*1的特徵圖,上圖是用了兩個filter獲得了兩個特徵圖;ide

咱們一般會使用多層卷積層來獲得更深層次的特徵圖。以下:函數

關於卷積的過程圖解以下:優化

輸入圖像和filter的對應位置元素相乘再求和,最後再加上b,獲得特徵圖。如圖中所示,filter w0的第一層深度和輸入圖像的藍色方框中對應元素相乘再求和獲得0,其餘兩個深度獲得2,0,則有0+2+0+1=3即圖中右邊特徵圖的第一個元素3.,卷積事後輸入圖像的藍色方框再滑動,stride=2,以下:spa

如上圖,完成卷積,獲得一個3*3*1的特徵圖;在這裏還要注意一點,即zero pad項,即爲圖像加上一個邊界,邊界元素均爲0.(對原輸入無影響)通常有3d

F=3 => zero pad with 1orm

F=5 => zero pad with 2htm

F=7=> zero pad with 3,邊界寬度是一個經驗值,加上zero pad這一項是爲了使輸入圖像和卷積後的特徵圖具備相同的維度,如:

輸入爲5*5*3,filter爲3*3*3,在zero pad 爲1,則加上zero pad後的輸入圖像爲7*7*3,則卷積後的特徵圖大小爲5*5*1((7-3)/1+1),與輸入圖像同樣;

而關於特徵圖的大小計算方法具體以下:

 卷積層還有一個特性就是「權值共享」原則。以下圖:

如沒有這個原則,則特徵圖由10個32*32*1的特徵圖組成,即每一個特徵圖上有1024個神經元,每一個神經元對應輸入圖像上一塊5*5*3的區域,即一個神經元和輸入圖像的這塊區域有75個鏈接,即75個權值參數,則共有75*1024*10=768000個權值參數,這是很是複雜的,所以卷積神經網絡引入「權值」共享原則,即一個特徵圖上每一個神經元對應的75個權值參數被每一個神經元共享,這樣則只需75*10=750個權值參數,而每一個特徵圖的閾值也共享,即須要10個閾值,則總共須要750+10=760個參數。

 

池化層:對輸入的特徵圖進行壓縮,一方面使特徵圖變小,簡化網絡計算複雜度;一方面進行特徵壓縮,提取主要特徵,以下:

池化操做通常有兩種,一種是Avy Pooling,一種是max Pooling,以下:

一樣地採用一個2*2的filter,max pooling是在每個區域中尋找最大值,這裏的stride=2,最終在原特徵圖中提取主要特徵獲得右圖。

(Avy pooling如今不怎麼用了,方法是對每個2*2的區域元素求和,再除以4,獲得主要特徵),而通常的filter取2*2,最大取3*3,stride取2,壓縮爲原來的1/4.

注意:這裏的pooling操做是特徵圖縮小,有可能影響網絡的準確度,所以能夠經過增長特徵圖的深度來彌補(這裏的深度變爲原來的2倍)。

 

全鏈接層:鏈接全部的特徵,將輸出值送給分類器(如softmax分類器)。

總的一個結構大體以下:

另外:CNN網絡中前幾層的卷積層參數量佔比小,計算量佔比大;然後面的全鏈接層正好相反,大部分CNN網絡都具備這個特色。所以咱們在進行計算加速優化時,重點放在卷積層;進行參數優化、權值裁剪時,重點放在全鏈接層。

相關文章
相關標籤/搜索