基于tensorflow的MNIST手寫字識(shí)別(一)--白話卷積神經(jīng)網(wǎng)絡(luò)模型
基于tensorflow的MNIST手寫數(shù)字識(shí)別(二)--入門篇
基于tensorflow的MNIST手寫數(shù)字識(shí)別(三)--神經(jīng)網(wǎng)絡(luò)篇
1旷坦、卷積
2阔馋、池化
3、全連接
4、梯度下降法
5、softmax
本次就是用最簡(jiǎn)單的方法給大家講解這些概念,因?yàn)榫唧w的各種論文網(wǎng)上都有,連推導(dǎo)都有,所以本文主要就是給大家做個(gè)鋪墊呢蔫,如有錯(cuò)誤請(qǐng)指正,相互學(xué)習(xí)共同進(jìn)步飒筑。
大家應(yīng)該知道大名鼎鼎的傅里葉變換,即一個(gè)波形协屡,可以有不同的正弦函數(shù)和余弦函數(shù)進(jìn)行疊加完成俏脊,卷積神經(jīng)網(wǎng)絡(luò)也是一樣,可以認(rèn)為一張圖片是由各種不同特征的圖片疊加而成的肤晓,所以它的作用是用來(lái)提取特定的特征爷贫,舉個(gè)例子,比如給定一張圖片补憾,然后我只想提取它的輪廓漫萄,于是就需要卷積神經(jīng)網(wǎng)絡(luò)。
如圖是大名鼎鼎的LeNet-5(識(shí)別數(shù)字的卷積網(wǎng)絡(luò))盈匾,效果和論文在此腾务,這里拿出來(lái)只是為了說(shuō)明一下卷積神經(jīng)網(wǎng)絡(luò)的模型,就像圖中那樣削饵,經(jīng)過(guò)多次岩瘦,卷積,池化(又叫子采樣)窿撬,然后全連接启昧,就完工了。
其實(shí)卷積很好理解劈伴,左側(cè)綠色的部分的5*5矩陣其實(shí)一般就是我們輸入的圖片的灰度值(可以想象成一張5px*5px的黑白照片箫津,然后把黑白照片上的每一個(gè)點(diǎn)轉(zhuǎn)化成矩陣上的每一個(gè)元素),然后上面的黃色部分矩陣就是我們的過(guò)濾器,用來(lái)提取特征苏遥,(其實(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)
如上圖所示,卷積后的矩陣只有3*3锋玲,比原來(lái)的圖片要小了景用,因?yàn)檫吔鐩](méi)有了,所以要考慮這個(gè)邊界的問(wèn)題惭蹂,網(wǎng)上說(shuō)卷積的邊界處理有兩種方式:
一伞插、丟掉邊界,也就是就按右邊那個(gè)縮小的矩陣來(lái)盾碗。
二媚污、復(fù)制邊界,也就是把左邊的最外層原封不動(dòng)地復(fù)制過(guò)去
但是在看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谬盐,然后再按照上面所說(shuō)的卷積方法進(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è)偏置值
池化分為兩種弃鸦,一種是最大池化,在選中區(qū)域中找最大的值作為抽樣后的值幢痘,另一種是平均值池化唬格,把選中的區(qū)域中的平均值作為抽樣后的值,這樣做的,原因是為了后面全連接的時(shí)候減少連接數(shù)
左邊的是沒(méi)有沒(méi)有進(jìn)行卷積的全連接购岗,假設(shè)圖片是1000*1000的汰聋,然后用1M的神經(jīng)元去感知,最后需要10^12個(gè)權(quán)值作為參數(shù)喊积,右邊是經(jīng)過(guò)卷積過(guò)的烹困,每個(gè)圓點(diǎn)是一個(gè)神經(jīng)元,因此只是用一個(gè)卷積核的話乾吻,其實(shí)只要100*10^6髓梅,數(shù)量級(jí)就大大減少,而且因?yàn)樘崛〉木褪撬璧奶卣饕锴栽诩涌煊?xùn)練速度的時(shí)候?qū)Y(jié)果并不會(huì)產(chǎn)生過(guò)大的影響枯饿,甚至更為精確。
可能很多人會(huì)問(wèn)诡必,那個(gè)卷積核是怎么得出來(lái)的呢奢方,其實(shí)它是被各種訓(xùn)練集訓(xùn)練出來(lái)的,利用梯度下降法使得我們的參數(shù)到達(dá)最優(yōu)解擒权。
梯度下降法可以這樣子理解袱巨,假設(shè)我們正在下山,要使得下山的路徑達(dá)到最短碳抄,于是我們每走一步之前就判斷一下四面八方從哪個(gè)方向跨出這一步會(huì)最短愉老,不過(guò)學(xué)過(guò)算法的人應(yīng)該都知道,有個(gè)問(wèn)題就是剖效,我們當(dāng)前走的這一步是當(dāng)前位置最短的嫉入,但是真正從山上到山下最短路徑可能并不路過(guò)這一步。也就是說(shuō)這是個(gè)局部最優(yōu)解璧尸,而不是全局最優(yōu)解咒林,我們得到的路徑并不一定是最短的,但是也足夠優(yōu)秀爷光,原因就是垫竞,得到最優(yōu)解費(fèi)時(shí)費(fèi)力,性價(jià)比并不高蛀序。這一個(gè)知識(shí)點(diǎn)還是建議大家伙去看一下斯坦福Andrew?Ng的《機(jī)器學(xué)習(xí)》欢瞪,然后就能理解上面所說(shuō)的權(quán)值參數(shù)要少的意義了。
softmax是分類用的徐裸,說(shuō)直白一點(diǎn)就是歸一化遣鼓,因?yàn)檫@個(gè)店最好跟例子結(jié)合起來(lái),所以暫時(shí)不多說(shuō)重贺,感興趣的可以去網(wǎng)上找骑祟,也可以關(guān)注后面的系列文章回懦。
三、總結(jié)
其實(shí)感覺(jué)講的并不深入次企,因此還是希望各位能自己去仔細(xì)鉆研一下怯晕,這里給各位一些基礎(chǔ)吧,讀起論文和數(shù)學(xué)公式來(lái)會(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ò))一些問(wèn)題總結(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與圖像語(yǔ)義分割
http://blog.csdn.net/xiahouzuoxin/article/details/47789361
MATLAB conv2卷積的實(shí)現(xiàn)
http://blog.csdn.net/celerychen2009/article/details/38852105