1. 程式人生 > >卷積網路之理解

卷積網路之理解

   卷積是一種形式上的數學運算,同時也是一種特殊的線性運算卷積替代矩陣乘法運算的神經網路。使用卷積運算的動機:卷積是對兩個實變函式的數學運算,卷積的第一個引數叫做輸入,第二個引數通常是核函式,輸出有時是特徵對映(feature map)。卷積運算的輸入通常是多維陣列,核函式是由學習演算法優化得到的多維陣列的引數。傳統的神經網路是通過矩陣建立輸入與輸出之間的關係。

  當處理一張圖片時,輸入的影象可能包含成千上萬個畫素點,但是可以通過只佔用幾十到上百個畫素點的核來檢測一些小的有意義的特徵,例如影象的邊緣。池化函式使用某一位置的相鄰輸出的總體統計特徵來替代網路在該位置的輸出,最大池化引入了平移不變性。

   訓練網路,需要對核中的權重進行求導。用卷積網路做影象分割的主要思想是假設大片相連的畫素傾向於對應著相同的標籤。一般的圖模型可以描述相鄰畫素間的概率關係。

卷積神經網路CNN的結構一般包含這幾個層:

  • 輸入層:用於資料的輸入
  • 卷積層:使用卷積核進行特徵提取和特徵對映
  • 激勵層:由於卷積也是一種線性運算,因此需要增加非線性對映
  • 池化層:進行下采樣,對特徵圖稀疏處理,減少資料運算量。
  • 全連線層:通常在CNN的尾部進行重新擬合,減少特徵資訊的損失
  • 輸出層:用於輸出結果

  當然中間還可以使用一些其他的功能層:

  • 歸一化層(Batch Normalization):在CNN中對特徵的歸一化
  • 切分層:對某些(圖片)資料的進行分割槽域的單獨學習
  • 融合層:對獨立進行特徵學習的分支進行融合

    padding填充有兩種方式,其中same填充是保持通道數不變,是對原始輸入尺寸的填充,比如一張圖片輸入為7*7,需要對它進行填充到9*9.reshape的作用是將一位陣列分為n*n矩陣,依然有兩種形式(直接n*n,或者-1,n。這裡-1代表不知道分為幾行,但是知道分為n列)。如果一張圖片用一行數表示,reshape函式的作用就是取這一行數。

  VGG16模型一共五個卷積層,第一、二、三、四、五分別使用64、128、256、512和512個過濾器。每卷積一次,由於使用same填充,所以卷積之後得到的特徵大小和輸入的影象大小一樣,每次的變化在最後一個引數,也就是過濾器的個數。每次池化,因為採用的是2*2的,所以前面引數減半,第三個引數不變。softmax輸出的類別是自己要分的種類。

   定義一個數學模型,將輸入影象轉化為輸出標籤,模型的輸出依賴於內建的引數,引數不是人為的設定,而是通過計算機學習得到。還需要向模型輸入影象的資料集和正確的標籤,訓練資料,不停的調整引數,目標是找到合適的引數使得模型輸出儘可能多的正確結果。在訓練結束之前,看不到影象的結果,直到訓練的引數不再發生變化,這時候將測試集作為輸入,輸入到模型中從而檢測模型的效能。在測試的時候,會有文字,這些文字是把標籤轉換為0,1數字,比如0代表某一類,1代表另一類這種形式。TensorFlow可以直接完成引數的計算,TensorFlow通過佔位符描述輸入資料的格式。