-
1 # 北航秦曾昌
-
2 # e的左上角
首先在計算機裡影象只是一堆數字而已,每一個畫素點有一個特定的數字。如選一個28*28的圖片怎麼讓計算機對手寫影象進行識別呢?我們使用多層神經網路對影象進行特徵提取來進行對數字的識別。
本圖神經網路有4層,其中有784個輸入層,2個隱含層,一個輸出層。
輸入層有784個,這784個輸入值就是28*28個畫素點所代表的數值排成一列而成。
輸出層就是代表計算機最終計算預測結果,判斷影象代表的是什麼數值。
隱含層是神經網路的關鍵,對影象識別的正確性至關重要。其中隱含層的層數和個數由自己進行分配選取,從而來達到最好的識別效果。其中隱含層主要是對圖片的特徵進行提取。
隱含層到底時怎麼進行工作的呢?下面進行詳細的介紹。我沒知道,數字9可以由一個0和一個1組合而成,數字8可以由兩個0組合而成。隱含層的第二層就是想這樣對影象進行特徵提取並來對數字進行區分的。
數字可以細分不同的影象進行組合而成
但是一層隱含層識別率還是有點低,為了提高識別的準確性,我們可以對第二層的影象進行細分,所以添加了第一層的隱含層。如下圖,數字0還可以進行進一步的細分。
所以隱含層是對影象進行精準的提取,組合,判斷,以達到對數字正確的識別。
但是每個層之間的連線是幹什麼的呢?
從上面我們知道第一層的輸入層代表著影象每個畫素的數值p,這些影象可能很雜亂,如下圖。
但從這些引數怎麼提取我們想要的特徵呢?我們就需要一個權重(weights)w對影象進行處理來得到我們想要的特徵。
然後與我們的影象進行疊加就得到我們其中一個特徵。
有些影象會有噪點,或者我們想提高識別的門檻(閾值)。我就需要一個偏置(biases),來減少干擾。由於每一層都會有一個偏置和一組權重(weights),我們會要計算很多的數值,所以這一過程的計算量是很大的。(/ □ )
到這裡一個基本的神經網路就以及介紹完畢了,就是這麼簡單(*^__^*) 。
但是如果上述過程出錯會怎麼辦????
使用梯度下降法。
回覆列表
識別手寫數字是影象處理領域相對基礎的問題,本文將從機器學習領域和深度學習領域兩方面對這一問題進行闡述,以期更為全面的理解手寫數字的識別問題。
1.機器學習領域——KNN用於手寫數字識別KNN是機器學習中較為基礎的演算法之一,應用KNN的思想識別手寫字型的整體思路是根據訓練資料集(預先採集好的手寫數字庫)和測試資料集(待識別的手寫數字)間距離的大小來識別手寫數字。
具體過程如下:
(1)將測試集和訓練集全部如下圖所示程式設計0-1矩陣(畫素點位置為1,非畫素點位置為0)。
(2)將測試資料矩陣和訓練資料矩陣求距離,距離最小的訓練資料作為最終的識別結果。
相關的程式碼可以參見:https://github.com/Azure-Sky-L/Machine-learning/blob/master/KNN-%E6%89%8B%E5%86%99%E6%95%B0%E5%AD%97%E8%AF%86%E5%88%AB.py2.深度學習領域——神經網路用於手寫數字識別深度學習理論和技術的發展使得手寫數字識別的準確度有了進一步的提高。神經網路進行手寫數字識別幾乎已經成為了深度學習的入門級實踐。深度學習領域已經建立好了手寫資料集mnist,在訓練資料的時候可以直接拿來使用。
神經網路進行手寫數字識別是透過搭建神經網路將訓練資料輸入搭建的網路中,透過最佳化損失函式對各層神經網路的引數進行訓練。一般來講用於手寫數字識別的神經網路選擇卷積神經網路,因為卷積神經網路區域性連線的特性大大降低了計算的複雜程度。
神經網路構建手寫數字識別的程式碼參見:https://github.com/Jack-Cherish/Deep-Learning/blob/master/mnist.py搭建的神經網路的結構圖如下圖所示,這樣一個簡單的神經網路(包含一個隱層)對手寫數字識別的準確率高達96.58%。