通俗易懂的卷積神經網絡教程-第二講

先回憶第一講的內容

  我們通過把圖片數字化,變成一個個的小點,再把小點點給拉成一行,變成自變量。然後我們把圖片中的數字作爲標籤,也就是因變量,我們設定一張圖片有10個因變量,這十個變量值是01的數字,如果是某位置x1,那麼這個圖片中的數字就是x-1

  如果有6W張圖,我們會得到6W組這樣的變量,這樣的變量就是我們輸入到卷積神經網絡中的輸入變量。最後我們會得到一個自變量、標籤的表格:

1

自變量1

X_1,1

X_1,2

...

X_1,784

自變量2

X_2,1

X_2,2

...

X_2,784

...

...

...

...

...

自變量6W

X_6W,1

X_6W,2

...

X_6W,784

  表中,X_a,b指的是第a張圖中的第b個自變量。

2

標籤1

Y_1,1

Y_1,2

...

Y_1,10

標籤2

Y_2,1

Y_2,2

...

Y_2,10

...

...

...

...

...

標籤6W

Y_6W,1

Y_6W,2

...

Y_6W,10

  表中,Y_a,b指的是第a張圖中的第b個標籤。

  我們把這些數據帶入到CNN中,就可以開始正向傳播了。正向傳播分爲三個步驟,第一個步驟是卷積、第二步驟是池化、第三步驟是BP網絡全連接。前兩部也可以分爲多步來解決問題,如:“輸入數據->卷積1-->池化1->卷積2-->池化2->...->卷積n->池化n->BP網絡->輸出數據”的形式。

      那麼我先說一下怎麼卷積,我們導入了表1和表2兩組數據。首先我們來搞1

(1)我們選取1中的一行,然後把這行的數據還原成28*28的一個矩陣:


  有人會說,剛纔給拉成一行了,這回又還原了是不是傻啊,脫褲子放屁多此一舉嘛!你說的對,確實多此一舉。但是你既然能夠想到這一點,就說明你第一講的內容掌握的不錯,也就是說我寫得文章你看懂了,說明我的講解奏效了。其實它還有一個作用,我們圖片輸入進去是一個個的變量,6W組圖片就6W組變量,東西太亂了,如果給拉成一行,然後所有數據合併成一組變量,也就是表1,那麼看起來是不是也很簡潔呢?

(2)還原之後呢,我們隨機生成6組濾波器矩陣,每一個矩陣是一個5*5的矩形表格,每一個表格裏面都有一個數據,這些數據是隨機生成的的值wij每個濾波器我們在設定一個偏置量值bk6組就一共有6個偏置量。



(3)然後我們用剛剛從表1拿出來的第一組自變量與第一個濾波器做卷積運算。這個與我們第一節講的卷積有些不同,我們不再最前面添加0,而是直接從第一個小點開始,我們把5*5的濾波器與自變量矩陣最前面的五行五列對齊,也就是把濾波器放到紅色的位置:


(4)後我們把自變量小格和濾波器對應的位置相乘,如第一個小格與濾波器的第一個值就乘積是X1*W11,第二個乘積就是X2*W12,以此類推,最後一個乘積就是X117*H55。我們得到了25個乘積值,然後我們把乘積給加和,並加上偏置量b1求出D1,1=X1*W11+X2*W12+...+X117*H55+b1

(5)接下來我們把濾波器往右平移一個格子:


(6)用濾波器與紅色的格子一一對應乘積並求和,並加上偏置量b1得到D1,2=X2*W11+X3*W12+...+X118*H55+b1

(7)以此類推,一個個地求解,直到到達最後一行:


(8)後我們求出與濾波器的乘積並求和,並加上偏置量b1,我們可以得到:D1,24==X24*W11+X25*W12+...+X140*H55+b1。到此爲止我們求得了24D

(9)接下來我們幹啥呢返回到我們最開始的對其狀況,然後再往下移動一格,如圖:

回到原來


接着往下移動一格


(10)然後我們按照上面的(1~9)的方法計算D2,1~D2,24,計算完成之後返回:


