基于BP神經(jīng)網(wǎng)絡的手寫數(shù)字識別_第1頁
基于BP神經(jīng)網(wǎng)絡的手寫數(shù)字識別_第2頁
基于BP神經(jīng)網(wǎng)絡的手寫數(shù)字識別_第3頁
基于BP神經(jīng)網(wǎng)絡的手寫數(shù)字識別_第4頁
基于BP神經(jīng)網(wǎng)絡的手寫數(shù)字識別_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

[15],其是通過532nm激光器產(chǎn)生的熱光照射到設備上來產(chǎn)生哈達瑪散斑,再將這些散斑照射到測試及的數(shù)字圖像上,并由單像素探測來獲取總光強值,將這些值轉(zhuǎn)化為一維向量,最后通過卷積網(wǎng)絡訓練得到準確率。手寫數(shù)字數(shù)據(jù)集是機器學習分類領域的優(yōu)質(zhì)數(shù)據(jù)集,文章以反向傳播神經(jīng)網(wǎng)絡為基礎,對手寫數(shù)字進行分類識別。為減少BP神經(jīng)網(wǎng)絡的計算開支,實驗前,對比了過濾卡方檢驗法、主成分分析降維、線性判別式分析降維,以及多維尺度變換降維對特征選取的訓練測試效果,從而確定了神經(jīng)網(wǎng)絡擬合之前的最優(yōu)特征提取方法。實驗中,利用Bagging對BP神經(jīng)網(wǎng)絡進行集成處理,分類識別了手寫數(shù)字。實驗后,將文中方法與樸素貝葉斯、決策樹、隨機森林、LDA多分類進行對比。結(jié)果表明,采取LDA降維方法時,降到9維的特征提取方式最優(yōu),單個BP神經(jīng)網(wǎng)絡對手寫數(shù)字數(shù)據(jù)識別的準確率為92%左右,而基于Bagging集成的BP神經(jīng)網(wǎng)絡在識別準確率方面高達95%。1.3.2國外研究現(xiàn)狀1990年,隨著美國郵政服務對郵件自動化處理的迫切需求,對手寫數(shù)字進行有效識別成為了一個關鍵問題。在此背景下,美國國家標準與技術研究院(NIST)舉辦了一項手寫數(shù)字識別競賽,期間,眾多基于BP神經(jīng)網(wǎng)絡的方法被提出,并在比賽中展示了卓越的性能。從那時起,bp神經(jīng)網(wǎng)絡的手寫數(shù)字識別開始興起。2013年,拉胡爾.蒂瓦里開始嘗試使用反向傳播神經(jīng)網(wǎng)絡和k-最近鄰算法來識別手寫數(shù)字,然后比較結(jié)果,在兩者之間提出最佳分類器REF_Ref162786970\r\h[16],最后經(jīng)過實驗比較bp神經(jīng)網(wǎng)絡可以更好的識別和分類數(shù)字圖像。2019年,SavitaAhlawat在《Recentpatentsoncomputerscience》第四期在對手寫數(shù)字的多種特征進行深入研究,該研究成功提取了粗網(wǎng)格特征、重心及其矩特征、包括輪廓特征、筆劃密度特征、首個黑點位置特征、投影特征以及傅立葉變換特征。這些特征涵蓋了手寫數(shù)字的結(jié)構(gòu)和統(tǒng)計屬性。為了有效地從這些特征中選取最有判別力的特征,本研究采用了三種不同的特征選擇技術:類內(nèi)類間距離比、Kruskal-Wallis(K-W)檢驗和熵函數(shù)法。通過廣泛的實驗,本文對手寫數(shù)字特征的降維問題進行了詳細的分析和探討?;谶@些分析,建立了一個以BP神經(jīng)網(wǎng)絡為核心的手寫數(shù)字識別系統(tǒng)。該系統(tǒng)對原始特征集及經(jīng)過篩選的特征集進行了測試,實驗結(jié)果顯示,經(jīng)過特征選擇后的系統(tǒng)性能有顯著提升。這證實了本研究提出的特征提取和選擇方法的有效性。2021年,UpasanaSahu在《TrainingofaSpikingNeuralNetworkonspintronicsbasedanaloghardwareforhandwrittendigitrecognition》通過假設具有速率編碼的在將神經(jīng)元作為ReLU激活函數(shù)的近似時,我們對脈沖神經(jīng)網(wǎng)絡(SNN)中的誤差進行了恢復,以便更新共享的權重。這一過程只需用ANN的最終輸出來替代SNN的最終輸出。我們將這種建議的代理學習方法應用于深度卷積SNN,并在Fashion-MNIST和CIFAR10這兩個基準數(shù)據(jù)集上進行了評估,分別達到了94.56%和93.11%的分類準確率。所提出的網(wǎng)絡可以訓練,替代學習,代理梯度學習,或從深處轉(zhuǎn)換。轉(zhuǎn)換的SNNS需要長時間的仿真時間來達到合理的準確性,而我們的代理學習導致高效的SNN,模擬時間較短。2022年,《networkdailynews》五月a5期期刊發(fā)表了手寫圖像·字符通過深入學習(dl)方法,識別率可達99%。2.BP神經(jīng)網(wǎng)絡的手寫數(shù)字識別算法2.1神經(jīng)網(wǎng)絡的基本概念神經(jīng)網(wǎng)絡是機器學習的一個重要領域,也是深度學習算法的核心,其可以模仿生物神經(jīng)元相互傳遞信號的方式,是一種模擬生物神經(jīng)網(wǎng)絡的結(jié)構(gòu)功能和計算的模型。神經(jīng)網(wǎng)絡由輸入層,一個或多個隱含層,輸出層組成的節(jié)點層組成,每層都由許多神經(jīng)元組成,每個神經(jīng)元默認與上一層的神經(jīng)元全部連接,且它們之間都有一個權值w和偏置b。權重可以看作兩個神經(jīng)元連接線的強弱,偏置則是表示神經(jīng)元是否更容易被激活,設定一個閾值,如果其中有一個節(jié)點的輸出高于這個閾值,這個節(jié)點就會被激活,并將數(shù)據(jù)信息傳遞到網(wǎng)絡的下一層,這樣層層遞進直到輸出結(jié)果。神經(jīng)網(wǎng)絡按照連接方式可以分為前向神經(jīng)網(wǎng)絡和反饋神經(jīng)網(wǎng)絡,按照學習方式可以分為有導師學習神經(jīng)網(wǎng)絡和無導師學習神經(jīng)網(wǎng)絡,而按照實現(xiàn)功能則可以分為擬合神經(jīng)網(wǎng)絡和分類神經(jīng)網(wǎng)絡。本文BP神經(jīng)網(wǎng)絡按連接方式分屬于反饋神經(jīng)網(wǎng)絡,其需要計算誤差,通過誤差來不斷調(diào)整中間層各個節(jié)點的權值和偏置,直到輸出與預期值大致一致,這種雙向傳遞的神經(jīng)網(wǎng)絡就是反饋神經(jīng)網(wǎng)絡。BP神經(jīng)網(wǎng)絡按學習方式分屬于有導師學習神經(jīng)網(wǎng)絡,因為它需要已知的輸入及輸出對樣本進行訓練才能完成后續(xù)一系列的調(diào)整。BP神經(jīng)網(wǎng)絡按實現(xiàn)功能既可以為擬合神經(jīng)網(wǎng)絡也可以為分類神經(jīng)網(wǎng)絡,因為其強大的學習能力和適應能力決定了它的多功能性,它是根據(jù)不同類別的問題進行分類,本文研究的BP神經(jīng)網(wǎng)絡的手寫數(shù)字識別需要根據(jù)數(shù)字特征識別數(shù)字并分成0到9,屬于其屬于分類神經(jīng)網(wǎng)絡。2.2BP神經(jīng)網(wǎng)絡的手寫數(shù)字識別原理BP神經(jīng)網(wǎng)絡,是模仿人類大腦行為的模型,在BP神經(jīng)網(wǎng)絡中,信息從輸入層向輸出層單向傳遞,且每一層的狀態(tài)只影響下一層的狀態(tài)。網(wǎng)絡權值和閾值是通過網(wǎng)絡訓練進行學習和調(diào)整的,這一過程利用了最速下降法來最小化誤差信號。激活函數(shù)在反向傳播神經(jīng)網(wǎng)絡中發(fā)揮著關鍵作用,通過引入非線性特性,使得這類網(wǎng)絡能夠處理非線性問題。盡管BP神經(jīng)網(wǎng)絡因其出色的非線性映射能力和靈活的結(jié)構(gòu)而強大,但它們也存在一些不足之處,包括學習過程緩慢、容易落入局部最優(yōu)解,以及其泛化能力有所限制。BP神經(jīng)網(wǎng)絡的手寫數(shù)字識別原理是基于反向傳播法進行模式識別和學習。整個過程先從前向傳播開始,輸入層接收處理過的數(shù)字圖像信息作為輸入,經(jīng)過激活傳遞到下一層,再傳遞到隱含層,層層遞進,最后到輸出層輸出。然后將輸出值與實際值進行比較,計算出誤差,將誤差從輸出層向回傳遞至隱藏層,逐層計算每個神經(jīng)元對最終誤差的梯度,并更新相應的權重和偏置,以減小誤差。重復上述前向傳播和反向傳播的過程,不斷調(diào)整網(wǎng)絡中的權重和偏置,直至整個網(wǎng)絡的誤差達到最小或收斂到一個可接受的范圍。經(jīng)過訓練后的BP神經(jīng)網(wǎng)絡能夠?qū)κ謱憯?shù)字圖片進行分類,輸出層中概率最高的神經(jīng)元對應的數(shù)字即為識別結(jié)果。2.3圖像預處理圖像預處理是圖像識別的基礎,首先要把圖像轉(zhuǎn)化成計算機可以識別的形式,調(diào)整圖像尺寸大小統(tǒng)一,接著進行灰度化處理,圖像的每個像素點會分配一個灰度值,通過二值化,設定一個閾值,將圖像上的像素點的灰度值設置為0或者255,使圖像呈現(xiàn)黑白效果,減少數(shù)據(jù)量,且降低模型復雜度。最后進行歸一化,將所有數(shù)值轉(zhuǎn)換到同一尺度范圍內(nèi),消除不同特征之間的差異,使模型更加穩(wěn)定可靠。如圖所示,原始圖像轉(zhuǎn)換為灰度圖像后,經(jīng)過二值化,降噪等處理后得到處理后機器可以識別的圖像。2.4圖像特征提取圖像特征提取是將預處理過后的圖像信息轉(zhuǎn)換成特征向量,特征向量可以反映圖像中的有用信息,如筆畫寬度,每支筆的出墨粗細可能不太一樣,有像針尖頭或者是子彈頭的筆,通常來說子彈頭的筆出墨痕跡會粗一些。而針尖頭的筆出墨會很細。再加上每個人的書寫習慣力度不太一樣所以就有很多筆畫寬度不一樣的特征。還有數(shù)字形狀的不同例如1就像一條直線,2像半個愛心,3像耳朵等等。還有邊緣特征、方向特征、位置特征等等。面對這些特征,傳統(tǒng)的方法像尺度不變特征變換,方向梯度直方圖之類的方法顯然有些吃力。這里采用的是卷積神經(jīng)網(wǎng)絡的深度學習的自動學習特征,利用深度神經(jīng)網(wǎng)絡模型,將從網(wǎng)上下載的MNIST數(shù)據(jù)集。按照8:2的比例分成訓練集和數(shù)據(jù)集,將訓練集對卷積神經(jīng)網(wǎng)絡模型進行訓練,訓練完后通過測試集對模型進行評估。評估好的模型就可以捕捉高層次特征,這些特征一般來說比較抽象,且提取效率高。2.5BP神經(jīng)網(wǎng)絡設計本文將數(shù)字圖像進行灰度、歸一化處理,將其大小調(diào)整為統(tǒng)一的尺寸,將圖像設定成28x28像素。同時,將每個像素值歸一化到0-1之間。設計一個具有輸入層、隱含層和輸出層的BP神經(jīng)網(wǎng)絡。輸入層有784個神經(jīng)元,每個像素點對應一個輸入層神經(jīng)元,隱藏層為10個神經(jīng)元,輸出層有10個神經(jīng)元,并對其進行標記分別代表0到9。先隨機初始化神經(jīng)網(wǎng)絡的權重w和偏置b。將輸入數(shù)據(jù)通過神經(jīng)網(wǎng)絡進行前向傳播,計算每個神經(jīng)元的加權和,然后通過激活函數(shù)sigmoid得到輸出。根據(jù)網(wǎng)絡輸出和實際標簽計算損失函數(shù)。根據(jù)損失函數(shù)計算梯度,反向依次向上一層傳播并更新神經(jīng)網(wǎng)絡的權重和偏置。重復執(zhí)行步驟,不斷更新神經(jīng)網(wǎng)絡的權重和偏置直到達到預設的訓練輪數(shù)或損失收斂。具體流程圖如下所示:圖2-4BP神經(jīng)網(wǎng)絡設計流程圖3.BP神經(jīng)網(wǎng)絡算法的手寫識別系統(tǒng)3.1手寫識別系統(tǒng)手寫識別,是指將在人類用手寫的字產(chǎn)生的有序軌跡信息轉(zhuǎn)化為漢字內(nèi)碼的過程,也就是將人類寫的字轉(zhuǎn)化成機器可以看得懂的方式。這個過程實際上是將漢字放入一個坐標,經(jīng)過圖像處理后將漢字分成許多像素格子,每個格子只對應一個信息的一個過程。手寫識別是人類與機器之間交流方便的一種方法,使用者只要操作一些輸入設備進行簡單操作便可以與機器進行交流。手寫識別技術的應用非常廣泛,不同于往日,如今的手機已經(jīng)十分智能而且基本家家戶戶都在使用,手寫識別技術也被大量應用。手寫輸入設備也早已不僅限于鍵盤鼠標,現(xiàn)在市面上也出現(xiàn)了隔空觸摸用手輸入,類似的還有超聲波輸入等等。在手寫識別系統(tǒng)的實現(xiàn)過程中,人工神經(jīng)網(wǎng)絡也被稱為神經(jīng)網(wǎng)絡,在今后也將是一個不可或缺的工具,它可以代替人進行一些操作。神經(jīng)網(wǎng)絡是一種受生物神經(jīng)網(wǎng)絡啟發(fā)的計算系統(tǒng),其在圖像識別、自然語言處理、醫(yī)療和金融等領域得到了廣泛應用。例如,可以通過訓練一個人工神經(jīng)網(wǎng)絡來識別手寫數(shù)字。3.2BP神經(jīng)網(wǎng)絡模型BP神經(jīng)網(wǎng)絡由輸入層,多層中間層,輸出層構(gòu)成。BP神經(jīng)網(wǎng)絡模型由許多人工神經(jīng)元組成,通過pattarnnet函數(shù)可以得到BP神經(jīng)網(wǎng)絡模型,每一個神經(jīng)元默認與下一層的所有神經(jīng)元連接,且相互連接的神經(jīng)元之間都有一個偏置和權值,權重越大對下一層輸出的影向就越大,就越容易激活。BP神經(jīng)網(wǎng)絡模型圖如下所示:圖3-1BP神經(jīng)網(wǎng)絡模型圖如圖3-1所示,這是一個三層感知器,b為偏置,其中輸入向量為X=(x1,x2,…xn),第三層輸出小量為Y=(y1,y2…yj)第二層輸出向量為O=(o1,o2…ok);輸入層到輸出層的權值V1=(v11,v12,…,v1j),V2=(v21,v22,…,v2j)。首先,輸入層向隱含層有:Otn?t隱含層對輸出層有:Yin?t其中激活函數(shù)f(x)為sigmoid函數(shù),其具有連續(xù)可導的特點,其公式為:fx以上公式可以看出下一層輸出都是由上一層所有的輸入值和各個權值的乘積通過激活函數(shù)sigmoid激活輸出做為下一層的輸入,最后的輸出同樣也是如此,輸出值與預期不符則要通過反向傳播算法進行權值的調(diào)整,調(diào)整權值通常要用到誤差公式:δ=z?y式中z為預期結(jié)果,y為輸出值,它們相減的次方即為誤差更新權值的公式為:w其中δ為誤差,w1為輸出與上一層其中一個神經(jīng)元的權值。3.3編程實現(xiàn)算法BP神經(jīng)網(wǎng)絡的手寫數(shù)字識別程序要運行需要有激活函數(shù)、訓練模型代碼、測試代碼等等。這里名為activeFcn的激活函數(shù),它可以接受三個參數(shù),分別是權值w、偏置b和輸入x。其函數(shù)主要功能函數(shù)的主要功能是計算y=w*x+b,然后對y中的每個元素應用sigmoid激活函數(shù)。最后返回計算得到的y值。其代碼如下:function[y]=activeFcn(w,b,x)%輸出函數(shù)y=w*x+b;n=length(y);fori=1:ny(i)=1.0/(1+exp(-y(i)));endy;end這是一個用于訓練BP神經(jīng)網(wǎng)絡的函數(shù),輸入?yún)?shù)為訓練樣本的像素數(shù)據(jù)`x_train`和訓練樣本的標簽`y_train`,輸出參數(shù)為輸出層權重`w`、輸出層偏置`b`、隱藏層權重`w_h`和隱藏層偏置`b_h`。函數(shù)首先設置輸入神經(jīng)元個數(shù)、隱藏層神經(jīng)元個數(shù)和輸出層神經(jīng)元個數(shù),然后初始化權重矩陣和偏置向量。接下來,進行迭代訓練,每次迭代中,打亂訓練樣本的順序,然后對每個訓練樣本進行前向傳播和反向傳播,更新權重矩陣和偏置向量。最后返回更新后的權重矩陣和偏置向量。其代碼如下:function[w,b,w_h,b_h]=bpTrain(x_train,y_train)%參考手寫B(tài)P神經(jīng)網(wǎng)絡進行訓練%設置一個隱藏層,784-->隱藏層神經(jīng)元個數(shù)-->10%x_train:訓練樣本的像素數(shù)據(jù)%y_train:訓練樣本的標簽%w:輸出層權重%b:輸出層偏置%w_h:隱藏層權重%b_h:隱藏層偏置%step:循環(huán)步數(shù)%使用方法%loadnum_train.mat;%加載訓練數(shù)據(jù)%[w,b,w_h,b_h]=bpTrain(x_train,y_train);iter=input('迭代步數(shù):');learnFactor=input('學習因子:');in=784;%輸入神經(jīng)元個數(shù)hid=input('隱藏層神經(jīng)元個數(shù):');%隱藏層神經(jīng)元個數(shù)out=10;%輸出層神經(jīng)元個數(shù)w=randn(out,hid);b=randn(out,1);w_h=randn(hid,in);b_h=randn(hid,1);fori=0:iterdisp(['第'num2str(i)'次迭代'])%打亂訓練樣本r=randperm(4000);x_train=x_train(:,r);y_train=y_train(:,r);forj=1:4000x=x_train(:,j);y=y_train(:,j);hid_put=activeFcn(w_h,b_h,x);out_put=activeFcn(w,b,hid_put);%更新公式的實現(xiàn)(反向傳播算法)o_update=(y-out_put).*out_put.*(1-out_put);h_update=((w')*o_update).*hid_put.*(1-hid_put);outw_update=learnFactor*(o_update*(hid_put'));outb_update=learnFactor*o_update;hidw_update=learnFactor*(h_update*(x'));hidb_update=learnFactor*h_update;w=w+outw_update;b=b+outb_update;w_h=w_h+hidw_update;b_h=b_h+hidb_update;endendend這是一個用于測試BP神經(jīng)網(wǎng)絡的函數(shù)。輸入?yún)?shù)為測試樣本的像素數(shù)據(jù)`x_test`和測試樣本的標簽`y_test`,以及訓練好的輸出層權重`w`、輸出層偏置`b`、隱藏層權重`w_h`和隱藏層偏置`b_h`。函數(shù)的主要功能是計算測試樣本的正確率,并返回一個字符串表示正確率。函數(shù)首先初始化一個計數(shù)器`sum`,然后遍歷測試樣本,對每個樣本進行前向傳播,得到預測結(jié)果`testR`。接著,將預測結(jié)果與真實標簽進行比較,如果相同,則計數(shù)器加1。最后,計算正確率并返回一個字符串表示正確率。其代碼如下:functionstr=bpTest(x_test,y_test,w,b,w_h,b_h)%x_test:測試樣本的像素數(shù)據(jù)%y_test:測試樣本的標簽%w:輸出層權重%b:輸出層偏置%w_h:隱藏層權重%b_h:隱藏層偏置%loadnum_train.mat;%加載訓練數(shù)據(jù)%[w,b,w_h,b_h]=bpTrain(x_train,y_train);%loadnum_test.mat;%加載測試數(shù)據(jù)%str=bpTest(x_test,y_test,w,b,w_h,b_h);sum=0;%計數(shù)器fork=1:10000x=x_test(:,k);hid=activeFcn(w_h,b_h,x);testR=activeFcn(w,b,hid);%正確率表示方式一:輸出正確個數(shù)[~,t_index]=max(testR);[~,y_index]=max(y_test(:,k));ift_index==y_indexsum=sum+1;endendstr=['正確率:'num2str(sum)'/10000'];fprintf('正確率:%d/10000\n',sum);%正確率表示方式二:用plotconfusion函數(shù)%plotconfusion(y_test,test);end最后,使用訓練數(shù)據(jù)對模型進行訓練,并在測試集上進行預測。同時,計算了模型在測試集上的準確率,并繪制了混淆矩陣。其代碼如下:%啟動訓練[net,tr]=train(net,input_train,output_train);%使用測試集進行預測output_pred=net(input_test);%將預測結(jié)果從One-Hot編碼轉(zhuǎn)換回標簽[~,pred_labels]=max(output_pred);pred_labels=pred_labels-1;%%繪制損失函數(shù)曲線figureplot(tr.epoch,tr.perf);xlabel('Epoch');ylabel('Performance');title('TrainingPerformance');gridon;%繪制驗證集性能曲線holdon;plot(tr.epoch,tr.vperf);legend('TrainingPerformance','ValidationPerformance');holdoff;%%評價%BP神經(jīng)網(wǎng)絡的準確率accuracy_BP=sum(pred_labels==test_labels')/length(test_labels');fprintf('測試集準確率:%0.2f%%\n',100*accuracy_BP)%顯示分類結(jié)果%使用BP網(wǎng)絡的結(jié)果繪制混淆矩陣figure;cmV=confusionchart(test_labels',pred_labels,'RowSummary','row-normalized','ColumnSummary','column-normalized');cmV.Title="BP-人工神經(jīng)網(wǎng)絡";3.3.1開發(fā)工具matlab語言MATLAB是一個有多種功能集一身的軟件,它可以進行數(shù)學計算,它提供了很多函數(shù)庫,用于解決微積分,線性代數(shù)等數(shù)學問題,多復雜的計算都不在話下,可以輕松解決,同時還可以支持符號計算,處理十分復雜的數(shù)學表達式。其繪圖功能也十分強大,可以將高質(zhì)量的二維或者三維圖形呈現(xiàn)出來,很直觀。此外,MATLAB還具豐富的工具箱,可以應用于各種領域的科學計算和工程設計。它是一種易于使用的編程語言,因為它提供了許多內(nèi)置函數(shù),可以大大簡化編程過程。對于手寫數(shù)字識別方面,matlab可以提供函數(shù)來處理圖像數(shù)據(jù),和提取特征,還可以使用神經(jīng)網(wǎng)絡工具箱輕松構(gòu)建模型、訓練模型、驗證模型,同時可以使用一些方法來評估模型。之后直觀的展示識別結(jié)果,總之matlab為手寫數(shù)字識別提供了實驗環(huán)境,這是大部分軟件做不到的,成了一個不可或缺的工具。3.4手寫數(shù)字識別方法模型架構(gòu)這里通過bp神經(jīng)網(wǎng)絡對模型進行訓練。在前向傳播階段,網(wǎng)絡接收輸入數(shù)據(jù),并通過各個層的神經(jīng)元進行計算,最終得到輸出結(jié)果。反向傳播階段則是根據(jù)網(wǎng)絡輸出的結(jié)果和實際值之間的誤差來反向調(diào)整權值和閾值,使得網(wǎng)絡的輸出結(jié)果更接近于實際值。訓練好之后得到一個模型。4.訓練識別過程及識別準確率4.1訓練過程權重初始化:這里采用隨機初始化,權值通常使用隨機數(shù)進行初始化,這樣可以打破對稱性,使每個神經(jīng)元在訓練初期有不同梯度,避免所有隱藏層單元學習到相同的特征。先導入MNIST數(shù)據(jù)集,其次設置訓練和測試數(shù)據(jù),創(chuàng)建bp神經(jīng)網(wǎng)絡模型,設置輸入層神經(jīng)元數(shù)量為784,隱含層神經(jīng)元數(shù)量為100,輸出層神經(jīng)元數(shù)量為10,并對其進行標記,分別代表0-9,創(chuàng)建pattarnnet函數(shù)模型,設置最大連續(xù)失敗次數(shù)為6和設置訓練集比例0.8以及設置驗證集0.2比例,設置測試集比例,打開matlab,將編寫好的代碼算法運行,得到一個手寫數(shù)字預測系統(tǒng),如下圖4-1,再次將這個模型用訓練集訓練,開始訓練,訓練性能初始值為0.716,梯度為3.61,先使用測試集進行預測,將預測結(jié)果從one-hot編碼轉(zhuǎn)換為標簽,繪制損失函數(shù),繪制驗證集性能曲線。然后評價bp神經(jīng)網(wǎng)絡的準確率,顯示分類結(jié)果,使用bp網(wǎng)絡的結(jié)果繪制混淆矩陣,保存數(shù)據(jù)。每輪次訓練1000張圖片,進行多輪訓練,重復以上過程大約5分鐘,訓練完成,結(jié)束時的性能為0.00381,梯度為0.00567,最佳驗證性能是第99輪的0.01082,在第105輪停止訓練,得到訓練數(shù)據(jù)圖4-2和混淆矩陣圖4-3以及曲線擬合圖4-4如下圖4-1手寫數(shù)字預測系統(tǒng)圖4-2訓練結(jié)果圖4-3混淆矩陣圖圖4-4曲線擬合圖4.2數(shù)據(jù)識別訓練好模型后,我從測試集中0-9的文件夾中隨機各選擇了若干圖片,經(jīng)過手寫數(shù)字預測系統(tǒng)識別后,都可以準確識別出來,我特意挑選了幾張字跡較為扭曲的數(shù)字圖片進行識別,如下圖:4.3結(jié)果分析由訓練得到的梯度圖4-15可以看出剛開始的梯度變化非常大,隨著訓練次數(shù)輪次增多,權值不斷變化,不斷學習反饋,到最后梯度幾乎為0,已經(jīng)不再變化,此時說明這個手寫數(shù)字識別系統(tǒng)已經(jīng)可以很好的準確識別數(shù)字。結(jié)合誤差直方圖4-16可以看出0誤差是最多的,這時就是訓練好了,其次是在0之間上下浮動,還有反饋。經(jīng)過反復訓練后,通過測試集準確率為96.63%,識別準確率最低的是識別數(shù)字7的94.9%,識別準確率最高的是識別數(shù)字0的98.8%,其他數(shù)字的識別準確率在94.9%-98.8%之間,達到了預期的效果。而且訓練和驗證曲線也幾乎擬合,說明預測結(jié)果與實際結(jié)果相差不大,模型訓練好后也能夠很好的識別出原圖像。圖4-15梯度變化圖圖4-16誤差直方圖5.小結(jié)本文設計了一種反向神經(jīng)網(wǎng)絡識別手寫數(shù)字,通過訓練神經(jīng)網(wǎng)絡模擬大腦識別的方法,實現(xiàn)了快速高效準確的識別數(shù)字,具有重大的商業(yè)價值和社會價值意義。主要完成的工作主要包括如下幾個方面:(1)處理數(shù)據(jù)集,理解BP神經(jīng)網(wǎng)絡傳播的方式以及介紹了手寫體數(shù)字識別廣泛的應用前景和常用的識別方法,通過分析指出手寫體數(shù)字識別的難點在于無法建立精確的數(shù)學模型和做出簡單可行的識別。(2)本文第三大點介紹了人工神經(jīng)元網(wǎng)絡基本原理和它的BP學習算法及其改進算法,然后論述了模式識別的方法和有關概念,指出了神經(jīng)網(wǎng)絡之所以能夠用于手寫體數(shù)字識別的內(nèi)在機理和獨特優(yōu)勢。由于時間及本人能力的原因,本設計還有許多缺陷和不足之處,如:代碼理解和使用不熟練,不能完全解釋各部分代碼的用途。Bp神經(jīng)網(wǎng)絡的手寫數(shù)字識別難點主要在于理解神經(jīng)網(wǎng)絡的傳播方式以及如何實現(xiàn)反向傳播,以及代碼如何正確編寫及使用。通過實踐得出,.bp神經(jīng)網(wǎng)絡的手寫數(shù)字識別與傳統(tǒng)手寫數(shù)字識別相比:1.BP神經(jīng)網(wǎng)絡能夠通過反向傳播算法自我學習和調(diào)整權重,這使得網(wǎng)絡能夠不斷優(yōu)化并適應新的數(shù)據(jù)分布,提高了識別的準確性。2.BP神經(jīng)網(wǎng)絡可以根據(jù)不同的應用場景調(diào)整網(wǎng)絡結(jié)構(gòu)和參數(shù),使其適應不同的識別需求。3.與傳統(tǒng)方法相比,BP神經(jīng)網(wǎng)絡不需要對數(shù)據(jù)進行非常精確的預處理,如特征提取等,因為它能夠自動從數(shù)據(jù)中學習到有用的特征。4.BP神經(jīng)網(wǎng)絡通過學習可以得到數(shù)字的抽象特征,這些特征不依賴于特定的字體或風格,因此網(wǎng)絡具有良好的泛化能力,能夠識別出不同人書寫的數(shù)字。參考文獻BengioY,Boulanger-LweandowskiN,PascanuR,Advancesinoptimizingrecurrentnetworks[C]//2013IEEEInternationalConferenceonAcoustics,Speech,an

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論