卷積神經網絡CNN介紹:結構框架,源碼理解【轉】


1. 卷積神經網絡結構

卷積神經網絡是一個多層的神經網絡,每層都是一個變換(映射),常用卷積convention變換和pooling池化變換,每種變換都是對輸入數據的一種處理,是輸入特征的另一種特征表達;每層由多個二維平面組成,每個平面為各層處理后的特征圖(feature map)。

常見結構:

輸入層為訓練數據,即原始數據,網絡中的每一個特征提取層(C-層)都緊跟着一個二次提取的計算層(S-層),這種特有的兩次特征提取結構使網絡在識別時對輸入樣本有較高的畸變容忍能力。具體C層和S層的個數不確定,依據具體案例而定;最后一個S,即完成了對原始數據的特征提取后,把S層的特征數據進行向量化(vector),然后連接到相應分類器。

一個具有7(輸入層+c1+s2+c3+s4+c5+v)層網絡結構的字母識別的CNN網絡

 

2  卷積層Convolution作用:

卷積操作:用一個濾波器(就是一個小特征矩陣,也稱卷積核)在圖像矩陣上游走,在對應位置元素相乘,再把相乘的結果相加,最后相加的結果形成新的圖像矩陣,游走完成后即完成了對原始圖像的卷積變換(映射變換),形成此濾波器下的特征提取。

C層是一個特征提取層,為什么用卷積運算;卷積運算一個重要的特點就是,通過卷積運算,可以使原信號特征增強,並且降低噪音;例如用增強邊緣的卷積去處理圖像,處理后的圖像邊緣特征增強。

3  S層作用:

S-層可看作是模糊濾波器,起到二次特征提取的作用。S層又叫做subsample層,子采樣層或者pooling(池化)層

在通過卷積獲得了特征 (features)之后,下一步我們希望利用這些特征去做分類。理論上講,人們可以用所有提取得到的特征去訓練分類器,例如 softmax分類器,但這樣做面臨計算量的挑戰。例如:對於一個 96X96像素的圖像,假設我們已經學習得到了400個定義在8X8輸入上的特征,每一個特征和圖像卷積都會得到一個 (96 − 8 + 1) * (96 − 8 + 1) = 7921 維的卷積特征,由於有 400個特征,所以每個樣例 (example)都會得到一個 892 *400 = 3,168,400維的卷積特征向量。學習一

個擁有超過 3百萬特征輸入的分類器十分不便,並且容易出現過擬合 (over-fitting)。

為了解決這個問題,首先回憶一下,我們之所以決定使用卷積后的特征是因為圖像具有一種“靜態性”的屬性,這也就意味着在一個圖像區域有用的特征極有可能在另一個區域同樣適用。因此,為了描述大的圖像,一個很自然的想法就是對不同位置的特征進行聚合統計,例如,人們可以計算圖像一個區域上的某個特定特征的平均值 (或最大值)。這些概要統計特征不僅具有低得多的維度 (相比使用所有提取得到的特征),同時還會改善結果(不容易過擬合)。這種聚合的操作就叫做池化 (pooling),有時也稱為平均池化或者最大池化 (取決於計算池化的方法)。

 4  網絡的前饋計算:

4.1C層卷積計算:

用一個可訓練的濾波器kij去卷積一個輸入的圖像(第一階段是輸入的圖像,后面的階段就是S層的結果特征map了),然后加一個偏置bx,得到卷積層Cx

       假設層為s層特征圖像Xil-1(pooling層),l層為卷積C層,卷積結果為Xjl

                 

參數kij為兩層間卷積核(濾波器,kernals),由於s層有m個特征,c層有n個特征,所以一共有m*n個卷積核。bj為卷基層每個結果特征對應的一個偏置項bias,f為非線性變換函數sigmoid函數;Mj為選擇s層特征輸入的個數,即選擇多少個s層的圖像特征作為輸入;由於選擇s層的特征個數方法不同,主要分為三種卷積選擇方式

1、全部選擇:

s層的全部特征都作為輸入, Mj=m。如上圖所示。

2、自動稀疏選擇:

在卷積計算前加入稀疏稀疏aij,通過稀疏規則限制(論文后面),使算法自動選取部分s層特征作為輸入,具體個數不確定。

3、部分選擇:

按照一定的規則,固定的選取2個或者3個作為輸入。

 

卷積結果特征圖像大小計算:

假設輸入特征圖Feature Map大小為28*28。卷積核大小5*5。

卷積后特征圖大小size(Cx)=(28-5+1,28-5+1)

Ps:卷積計算相當於神經網絡中的前饋計算sigmoid(W*X+b),卷積核kij相當於系數矩陣W的一部分小切片,b為偏置項,詳細介紹見上一篇博客:卷積Convolution和池化pooling特征提取,分類

 

卷積核kernals的來源:

1,隨機初始化;2,用linear sparseautoencoder進行非監督特征學習,學習特征卷積

 

4.2 S層計算:

Pooling池化計算主要分為均值池化,最大值池化等,有的算法還在此話后進行sigmoid非線性變換;

直接均值池化

進行非線性變換池化

down(Xjl-1)表示下采樣操作,就是對一個小區域進行pooling操作,使數據降維。

 

5.網絡的反向傳播:

 

可以先參考 :Deep Learning論文筆記之(四)CNN卷積神經網絡推導和實現了解一下cnn網絡的前饋計算和誤差反向傳播的過程;之后再看Deep Learning論文筆記之(五)CNN卷積神經網絡代碼理解。

 

兩個版本的cnn代碼:

1,Deep learning:五十一(CNN的反向求導及練習)次cnn網絡比較簡單,而且感覺設計上面有些問題,cnn是為了提取特征來降低原始數據的,最后這個網絡反而把數據量變大了,但是作為代碼聯系還是挺好的,網絡簡單,講解詳細。在此感謝tornadomeet

2,Deep Learning論文筆記之(五)CNN卷積神經網絡代碼理解,此matlabdeeplearning toolbox中的代碼,相比1中的代碼,這個代碼感覺標准了許多,采用棧式編程,用棧(matlab中的元包矩陣)來構架整個網絡,顯得結構緊湊,規整。(個人見解)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM