吳恩達 卷積神經網路 學習筆記(一)

2021-08-19 15:25:18 字數 3159 閱讀 9836

如圖示,之前課程中介紹的都是64* 64 3的影象,而一旦影象質量增加,例如變成1000 1000 * 3的時候那麼此時的神經網路的計算量會巨大,顯然這不現實。所以需要引入其他的方法來解決這個問題。

邊緣檢測可以是垂直邊緣檢測,也可以是水平邊緣檢測,如上圖所示。

至於演算法如何實現,下面舉乙個比較直觀的例子:

可以很明顯的看出原來6 * 6的矩陣有明顯的垂直邊緣,通過3 * 3的過濾器(也叫做「核」)卷積之後,仍然保留了原來的垂直邊緣特徵,雖然這個邊緣貌似有點大,這是因為資料不夠大的原因,如果輸入資料很大的話這個不是很明顯了。

除了上面的垂直,水平邊緣檢測,其實也可以檢測初顏色過度變化,例如是亮變暗,還是暗變亮?

下面是一些常見的過濾器,第二個是sobel filter,具有較強的魯棒性,第三個是schoss filter

其實過濾器的9個引數也可以通過學習的方式獲得,雖然比較費勁,但是可能會學到很多其他除了垂直,水平的邊緣特徵,例如45°,70°等各種特徵。

之所以運用padding(填充)主要是為了解決如下兩個缺點:

1.由前面的例子可以看到,每經過一次卷積計算,原資料都會減小,但有的時候我們並不希望這樣。舉個比較極端的例子:假設原資料是30 * 30的乙隻貓的影象,經過10次卷積(過濾器是3 * 3)後,最後影象只剩下了10 * 10了,此時不就剩下馬賽克了嗎23333

2.由卷積的計算方法可以知道,影象邊緣特徵計算次數顯然少於影象中間位置的畫素點,如下圖示(綠色的位置明顯是冷宮)

所以為了解決上=上面兩個問題,引入了padding,一般是padding=1,填充的資料是0。效果如下:

原來的6 * 6填充後變成了8 * 8,此時在經過一次卷積得到的仍舊是6 * 6的矩陣。

下面總結一下卷積之後得到矩陣大小的計算方法,假設:

得到的矩陣大小是 (n+2p-f+1)*(n+2p-f+1)

對於第二個缺點,雖然邊緣畫素點仍舊計算的比較少,但是這個缺點至少一定程度上被削弱了。

兩種選擇:valid 卷積same 卷積

即不新增padding。

即保持原影象矩陣的大小。滿足 (n+2p-f+1) = n ,即

p=f−12」 role=」presentation」 style=」position: relative;」>p=f

−12p=f−12

為了滿足上式,f一般奇數。

過濾器縱向,橫向都需要按步長s來移動,如圖示

結合之前的內容,輸出矩陣大小計算公式方法為,假設:

得到的矩陣大小是 ⌊

n+2p−fs」 role=」presentation」 style=」position: relative;」>n+2

p−fs

n+2p−fs

+1⌋⌊⌋: 向下取整符號 ⌊59/60⌋=0

⌈⌉:向上取整符號 ⌈59/60⌉=1

這一節用立體卷積來解釋。

如圖示,輸入矩陣是 6 * 6 * 3(height * width * channels),過濾器是3 * 3 * 3,計算方法是一一對應相乘相加,最後得到4 * 4的二維矩陣。

有時可能需要檢測橫向邊緣和縱向邊緣,或者其他特徵,所以我們可以使用多個過濾器。

上圖則使用了兩個過濾器,得到的特徵矩陣大小為 4 * 4 * 2.

如圖示得到4 * 4的矩陣後還需要加上乙個變差

bn」 role=」presentation」 style=」position: relative;」>bnbn

個引數。

下面總結了各項引數的大小和表示方法:

輸出矩陣(height* width* channels):

nhl∗nwl∗ncl」 role=」presentation」 style=」position: relative;」>nlh

∗nlw

∗nlc

nhl∗nwl∗ncl

輸出層與輸入層計算公式:

nh/w[l]=[nh/w[l−1]+2p[l]−f[l]s[l]+1]」 role=」presentation」 style=」position: relative;」>n[l

]h/w

=[n[

l−1]

h/w+

2p[l

]−f[

l]s[

l]+1

]nh/w[l]=[nh/w[l−1]+2p[l]−f[l]s[l]+1]

上圖簡單介紹了卷積網路的計算過程,需要再介紹的一點是最後一層的全連線層,即將7 * 7 * 40的輸出矩陣展開,得到1960個節點,然後再採用邏輯回歸或softmax來進行**。

另外從上面的例子還可以看到,在一般的卷積神經網路中,每一層的矩陣的height和width是逐漸減小的,而channel則是增加的。

卷積神經網路中常見的三中型別的layer:

pooling layer(池化層)的作用是壓縮資料,加速運算,同時提高所提取特徵的魯棒性。

注意:一般來說池化層是不需要padding的,所以p都會置為0

卷積相比於全連線的好處最直觀的就是使用的引數更少:

如圖示,加入我們有乙個32 * 32 * 3的,經過6個5 * 5的過濾器後可以得到28 * 28 * 6的矩陣,此時我們只需要

5∗5∗6=150」 role=」presentation」 style=」position: relative;」>5∗5

∗6=150

5∗5∗6=150

個引數就可以了。而如果不用卷積呢?

首先32 * 32 3 = 3072,假如輸出矩陣也要是28 28 * 6,即4704個節點,如果全連線的話那麼就需要4704 * 3072個權

重引數,所以這個對比還是很明顯的了。

至於為什麼可以保證引數少的同時也保證了有效性,是因為如下兩個原因

引數共享:例如我們希望獲取影象的豎向特徵,那麼我們只需加入乙個可以檢測豎向特徵的過濾器就夠了。

稀疏連線:如上圖所示,輸出矩陣左上角的0只與輸入矩陣左上角的9個元素有關,其他的值不會干擾。輸出矩陣其他位置也一樣。所以這就是為什麼卷積網路也可以捕捉到影象平移的特徵,例如將中的貓向左平移幾個畫素點後,依然能夠識別正確。

吳恩達《卷積神經網路》

一 yolo algorithm 把輸入的分割成3x3個格仔或19x19個格仔,每個格仔進行檢測輸出八個特徵,3x3就輸出3x3x8個向量。yolo演算法的優點是不需要乙個演算法跑很多次。相反這是單次卷積實現,在處理計算時很多步驟都是共享的,而且執行速度非常快可以達到實時識別。物件中點的座標在哪個格...

吳恩達 卷積神經網路

卷積神經網路 卷積操作 設輸入n,filter為f,padding為p,步長 stride 為s 則卷積 不滿足結合律,滿足結合律還需要對filter進行水平和垂直翻轉 之後影象大小為 n 2p f s 1 向下取整 rgb影象卷積操作 同時相乘相加,三個channel輸出乙個值 為什麼cnn可以避...

吳恩達 卷積神經網路

1 灰度影象,邊緣檢測,使用核函式的缺點,影象的向量會不斷的縮小,另外乙個就是邊緣的向量相比於中間的向量被覆蓋的次數會少很多。解決這個的方法就是padding在影象的周圍再新增一圈向量。2 核函式通常是奇數維向量 3 卷積層,池化層 選出某一區域的最大值,另外還有 平均池化,就是求乙個小區域的均值 ...