1. 程式人生 > >Tensorflow 入門學習13.卷積神經網路原理3.(網路結構詳解)

Tensorflow 入門學習13.卷積神經網路原理3.(網路結構詳解)

本文學習內容來自《TensorFlow深度學習應用實踐》
從前面介紹的卷積運算的基本原理和概念,從本質上來說卷積神經網路就是將影象處理的二維離散卷積運算和神經網路相結合。這種卷積運算可以用於自動提取特徵,而卷積神經網路也主要應用於二維影象的識別。

卷積神經網路原理

一個卷積神經網路包含一個輸入層、一個卷積層、一個輸出層,但是在真正使用的時候一般會使用多層卷積神經網路不斷地去提取特徵,特徵越抽象,越有利於識別(分類)。而且通常卷積神經網路也包含池化層、全連線層,最後再接輸出層。
一幅圖片進行卷積神經網路處理的過程:

  1. 影象輸入:獲取輸入的資料影象
  2. 卷積:對影象特徵進行提取
  3. maxpool:用於縮小在卷積時獲取的影象特徵
  4. 全連線層:用於對影象進行分類
    在這裡插入圖片描述

這幾個步驟依次進行,分別具有不同的作用。而經過卷積層的影象被分別提取特徵後獲得分塊的同樣大小的圖片:
在這裡插入圖片描述

可以看到,經過卷積處理後的影象被分為若干個大小相同的只具有區域性特徵的圖片。下面則對分解後的圖片使用一個小型神經網路做進一步處理,即將二維矩陣轉化成一維陣列:
在這裡插入圖片描述

在這個步驟,也就是對圖片進行卷積化處理時,卷積演算法對所有的分解後的區域性特徵進行同樣的計算,這個步驟稱為“權值共享”,其依據是:

  • 對影象等陣列資料來說,區域性陣列的值經常是高度相關的,可以形成容易被探測到的獨特的區域性特徵
  • 影象和其它訊號的區域性統計特徵與其位置是不太相關的,如果特徵圖能在圖片的一個部分出現,也能出現在任何地方。所以不同位置的單元共享同樣的權重,並在陣列的不同部分探測相同的模式。

數學上,這種由一個特徵圖執行的過濾操作是一個離散的卷積,卷積神經網路由此得名。

池化層的作用是對獲取的影象特徵進行縮減,從前面的例子中可以看 到,使用[2,2]大小的矩陣來處理特徵矩陣,使得原有的特徵矩陣可以縮減到1/4大小,特徵提取的池化效應,如圖:
在這裡插入圖片描述

經過池化處理的影象矩陣作為神經網路的資料輸入,這是一個全連線層對所有的資料進行分類處理,並且計算這個影象所求位置概率最大值。

通俗的概括,卷積神經網路是一個層級遞增的結構。

卷積神經網路的應用案例——LeNet5網路結構

在計算機視覺中卷積神經網路取得了巨大的成功,它在工業上以及商業上的應用很多,一個商業上最典型的應用就是識別支票上的手寫數字的LeNet5神經網路。從20世紀90年代開始美國大多數銀行都用這種技術識別支票上的手寫數字。
實際應用中的LeNet5卷積神經網路共有8層,其中每層都包含可訓練的神經元,而連線神經元的是每層的權重。

在這裡插入圖片描述
8層LeNet5神經網路。

INPUT

首先對於INPUT層來說,這是資料的輸入層,在原始模型框架中,輸入影象大小為[32,32],這樣能夠將所有的手寫資訊被神經網路感受到。

C1

第一個卷積層C1是最初開始進行卷積計算的層,形成6個特徵圖譜。卷積層特徵的計算公式:
xi=f((xii1Kijl)+bji)x^i=f((\sum{x_i^{i-1}*K_{ij}^l) + b_j^i})
其中xii1Kijlx_i^{i-1}*K_{ij}^l表示從第1層到l+1層要產生的feature數量,即5*5=25個;
b代表 bias的數量,這裡的bias是1。

卷積的輸入區域大小是5x5,每個特徵圖譜內參數共享,即每個特徵圖譜內只使用一個共同卷積核,卷積核有5x5個連線引數加上1個偏置共26個引數。卷積區域每次滑動一個畫素,這樣卷積層形成的每個特徵圖譜大小是(32-5)/1+1=28x28。C1層共有6*(55+1)=156個訓練引數,對於C1層來說,每個畫素都與前一個輸入層的畫素相連線,因此對於C1層,總共有15628*28=122304個連線。C1層的連線結構如下所示。

C1層連線結構:
在這裡插入圖片描述

LeNet5 C1到S2層的連線如下圖所示:

在這裡插入圖片描述

S2

S2是一個下采樣層。這裡是C1中的[2,2]區域內的畫素求和再加上一個偏置,然後將這個結果再做一次對映(sigmoid等函式),所以相當於對S1做了降維,此處共有62=12個引數。S2中的每個畫素都與C1中的22個畫素和1個集團相連線,所以有6514*14=5880個連線。
在這裡插入圖片描述

S2到C3

LeNet5最複雜的就是S2到C3層,其連線如圖所示:
在這裡插入圖片描述

前6個feature map與S2層相連的3個feature map相連線,後面6個feature map與S2層相連的4個feature map相連線,後面3個feature map與S2層部分不相連的4個feature map相連線,最後一個與S2層的所有feature map相連。卷積核大小依然是55,所以總共有6(355+1)+6*(455+1)+3*(455+1)+1*(655+1)=1516個引數。而影象大小為10*10,所以共有151600個連線。

C3

C3層也是一個卷積層

S4

S4是一個下采樣Pooling層,視窗大小仍然是22,共計16個feaure map,所以32個引數。16(25*4+25)=2000個連線。
在這裡插入圖片描述

C5

C5是卷積層,共120個feature map,每個feature map 與S4層所有的feature map相連線,卷積核大小是55,而S4層feature map大小也是55,所以C5的feature map就變成了1個點,共計有128*(25*16+1)=48120個引數。
在這裡插入圖片描述

F6

最後一個F6層也是全連線層,有84個節點,所以有84*(120+1)=10164個引數。F6層採用了正切函式,計算公式為:
xi=f(ai)=tanh(ai)x^i=f(a_i)=tanh(a_i)
在這裡插入圖片描述

輸出層

最後是輸出層,以上這8層合在一起構成了LeNet5神經網路的全部結構。
在這裡插入圖片描述

卷積神經網路的訓練

卷積神經網路在本質上是一種輸入到輸出的對映,它能夠學習大量的輸入與輸出之間的對映關係,而不需要在任何輸入和輸出之間的精確的數學表示式,只要用已知的模式對卷積網路加以訓練,網路就具有輸入輸出對之間的對映能力。卷積網路執行的是有導師訓練,所以其樣本集是由形如(輸入向量、理想輸出向量)的向量對構成的。
卷積神經網路的具體使用上和一般反饋神經網路相同,分成前向和後向傳播。

第一階段,向前傳播階段:

   a)從樣本集中取一個樣本(X,Yp),將X輸入網路; 
   b)計算相應的實際輸出Op。 
   在此階段,資訊從輸入層經過逐級的變換,傳送到輸出   層。這個過程也是網路在完成訓練後正常執行時執行的過程。在此過程中,網路執行的是計算(實際上就是輸入與每層的權值矩陣相點乘,得到最後的輸出結果): 
   Op=Fn(…(F2(F1(XpW(1))W(2))…)W(n)) 

第二階段,向後傳播階段

a)算實際輸出Op與相應的理想輸出Yp的差;
b)按極小化誤差的方法反向傳播調整權矩陣。

下一節學習TensorFlow實現LeNet例項。