吳恩達deeplearning之CNN—卷積神經網絡入門

1.邊界檢測示例

假如你有一張以下的圖像,你想讓計算機搞清楚圖像上有什麼物體,你能夠作的事情是檢測圖像的垂直邊緣和水平邊緣。 網絡

这里写图片描述以下是一個6*6的灰度圖像,構造一個3*3的矩陣,在卷積神經網絡中一般稱之爲filter,對這個6*6的圖像進行卷積運算,以左上角的-5計算爲例 
3*1+0*0+1*-1+1*1+5*0+8*-1+2*1+7*0+2*-1 = -5 
其它的以此類推,讓過濾器在圖像上逐步滑動,對整個圖像進行卷積計算獲得一幅4*4的圖像。 ide

这里写图片描述

爲何這種卷積計算能夠獲得圖像的邊緣,下圖0表示圖像暗色區域,10爲圖像比較亮的區域,一樣用一個3*3過濾器,對圖像進行卷積,獲得的圖像中間亮,兩邊暗,亮色區域就對應圖像邊緣。 學習

这里写图片描述

經過如下的水平過濾器和垂直過濾器,能夠實現圖像水平和垂直邊緣檢測。 spa

这里写图片描述

如下列出了一些經常使用的過濾器,對於不一樣的過濾器也有着不一樣的爭論,在卷積神經網絡中把這些過濾器當成咱們要學習的參數,卷積神經網絡訓練的目標就是去理解過濾器的參數。 設計

这里写图片描述


2. padding

在上部分中,經過一個3*3的過濾器來對6*6的圖像進行卷積,獲得了一幅4*4的圖像,假設輸出圖像大小爲n*n與過濾器大小爲f*f,輸出圖像大小則爲(n−f+1)∗(n−f+1)(n−f+1)∗(n−f+1)。 
這樣作卷積運算的缺點是,卷積圖像的大小會不斷縮小,另外圖像的左上角的元素只被一個輸出所使用,因此在圖像邊緣的像素在輸出中採用較少,也就意味着你丟掉了不少圖像邊緣的信息,爲了解決這兩個問題,就引入了padding操做,也就是在圖像卷積操做以前,沿着圖像邊緣用0進行圖像填充。對於3*3的過濾器,咱們填充寬度爲1時,就能夠保證輸出圖像和輸入圖像同樣大。 3d

这里写图片描述

padding的兩種模式: 
Valid:no padding 
輸入圖像n*n,過濾器f*f,輸出圖像大小爲:(n−f+1)∗(n−f+1)(n−f+1)∗(n−f+1) 
Same:輸出圖像和輸入圖像同樣大blog

3.卷積步長

卷積步長是指過濾器在圖像上滑動的距離,前兩部分步長都默認爲1,若是卷積步長爲2,卷積運算過程爲: io

这里写图片描述

加入stride後卷積圖像大小的通用計算公式爲: 
輸入圖像:n*n,過濾器:f*f步長:s,padding:p 
輸出圖像大小爲:⌊(n+2p−fs+1))⌋∗⌊(n+2p−fs+1)⌋⌊(n+2p−fs+1))⌋∗⌊(n+2p−fs+1)⌋,⌊⌋表示向下取整神經網絡

以輸入圖像7*7,過濾器3*3,步長爲2,padding模式爲valid爲例輸出圖像大小爲:channel

⌊(7+2∗0−32+1)⌋∗⌊7+2∗0−32+1)⌋=3∗3⌊(7+2∗0−32+1)⌋∗⌊7+2∗0−32+1)⌋=3∗3

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的矩陣,在兩個矩陣上分別加入誤差b1b1和b2b2,而後對加入誤差的矩陣作非線性的Relu變換,獲得一個新的4*4矩陣,這就是單層卷積網絡的完整計算過程。用公式表示: 

z[1]=w[1]a[0]+b[1]
a[1]=g(z[1])

其中輸入圖像爲a[0]a[0],過濾器用w[1]w[1]表示,對圖像進行線性變化並加入誤差獲得矩陣z[1]z[1],a[1]a[1]是應用Relu激活後的結果。 

这里写图片描述

  • 若是有10個過濾器參數個數有多少個呢? 

        每一個過濾器都有3*3*3+1=28個參數,3*3*3爲過濾器大小,1是誤差係數,10個過濾器參數個數就是28*10=280個。不論輸入圖像大小參數個數是不會發生改變的。

  • 描述卷積神經網絡的一些符號標識: 

这里写图片描述

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。 

網絡各層參數個數表: 

这里写图片描述

相關文章
相關標籤/搜索