(11)之後向下移動一格繼續計算,直到所有的D都計算完成爲止,最後一個DD24,24。然後我們得到了一格新的24*24D矩陣:


(12)得到了D矩陣後,我們令這個矩陣編號爲d1,然後按照(1~11)的方法,用其餘的5個濾波器進行計算,其餘的5個濾波器後面加的偏置量分別爲b2~b5,分別得到了d2~d6。至此我們的卷積過程就完畢了,我們得到了6個卷積矩陣。

(13)我們得到這些所有卷積矩陣之後,我們把得到的所有的值sigmoid一下,給它搞到0~1之間的一個數。這個函數這麼寫:

其中x指的是矩陣中的每一個值。

  如果大家還是沒看懂的話,請看下面的圖圖,圖中上面的是得到的新矩陣d,下面是原始的自變量矩陣,自變量矩陣變成深顏色就是與濾波器貼合到了一塊:

 

  這一步驟用圖像流程圖表示是這樣的,我們的長度寬度變小了,但是高度變大了(從1變到了6):

 

     看完這張圖想必大家對卷積運算的過程就十分地清晰了吧?如果可以我們進行下一步,池化計算。

 池化計算和我們第一節講的一樣,設定一個採樣器a,比如我們的大小設置爲2*2=4,那麼我們怎麼採樣呢,首先我們選取d矩陣的其中之一,比如d1:


(1)我們從左側頭部開始,用採樣器框選上前兩行兩列,如紅色框框所示:


(2)然後我們選取這裏面的自變量【x1,x2,x25,x26】這四個變量中最大值的一個,比如說最大值是x2,那麼我們捨棄其它的變量並令p1,1=x2

(3)接下來我們把採樣器向右移動一次,這次和剛纔卷積可不是一樣的了,我們這一次的移動一次是按照採樣器a的大小來移動的,因爲採樣器的列數爲2,所以向右移動2個小格:


(4)接下來我們選取這四個變量【x3,x4,x27,x28】的最大值,比如說最大值是x27,那麼我們捨棄其他的變量並令p1,2=x27

(5)就這樣移動,一直移動到末尾,我們會求得12p變量,最後一個變量是p1,12。求完之後,我們返回最初的狀態:


  並向下移動一次,因爲a的行數是2,那麼我們向下移動2個小格子:


(6)我們再求一下這次的四個變量【x29,x30,x53,x54】的最大值,假設x53是最大值,那麼令p2,1=x53

(7)我們按照(1~6)的方法一直遍歷,直到我們的紅色小框圈到最後四個自變量爲止,這樣我們就得到了144p值,最後一個pp12,12


(8)我們令這個矩陣爲P1,按照同樣的方法,我們求出其餘6個矩陣的池化結果P2~P6。於是我們得到了612*12的矩陣。

這個過程我們可以用圖文來進行描述,就是把剛纔的矩陣縮小一倍:

 

  我們池化之後,正向傳播就完成一半了,接下來就是把這612*12的矩陣再進行卷積、池化一次。

  怎麼再進行呢?問的好!我們把這6個新矩陣的看成一個整體P1拿出來,後隨機生成125*5*5*5*5*5的新濾波器,然後我們用這個P1矩陣與這12個濾波器做卷積,我們會得到128*8的矩陣,我們起名爲DD。如圖所示:

 

  接着,我們設定一個採樣器aa,大小爲2*2=4,然後我們對12個矩陣每一個進行採樣,就會得到新的12個矩陣PP1~PP12,大小爲4*4,如圖所示:

 

  我們這兩次計算完成之後,我們已經把矩陣的長寬壓縮的很小很小了,我們下一步不需要再進行卷積池化了。我們直接用BP神經網絡進行全連接就好了。至於怎麼全連接呢,請聽下回分解。

 

下一節講正向傳播中:全連接、標籤及目標函數的計算。


————————————————

如果對我的課程感興趣的話,歡迎關注小木希望學園-微信公衆號: 

mutianwei521

也可以掃描二維碼哦!

發佈了51 篇原創文章 · 獲贊 221 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章