基於tensorflow框架,自己實現一個最基礎手寫識別程序

週末閉關兩日,做了一個手寫識別數字的程序。

夫人很氣憤,浪費兩天時間,搞出這麼個破東西,十幾年前的觸屏手機就具備了手寫輸入功能,拿過來用不就可以?做這個有什麼價值?

是的,很多第三方服務,接入很便捷,識別率也很高。但是那畢竟是別人家的。

豪宅豪車是不錯,而我們租來只能使用,沒有能力和膽量按照自己的想法去重新裝修和改造。

然而,自己家的就不一樣。你寫一個4,我可以讓他顯示“郭敬明”,樂趣在此。

 

結合當下比較火的機器學習。

實現方式如下:

首先,要訓練電腦認識手寫體,所以找來很多例子。



這裏面有65000多張手寫體圖片(圖片來源於mnist),每張圖片名稱“_”後邊的是它的數字值。然後,這些要交給機器去學習,圖片有了,答案有了,機器會去找規律。

機器學習中有一個比較笨的方法,叫回歸模型。

在這個例子中,它是這樣運作的,比如下面這張圖片,這是1的手寫體圖片。

我們把這個圖片通過技術手段,按照一個個像素點搞成矩陣x,空白就是0,有顏色的有值,就像上面那樣。

 

我們假設,有這麼一個公式(這個公式將最終計算圖片得出數字):這個圖片矩陣x和另一個矩陣W相乘,然後再加上一個數b,就會得出一個值,這個值就是我們的答案y。

所以,我們把65000張圖片x傳入公式中,讓他自己去算,未知數就兩個,一個W和一個b。因爲矩陣x對應的值是圖片的像素點,所以這個圖片一般都會小到不能再小。這次我們的手寫體數字是28*28像素。

好的,經過機器的求解。我們終於算出來了W和b的值,這個值要保存起來,下一次可以直接使用。

y = Wx + b 

也就是說,如果再有一個圖片,我們只需要把它轉換爲矩陣,然後輸入到公式中,經過計算,我們就知道y的結果了,也就是知道了這個圖片表達的是數字幾。

至此,這個簡單的程序就做完了。

再來回顧一下效果:

這是使用的最簡單的基於Softmax迴歸的全連接神經網絡。

當然,相比於卷積神經網絡,它的識別率很低。

但是,它很容易理解,就像Hello World,容易理解。

 

總結:

一、用到的知識

1、谷歌開源的機器學習框架TensorFlow的使用,矩陣運算,圖的持久化保存。

2、python的GUI界面知識,PIL的圖形處理。

3、機器學習的流程和概念,前向傳播算法,損失函數,學習率。

4、數學知識,矩陣,交叉熵。
 

二、感悟和思考

1、全連接神經網絡的迴歸模型,有點像全體民主。

因爲參數太多,會導致計算變慢;又因爲要考慮每個人的感受,會出現過擬合的現象。

簡單來說,就是因爲照顧幾個特例,導致大局無法形成有規律的模型。
要是爲了照顧幾個特例,從而形成一個的公式,那麼其他主流數據又不適用這個規則了。

所以,需要從大局出發,拋棄這些特例,或者忽略他們的一些次要信息,就像只看一個人的優點。

據說卷積神經網絡可以解決這個問題,它不是考慮每一個參數,它只把抽取出的主要特徵作爲判斷依據,有點像核心成員決策。

2、行業的知識是共通的。

在此之前沒有接觸過python這個編程語言,下載了個電子書,看了一下他的語法,什麼叫if,哪個叫Button,很多命名居然都是一樣的,很快就能上手。

所以,不必着急去學習語言1,語言2,語言3,每一大類語言(前端、後端這算不同種類,Java、C也算不同種類)學好一個,其他的會很快上手。

 

代碼已上傳,可到我下載主頁查看,只需要5積分,便可下載。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章