版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 本科畢業(yè)論文</b></p><p><b> ?。?0 屆)</b></p><p> 基于人工神經(jīng)網(wǎng)絡(luò)的手寫識別系統(tǒng)</p><p> Handwriting Recognition System Based on Artificial Neural Network</p>
2、;<p><b> 摘 要</b></p><p> 信息技術(shù)的快速發(fā)展,計算機迅速走進人們的生活,手寫識別技術(shù)和應(yīng)用領(lǐng)域越來越廣泛,比如在移動設(shè)備上、文印工作中都離不開它的身影,極大的方便了人們的日程生活、工作、學習,因此手寫識別具有很強的應(yīng)用價值和實用價值。</p><p> 本文中利用神經(jīng)網(wǎng)絡(luò)算法識別數(shù)字圖像和手寫漢字。識別的前提是獲得穩(wěn)定
3、的神經(jīng)網(wǎng)路,需要通過大量的訓(xùn)練樣本進行訓(xùn)練。針對數(shù)字圖像首先對圖像進行處理,通過灰度化、二值化、中值濾波、梯度銳化、歸一化等算法獲得特征矩陣,然后用經(jīng)過訓(xùn)練的神經(jīng)網(wǎng)路算法識別需要識別的特偵矩陣,進而獲得識別的結(jié)果。針對漢字識別,首先處理圖像獲得特征矩陣,通過經(jīng)過訓(xùn)練的神經(jīng)網(wǎng)絡(luò)的識別獲得筆畫,然后用筆畫去識別漢字,最后獲得識別的漢字以及聯(lián)想漢字和詞組。</p><p> 經(jīng)過測試和驗證,基于人工神經(jīng)網(wǎng)絡(luò)的手寫識別
4、系統(tǒng)能夠有效識別數(shù)字手寫圖像與手寫漢字,在本文選用的一些測試文字與數(shù)字圖像的識別上獲得了不錯的結(jié)果。</p><p> 關(guān)鍵詞:手寫識別;圖像處理;神經(jīng)網(wǎng)絡(luò)</p><p><b> ABSTRACT</b></p><p> The rapid development of information technology makes th
5、e computer immediately appear in people's lives. The application of handwriting recognition technology becomes widespread, and there are more and more application areas. For example, we can see it on a mobile devicea
6、nd in the printing work. It makes people's daily life, work and learning more convenient. Therefore, the handwriting recognition has very strong applied value and practical value.</p><p> In this articl
7、e, the writer uses neural network to identify digital image and handwriting Chinese ideogram. The premise of recognition is to obtain a stable neural network and a great deal of sample training is needed. For digital ima
8、ge, we need to process the images, and get characteristic matrix through a series of algorithms, including graying, linearization, Median filter, gradient sharpening and normalization.For Chinese ideogram recognition,we
9、should gain a characteristic matrix by process</p><p> After testing and verification, handwriting recognition which is based on artificial neural network system can effectively identify the handwriting ima
10、ge and Chinese ideogram. We obtain satisfying results in the identification test on words and digital image.</p><p> Key words: Handwriting recognition;image processing;neural network</p><p>&l
11、t;b> 目 錄</b></p><p><b> 第1章 緒論1</b></p><p> 1.1 課題研究的背景1</p><p> 1.2 課題研究的目的及意義1</p><p> 1.3 國內(nèi)外研究現(xiàn)狀2</p><p> 1.4 課題研究內(nèi)容2&
12、lt;/p><p> 1.5 論文的組織結(jié)構(gòu)3</p><p> 第2章 神經(jīng)網(wǎng)絡(luò)算法的原理4</p><p> 2.1 神經(jīng)網(wǎng)絡(luò)的原理4</p><p> 2.1.1 生物神經(jīng)元網(wǎng)絡(luò)4</p><p> 2.1.2 人工神經(jīng)元網(wǎng)絡(luò)4</p><p> 2.2 神經(jīng)元學習算法
13、6</p><p> 2.2.1 前饋神經(jīng)網(wǎng)絡(luò)6</p><p> 2.2.2 感知機6</p><p> 2.2.3 反向傳播算法8</p><p> 2.2.4 神經(jīng)網(wǎng)絡(luò)在模式識別上面的優(yōu)勢11</p><p> 2.3 本章小結(jié)11</p><p> 第3章 系統(tǒng)設(shè)計
14、與實現(xiàn)12</p><p> 3.1 神經(jīng)網(wǎng)絡(luò)算法的實現(xiàn)12</p><p> 3.1.1 神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)12</p><p> 3.1.2 算法的結(jié)構(gòu)12</p><p> 3.2 神經(jīng)網(wǎng)絡(luò)識別手寫數(shù)字14</p><p> 3.2.1 手寫數(shù)字的常規(guī)預(yù)處理方法14</p><
15、;p> 3.2.2 圖像的灰度化15</p><p> 3.2.3 圖像的二值化15</p><p> 3.2.4 中值濾波16</p><p> 3.2.5 去掉離散點16</p><p> 3.2.6 圖像銳化17</p><p> 3.2.7 數(shù)字的切分18</p>&
16、lt;p> 3.2.8 數(shù)字的歸一化19</p><p> 3.2.9 特征提取19</p><p> 3.2.10 數(shù)字識別過程19</p><p> 3.2.11 神經(jīng)元規(guī)模的確定21</p><p> 3.3 神經(jīng)網(wǎng)絡(luò)識別漢字21</p><p> 3.3.1 筆畫的預(yù)處理22<
17、;/p><p> 3.3.2 圖像的處理23</p><p> 3.3.3 神經(jīng)網(wǎng)絡(luò)規(guī)模的確定24</p><p> 3.3.4 字庫的管理方式24</p><p> 3.3.5 漢字的查詢27</p><p> 3.3.6 聯(lián)想詞組的查詢28</p><p> 3.4 UI界
18、面的實現(xiàn)29</p><p> 3.4.1 主窗口的自繪實現(xiàn)29</p><p> 3.4.2 自繪控件的實現(xiàn)30</p><p> 3.5 本章小結(jié)32</p><p> 第4章 系統(tǒng)測試及效果分析33</p><p> 4.1 系統(tǒng)測試33</p><p> 4.1.
19、1 神經(jīng)網(wǎng)絡(luò)算法的測試33</p><p> 4.1.2 手寫數(shù)字識別的測試33</p><p> 4.1.3 手寫漢字識別的測試36</p><p> 4.2 本章小結(jié)37</p><p><b> 結(jié)論38</b></p><p><b> 參考文獻39<
20、/b></p><p><b> 致謝41</b></p><p><b> 第1章 緒論</b></p><p> 1.1 課題研究的背景</p><p> 手寫識別的研究具有很大的使用價值,在過去的幾十年,由于數(shù)字化、信息化的大力發(fā)展,手寫識別成為模式識別的一個熱點。隨著手機、平
21、板等電子產(chǎn)品的快速發(fā)展,手寫識別技術(shù)在這些產(chǎn)品上已經(jīng)廣泛應(yīng)用,既能夠提升這些產(chǎn)品的用戶體驗、也能提高不少的效率。與此同時,現(xiàn)實生活中存在大量的手寫、打印文件等,有的需要整理成電子文檔,如果用人力去將該文件錄入到電子設(shè)備當中,不僅效率低而且錯誤率高,這種方法已經(jīng)不適應(yīng)當今社會,由于現(xiàn)在電子計算機的廣泛應(yīng)用于各行各業(yè),但是由于各種各樣的原因,智能識別系統(tǒng)不能廣泛應(yīng)用于社會,極大影響了人們的生活、工作效率。</p><p&
22、gt; 人工智能有一段時間曾經(jīng)陷入低迷,大眾都認為人工智能只是個玩具而沒有實際應(yīng)用價值。進入21世紀以來,數(shù)學的大力發(fā)展大大推動了人工智能的進步,也大大推動了計算機科學的發(fā)展。機器學習是人工智能的一個重要分支,也是現(xiàn)在的一個熱點。一個真正的智能,應(yīng)該具有學習能力,能夠根據(jù)自身的環(huán)境來學習,并改善自身的性能,能夠自動獲取學習所需要的知識。以前的智能系統(tǒng)不具有學習能力,只是根據(jù)某些算法去計算,隨著時代的發(fā)展,這種局限表現(xiàn)的更加突出。在這種
23、現(xiàn)象下,機器學習在很大程度上解決了這種局限?,F(xiàn)在機器學習已經(jīng)應(yīng)用到各個領(lǐng)域,比如專家系統(tǒng)、語音識別、搜索、計算機視覺等。神經(jīng)網(wǎng)絡(luò)是機器學習學科中的一個重要部分,用來分類或者回歸。神經(jīng)網(wǎng)絡(luò)的發(fā)展,為手寫識別提供了一個新的途徑。</p><p> 1.2 課題研究的目的及意義</p><p> 單個神經(jīng)元的結(jié)構(gòu)簡單,但是當大量的神經(jīng)元組成了神經(jīng)網(wǎng)絡(luò),就有了本質(zhì)的改變,它能夠模擬現(xiàn)實生活中的
24、行為,而且每個神經(jīng)元都能處理和存儲信息,使得神經(jīng)網(wǎng)絡(luò)具有了并行計算和分布式存儲的特點。研究神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)有助于更好的從手寫字中踢出去關(guān)鍵因素,從而提高識別的準確度和豐富度。</p><p> 研究手寫識別具有很大的應(yīng)用價值,將其應(yīng)用于現(xiàn)代便攜電子設(shè)備,豐富了人們的生活,提高工作效率。將其應(yīng)用于手寫文檔的識別,不僅能將人們從繁重重復(fù)的勞動中解脫出來,而且能夠提高手寫文檔電子化的效率。手寫識別有很重要的理論價<
25、;/p><p> 值,人們書寫的文字種類不同,每個人的書寫習慣不同,使得識別的樣本具有豐富的多樣性,識別算法需要從不同的方面進行研究。</p><p> 1.3 國內(nèi)外研究現(xiàn)狀</p><p> 在20世紀20年代,西方學者就研究過字符的識別,最早的是德國人G.Tausher的閱讀機,采用的比較簡單的匹配原理,能夠粗略的識別簡單的字符比如數(shù)字。到了20世紀60年
26、代初,OCR(廣字符閱讀機)已經(jīng)能夠識別書寫比較公正的手寫體字符了,比如日本的Toshiha公司開發(fā)的郵政編碼自動分揀機。到了近代,人工智能的發(fā)展,神經(jīng)網(wǎng)絡(luò)走入了人們的視線,它具有眾多優(yōu)點,能夠有效利用樣本的特點進行學習,然后根據(jù)學習的結(jié)果識別手寫字符[1]。</p><p> 由于漢字的基數(shù)大、寫法復(fù)雜、字體繁多,識別起來難點很大,所以漢字的識別被認為是字符識別領(lǐng)域的最終目標,很多人投入了大量的精力,也取得了
27、很大的成就[2]。漢字的識別最開始始于1966年,IBM公司的Casey和Nagy首次發(fā)表了漢字識別的文章。國內(nèi)的漢字識別技術(shù)始于20世紀70年代,當時是聯(lián)機手寫識別技術(shù),經(jīng)過長時間的摸索之后,劉迎健等人于1988年提出了利用筆段作為基元來進行聯(lián)機的手寫漢字識別,識別的漢字能夠達到6763-12000字,已經(jīng)具有了一定的實用價值?,F(xiàn)在的手寫識別技術(shù)較上個世紀,已經(jīng)有了長足的進步,識別范圍能夠支持GB2312-80規(guī)定的6763個簡體字,
28、對于書寫規(guī)范的漢字,識別率能夠達到95%以上[3,4]。</p><p> 1.4 課題研究內(nèi)容</p><p> 本課題研究的是一個基于神經(jīng)網(wǎng)絡(luò)的手寫識別系統(tǒng)。系統(tǒng)由C++語言開發(fā)完成,負責神經(jīng)網(wǎng)絡(luò)前饋網(wǎng)絡(luò)、反饋神經(jīng)網(wǎng)絡(luò)、界面的設(shè)計、圖形的處理、圖形的識別、字庫管理程序的設(shè)計,手寫識別系統(tǒng)包括神經(jīng)網(wǎng)絡(luò)算法的設(shè)計。</p><p> 系統(tǒng)研究的是基于神經(jīng)網(wǎng)絡(luò)的
29、手寫識別,包括數(shù)字與漢字的識別。數(shù)字與漢字的識別方法不一樣,數(shù)字比較簡單,數(shù)量只有10個,漢字較為復(fù)雜,數(shù)量大,所以針對這兩種模型采用了不同的思路。本文首先從理論上介紹了神經(jīng)網(wǎng)絡(luò)算法,然后介紹了數(shù)字的識別方法、漢字的手寫識別方法。</p><p> 數(shù)字的識別能夠識別兩種模式的數(shù)字,第1種是直接通過手寫工具寫在手寫板上的數(shù)字,通過神經(jīng)網(wǎng)絡(luò)的分類,得出書寫的結(jié)果;第2種是加載含有噪聲的數(shù)字,首先通過計算機圖形學的
30、知識降噪,然后通過神經(jīng)網(wǎng)絡(luò)分類得出結(jié)果。漢字的識別是將漢字拆分成元字根,本系統(tǒng)根據(jù)筆尖的走向,判斷出書寫的筆劃,然后通過筆劃來判斷漢字。</p><p> 1.5 論文的組織結(jié)構(gòu)</p><p> 本文共分為4章,按如下方式組織:</p><p> 第1章是全文的緒論部分,介紹了系統(tǒng)開發(fā)的背景,系統(tǒng)的研究的目的和意義,國內(nèi)外的研究現(xiàn)狀,課題的研究內(nèi)容,系統(tǒng)的預(yù)
31、期效果和關(guān)鍵指標以及本文的組織結(jié)構(gòu)。</p><p> 第2章是神經(jīng)網(wǎng)絡(luò)算法的介紹,這部分詳細介紹了神經(jīng)網(wǎng)絡(luò)算法,然后介紹了神經(jīng)網(wǎng)絡(luò)中的BP神經(jīng)網(wǎng)絡(luò)算法。</p><p> 第3章是手寫識別的基本過程,這部分介紹了神經(jīng)網(wǎng)絡(luò)的實現(xiàn)、對圖形的處理、特征向量的提取、以及漢字和數(shù)字的手寫識別過程,以及用戶界面的實現(xiàn)過程。</p><p> 第4章是介紹了系統(tǒng)的測試部分
32、,這部分主要介紹了手寫識別系統(tǒng)的三個部分的測試。</p><p> 最后是結(jié)論部分,對全文進行了全面的總結(jié)。</p><p> 第2章 神經(jīng)網(wǎng)絡(luò)算法的原理</p><p> 人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Network,ANN)由大量的神經(jīng)元組成,結(jié)構(gòu)與腦神經(jīng) 組織相似,是對生物神經(jīng)元的模擬,能夠完成與生物神經(jīng)元網(wǎng)絡(luò)類似的功能。</p
33、><p> 2.1 神經(jīng)網(wǎng)絡(luò)的原理</p><p> 2.1.1 生物神經(jīng)元網(wǎng)絡(luò)</p><p> 人腦的神經(jīng)系統(tǒng)的基本組成單位是神經(jīng)細胞,人腦組織的神經(jīng)系統(tǒng)大約由1011個神經(jīng)元細胞組成,而每個神經(jīng)細胞大于與104個神經(jīng)細胞相連接,通過大量的神經(jīng)細胞的活動,完成人神經(jīng)系統(tǒng)的活動。在神經(jīng)系統(tǒng)中,有的能力是先天就有的,比如呼吸,有的能力是后天訓(xùn)練完成的,比如說話。&
34、lt;/p><p> 神經(jīng)元細胞之間的連接通過突觸來完成,其中突觸分為軸突和樹突。神經(jīng)元細胞之間信息的傳遞通過生物電來完成,當神經(jīng)元細胞產(chǎn)生一個興奮的信號時,神經(jīng)細胞的膜電位就會產(chǎn)生變化,通過脈沖的方式傳遞給其他神經(jīng)元細胞。通過樹突->胞體->軸突->神經(jīng)連接->其他細胞,這樣就興奮信號傳遞了出去。</p><p> 2.1.2 人工神經(jīng)元網(wǎng)絡(luò)</p>
35、<p> 人工神經(jīng)元網(wǎng)絡(luò)模擬生物神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)見圖2.1。</p><p> 圖2.1 人工神經(jīng)元的基本模型</p><p> 圖2.1中,X表示神經(jīng)元的輸入,相當于其他神經(jīng)元的輸出值,w表示權(quán)重(weight),f是一個非線性函數(shù),神經(jīng)元的動作如下:</p><p> 當f為閾值函數(shù)的時候,其輸出為:</p><p>
36、 為了使式子簡約,先設(shè)閾值</p><p><b> 則</b></p><p><b> 或</b></p><p> 可以選取sgn函數(shù)作為閾值函數(shù)</p><p> 如果要求學習算法的輸出函數(shù)可微,可以選用sigmoid函數(shù),即:</p><p> sigmo
37、id函數(shù)的函數(shù)圖像見圖2.2。</p><p> 圖2.2 sigmoid函數(shù)</p><p> Sigmoid函數(shù)是無限次可微、連續(xù)、有界、關(guān)與原點對稱的函數(shù),抑制兩頭,對中間的細微變化敏感,使得神經(jīng)網(wǎng)絡(luò)對特征的識別度更好。</p><p> 2.2 神經(jīng)元學習算法</p><p> 2.2.1 前饋神經(jīng)網(wǎng)絡(luò)</p>
38、<p> 前饋神經(jīng)網(wǎng)絡(luò)是一個接受前一級輸入,并且輸出到下一級的結(jié)構(gòu),沒有反饋結(jié)構(gòu),每一個神經(jīng)元可以有多個輸入,但是只有一個輸出,每一個神經(jīng)元的輸出可以作為任意多個其他節(jié)點的輸入。前饋神經(jīng)網(wǎng)絡(luò)可以分成不同的層,第n層的輸入只與第n-1層的輸出有關(guān)。通常將所有的神經(jīng)元層分成三層,即:輸入層、輸出層、隱含層,輸入層即神經(jīng)元網(wǎng)絡(luò)的第一層,負責從外部接受輸入數(shù)據(jù),最后一層為輸出層,輸出整個神經(jīng)元網(wǎng)絡(luò)的結(jié)果,輸入層與輸出層之間的全部是隱
39、含層,隱含層的層數(shù)目可以大于等于1層。前饋神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)示意圖見圖2.3。</p><p> 圖 2.3 前饋神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)示意圖</p><p><b> 2.2.2 感知機</b></p><p> 感知機是一種雙層的神經(jīng)元網(wǎng)絡(luò)模型,沒有輸出層,有輸入層,是一層計算單元。感知機學習的目的是將訓(xùn)練數(shù)據(jù)進行超平面的線性劃分,感知機模型首先導(dǎo)
40、入了誤分類的損失函數(shù),然后利用梯度下降法對損失函數(shù)小化。</p><p><b> 感知機的模型如下:</b></p><p> 其中x為輸入向量,sgn是上面介紹過的符號函數(shù),是權(quán)值向量, 為偏置向量,要求出感知機的模型,只需要求出和即可。</p><p> 假設(shè)訓(xùn)練數(shù)據(jù)集是超平面線性可分的,感知機的目的就是求的一個合適的和,將訓(xùn)練集中
41、的正例和負例完全區(qū)分開來。</p><p> 選擇誤分類點到分類超平面S的總距離位損失函數(shù),即:</p><p> 其中,為輸入空間任意一點,為的L2范數(shù)。</p><p> 對于誤分類點來說,當,=-1,當時,=1。故:</p><p> 所以誤分類點到分類超平面S的距離是:</p><p> 假設(shè)所有誤分
42、類點的集合為M,那么所有誤分類點到分類超平面S的距離是:</p><p> 那么最終的損失函數(shù)為:</p><p> 現(xiàn)在的問題就是選取最小的損失函數(shù)模型的和</p><p> 感知機求解算法:采用隨機梯度下降,首先任意選取一個超平面,,然后用梯度下降法不斷極小化(1)式子。極小化的過程中隨機一個誤差分類點進行梯度下降。</p><p>
43、; 分別對(1)式中的 和求偏導(dǎo),即:</p><p> 隨機選取一個誤分類點,對和,則有:</p><p><b> 其中,為步長。</b></p><p> 然后不停地進行梯度下降算法,直到訓(xùn)練集總沒有誤分類點為止。</p><p> 這種算法的思路是:當一個點被誤分類的時候,就重新進行梯度下降,調(diào)整和,使
44、得分類平面往誤分類的一側(cè)移動,減少該點與分類超平面的距離,直到該點被正確的分類,然后再次選取點重復(fù)上述方法,直到所有的點都被正確分類,那么就找到了正確的和。</p><p> 2.2.3 反向傳播算法</p><p> 感知機作為最簡單的前向人工神經(jīng)網(wǎng)絡(luò)算法,雖然結(jié)構(gòu)簡單,但是能解決復(fù)雜的問題,但是感知機的本質(zhì)缺陷是不能處理線性不可分問題。</p><p>
45、前饋神經(jīng)網(wǎng)絡(luò)中隱含層無法與外界相連,無法計算誤差,為了解決這一問題,提出了反向傳播網(wǎng)絡(luò)(BP,Back-Propogation)算法[6],算法主要思想為:首先通過前饋神經(jīng)網(wǎng)絡(luò)得出神經(jīng)網(wǎng)絡(luò)的值,然后計算該值與訓(xùn)練集中值的誤差,然后簡介算出隱含層的誤差,然后調(diào)整參數(shù),再次計算誤差,直到誤差小到可以接受的范圍。</p><p> 在反向傳播算法中,通常采用梯度下降法來修正權(quán)值,從感知機的求解過程中,可知輸出函數(shù)要求
46、可微, 故通常采用sigmoid函數(shù)作為輸出函數(shù)。</p><p> 當研究某一層時,j表示該層的第j個神經(jīng)元,i表示前一層的第i個神經(jīng)元,k表示后一層的第k個神經(jīng)元,表示該層第j個神經(jīng)元的輸出,表示前一層第i個神經(jīng)元與本層第j個神經(jīng)元之間的權(quán)值。</p><p> 計算某一層的輸出值:</p><p> 對于輸出層來說,實際輸出值與理想輸出值之間存在誤差,誤
47、差為:</p><p> 其中為理想的輸出值,是實際輸出值。</p><p> 誤差E對權(quán)值求偏導(dǎo)數(shù),得:</p><p><b> 其中為局部梯度:</b></p><p> 采用梯度下降法對誤差進行調(diào)整,得到每次的調(diào)整量為:</p><p> 如果節(jié)點j是輸出層,那么神經(jīng)元輸出值即為
48、,那么:</p><p> 如果節(jié)點j是隱含層,那么神經(jīng)元的輸出值需要用sigmoid函數(shù)處理,即:</p><p> 由于隱含層的每一個節(jié)點對后面的節(jié)點都由影響,可以得出:</p><p> 在反向傳播過程中,為了加快算法的收斂速度,會在權(quán)值修正量中加上前一次的權(quán)值修正量,即慣性項:</p><p> 綜上所述,反向傳播算法步驟如下
49、:</p><p> ?。?)隨機初始權(quán)系數(shù)初始值。</p><p> ?。?)首先執(zhí)行神經(jīng)網(wǎng)絡(luò)的前向傳播過程,計算各層單元:</p><p> ?。?)然后計算輸出層的局部梯度:</p><p> (4)然后計算各個隱含層額局部梯度,方向從后向前。</p><p> ?。?)得出神經(jīng)元之間的權(quán)值修正量:</p
50、><p><b> ?。?)修改權(quán)值:</b></p><p> ?。?)重復(fù)2-6過程,直到算法收斂。</p><p> 采用反向傳播算法能有效解決隱含層的權(quán)值修正問題,通過不斷的計算輸出層的誤差,然后通過梯度下降法調(diào)整輸出層的前一層神經(jīng)元的權(quán)值,然后再循環(huán)調(diào)整所有的隱含層的權(quán)值,直到整個算法收斂。</p><p>
51、但是采用反向傳播算法有可能會陷入到局部最小點,而不是收斂到全局最小點,因為算法采用的是梯度下降算法來求解非線性函數(shù)的極值,梯度下降法不具有全局觀念。</p><p> 反向傳播算法中有兩個重要的參數(shù),和,即步長和慣性系數(shù)。步長直接影響到算法的收斂性,如果該值較大,沿著梯度下降的幅度大,但是對極小值出的處理不好,如果該值較小,沿著梯度下降的幅度小,但是收斂速度慢,影響算法的效率。慣性項系數(shù)影響收斂速度,可以在0.
52、9-1之間選擇。</p><p> 在實際應(yīng)用反向傳播算法的過程中,還需要好注意一些問題:</p><p> ?。?)樣本的處理,由于傳入神經(jīng)元的數(shù)據(jù)可能會是各種各樣的值,由于采用sigmoid函數(shù),所以數(shù)據(jù)需要進行歸一化處理,可以歸一化到(0,1)或者(-1,1)之間。針對樣本的輸出,從sigmoid函數(shù)可以得知,如果要輸出0,1,那么值需要是無重大或者無窮小,故需要進行處理,可以認為
53、輸入大于0.5即為1,小于0.5即為0。</p><p> ?。?)網(wǎng)絡(luò)結(jié)構(gòu)的選擇。反饋神經(jīng)網(wǎng)絡(luò)的隱含層層數(shù)和神經(jīng)元數(shù)目的確定,對算法有著至關(guān)重要的作用,它們決定了神經(jīng)網(wǎng)絡(luò)的規(guī)模,如果規(guī)模大,計算量就會大,而且可能會導(dǎo)致神經(jīng)網(wǎng)絡(luò)擬合的函數(shù)過度追求擬合擬合效果,反而失去了原本的特性,即過擬合,如果規(guī)模小,計算量小,但是可能會導(dǎo)致神經(jīng)網(wǎng)絡(luò)擬合的函數(shù)不能很好的擬合所有的數(shù)據(jù),即欠擬合。</p><p
54、> (3)初始權(quán)值、閾值的選擇。初始值對學習結(jié)果也是有影響的,選擇一個適當?shù)某跏贾的鼙M快收斂,而且保證擬合的效果好。</p><p> ?。?)批量學習和增量學習。批量學習適用于離線學習,即一次性輸入所有的學習樣本,然后去學習。批量學習的優(yōu)點是學習效果比較穩(wěn)定,擬合出的函數(shù)性能比較好,但是缺點是一次需要所有的學習樣本;增量學習適用于在線學習,即動態(tài)獲取學習樣本,然后輸入神經(jīng)網(wǎng)絡(luò)進行學習,然后再次獲取學習樣
55、本,再次學習。這種學習方法對噪聲比較敏感,不適合劇烈變化的輸入模式,但是可以在原有網(wǎng)絡(luò)的基礎(chǔ)上直接學習。</p><p> 2.2.4 神經(jīng)網(wǎng)絡(luò)在模式識別上面的優(yōu)勢</p><p> 1、神經(jīng)網(wǎng)絡(luò)能夠分布式的存儲信息</p><p> 神經(jīng)網(wǎng)絡(luò)是利用多個神經(jīng)元之間的連接以及各個神經(jīng)元之間的權(quán)值來表示信息,每個神經(jīng)元都能夠單獨的存儲信息,所以它能夠分布式存儲信息
56、,而且如果網(wǎng)絡(luò)部分受到損害,也能夠恢復(fù)原來信息。</p><p> 2、神經(jīng)網(wǎng)絡(luò)能夠并行處理信息</p><p> 神經(jīng)網(wǎng)絡(luò)中的每個神經(jīng)元都可以接受信息,然后獨立運算和處理,然后將運算的結(jié)果輸出來,這些步驟都是可以并行的。</p><p> 3、神經(jīng)網(wǎng)絡(luò)能夠自動學習</p><p> 神經(jīng)網(wǎng)絡(luò)模擬了生物神經(jīng)系統(tǒng)的結(jié)構(gòu),能夠根據(jù)外界的環(huán)
57、境來調(diào)節(jié)內(nèi)部的信息,從而去適應(yīng)外界的環(huán)境,通過對參數(shù)分類,使得網(wǎng)絡(luò)收斂來符合當前的環(huán)境。</p><p><b> 2.3 本章小結(jié)</b></p><p> 本章詳細介紹了神經(jīng)網(wǎng)絡(luò)算法,以及其基本組成部分:感知機、前饋神經(jīng)網(wǎng)絡(luò)、反向神經(jīng)網(wǎng)絡(luò)。利用嚴格的公式論證了該算法,并且說明了算法的一些特點以及注意事項,在最后講述了神經(jīng)網(wǎng)絡(luò)在模式識別中的優(yōu)勢。</p&g
58、t;<p> 第3章 系統(tǒng)設(shè)計與實現(xiàn)</p><p> 本章首先介紹了神經(jīng)算法的實現(xiàn),接著詳細介紹了手寫數(shù)字的實現(xiàn)、手寫漢字的實現(xiàn),最后介紹了UI界面的實現(xiàn)。</p><p> 3.1 神經(jīng)網(wǎng)絡(luò)算法的實現(xiàn)</p><p> 3.1.1 神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)</p><p> 一個完整的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)包括:輸入層、輸出層、隱含層
59、、隱含層權(quán)重、輸出層權(quán)重、輸出層誤差、隱含層誤差等結(jié)構(gòu)。具體的數(shù)據(jù)結(jié)構(gòu)如下:</p><p> double * pInputLayer; // 輸出層數(shù)據(jù)</p><p> double* pHiddenLayer; // 隱含層數(shù)據(jù)</p><p> double* pOutputLayer; // 輸出層數(shù)據(jù)</p>&l
60、t;p> double** pWeightHidden; // 隱含層權(quán)重</p><p> double** pWeightOutput; // 輸出層權(quán)重</p><p> double* pErrOutput; // 輸出層誤差</p><p> double* pErrHidden; // 隱含層誤差</p&g
61、t;<p> double** pLastChangeHidden; // 上次隱含層改變值</p><p> double** pLastChangeOutput; // 上次輸出層改變值</p><p> bool bRegression; // 是否回歸</p><p> double dRate1;
62、 // 學習率</p><p> double dRate2; // 慣性項系數(shù)</p><p> int iInputCount; // 輸入層神經(jīng)元個數(shù)</p><p> int iHiddenCount; // 隱含層神經(jīng)元個數(shù)</p><p> int iOuputCount; //
63、輸出層神經(jīng)元個數(shù)</p><p> 3.1.2 算法的結(jié)構(gòu)</p><p> 用代碼實現(xiàn)神經(jīng)網(wǎng)絡(luò)算法,主要步驟分為五個部分,初始化神經(jīng)網(wǎng)絡(luò)、加載神經(jīng)網(wǎng)絡(luò)參數(shù)、前向神經(jīng)網(wǎng)絡(luò)、反向神經(jīng)網(wǎng)絡(luò)、學習過程。</p><p><b> 1、初始化神經(jīng)網(wǎng)絡(luò)</b></p><p> 首先通過Initializer函數(shù)傳入神經(jīng)網(wǎng)
64、絡(luò)需要的各個參數(shù),然后通過這些參數(shù),給神經(jīng)網(wǎng)絡(luò)分配內(nèi)存。</p><p> 2、加載神經(jīng)網(wǎng)絡(luò)參數(shù)</p><p> 由于學習樣本的龐大,每次學習的耗時很長,所以預(yù)先將已經(jīng)學習好的參數(shù)保存在文件當中,當初始化好神經(jīng)網(wǎng)絡(luò)之后,就開始加載神經(jīng)網(wǎng)絡(luò)里面的參數(shù)。</p><p><b> 3、前向神經(jīng)網(wǎng)絡(luò)</b></p><p&
65、gt;<b> 算法的步驟如下:</b></p><p> ?。?)將訓(xùn)練的input數(shù)據(jù)輸入到神經(jīng)網(wǎng)絡(luò)的輸入層。</p><p> ?。?)將輸入層的偏移置為1.0。</p><p> ?。?)計算隱含層的每一個神經(jīng)元的值,然后通過sigmoid函數(shù)將計算得的值賦值給當前神經(jīng)元。</p><p> ?。?)將隱含層的
66、偏移置為1.0。</p><p> (5)計算輸出層的每一個神經(jīng)元的值,根據(jù)是否回歸來選擇使用采用sigmoid函數(shù)來處理計算所得值。</p><p><b> 4、反向神經(jīng)網(wǎng)絡(luò)</b></p><p><b> 算法的步驟如下:</b></p><p> ?。?)計算輸出層的誤差。</
67、p><p> (2)根據(jù)1中計算得誤差,計算輸出層的局部梯度。</p><p> ?。?)根據(jù)局部梯度與上次輸出層的改變值、學習率等參數(shù)改變輸出層權(quán)重。</p><p> (4)計算隱含層的誤差。</p><p> ?。?)根據(jù)4中計算得誤差,計算隱含層的局部梯度。</p><p> ?。?)根據(jù)隱含層的局部梯度與上次
68、隱含層的改變值、學習率等參數(shù)改變隱含層權(quán)重。</p><p><b> 5、學習過程</b></p><p><b> 算法的步驟如下:</b></p><p> ?。?)檢查參數(shù)有效性。</p><p> ?。?)將輸入的input數(shù)據(jù)順序打亂。</p><p> ?。?/p>
69、3)對input數(shù)據(jù)的每一組訓(xùn)練數(shù)據(jù),作如下訓(xùn)練:</p><p> ?。?)前向網(wǎng)絡(luò)計算隱含層與輸出層神經(jīng)元的值。</p><p> ?。?)反饋網(wǎng)絡(luò)調(diào)整隱含層與輸出層神經(jīng)元的值以及權(quán)值。</p><p> 3.2 神經(jīng)網(wǎng)絡(luò)識別手寫數(shù)字</p><p> 在識別手寫數(shù)字的過程中,會碰到很多種情況,使用不同的方法,會得到不同的結(jié)果,具體過
70、程見圖3.1。</p><p> 圖3.1 識別數(shù)字的步驟</p><p> 3.2.1 手寫數(shù)字的常規(guī)預(yù)處理方法</p><p> 在利用神經(jīng)網(wǎng)絡(luò)識別手寫數(shù)字的過程中,對神經(jīng)網(wǎng)絡(luò)的輸入數(shù)據(jù)有兩種表現(xiàn)方式,第1種是將數(shù)字圖像經(jīng)過數(shù)值化后直接傳入神經(jīng)網(wǎng)絡(luò)進行學習,第2種是將數(shù)字圖像經(jīng)過數(shù)值化后,再經(jīng)過預(yù)處理,再傳入神經(jīng)網(wǎng)絡(luò)進行學習。第1種方法未經(jīng)過處理,在某些特
71、定的環(huán)境會獲得更好的效果,但是會使得分類器的復(fù)雜程度大大增加。因此,對原本的樣本的預(yù)處理,已經(jīng)成為手寫數(shù)字識別的一個重要途徑。</p><p> 預(yù)處理的第一步是將數(shù)字圖像轉(zhuǎn)換成m*n的一個像素矩陣,然后經(jīng)過灰度化、二值化,然后經(jīng)過一些降噪算法,如中值濾波算法,去掉圖像的噪聲,然后再經(jīng)過梯度銳化算法銳化邊緣,最后經(jīng)過細化、平滑、規(guī)格化等處理,得到比較好的輸入數(shù)據(jù)。</p><p> 最
72、后這是從樣本中提取出特征,來構(gòu)成輸入數(shù)據(jù),對于數(shù)字常見的方法有提取數(shù)字寬度、長度、粗細等特征。</p><p> 3.2.2 圖像的灰度化</p><p> 圖像的灰度化指去掉圖像的色彩信息,只保留圖像的亮度信息。一副圖像的一個像素點由RGB三種顏色組成,灰度圖像不再關(guān)心RGB色彩,只關(guān)心亮度。</p><p> 在識別過程當中,人們只關(guān)心圖像的形狀,不關(guān)心色
73、彩,相反,色彩由于顏色過于豐富,反而會影響識別,所以獲得像素矩陣后要將圖像灰度化。</p><p> 圖像的灰度化一般有4中方法,即分量法、最大值法、平均值法、加權(quán)平均法。本文中采用平均值法,即使得圖像的RGB三個分量的值相等。通過公式:</p><p> 這樣使得RGB三個分量的值等于三個分量的平均值,就可以得到灰度圖像。</p><p> 灰度圖像是很多圖
74、形處理的第一步,經(jīng)過圖像的灰度化之后,就可以進行其他的處理,所以,圖像的灰度化是很重要的一個步驟。</p><p> 3.2.3 圖像的二值化</p><p> 圖像的二值化是指把圖像中的所有像素根據(jù)一定的方法,劃分成黑白兩種顏色。</p><p> 經(jīng)過二值化后的圖像,全部的像素都是0或者255,圖像會顯示出很明顯的黑白效果。這樣就不再和更多的像素有關(guān)。這樣
75、一個像素點可以壓縮成0和1兩個數(shù),利于處理和節(jié)省空間。</p><p> 二值化法的基本公式是:</p><p> 公式中f(i,j)為圖像灰度化后的像素值,g(i,j)為圖像二值化后的值,T為閾值。從式子中可以看出,T的值直接關(guān)系到二值化的效果,根據(jù)T值得不同選取方法,可以把二值化算法分為三種,即:整體閾值法、局部閾值法、動態(tài)閾值法。</p><p> 整體
76、閾值法,即整張圖像的閾值都是一個值。但是這個閾值需要根據(jù)具體的圖像來確定,曝光度高的圖像,閾值需要小一點,曝光度低的圖像,閾值需要大一點。整體閾值法的閾值一旦確定就不能更改,不能根據(jù)特定的區(qū)域來更改閾值,但是整體閾值法的算法簡單,運算速度快,適用于干擾小的圖像。這個閾值的確定方法也比較簡單,通常就計算整張圖片的亮度值,然后選取中間值作為二值化的閾值。</p><p> 局部閾值法,即根據(jù)不同的區(qū)域來確定不同的閾
77、值。當一張圖像的曝光度不均勻時,采用整體閾值法會得到不理想的二值化圖像,如果采用局部閾值法,可以根據(jù)不同區(qū)域的曝光度來確定閾值,得到一張效果良好的二值化圖像。但是采用局部閾值法,計算量大一些,速度也會慢一些。</p><p> 動態(tài)閾值法,即根據(jù)每個像素點的像素值和位置來確定不同的閾值。這種方法不僅考慮了單個像素點的特點,還考慮了該像素點周圍的像素點的特點,能夠很好的突出圖像的邊緣。但是在手寫數(shù)字的識別過程中,
78、數(shù)字圖像與背景的區(qū)別較大,不需要采用這種方法來二值化,而且會降低圖像處理的速度。</p><p> 3.2.4 中值濾波</p><p> 圖像的噪聲指影響人們接受圖像信息的因素。噪聲在理論上是不能被預(yù)測的,只能通過概率的方法來統(tǒng)計隨機誤差。</p><p> 如果圖像中存在噪聲,會大大影響字符的切分、特征向量的提取等。因此圖像的降噪將直接影響到數(shù)字識別的效果
79、。</p><p> 中值濾波是一種非線性的圖像平滑方法,能夠根據(jù)圖像的不同去平滑圖像,而且不會影響圖像的邊緣,具體方法可定義為:</p><p> 式子中,g (x, y)和f (x-i, y-i)分別為輸出和輸入像素值,W為模版窗口,可以選擇線性、方形、十字形、圓形、菱形等。</p><p> 取出模版窗口W中的所有像素值,然后排序,選擇這些像素值的中間值
80、作為g(x,y)的像素值。</p><p> 3.2.5 去掉離散點</p><p> 在圖像中可能會存在很多孤立的點或者點區(qū)域,這些點的面積往往比較小,通過中值濾波等濾波算法可能不會被去掉,如果不去掉就會影響圖像的進一步處理。</p><p> 數(shù)字圖形往往都是一個很大的聯(lián)合的整體,即相連的非空白像素點數(shù)目很大,而往往與孤立的離散點相連的非空白點數(shù)目小,因此
81、可以根據(jù)這個去掉孤立的點區(qū)域。</p><p><b> 算法的步驟如下:</b></p><p> ?。?)掃描整個圖像,找到非空白點。</p><p> ?。?)將該空白點進隊列。</p><p> ?。?)從隊列中取出第一個點,然后分別求出與之相連的上下左右四個點,判斷該點是否在圖像區(qū)域內(nèi)并且沒有被搜索過。<
82、;/p><p> ?。?)如果滿足3中的要求,就將該點放入隊列,并且標記該點已經(jīng)被檢索。</p><p> ?。?)循環(huán)2-4過程,直到隊列為空或者被標記的點的個數(shù)超過了一個閾值。</p><p> (6)判斷被標記的點的個數(shù)是否超過了閾值,如果沒有超過,就將這些被標記的點置為空白點。</p><p> ?。?)循環(huán)1-6過程,直到掃描完了所有
83、的點。</p><p> 之所以采用這種算法,原因是圖像的不同,有的圖像的離散點區(qū)域比較大,采用其他的算法不能快速的將這些離散的點清理掉,這時候采用這種算法,只需要判斷閾值,就能快速將連續(xù)點小于這個閾值的離散點去掉。但是這個算法也存在缺點,如果是噪聲點貼近數(shù)字圖像,算法則不能判斷該點為噪聲點,也就不能去掉了,所以需要與其他算法配合使用才能更好的去掉噪聲。</p><p> 3.2.6
84、圖像銳化</p><p> 圖像銳化的主要目是使邊緣從圖像背景中更容易區(qū)分開來,使物體能夠更加鮮明的從圖像中區(qū)分開來,有助于后序的分割、特征提取等操作。</p><p> 圖像的模糊實際上是受到平均或者通過積分運算造成的,對圖像進行微分運算,可以使圖像清晰化。</p><p> 本文中主要采用梯度銳化算法來銳化圖像的邊緣,首先計算各點的梯度值,定義在f (x,
85、y)在點(x,y)處的梯度是一個矢量,定義為:</p><p> 其中,梯度的幅度G[f (x,y)]可以由以下公式算出:</p><p> 在f (x, y)在其最大變化率方向上增加的距離,叫做梯度的數(shù)值,因此,上式可以寫作:</p><p> 當采用這種算法的時候,圖像的最后一行、最后一列無法計算梯度,所以可以采用前一行或者前一列的梯度值來代替。</
86、p><p><b> 算法的步驟如下:</b></p><p> ?。?)將圖像的最后一行像素點置為0xFF。</p><p> ?。?)對除去最后一行的圖像中的每一個像素點循環(huán)。</p><p> ?。?)取出當前像素點值(a)、當前像素點的左邊一個像素點(b)、當前像素點的下邊一個像素點(c)。</p>
87、<p> ?。?)計算梯度值abs(a-b) + abs(a-c)。</p><p> (5)判斷梯度值是否大于一個閾值,如果大于該閾值,就將當前像素點的值設(shè)置為梯度值。</p><p> 物體與物體、背景與背景之間的梯度變化一般都很小,只有在物體的邊緣梯度變化才會比較大,也就是物體和背景交叉的部分。當某點的梯度值大于一個閾值的時候,就認為該點在物體和背景的交叉邊緣,處理方法
88、是:加上一個特定的值C,使得邊緣變亮;如果梯度值小于這個閾值,就認為在同一個環(huán)境下,就不去改變該點的像素值。當圖像處理完時,物體和背景的邊緣就被增量了,同時也不影響圖像的其他點。</p><p> 3.2.7 數(shù)字的切分</p><p> 經(jīng)過上述圖像處理的算法之后,數(shù)字圖像就比較好的被處理了出來。人們識別數(shù)字只關(guān)心數(shù)字部分,其他部分是不關(guān)心的,所以需要將數(shù)字部分從數(shù)字圖像中區(qū)分開來。
89、</p><p> 經(jīng)過切分后的數(shù)字,去掉了部分背景,使得切分后的圖像剛好包含了整個數(shù)字,大大減少了對以后的圖像分析、處理所需要的數(shù)據(jù)量。</p><p> 算法的主要步驟如下:</p><p> ?。?)掃描整個圖像。</p><p> ?。?)當循環(huán)到一個沒有被掃描過的黑色點時,就將該點放入一個隊列。</p><p
90、> (3)從隊列中取出一個點,然后計算該點的上下左右四個方向的點,判斷這些點是否在圖像內(nèi)以及是否沒有被掃描過。</p><p> ?。?)如果滿足3中的條件,就將點放入隊列中,同時用該點的坐標值更新區(qū)域的位置值(left、right、top、bottom)。</p><p> ?。?)循環(huán)2-4,直到隊列為空。</p><p> ?。?)將獲得的區(qū)域的位置值
91、放入到一個向量中,同時循環(huán)1-6,直到掃描完整個圖像。</p><p> 最終切分的數(shù)字圖像的區(qū)域就在(6)中的區(qū)域位置向量中了。</p><p> 3.2.8 數(shù)字的歸一化</p><p> 經(jīng)過數(shù)字的切分之后,數(shù)字圖像就從背景中分離了出來,但是數(shù)字之間彼此的大小都不一樣,但是識別要求所有的數(shù)據(jù)都是一樣的尺寸,所以需要對數(shù)字進行歸一化處理。</p>
92、;<p> 歸一化算法一般有兩種,即線性歸一化和非線性歸一化。線性歸一化算法比較簡單,即對像素坐標進行線性的變換,然后把原來的字符映射到規(guī)定的區(qū)域內(nèi)。首先按照圖像現(xiàn)在的大小和要變換的大小求出變換系數(shù),然后用插值的方法把原來的像素點映射到歸一化的區(qū)域內(nèi)。需要注意的是,數(shù)字圖像有的長有的寬,需要根據(jù)不同的長和寬計算變換系數(shù)。非線性歸一化算法會考慮到原有圖像的形狀等特點,利用這些特點進行非線性的變換,這樣歸一化后的圖像會最大化
93、的保留以前圖像的特點。</p><p> 本文中采用的為線性歸一化算法,算法思路如下:</p><p> (1)獲取切分后的數(shù)字區(qū)域位置(left,right,top,bottom)。</p><p> ?。?)根據(jù)1中所得位置計算區(qū)域的width與height,如果width大于height,那么則按照width擴展,反之,根據(jù)height擴展。</p&
94、gt;<p> ?。?)計算原圖像與變換后的圖像的變換系數(shù)。</p><p> ?。?)對數(shù)字區(qū)域中的每一個像素循環(huán),如果該像素不為空白點,那么根據(jù)變換系數(shù)以及拓展選項計算在變換后的坐標,然后將該點的值置為非空白點。</p><p> 3.2.9 特征提取</p><p> 特征提取是整個字符識別系統(tǒng)的關(guān)鍵,識別算法是根據(jù)選取特征的種類來進行選擇的
95、。系統(tǒng)識別率高低的關(guān)在是:提取的特征是否穩(wěn)定,是否代表一類字符的特點。</p><p> 針對數(shù)字的特征提取,可以采用比較簡單的方法,掃描得到的整個圖像,當碰到黑色點時,就提取出1,當碰到白色點時,就提提取出0。當掃描完整個圖像后,就得到了一個與圖像大小一樣的特征向量矩陣。這種方法很簡單,運算速度快,但是適應(yīng)性不強。針對BP神經(jīng)網(wǎng)絡(luò)的特點,可以使神經(jīng)網(wǎng)絡(luò)很快收斂,如果加大訓(xùn)練樣本的數(shù)目,可以增強適應(yīng)性。<
96、/p><p> 3.2.10 數(shù)字識別過程</p><p> 首先從圖像中獲取特征向量,得到訓(xùn)練樣本,然后將特征向量輸入到神經(jīng)網(wǎng)絡(luò)中進行訓(xùn)練,經(jīng)過一定數(shù)量的訓(xùn)練之后,就可以用該神經(jīng)網(wǎng)絡(luò)去識別數(shù)字了。數(shù)字識別的過程見表3.1。</p><p> 表3.1 數(shù)字識別過程表</p><p> 3.2.11 神經(jīng)元規(guī)模的確定</p>
97、<p> 1、輸入層與輸出層神經(jīng)元個數(shù)的確定</p><p> 輸入層和輸出層的神經(jīng)元個數(shù)應(yīng)該和具體的應(yīng)用環(huán)境有關(guān)。輸入層的神經(jīng)元數(shù)目和特征矩陣有關(guān),在本文中,采用的特征矩陣為20*20,所以輸入的神經(jīng)元數(shù)目為400個。輸出層神經(jīng)元的數(shù)目和輸出規(guī)模有關(guān),由于在數(shù)字識別中,只有0-9這10個數(shù)字,所以輸出層神經(jīng)元數(shù)目為10。同時規(guī)定,當?shù)趲讉€神經(jīng)元輸出1時,匹配的就是幾,例如第4個神經(jīng)元輸出1,其他
98、輸出0,那么匹配的數(shù)字就是4。</p><p> 2、隱含層神經(jīng)元個數(shù)的確定</p><p> 隱含層神經(jīng)元的個數(shù)關(guān)系到神經(jīng)網(wǎng)絡(luò)的性能,取在合適的數(shù)量能大大提升性能,如果數(shù)目過大,會出現(xiàn)過擬合情況,如果數(shù)目過小,會出現(xiàn)欠擬合情況。目前還沒有一種比較科學的方法來確定隱含層神經(jīng)元個數(shù)的方法,大多是通過經(jīng)驗以及嘗試得出數(shù)目。事實上,通過各種公式計算出來的隱含層神經(jīng)元個數(shù)不一樣,性能也相差很多
99、倍。</p><p> 3、隱含層層數(shù)的確定。</p><p> 增加隱含層層數(shù),可以提高神經(jīng)網(wǎng)絡(luò)的精度,也可以降低整個網(wǎng)絡(luò)的誤差,同時也會增加網(wǎng)絡(luò)的復(fù)雜程度,影響網(wǎng)絡(luò)的性能,而且有可能會出現(xiàn)過擬合的情況。</p><p> 已經(jīng)有定理證明:若輸入層和輸出層采用線性轉(zhuǎn)換函數(shù),隱層采用Sigmoid轉(zhuǎn)換函數(shù),則含一個隱層的MLP網(wǎng)絡(luò)能夠以任意精度逼近任何有理函數(shù)
100、[6]。根據(jù)這個理論,可以只設(shè)計包含一個隱含層的神經(jīng)元網(wǎng)絡(luò),通過適當控制該隱含層神經(jīng)元,就可以達到多層隱含層的神經(jīng)網(wǎng)絡(luò)的效果。</p><p> 3.3 神經(jīng)網(wǎng)絡(luò)識別漢字</p><p> 相比數(shù)字,漢字的識別就復(fù)雜了不少,目前漢字的識別被認為是最困難的模式識別問題之一。漢字是一種特殊模式的幾何,包括的種類多、結(jié)構(gòu)復(fù)雜、而且書寫的形勢多種多樣,加上其他干擾因素,都使得漢字的識別很困難。
101、漢字的具體識別過程見圖3.2。</p><p> 圖3.2 識別漢字的步驟</p><p> 3.3.1 筆畫的預(yù)處理</p><p> 漢字的識別可以拆分成筆畫,漢字的筆畫有多種,本文將漢字的筆畫基本分為以下16種,具體筆畫見表3.2。</p><p> 由于筆畫是直接書寫在面板上的,面板上除了白色背景就是筆畫了,所以預(yù)處理也會相對
102、比較簡單。</p><p> 本文中把漢字的筆劃分成3類,第1類是除去點的15種筆劃,這15種筆畫的處理方式就是直接用神經(jīng)網(wǎng)絡(luò)來識別。第2類是點筆劃,由于點的形狀不確定,大小比較小,如果采用神經(jīng)網(wǎng)絡(luò)來識別,有很大的幾率會識別成其他筆畫或者識別不出來,所以可以用一個閾值來確定是否為點筆劃,當獲得的筆畫大小小于一個值時,就判斷為點筆劃。第3類是類似于第1類的筆畫,比如豎鉤與豎、撇折與豎折,比較類似,可以把這幾種筆畫
103、與第1類的進行融合,然后都采用神經(jīng)網(wǎng)絡(luò)來識別筆畫,這樣既能保護輸出層的神經(jīng)元數(shù)目少、也能減少工作的復(fù)雜度,這對于漢字的識別是有較大的益處的。</p><p> 表3.2 漢字筆畫表</p><p> 3.3.2 圖像的處理</p><p><b> 1、圖像的二值化</b></p><p> 針對漢字識別的二值化
104、,就簡單很多,就是把背景點的其他點標記為黑點,背景點標記為白點。該本文中,筆畫采用的顏色為綠色(RGB(0,0xFF,0)),所以將非綠色點標記為白色,綠色點標記為黑色,就完成了二值化過程。</p><p><b> 2、圖像的歸一化</b></p><p> 在書寫漢字的過程當中,每次書寫一次的時候,就需要提取書寫的信息,故每一次歸一化的圖像都是一次書寫的圖像。
105、歸一化的方法也比較簡單,即對像素坐標進行線性的變換,然后把原來的字符映射到規(guī)定的區(qū)域內(nèi)。首先按照圖像現(xiàn)在的大小和要變換的大小求出變換系數(shù),然后用插值的方法把原來的像素點映射到歸一化的區(qū)域內(nèi)。</p><p><b> 3、特征向量的提取</b></p><p> 經(jīng)過圖像的歸一化后,得到一個m*n的像素矩陣,由于漢字的識別只關(guān)心形狀,不關(guān)心顏色,所以首先掃描整個圖
106、像,如果碰到一個黑色像素點,把一個黑色像素點轉(zhuǎn)換成1,碰到一個白色像素點,就轉(zhuǎn)換成0,當整張圖像轉(zhuǎn)換完成后,就得到了一個特征矩陣。</p><p> 3.3.3 神經(jīng)網(wǎng)絡(luò)規(guī)模的確定</p><p> 1、輸入層與輸出層神經(jīng)元數(shù)目的確定</p><p> 在本文中,輸入的特征矩陣有20*20,所以輸入層神經(jīng)元數(shù)目為400,輸出層的輸出為16個筆畫,故輸出層神經(jīng)元
107、數(shù)目為16,當輸出一個特定的筆畫的時候,對應(yīng)的神經(jīng)元輸出為1,例如當?shù)?個神經(jīng)元輸出為1時,輸出的筆畫為捺。</p><p> 2、隱含層神經(jīng)元數(shù)目的確定</p><p> 該本文中,輸入層神經(jīng)元數(shù)目為400,輸出層神經(jīng)元數(shù)目為16,訓(xùn)練數(shù)據(jù)在500左右,經(jīng)過多次測試,確定隱含層神經(jīng)元數(shù)目在100個,既能快速收斂,也能保證神經(jīng)網(wǎng)絡(luò)的穩(wěn)定性。</p><p>
108、3、學習率以及慣性項系數(shù)的確定</p><p> 為了保證神經(jīng)網(wǎng)絡(luò)算法的快速收斂,同時也保證網(wǎng)絡(luò)的穩(wěn)定,以及結(jié)合具體的情況,學習率取值0.25,慣性項系數(shù)取值0.1。經(jīng)過大量測試,性能穩(wěn)定,效果比較好。</p><p> 3.3.4 字庫的管理方式</p><p> 1、漢字在外存中的存儲</p><p> 漢字基數(shù)過多、筆畫特征也很
109、復(fù)雜,但是復(fù)雜的漢字與簡單的漢字的識別原理是一樣的,故選取了一些基本的漢字作為測試數(shù)據(jù),測試數(shù)據(jù)大約50個漢字。漢字在外存中的存儲,存儲的數(shù)據(jù)包括漢字以及組成該漢字的筆畫,存儲格式為文本格式。</p><p> 2、漢字在內(nèi)存中的存儲</p><p> 漢字在書寫過程中,需要實時查詢,所以對性能要求會比較高,如果直接從外存中讀取,并放在一個鏈表容器中,會導(dǎo)致效率比較低,字庫越大,體現(xiàn)的
110、越明顯。</p><p> 了解到字庫的格式,即一個漢字是由多個筆畫組成的,所以在內(nèi)存中維護了一顆trie樹,trie樹的結(jié)構(gòu)見圖3.3。</p><p> 圖3.3 trie樹的結(jié)構(gòu)</p><p> Trie樹的查詢見下面的代碼部分:</p><p> CWordList* CTrieTree::QueryWord(int* pS
111、troke, int iLength)</p><p><b> {</b></p><p> TrieNode* p = pRoot;//獲得trie樹的nil根節(jié)點</p><p> for (int i = 0; i < iLength; i++)//對獲得筆畫的進行循環(huán)</p><p><
112、b> {</b></p><p> int iCurrentStroke = pStroke[i];//獲取當前筆畫</p><p> if (p->pChild[iCurrentStroke] == nullptr)//判斷合法性</p><p><b> {</b></p><p&
113、gt; return nullptr;</p><p><b> }</b></p><p> if (i == iLength - 1)//最后的筆畫</p><p><b> {</b></p><p> if (p->pChild[iCurrentStroke]->p
114、Word == nullptr)//檢查漢字的合法性</p><p><b> {</b></p><p> return nullptr;</p><p><b> }</b></p><p> if (p->pChild[iCurrentStroke]->pWord->
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 計算機科學與技術(shù)畢業(yè)設(shè)計-基于人工神經(jīng)網(wǎng)絡(luò)的手寫識別系統(tǒng)
- 基于BP神經(jīng)網(wǎng)絡(luò)的手寫數(shù)字識別系統(tǒng)的設(shè)計與實現(xiàn).pdf
- 基于神經(jīng)網(wǎng)絡(luò)的聯(lián)機手寫識別系統(tǒng)研究與實現(xiàn).pdf
- 基于神經(jīng)網(wǎng)絡(luò)的人臉識別系統(tǒng)設(shè)計【畢業(yè)論文】
- 計算機科學與技術(shù)畢業(yè)論文-賓館管理系統(tǒng)的設(shè)計與實現(xiàn)
- 基于人工神經(jīng)網(wǎng)絡(luò)的刀具狀態(tài)識別系統(tǒng)畢業(yè)論文定稿.docx
- 計算機科學與技術(shù)畢業(yè)論文-資料管理系統(tǒng)設(shè)計與實現(xiàn)
- 基于人工神經(jīng)網(wǎng)絡(luò)的刀具狀態(tài)識別系統(tǒng)設(shè)計——學士論文
- 計算機科學與技術(shù)畢業(yè)論文-基于web的家政服務(wù)系統(tǒng)的設(shè)計與實現(xiàn)
- 計算機科學與技術(shù)畢業(yè)論文--酒店網(wǎng)絡(luò)
- 計算機科學與技術(shù)畢業(yè)論文群體人臉檢測系統(tǒng)的設(shè)計與實現(xiàn)
- 基于bp神經(jīng)網(wǎng)絡(luò)與方向小波的手寫數(shù)字識別系統(tǒng)
- 計算機科學與技術(shù)畢業(yè)論文校園導(dǎo)航系統(tǒng)的設(shè)計與實現(xiàn)
- 基于神經(jīng)網(wǎng)絡(luò)的聲紋識別系統(tǒng)設(shè)計與實現(xiàn).pdf
- 基于卷積神經(jīng)網(wǎng)絡(luò)的圖片數(shù)字識別系統(tǒng)設(shè)計與實現(xiàn)
- 計算機科學與技術(shù)畢業(yè)論文-病床呼叫管理系統(tǒng)的設(shè)計與實現(xiàn)
- 基于神經(jīng)網(wǎng)絡(luò)的手寫字符識別系統(tǒng).pdf
- 計算機科學與技術(shù)畢業(yè)論文基于web的物流管理系統(tǒng)的設(shè)計與實現(xiàn)
- 計算機科學與技術(shù)畢業(yè)論文基于webgis的物流信息系統(tǒng)的設(shè)計與實現(xiàn)
- 計算機科學與技術(shù)專業(yè)網(wǎng)站設(shè)計與實現(xiàn)畢業(yè)論文
評論
0/150
提交評論