使用tensorflow構(gòu)建一個(gè)卷積神經(jīng)網(wǎng)絡(luò)
一、卷積神經(jīng)網(wǎng)絡(luò)
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)是一種前饋神經(jīng)網(wǎng)絡(luò),它的人工神經(jīng)元可以響應(yīng)一部分覆蓋范圍內(nèi)的周?chē)鷨卧?,?duì)于大型圖像處理有出色表現(xiàn),主要包括卷積層(convolutional layer)和池化層(pooling layer),主要應(yīng)用于圖像、視頻、時(shí)間序列信號(hào)、音頻信號(hào)、文本數(shù)據(jù)等。
一般的卷積神經(jīng)網(wǎng)絡(luò)都是由多個(gè)卷積層組成,每個(gè)卷積層主要包括以下幾個(gè)部分:
1、圖像會(huì)通過(guò)多個(gè)不同的卷積核進(jìn)行濾波,并加偏置,提取出圖像的局部特征,每一個(gè)卷積核都會(huì)映射一個(gè)新的2D圖像。
2、將前面的卷積核的濾波輸出結(jié)果,并使用非線性的激活函數(shù)進(jìn)行處理。最常用的激活函數(shù)有ReLU函數(shù)以及它的變種,還有tan函數(shù),以前最常用的激活函數(shù)是sigmoid函數(shù)。
3、對(duì)激活函數(shù)的結(jié)果進(jìn)行池化操作(***池化、平均池化),目的是為了達(dá)到降采樣,將2×2的圖片降為1×1。最常用的是***池化,可以保留圖像的顯著特征,并提升模型的畸變?nèi)萑棠芰Γ岣吣P偷聂敯粜浴?/p>
二、使用tensorflow構(gòu)建一個(gè)卷積神經(jīng)網(wǎng)絡(luò)
通過(guò)tensorflow來(lái)構(gòu)建一個(gè)卷積神經(jīng)網(wǎng)絡(luò)并將其應(yīng)用在MNIST手寫(xiě)數(shù)據(jù)集上,***可以得到一個(gè)99%以上的準(zhǔn)確率。這個(gè)模型主要包含四層:
***層:卷積層,卷積核的大小為5×5,一共包含32個(gè)卷積核,步長(zhǎng)為1,padding為SAME使得輸出圖片的大小和輸入一致。
第二層:卷積層,卷積核的大小為5×5,一共包含64個(gè)卷積核, 步長(zhǎng)核填充方式和上一層卷積層一樣。
第三層:全連接層,輸入7×7×64,輸出一個(gè)1024維的向量,并使用dropout使得部分節(jié)點(diǎn)失活來(lái)防止過(guò)擬合。
第四層:softmax層,輸入是一個(gè)1024維的向量,輸出一個(gè)10維的向量。
1、***層卷積層
***層卷積層的輸入是一個(gè)28×28×1的圖片,圖片的寬高都是28,圖片通道為1,通過(guò)卷積層之后的輸出為28×28×32,然后通過(guò)***池化,輸出為14×14×32。
2、第二層卷積層
第二層卷積層的輸入是14×14×32,通過(guò)卷積之后的輸出是14×14×64,然后通過(guò)***池化之后的輸出為7×7×64。
3、第三層全連接層
第三層的輸入是一個(gè)7×7×64的向量,所以要在計(jì)算之前對(duì)第二層卷積層的結(jié)果進(jìn)行reshap操作,全連接層通過(guò)ReLU激活函數(shù)之后,再對(duì)其進(jìn)行dropout操作。
4、第四層softmax層
第四層的輸入是一個(gè)1024維的向量,輸出是一個(gè)10維向量,表示屬于0-9數(shù)字的概率。
5、權(quán)重的初始化
在卷積神經(jīng)網(wǎng)絡(luò)中,權(quán)重的初始化很重要,這里我們使用的是一個(gè)截?cái)嗟恼龖B(tài)分布函數(shù)來(lái)參數(shù)權(quán)重,并保證參數(shù)的標(biāo)準(zhǔn)差為0.1。 截?cái)嗟恼龖B(tài)分布是指如果函數(shù)隨機(jī)產(chǎn)生的值與均值的差值大于兩倍的標(biāo)準(zhǔn)差,那這個(gè)值將會(huì)被重新生成,來(lái)保證初始化權(quán)重的值不會(huì)相差太大。
6、初始化截距
截距的值都初始化為0.1
7、卷積函數(shù)
卷積的步長(zhǎng)為1,填充方式是SAME,來(lái)保證卷積的輸入和輸出的大小一致。
8、***池化函數(shù)
***池化的橫向和縱向的步長(zhǎng)都為2,使得輸出圖片大小為輸入圖片大小的一半,達(dá)到降采樣的目的。
完整代碼:
https://github.com/steelOneself/tensorflow_learn/blob/88f614508081d8c3a926ea000966aa8d1ac35440/MNIST_examples/CNNMNIST.py