本文主要介紹了tensorflow手寫數(shù)字識別相關(guān)的理論,包括卷積,池化,全連接,梯度下降法。
2.1 手寫數(shù)字識別運算方法
圖1
識別過程就像圖片中那樣,經(jīng)過多次卷積和池化(又叫子采樣),最后全連接就運算完成了。
2.2 卷積
卷積神經(jīng)網(wǎng)絡(luò)簡介(Convolutional Neural Networks,簡稱CNN)
卷積神經(jīng)網(wǎng)絡(luò)是近年發(fā)展起來,并引起廣泛重視的一種高效識別方法。20世紀60年代,Hubel和Wiesel在研究貓腦皮層中用于局部敏感和方向選擇的神經(jīng)
元時發(fā)現(xiàn)其獨特的網(wǎng)絡(luò)結(jié)構(gòu)可以有效地降低反饋神經(jīng)網(wǎng)絡(luò)的復(fù)雜性,繼而提出了卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks-簡稱CNN)。
現(xiàn)在,CNN已經(jīng)成為眾多科學(xué)領(lǐng)域的研究熱點之一,特別是在模式分類領(lǐng)域,由于該網(wǎng)絡(luò)避免了對圖像的復(fù)雜前期預(yù)處理,可以直接輸入原始圖像,因而得到了更為廣泛的應(yīng)用。
2.2.1 卷積運算過程
圖2
在圖2中。展示了一個3*3的卷積核在5*5的圖像上做卷積的過程。每個卷積都是一種特征提取方式,就像一個篩子,將圖像中符合條件
(激活值越大越符合條件)的部分篩選出來。
左側(cè)綠色5*5矩陣是輸入的圖片的灰度值,黃色部分是用來提取特征的卷積核(也可以叫濾波器)。卷積核在圖片灰度矩陣上從左到右
,從上到下滑動,每一次滑動兩個矩陣對應(yīng)位置的元素相乘然后求和就可以得到右邊矩陣的一個元素。
圖3
在圖3的左圖中,卷積的運算方式是模擬人腦神經(jīng)網(wǎng)絡(luò)的運算方式。圖3右下角是卷積的數(shù)學(xué)公式,基本原理是矩陣的對應(yīng)元素相乘求和,然后加上一個偏振值。
2.2.2 滑動的步長
在上面的計算過程中,卷積核從左到右每次移動一格,也可以一次移動多個。每次移動的格數(shù)就是步長。
2.2.3 卷積的邊界處理
在上面的計算過程中,計算完成后得到的矩陣只有3*3。因為邊界沒有了,所以比原來的圖片要小。卷積的邊界處理方式有兩種:
丟掉邊界。也就是后面的運算直接按照之前的出的結(jié)果來。
復(fù)制邊界。也就是把源矩陣的最外層數(shù)據(jù)原封不動的復(fù)制過來。
2.3 池化
圖4
池化分為兩種:
一種是最大池化,在選中區(qū)域中找最大的值作為抽樣后的值。另一種是平均值池化,把選中的區(qū)域中的平均值作為抽樣后的值。
這樣做是為了后面全連接的時候減少連接數(shù)。
2.4 全連接
圖5
左邊的是沒有沒有進行卷積的全連接,假設(shè)圖片是1000*1000的,然后用1M的神經(jīng)元去感知,最后需要10^12個權(quán)值作為參數(shù)。右邊是經(jīng)過卷積過的,
每個圓點是一個神經(jīng)元,因此只是用一個卷積核的話,其實只要100*10^6,數(shù)量級就大大減少。而且因為提取的就是所需的特征,所以在加快訓(xùn)練
速度的時候?qū)Y(jié)果并不會產(chǎn)生過大的影響,甚至更為精確。
2.5 卷積核相關(guān):梯度下降
圖6
卷積核是被各種訓(xùn)練集訓(xùn)練出來的,利用梯度下降法可以使得參數(shù)到達最優(yōu)解。
梯度下降的原理:將函數(shù)比作一座山,我們站在某個山坡上,往四周看,從哪個方向向下走一小步,能夠下降的最快。
https://github.com/MindorksOpenSource/AndroidTensorFlowMachineLearningExample
文/Mob開發(fā)者平臺 Android開發(fā)專家 高攀
聯(lián)系客服