【ML入門】李宏毅機器學(xué)習(xí)筆記-11(卷積神經(jīng)網(wǎng)絡(luò)CNN)

ML入門

版權(quán)聲明:小博主水平有限,博文僅代表個人觀點,希望大家多多指導(dǎo)。


參考:

[機器學(xué)習(xí)入門] 李宏毅機器學(xué)習(xí)筆記-11(Convolutional Neural Network;卷積神經(jīng)網(wǎng)絡(luò)) - Holeung blog - CSDN博客

https://blog.csdn.net/soulmeetliang/article/details/73188417?blog.csdn.net

李宏毅《深度學(xué)習(xí)》:卷積神經(jīng)網(wǎng)絡(luò)CNN - 宴夜小丑的博客 - CSDN博客

https://blog.csdn.net/wuzhenzi5193/article/details/80468650?blog.csdn.net


怎么學(xué)深度學(xué)習(xí)?——從【框架算法的原理】+【實現(xiàn)的方法】+【案例的實踐】系統(tǒng)地學(xué)習(xí)

目錄:

1. Why CNN for Image?

2. The whole CNN

3. CNN各個部分的原理——卷積層convolution

4. CNN各個部分的原理—最大池化層Max Pooling

5. CNN各個部分的原理—Flatten層

6. CNN in Keras

7. What does CNN learn?


1. Why CNN for Image?

1.1 前言

卷積神經(jīng)網(wǎng)絡(luò)CNN常用于影像處理,每個神經(jīng)元就是classify,但是用之前講過的(全連接)fully connected來進(jìn)行處理的時候,參數(shù)會太多!

假如30000的維度輸入,1000個神經(jīng)元,那就得是1000*30000個wight,所以我們使用CNN來簡化這個架構(gòu)進(jìn)行處理

1.2 CNN的三個特性

(1)不需要看整張圖片,只需要看到一小塊pattern

圖1

(2)相同的pattern可以應(yīng)用到不同的區(qū)域

例如鳥嘴這個pattern,在第一張圖片中處于左上角,但是第二張圖片中位于中間,但是這個神經(jīng)元都可以用來識別到“嘴”
做幾乎相同的事情,所以可以用相同的參數(shù)。

圖2

(3)sub-sampling

做Subsampling使圖片變小,對影響辨識沒什么影響,這樣還可以減小參數(shù)

圖3

2. The whole CNN

(1)CNN大體結(jié)構(gòu)可以分為卷積層convolution、最大池化層max pooling和flatten,其中convolution和max pooling可以交替重復(fù)多次。

圖4

(2)CNN的三個特性,前兩個作用于convolution,第三個作用于max pooling

圖5

3. CNN各個部分的原理——卷積層convolution

(1)在這里我們使用3*3的filter。

每個filter都是需要學(xué)習(xí)出來的,類似于netural,但是比實際的image所需參數(shù)小

每個fliter都可檢測出一個pattern——說明了CNN的特性1

圖6

(2)filter從圖片左上角開始計算,計算內(nèi)積,每次轉(zhuǎn)移距離要事先定好。

若stride=1,每次轉(zhuǎn)移一個單位
若stride=2,每次轉(zhuǎn)移兩個單位

圖7
圖8

(3)我們現(xiàn)在假定stride=1,fliter結(jié)構(gòu)如圖所示。

通過內(nèi)積計算(對應(yīng)分量的乘積之和)將66變?yōu)?4,每個filter都可以將image轉(zhuǎn)小

圖9

根據(jù)計算結(jié)果,看到filter 1在左上角和左下角出現(xiàn)最大值。

發(fā)現(xiàn)不同位置的pattern都用一樣的參數(shù)結(jié)構(gòu)——說明了CNN的特性2

image

(4)對不同的filter做相同的步驟

每個filter得出的結(jié)果4*4叫做feature map

圖10

(5)

黑白圖像——黑1白0

彩色圖像——RGB三個值,這樣image就變成深度為3的矩陣簇

圖11

(6)對比卷積層 & 全連接層——局部連接+權(quán)值共享

圖12

局部連接

卷積層的內(nèi)積計算,得到第一個像素點

圖13

此時僅需要連接9個輸入,不需要全連接,意味著更少的參數(shù)——這就是“局部連接”?。?!

圖14

權(quán)值共享

卷積層的內(nèi)積計算,得到第二個像素點

圖15

此時,第二個像素點也需要連接9個input,但是會共享第一個像素點的input,意味著更少的參數(shù)——這就是“權(quán)值共享”!??!

圖16

4. CNN各個部分的原理—最大池化層Max Pooling

將filter計算的結(jié)果進(jìn)行縮小——每個4*4的矩陣中,每4個元素里,用最大的元素來代替

image

結(jié)果將其變成2*2矩陣,

image

做完一次convolution和map pooling的結(jié)果就是2*2矩陣,多少個filter即多深的深度,這樣過程之后,image變小

image

一次又一次進(jìn)行convolution和max pooling,圖片會越來越小

image

5. CNN各個部分的原理—Flatten層

Flatten層的實現(xiàn)在Keras.layers.core.Flatten()類中。

Flatten層:將輸入“壓平”——把多維的輸入變成一維化。

Flatten層,常用在從卷積層到全連接層的過渡。
Flatten不影響batch的大小。

image

6. CNN in Keras

只修改了網(wǎng)絡(luò)結(jié)構(gòu)和輸入格式(矢量——>三維張量)

(25,3,3):25個33的fliters
1:黑/白圖像
3:RGB的彩色圖像
28,28 : 輸入照片是28
28的像素點

image

一次又一次進(jìn)行convolution和max pooling

image

這是每一層的結(jié)果……

image

7. What does CNN learn?

未完,待續(xù)……

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容