這是一篇關於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