基于tensorflow的MNIST手写字识别(一)--白话卷积神经网络模型
一、卷積神經(jīng)網(wǎng)絡(luò)模型知識(shí)要點(diǎn)卷積卷積
1、卷積
2、池化
3、全連接
4、梯度下降法
5、softmax
本次就是用最簡(jiǎn)單的方法給大家講解這些概念,因?yàn)榫唧w的各種論文網(wǎng)上都有,連推導(dǎo)都有,所以本文主要就是給大家做個(gè)鋪墊,如有錯(cuò)誤請(qǐng)指正,相互學(xué)習(xí)共同進(jìn)步。
二、卷積神經(jīng)網(wǎng)絡(luò)講解
2.1卷積神經(jīng)網(wǎng)絡(luò)作用
大家應(yīng)該知道大名鼎鼎的傅里葉變換,即一個(gè)波形,可以有不同的正弦函數(shù)和余弦函數(shù)進(jìn)行疊加完成,卷積神經(jīng)網(wǎng)絡(luò)也是一樣,可以認(rèn)為一張圖片是由各種不同特征的圖片疊加而成的,所以它的作用是用來提取特定的特征,舉個(gè)例子,比如給定一張圖片,然后我只想提取它的輪廓,于是就需要卷積神經(jīng)網(wǎng)絡(luò)。
2.2卷積神經(jīng)網(wǎng)絡(luò)模型
如圖是大名鼎鼎的LeNet-5(識(shí)別數(shù)字的卷積網(wǎng)絡(luò)),效果和論文在此,這里拿出來只是為了說明一下卷積神經(jīng)網(wǎng)絡(luò)的模型,就像圖中那樣,經(jīng)過多次,卷積,池化(又叫子采樣),然后全連接,就完工了。
2.3 卷積
2.3.1 卷積的原理
其實(shí)卷積很好理解,左側(cè)綠色的部分的5*5矩陣其實(shí)一般就是我們輸入的圖片的灰度值(可以想象成一張5px*5px的黑白照片,然后把黑白照片上的每一個(gè)點(diǎn)轉(zhuǎn)化成矩陣上的每一個(gè)元素),然后上面的黃色部分矩陣就是我們的過濾器,用來提取特征,(其實(shí)應(yīng)該叫濾波器或者卷積核),讓卷積核在輸入矩陣上進(jìn)行從左到右,從上到下滑動(dòng),然后每一次滑動(dòng),兩個(gè)矩陣對(duì)應(yīng)位置的元素相乘然后求和,就是右邊那個(gè)矩陣的一個(gè)元素。
2.3.2 滑動(dòng)的步長(zhǎng)-stride
上面那張圖片從左到右,每次滑動(dòng)的時(shí)候只移動(dòng)一格,但是其實(shí)它一次滑動(dòng)多格,這就是步長(zhǎng)
2.3.3 卷積的邊界處理-padding
如上圖所示,卷積后的矩陣只有3*3,比原來的圖片要小了,因?yàn)檫吔鐩]有了,所以要考慮這個(gè)邊界的問題,網(wǎng)上說卷積的邊界處理有兩種方式:
一、丟掉邊界,也就是就按右邊那個(gè)縮小的矩陣來。
二、復(fù)制邊界,也就是把左邊的最外層原封不動(dòng)地復(fù)制過去
但是在看matlab代碼和tensorflow代碼的時(shí)候發(fā)現(xiàn)并不是那么簡(jiǎn)單的事情。
matlab中conv2這個(gè)“padding”參數(shù)可以設(shè)為三個(gè)值FULL,SAME,VALID
tensorflow中conv2d的"padding"參數(shù)可以設(shè)為兩個(gè)值SAME,VALID
它們對(duì)邊界是這樣處理的,對(duì)輸入的矩陣,包裹n層0,然后再按照上面所說的卷積方法進(jìn)行卷積,這個(gè)n怎么求呢,
FULL:edge_row?=?kernel_row?-?1; ? edge_cols?=?kernel_cols?-?1;
SAME:edge_row?=?(kernel_row?-?1)?/?2;edge_cols?=?(kernel_cols?-?1)?/?2;
VALID:edge_row?=?edge_cols?=?0;
edge_row就是邊的行數(shù),kernel_row就是卷積核的行數(shù),所以上面講的其實(shí)就是VALID模式
2.3.4 卷積與神經(jīng)網(wǎng)絡(luò)
右下角就是卷積的數(shù)學(xué)公式,矩陣的對(duì)應(yīng)元素相乘求和,然后加上一個(gè)偏置值
2.4 池化
池化分為兩種,一種是最大池化,在選中區(qū)域中找最大的值作為抽樣后的值,另一種是平均值池化,把選中的區(qū)域中的平均值作為抽樣后的值,這樣做的,原因是為了后面全連接的時(shí)候減少連接數(shù)
2.5 全連接
左邊的是沒有沒有進(jìn)行卷積的全連接,假設(shè)圖片是1000*1000的,然后用1M的神經(jīng)元去感知,最后需要10^12個(gè)權(quán)值作為參數(shù),右邊是經(jīng)過卷積過的,每個(gè)圓點(diǎn)是一個(gè)神經(jīng)元,因此只是用一個(gè)卷積核的話,其實(shí)只要100*10^6,數(shù)量級(jí)就大大減少,而且因?yàn)樘崛〉木褪撬璧奶卣?#xff0c;所以在加快訓(xùn)練速度的時(shí)候?qū)Y(jié)果并不會(huì)產(chǎn)生過大的影響,甚至更為精確。
2.6 梯度下降法
可能很多人會(huì)問,那個(gè)卷積核是怎么得出來的呢,其實(shí)它是被各種訓(xùn)練集訓(xùn)練出來的,利用梯度下降法使得我們的參數(shù)到達(dá)最優(yōu)解。
梯度下降法可以這樣子理解,假設(shè)我們正在下山,要使得下山的路徑達(dá)到最短,于是我們每走一步之前就判斷一下四面八方從哪個(gè)方向跨出這一步會(huì)最短,不過學(xué)過算法的人應(yīng)該都知道,有個(gè)問題就是,我們當(dāng)前走的這一步是當(dāng)前位置最短的,但是真正從山上到山下最短路徑可能并不路過這一步。也就是說這是個(gè)局部最優(yōu)解,而不是全局最優(yōu)解,我們得到的路徑并不一定是最短的,但是也足夠優(yōu)秀,原因就是,得到最優(yōu)解費(fèi)時(shí)費(fèi)力,性價(jià)比并不高。這一個(gè)知識(shí)點(diǎn)還是建議大家伙去看一下斯坦福Andrew?Ng的《機(jī)器學(xué)習(xí)》,然后就能理解上面所說的權(quán)值參數(shù)要少的意義了。
2.7最后?softmax
softmax是分類用的,說直白一點(diǎn)就是歸一化,因?yàn)檫@個(gè)店最好跟例子結(jié)合起來,所以暫時(shí)不多說,感興趣的可以去網(wǎng)上找,也可以關(guān)注后面的系列文章。
三、總結(jié)
其實(shí)感覺講的并不深入,因此還是希望各位能自己去仔細(xì)鉆研一下,這里給各位一些基礎(chǔ)吧,讀起論文和數(shù)學(xué)公式來會(huì)更輕松一些。
四、參考文章
神經(jīng)網(wǎng)絡(luò)介紹
http://ufldl.stanford.edu/wiki/index.php/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C
技術(shù)向:一文讀懂卷積神經(jīng)網(wǎng)絡(luò)CNN
http://www.cnblogs.com/nsnow/p/4562308.html
深度學(xué)習(xí)(卷積神經(jīng)網(wǎng)絡(luò))一些問題總結(jié)
http://blog.csdn.net/nan355655600/article/details/17690029
卷積神經(jīng)網(wǎng)絡(luò)(CNN)
http://ibillxia.github.io/blog/2013/04/06/Convolutional-Neural-Networks/
Deep Learning模型之:CNN卷積神經(jīng)網(wǎng)絡(luò)(一)深度解析CNN
http://www.cnblogs.com/nsnow/p/4562363.html
數(shù)據(jù)挖掘系列(10)——卷積神經(jīng)網(wǎng)絡(luò)算法的一個(gè)實(shí)現(xiàn)(轉(zhuǎn))
http://blog.sina.com.cn/s/blog_4ff49c7e0102vl5m.html
Matlab/DeepLearnToolbox
https://github.com/rasmusbergpalm/DeepLearnToolbox
Deep Learning論文筆記之(四)CNN卷積神經(jīng)網(wǎng)絡(luò)推導(dǎo)和實(shí)現(xiàn)
http://blog.csdn.net/zouxy09/article/details/9993371
Deep Learning論文筆記之(五)CNN卷積神經(jīng)網(wǎng)絡(luò)代碼理解
http://blog.csdn.net/zouxy09/article/details/9993743
斯坦福? 池化
http://ufldl.stanford.edu/wiki/index.php/%E6%B1%A0%E5%8C%96
CNN神經(jīng)網(wǎng)絡(luò)層次分析
http://blog.csdn.net/liulina603/article/details/44915905
深度學(xué)習(xí)筆記1(卷積神經(jīng)網(wǎng)絡(luò))
http://blog.csdn.net/lu597203933/article/details/46575779
CNN公式推導(dǎo)
http://blog.csdn.net/lu597203933/article/details/46575871
前向型神經(jīng)網(wǎng)絡(luò)之BPNN(附源碼)
http://blog.csdn.net/heyongluoyao8/article/details/48213345
殘差與誤差的區(qū)別
http://wenku.baidu.com/link?url=DUDkyV1tnD_SEGzgcxb9AaFU5VUcP9ISNR8q39-fpCcq_LGUHY7ucx5vDwr-MCfU_ofr7yIQZ_UgTfiivTtaDOulW2DD3pGs07eYmiQv5P7
反向傳導(dǎo)算法
http://deeplearning.stanford.edu/wiki/index.php/%E5%8F%8D%E5%90%91%E4%BC%A0%E5%AF%BC%E7%AE%97%E6%B3%95
圖像卷積與濾波的一些知識(shí)點(diǎn)
http://blog.csdn.net/zouxy09/article/details/49080029
CNN卷積神經(jīng)網(wǎng)絡(luò)原理簡(jiǎn)介+代碼詳解
http://doc.okbase.net/u012162613/archive/126058.html
卷積神經(jīng)網(wǎng)絡(luò)(lenet)
http://deeplearning.net/tutorial/lenet.html
激活函數(shù)的作用
https://www.zhihu.com/question/22334626
神經(jīng)網(wǎng)絡(luò)入門第一部分
http://blog.sina.com.cn/s/blog_6a67b5c50100tspb.html
神經(jīng)網(wǎng)絡(luò)入門第二部分
http://blog.sina.com.cn/s/blog_6a67b5c50100tspe.html
卷積神經(jīng)網(wǎng)絡(luò)全面解析
http://www.moonshile.com/post/juan-ji-shen-jing-wang-luo-quan-mian-jie-xi
Deep learning:四十一(Dropout簡(jiǎn)單理解)
http://www.cnblogs.com/tornadomeet/p/3258122.html
DeepLearning (六) 學(xué)習(xí)筆記整理:神經(jīng)網(wǎng)絡(luò)以及卷積神經(jīng)網(wǎng)絡(luò)
http://www.07net01.com/2015/11/963741.html
深度卷積網(wǎng)絡(luò)CNN與圖像語義分割
http://blog.csdn.net/xiahouzuoxin/article/details/47789361
MATLAB conv2卷積的實(shí)現(xiàn)
http://blog.csdn.net/celerychen2009/article/details/38852105
文/wlmnzf(簡(jiǎn)書作者)
原文鏈接:http://www.jianshu.com/p/2186766b69dc
總結(jié)
以上是生活随笔為你收集整理的基于tensorflow的MNIST手写字识别(一)--白话卷积神经网络模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习ML简史
- 下一篇: Deep Learning简明深度学习方