聽說js想要裝tensorflow引擎之手寫字識別

?MNIST手寫字識別


廢話不多說,先上演示https://yuanyuangong.github.io/gyytensor/dist/index.html#/home

上面這個鏈接請復(fù)制,打開,簡書有毒

如果你家網(wǎng)絡(luò)掉渣,就直接 git?吧!HTTPS://GITHUB.COM/YUANYUANGONG/GYYTENSOR.GIT

第一記:手寫字?jǐn)?shù)據(jù)形式

在開篇最前面還是先講講手寫字識別深度學(xué)習(xí)原理。

這里測試用的手寫字圖片?為(28*28*1)的圖像,因為只有黑?所以?像素為 1。

這張(28*28)的圖,透明處為0 ,黑色處為1

當(dāng)然js可不認(rèn)識這么個,需要轉(zhuǎn)成?一個 28*28?的二維向量矩陣。?感受一下這個二維數(shù)組,

如果 7? 這個數(shù)字?都這么標(biāo)準(zhǔn)就好了,現(xiàn)實和殘酷,我寫的7是這樣的,我們就需要找到不同人寫的7的共同點,這就是提取特征,在我這個案例中?就用 卷積 (不要去管高等數(shù)學(xué)里的卷積,你就當(dāng)是全新的一種方式,下面會講解)的方式去提取。

第二記?卷積

先看一下tensorflow?里如何卷積的吧(再次強(qiáng)調(diào)不要被?卷積這個名詞 帶?到坑里去了,這里你就理解為?操作,沒有其他意思)

卷積窗口指的是?過濾器的大小

首先,

需要過濾器的卷積窗口來取樣,藍(lán)色就(5*5)過濾器 ,在這個案例里就是5*5?的二維0,1 數(shù)組,? 至于里面的值完全由tensorflow去初始化,

過濾器?

步進(jìn) strides: 1,?意味著?這個過濾器每一移動一個像素,從左到右?跑完?下移動一個像素,如下圖,總需要拖多少次。

28-5 = 24? 。24/1 = 24? 則 24*24次? 當(dāng)然你也可以把步長設(shè)置為6 ,那就是?那就24/6? 則4*4 =16次。不過這樣你會丟失很多信息。

偷了下懶,逃過大部分幀,反正就是把整個圖拖一遍。

這么個5*5的過濾器?拖了24*24?次得到?一個 24*24?的數(shù)組 g 。假設(shè)過濾器的?值為?f? ,那么 g[n][m] = f *?過濾器所拖的區(qū)域。

這里有8?個過濾器,那就得到 8個 24*24?的矩陣。?這樣我們就把 7?這個圖?搞了 8個特征,如果你寫了一個7 ,通過?同樣的?卷積,也等到 8?個24*24?的矩陣,進(jìn)行比較??纯聪嗖疃嗌?。再去優(yōu)化?那8個過濾器。

當(dāng)然現(xiàn)實里?可不會這么簡單。為了進(jìn)一步提高?學(xué)習(xí)效率。我們要有一些其他手段,比如吃補(bǔ)藥。---池化

第三記? 池化

poolSize , 2*2?的窗口,每次移動2?個像素?得到 6*6的矩陣。

紅色框就是poolSize ,取?框住矩陣?yán)锏淖畲笾担?1

我們一次卷積和池化還不行,多來幾次 ,完整代碼如下


activation?激活函數(shù),簡單?來說就是分類的,有relu? softmax?等等函數(shù),百度去吧

第四記 flaten? 和全鏈接層

原理什么的不重要了,flaten?就是把多維數(shù)組轉(zhuǎn)成?一維數(shù)組,方便統(tǒng)計操作,全鏈接dense?就是為了分類。

先分成64類,在分成0-9 10類

?第五記?開始訓(xùn)練模型

第一步,數(shù)據(jù)獲取,預(yù)處理。下面數(shù)MNIST手寫字?jǐn)?shù)據(jù)鏈接,不是人可以看懂的數(shù)據(jù),所以需要預(yù)處理,通過webapi?

new Img() ,具體的我就不肺炎了,反正最后通過data.js可以獲得手寫字?jǐn)?shù)據(jù)。

第二步,載入數(shù)據(jù),這里,不可一個個載到模型里去跑,太慢,也不能一次性把所有數(shù)據(jù)載入,瀏覽器要炸的。所以分批次,

model.fit?載入數(shù)據(jù)?直到?所有數(shù)據(jù)被處理完就停止?循環(huán),應(yīng)該?內(nèi)置 setIntertime?方法

ui?是用來畫圖的

第四步,驗證模型獲得?測試結(jié)果 (準(zhǔn)確率)

第六記,UI?繪圖部分

這里用canvas繪制手寫字的圖片,并顯示預(yù)測結(jié)果。

echart顯示損失率,和精確率的曲線


最后:

本人是新接觸tensorflow.js的新人,還望各路大仙指點一二


上一期線性回歸


最后編輯于
?著作權(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)容