1. 程式人生 > >CNN卷積神經網路入門整合

CNN卷積神經網路入門整合

這是一篇關於CNN入門知識的部落格,基本手法是抄、刪、改、查,就算是自己的一個筆記吧,以後忘了多看看。   1.邊界檢測示例
假如你有一張如下的影象,你想讓計算機搞清楚影象上有什麼物體,你可以做的事情是檢測影象的垂直邊緣和水平邊緣。
 
卷積計算可以得到影象的邊緣,下圖0表示影象暗色區域,10為影象比較亮的區域,同樣用一個3*3過濾器,對影象進行卷積,得到的影象中間亮,兩邊暗,亮色區域就對應影象邊緣。
    通過以下的水平過濾器和垂直過濾器,可以實現影象水平和垂直邊緣檢測:
  在卷積神經網路中把這些過濾器當成我們要學習的引數,卷積神經網路訓練的目標就是去理解過濾器的引數。 常用的過濾器:  
 
2. padding
在上部分中,通過一個3*3的過濾器來對6*6的影象進行卷積,得到了一幅4*4的影象,假設輸出影象大小為n*n與過濾器大小為f*f,輸出影象大小則為(n−f+1)∗(n−f+1)
這樣做卷積運算的缺點是,卷積影象的大小會不斷縮小,另外影象的左上角的元素只被一個輸出所使用,所以在影象邊緣的畫素在輸出中採用較少,也就意味著你丟掉了很多影象邊緣的資訊,為了解決這兩個問題,就引入了padding操作,也就是在影象卷積操作之前,沿著影象邊緣用0進行影象填充。

對於3*3的過濾器,我們填充寬度為1時(加了一圈),就可以保證輸出影象和輸入影象一樣大。6+1+1-3+1=6:
 
 
same padding 在平面外部補0 若且步長是1的話圖片大小與原來相同。
valid padding不會超出平面外部。所以比原來圖片要小
池化層是在卷積層之後的,會降維,減少特徵數   3.卷積步長
卷積步長是指過濾器在影象上滑動的距離,上兩部分步長都預設為1,如果卷積步長為2,卷積運算過程為:
    4.彩色影象的卷積
以上講述的卷積都是灰度影象的,如果想要在RGB影象上進行卷積,過濾器的大小不在是3*3而是有3*3*3,最後的3對應為通道數(channels),卷積生成影象中每個畫素值為3*3*3過濾器對應位置和影象對應位置相乘累加,過濾器依次在RGB影象上滑動,最終生成影象大小為4*4。

 
另外一個問題是,如果我們在不僅僅在影象總檢測一種型別的特徵,而是要同時檢測垂直邊緣、水平邊緣、45度邊緣等等,也就是多個過濾器的問題。如果有兩個過濾器,最終生成影象為4*4*2的立方體,這裡的2來源於我們採用了兩個過濾器。如果有10個過濾器那麼輸出影象就是4*4*10的立方體。   5.單層卷積網路
通過上一節的講述,影象通過兩個過濾器得到了兩個4*4的矩陣,在兩個矩陣上分別加入偏差b1和b2,然後對加入偏差的矩陣做非線性的Relu變換,得到一個新的4*4矩陣,這就是單層卷積網路的完整計算過程。用公式表示:
   
  如果有10個過濾器引數個數有多少個呢?
--每個過濾器都有3*3*3+1=28個引數,3*3*3為過濾器大小,1是偏差係數,10個過濾器引數個數就是28*10=280個。不論輸入影象大小引數個數是不會發生改變的     第L-1層:輸入圖形通道數=輸入影象的層數=過濾器層數
第L層:輸出影象通道數=過濾器個數=第L+1層輸入影象層數...(不管輸入和過濾層多少層,影象輸入與每個過濾器卷積過後都是一層矩陣,影響輸出層數的只有過濾器的個數)   6.簡單卷積網路示例  
  卷積神經網路層的型別:
⦁ 卷積層(convolution,conv)
⦁ 池化層(pooling,pool)
⦁ 全連線層(Fully connected,FC)   7.池化層
最大池化(Max pooling)
最大池化思想很簡單,以下圖為例,把4*4的影象分割成4個不同的區域,然後輸出每個區域的最大值,這就是最大池化所做的事情。其實這裡我們選擇了2*2的過濾器,步長為2。在一幅真正的影象中提取最大值可能意味著提取了某些特定特徵,比如垂直邊緣、一隻眼睛等等
 
以下是一個過濾器大小為3*3,步長為1的池化過程,具體計算和上面相同,最大池化中輸出影象的大小計算方式和卷積網路中計算方法一致,如果有多個通道需要做池化操作,那麼就分通道計算池化操作。
  平均池化和最大池化唯一的不同是,它計算的是區域內的平均值而最大池化計算的是最大值。在日常應用使用最多的還是最大池化。
 
 池化的超引數:步長、過濾器大小、池化型別最大池化or平均池化   8.卷積神經網路示例
以下是一個完整的卷積神經網路,用於手寫字識別,這並不是一個LeNet-5網路,但是設計令該來自於LeNet-5。
 
網路各層引數個數表:
           博文借鑑:https://blog.csdn.net/ice_actor/article/details/78648780