目錄
手寫體數字圖像識別技術是模型識別中一個非常重要且活躍的技術研究領域,其應用范圍非常寬泛,應用范圍覆蓋了郵政編碼、銀行票據、統計報表,以及各種形式的數據和圖像處理服務中[1]。手寫圖像識別技術是目前模式識別、機器學習等技術發展中一項重要技術熱點和關鍵技術難點,在實際研究中,手寫圖像識別仍然面臨巨大的技術困境和挑戰,鑒于目前手寫圖像識別本身的一些優勢和特征,比如阿拉伯數字只有0-9十個樣式,數字與書寫方式之間的區別相對較大,實時性的要求很高等這些優勢。因此,手寫式數字識別技術的有效性和快捷度都被普遍認為是近幾年來技術研究的方向和重點[2]。
人工神經網絡識別技術是近年來廣泛應用于該技術研究領域的一種新技術,該技術方法同樣也具有其他許多傳統技術不可以擁有的優勢:良好的易讀性、分類能力強、并行處理和自學習能力,并且主要應用于各種離線訓練和網絡識別。這些特性都使得其在對于手寫體或者字符號進行識別時都能夠迅速而實時地對大量數據信息進行精確而準確地處理,并且可以達到很好的識別效果[3]。由于手寫數字識別技術很難找到準確數學模型,同時又因為全連接的神經網絡幾乎完全可以擬合任何函數,非線性擬合的能力極強。所以我們在手寫式數字識別系統中選擇全連接的神經網絡來針對問題進行處理[4]。本文模擬主要是采用Mistassini手寫式數字語言信息集, python 編程語言, Torch機器學習庫, pyqt5圖形界面庫,實現基于全連接的神經網絡的手寫數字識別系統。通過測試,本識別系統針對于比較為規范的手寫數字進行識別,已經能夠達到很好的識別效果。
關鍵詞:手寫體數字識別; Pytorch; 全連接神經網絡
Based on fully connected neural network
Design and Implementation of Handwritten Digit Recognition System
Handwritten digital image recognition technology is a very important and active technical research field in model recognition. Its application range is very wide, covering postal codes, bank notes, statistical reports, and various forms of data and image processing services. Handwritten image recognition technology is an important technical hotspot and key technical difficulty in the current development of pattern recognition, machine learning and other technologies. In actual research, handwritten image recognition still faces huge technical dilemmas and challenges. In view of some of the current handwritten image recognition itself Advantages and characteristics, such as the relatively small amount of information in handwritten image recognition at present, the relatively large difference between numbers and writing methods, and high real-time requirements. Therefore, the effectiveness and speed of handwritten digital recognition technology are generally considered to be the direction and focus of technical research in recent years[8].
Artificial neural network recognition technology is a new technology that has been widely used in the research field of this technology in recent years. This technology method also has advantages that many other traditional technologies cannot have: good legibility, strong classification ability, parallel processing and Self-learning ability, and mainly used in various offline training and network recognition. These characteristics enable it to accurately and accurately process a large amount of data information quickly and in real time when recognizing handwriting or character numbers, and can achieve a good recognition effect. Because handwritten digit recognition technology is difficult to find an accurate mathematical model, and because the fully connected neural network can fit almost any function, the ability of nonlinear fitting is extremely strong[9]. So we choose a fully connected neural network in the handwritten digital recognition system to deal with the problem. The simulation in this paper mainly uses minist handwritten digital language information set, python programming language, Torch machine learning library, pyqt5 graphical interface library, to realize a set of handwritten digital recognition system based on fully connected neural network and other algorithms. Through testing, this recognition system is aimed at the more standardized handwritten digits, and it has been able to achieve good recognition results[10].
Keywords: Handwritten Digit Recognition; Pytorch; Fully Connected Neural Network
近年來手寫數字識別技術已發展成為我國科學界學術研究的一個重要熱點,既有廣闊的實際應用還具有很好的發展前景,同時也是十分重要具有重大性和挑戰性的研究課題。人工神經網絡技術作為當今時代我國人工智能技術中最活躍的重要分支之一,它所具有的并行計算、容錯能力、泛化和優先級的控制能力,以及我們可以任意一種高和低精度方式地進行逼近和復雜的控制未知非線性對象物體和未知對象的控制功能等這些特點,使其可以成為手寫數字識別技術的基礎,它為我們實現手寫體數字識別提供了一種新的技術方式和解決方案。
手寫體數字識別技術是模式識別一個非常重要和活躍的基礎科研和科技領域,數字字符識別技術并不僅僅是一項獨特而且孤立的數字科學基礎技術,它所有需要同時解決和涉及的各種技術問題在模式識別的其他方面和實踐中都是我們無法完全回避的;在字符識別技術的應用領域方面,字符識別技術作為一種新型數字信息處理技術,在當前已經十分普遍,但卻仍然依舊存在著廣闊的應用背景與巨大的市場發展需求。因此,對于各種數字識別方法的應用研究在基礎理論與實踐中具有雙重研究價值[5]。
人工神經網絡識別技術是近年來廣泛應用于這一科學技術領域的一種全新方法,該技術同時也具有其他許多傳統科學技術未擁有的特殊優勢:良好的容錯性能、分類和處理功能強、并行數據處理和自學習功能,并可以廣泛應用于對離線的訓練和進行現場識別。這些特點使得它們可以在對手寫式數字符號進行識別中對大批量數據信息實現迅速而實時地進行信息采集。并可以達到很好的識別效果。
手寫體數字識別技術由于具有廣闊的市場前景巨大應用價值,此系統的開發是一個具有重大科學研究價值的技術課題。隨著神經網絡和模糊邏輯技術的進步和發展,在這一技術的研究中采用了很多新的技術方法和手段,使這一古老的科技學科煥發出新的活力。二十多年來,人們在數字識別技術領域進行了大量的探索和研究工作,所開發出的各類識別方法現在應用于印刷體和手寫式印刷體的數字識別技術等方面都已經取得了良好的效果,識別率基本保持穩定在96%左右。但是自由式手寫體數字的辨認與識別技術工作目前還不成熟,依然被認為是當前文字辨認中最具有挑戰性的研究課題[6]。
我國從上世紀九十年代發展以來,人工神經網絡(ANN)這一科學技術在當今世界范圍內應用發展得已經十分迅速,它已經具有同時模擬各種人類部分形象思維的能力,是一種模仿人類大腦語言學習、記憶、推理等各種人體認知處理功能的新一代技術和科學方法。尤其重要的一點是它不僅具備了信息化的并行式和分布式的數據處理分析能力以及自學習處理功能等顯著的技術優點,更是立刻引起了當時社會人們對其的極高關注興趣。人工神經網絡就是由一些簡單的或者類似于人腦神經元的信息處理功能單位相互之間聯系或者連接一起構造而來形成的一個復雜神經網絡。目前已經涌現了許多不同的學習類型的算法,其中BP網絡及其他各種學習技術算法已經成功得到了廣泛的學術關注和深入性的研究,并且在促進數字識別技術應用方面已經成功取得了非常多的且具有重要學術意義的研究應用。
手寫體數字識別技術是一項極具科學研究價值的技術課題,隨著神經網絡和模糊邏輯等技術的進步和發展,人們對該技術的研究采用了許多新的技術方法和手段,也才能夠使這一古老的技術課題重新煥發出新的活力。二十多年來,人們在數字識別技術領域進行了大量的探索和研究工作,所開發出的各類識別方法現在應用于印刷體和手寫式印刷體的數字識別技術等方面都已經取得了良好的效果,識別率基本保持穩定在96%左右。但是自由式手寫體數字的辨認與識別技術工作目前還不成熟,依然被認為是當前文字辨認中最具有挑戰性的研究課題[6]。
光學字符識別(OCR)是軟計算研究的一個廣泛領域,人工智能(AI)、模式識別(PR)和計算機視覺。OCR是一般手寫文本或打印圖片數字化的技術,使他們能夠以電子方式更高效、更正確地修改、存儲和搜索。而研究幾十年和在這個區域,機器仍然遠未達到人類的分析能力。OCR方法的目標是在困難中識別手稿(與人類相同)品。OCR方法主要分為兩種類型,第一類是在線文本識別和第二個離線文本識別。離線OCR考慮在兩個子類別中首先鍵入文本和第二個是手寫文本,在在線文本識別中,單詞和字符在運行時會盡快被識別書面的,因此,有時間信息。在線方法獲得的位置筆作為時間的函數直接從界面。這通常是通過筆為基礎的在電子平板電腦上用單支筆書寫的某處。動態知識,這通常是可用于在線文本識別,是總筆畫,一組筆畫,筆畫的方法,以及每次筆畫中寫作的速度。這些珍貴的信息有助于對文章的識別,并經常指導,以提高執行方法對比離線識別。在線光學識別的幾個應用在PTA、平板電腦和智能手機。在線識別方法在離線方法上的好處是交互性,接受作者數字化(反之亦然),可用的時間信息和較少的傾向噪聲。缺點是整篇文章無法處理,然后,信息需要動態處理、。離線文本識別方法處理文章的靜態表示。識別離線文本分為兩個子類別的類型和手寫文章。在這兩個子類別,從掃描儀或相機獲得的文章的圖像被處理。顯然,由于手寫風格的變化和筆跡的無基準性質,問題離線手寫識別是OCR中的主要復雜程度,通常需要語言特定技術。另一方面,鍵入文章的OCR是非常多的對歷史文章分析、官方說明和文章等實際應用的需處理和車牌識別。英文字母表的鍵入文檔的OCR具有成為模式識別(PR)和人工智能(AI)。在國外目前幾乎所有在這方面的研究都是與極其復雜的文章,嘈雜和扭曲的文章。
[if !supportLists]1、[endif]可用于教育行業,批量批改作業
手寫數字識別系統被廣泛應用在教育行業,通過機器掃描后可將試卷、作業等轉化成電子文檔,然后通過數字識別系統識別出試卷的內容,進行分數累積、內容判斷等操作,極大減輕了教師和學校負擔,提高教師的工作效率,手寫數字識別系統對于教育事業的發展具有重要意義。
2、手寫數字識別技術在財政、稅務、金融等各個領域的應用
其中財務、稅收、金融業就是手寫語音識中最具有發展希望的三個領域。隨著近年來由于我國企業市場經濟的快速發展進步和不斷發展,越來越多的使用企業財務會計報表、稅收財務報表、支票、交易單等。如果它們都能被一臺電腦用來進行完全自動化的分析處理,無疑將為許多企業節約大量的人力資源、金錢以及大量勞動力。與上述的企業統計分析報表信息處理系統技術應用相比,該處理技術在實際應用中發展難度較大。因為,對各種鑒定表格結果的處理準確性必須有很高的技術要求;能夠處理的鑒定表格至少能夠達到不止一種,一個鑒定系統本身就已經應該必須能夠很好地實現智能化并且同時能夠處理若干種鑒定表格;由于各種圖像識別處理必須始終貫穿于整個日常的書寫工作之中,書寫工作過程中人員應盡量按照一般的書寫習慣(包括例如:不對所有書寫工作人員的寫法方式做出任何大的限定,書寫時只需要允許人員使用連續的字符串,而不是在固定的讀物文本或者方格內直接進行圖像書寫),以便于將圖像識別及其以圖像預處理算法為技術核心的并改進諸如heart等的算法。
雖然隨著現代社會人們物質和精神水平的提高,經濟和社會活動也在不斷增長,現在郵件已經不怎么使用,但是也還沒有完全取消。在互聯網還沒有發速發展之前,人們大多通過郵件來進行信息傳遞,中心郵局每日需要處理巨大數量的郵件。隨著網絡發展,技術能力的不斷提升,郵件自動分揀、自動識別已成為重要發展趨勢。自動化寄政郵件的編碼分類中,手寫條碼識別(OCR通常與條碼光學類和條碼手寫識別(bro-predicating)密切關聯相關,人工智能輔助手寫識別和其他信息技術手段有機地緊密結合在一起來,完成了郵件信息的自動讀取。目前郵局及各大快遞公司均在使用手寫數字識別系統配合郵件分發,大大提高了工作效率。
我們一般會使用識別效率和識別速度判斷各種手寫數字辨認方法的優劣好壞,除了這些影響因素,還應當考慮其他方面的問題,比如價格、可靠度、實際實用性等多方面因素。對于手寫數字識別方法的判別標準,目前還沒有建立一個相對嚴謹的判別方式。針對已有測驗結果顯示,手寫式數字的正確辨認率較低。主要理由有以下幾點:
1、阿拉伯數字雖然只有10個,形式筆畫結構較為單一,與英語漢語等語言識別相比比較簡單。但是阿拉伯數字手寫時書寫出來的樣式缺差別很大,不同的人、不同的書寫方式導致手寫數字風格多變,又由于阿拉伯數字在當今全世界范圍應用廣泛,各個國和地區都已經開始擁有自己獨特的書寫數字方式和使用習慣,由于各個地區的風格不同,這使得我們開發設計基于深度學習的全連接神經網絡系統對于識別準確率方面難度增加。
2、在實際生活中,正確地識別和掌握數字比對識別一般的文字具有更高的技術要求,精準地識別和掌握文字比對精準地識別具有更高技術水平的文字具有要求。這主要是因為數字具有豐富的上下文語境,而且數字之間沒有任何語境的關聯,而且數據中的每一位數字都至關重要。在某些行業和領域,比如財務、科學技術等方面,其中某一個數字辨認或者錯誤很有可能給人們帶來很多損失,所以我們對于數字辨認技術要求的分析準確度極高也就越來越嚴格。
3、系統的使用不單單局限于界面的整潔和界面易用程度,還要求手寫數字識別系統具有較高的識別率,較快的輸入速度,同時還需要處理各個領域大量的數字信息。通常情況下,高精度和低速的識別技術相互沖突,因此就有必要針對如何提升同時增強數字識別的精度、準確性和高效率做出更多的研究和努力。綜上,迄今為止盡管國內專家學者外在從事脫機式手寫數字識別這個技術的方向已經取得了一些研究成果,但還是仍然遇到許多現實中的問題,亟待我們進行深入探索和解決。
本手寫數字識別系統主要是解決用于以圖象格式存在的手寫體識別的問題。系統的整體可以劃分為三個組成部分,第一是基于神經網絡的模型設計,第部分則是基于圖形界面設計,第三部分則是基于minist 的手寫數據集對于神經網絡的模型進行了訓練,并實現手寫數字識別。
根據任務類型,圖片大小,對神經網絡模型進行結構設計,以求實現最優配置。需要設計的有,網絡結構,輸入輸出,以及網絡參數等等。
本項目擬使用圖形界面對基于神經網絡對手寫數字識別任務進行可視化操作,包括超參數設置,開始訓練,訓練過程輸出,選擇圖片,針對所選圖片進行識別,輸出識別結果等等。
3、基于神經網絡對手寫數字進行識別
通過圖形界面,基于MINIST數據集中對訓練集對設計好的神經網絡進行訓練,并將訓練好的模型保存下來。然后,在圖形界面中選擇一張手寫數字圖片,并使用訓練好的模型對圖片進行識別,并將識別結果輸出至可視化界面。
擬采用MINIST手寫數字數據集,Python語言,Pytorch機器學習庫,PyQt5圖形界面庫,基于全連接神經網絡算法實現手寫數字識別。
此次研究中使用28*28的 minist 數據集中的手寫數字圖像,在樣本圖像中,有數字的像素點設為為1,沒數字的像素點設為0,即可把這個圖像轉換成784位的二維數碼向量。然后,設計全連接神經網絡,網絡共五層,輸入層共有784個節點,對應于圖像的784個輸入值,對應于輸出層10個節點,對應預測為0-9個數字的每個數字的可能概率值。最后,設計了一個基于手寫數字特征識別系統圖形界面,在這個圖形界面中我們不僅可以針對這些神經網絡進行學習訓練時所有的需要使用的各種參數軟件進行計算設置,如訓練的進行次數,學習效果,每批次處理樣本的個數,并可以在可視化界面中對神經網絡模型進行訓練,在訓練完成后將訓練好的模型保存起來。在界面中可以隨機從測試集中選擇一張數字手寫圖片,然后使用已經訓練好的模型對該圖片進行識別,并在界面中顯示識別結果。
全連接神經網絡已經是比較成熟的圖像分類算法了,MINIST手寫數字集也是計算機視覺中的入門數據集,基于全連接神經網絡對MINIST手寫數字數據集進行手寫數字識別,運算速度快,準確率高,無論在理論上還是實踐中都是十分可行的。
本章主要內容是詳細介紹了當前手寫數字識別相關技術的主要研究發展背景與現實的技術需求,研究課題內容的具體技術相關性研究進展與其未來發展的技術目前仍然存在的一些技術問題與重大技術難點。最后簡要詳細闡述了該本論文的相關科學技術研究發展思路和其中的主要內容。
人工智能先驅們最初的設想是復制人腦的功能,人腦是自然界己知最聰明,最復雜的創造物。這也是這個領域的大多數術語(包括術語“人工智能”)都來自于人的身體和心靈的緣由。人工神經網絡的靈感來自于它的生物對應物。腦的許多功能上的實現存在許多沒有解決的疑問,但我知道的是生物神經網絡使大腦可以以復雜的方式處理大量的信息。生物神經網絡由大約1000億個神經元組成,神經元是大腦的基本處理單元。神經元通過大量相互連接(稱為突觸)來發揮其功能。人腦大約有100萬億個神經元,每個神經元大約有1000個。人工神經網絡(ANN)或模擬神經網絡(SNN)是機器學習的一個子集,也是深度學習算法的核心。人工神經網絡(ANN)由一個節點層組成,節點層包括一個輸入層,一個或多個隱藏層和一個輸出層。每個節點都連接到另一個節點,并具有關聯的權重和閾值。如果任何單個節點的輸出超過指定的閾值,則該節點將被激活以向網絡的下一層發送數據。否則,數據將不會傳輸到網絡的下一層。
人工神經網絡最初會經歷一個訓練階段,在該階段中,它將學會從視覺,聽覺或文本方面識別數據中的模式。在此監督階段,網絡將其實際產生的輸出與期望產生的實際輸出(期望的輸出)進行比較。兩種結果之間的差異可通過反向傳播進行調整。這意味著網絡將向后工作,從輸出單元到輸入單元,以調整其在單元之間的連接權重,直到實際結果與期望結果之間的差值產生最小的可能誤差為止。
人工神經網絡模型是一種最早起源于人腦神經系統的新型網絡模型,是用于研究和發展模擬應用人工智能的這種一條非常重要的技術途徑,具有用于模擬人的一些部分思維形象和整體思維的一種技術表現能力它主要原理是由簡單的各個信息處理器和針對網絡(即人工神經元)之間進行信息互聯連接組成的一種信息網絡,能夠很好地進行接受和分析處理各種信息,網絡的基礎數據和針對信息處理由各個信息處理器和針對網絡中各個處理單元之間的相互作用進行關系一起來進行控制和輔助實現,它主要目的是通過把能夠解決這個問題的各種方法間的信息鏈路通過連接進行權限化來進行信息處理。一般而言,人工神經網絡主要的定義方法泛指以其自身作為一種新型的局部信息處理系統或者子單元的技術基礎而被廣泛地用來對其進行模仿或者建立模擬人體和其他人的大腦,執行特定功能任務或者用來完成對其特定功能感興趣的特定事件等各種功能,它們所需要采用的神經網絡就是一種幾乎可以相互并行的分布式局部信息處理的網絡架構,通過一種被人們稱之為信息鏈接的單向局部信號處理通路把一些被信息處理的單與其他進行的信息互聯而相互地組成。每一個微處理器網絡單位的都包括一個不同但輸出到所有人預期的網絡連接。每個信號處理器控制單位各自分別向傳送相同的信號進行處理,每個處理單元各自分別發送一個相應的處理信號。其基本模型如下圖2-1所示。
根據不同神經元在內部神經網絡中的位置和功能的區別,能將其分為三種類型:輸入輸出神經元,輸入神經元和輸出隱含網絡神經元。輸入神經元主要接收外部網絡信息,輸出隱含神經元將信息傳遞給外部網絡。這兩類外部神經元是內外環境直接交換內部信息的重要通道,是外部神經元的重要構成部分。然而,這些隱藏的外部神經元主要存在于外部神經網的內部,與外部環境沒有任何直接的相互作用。這些隱層神經元只接受其他神經元的輸出作為其他輸入,輸出僅用于控制隱層神經網絡系統中的其他神經元。這三類神經元相互連接,形成一個結構和功能完整的網絡,這種神經元具有如下幾個功能特點:
[if !supportLists](1)[endif]神經元是一個有多個輸入和一個輸出的單元;
[if !supportLists](2)[endif]它具有非線性的輸入輸出特性;
[if !supportLists](3)[endif]它具有可塑性,其可塑性的主要部分是權重的變化,相當于生物神經元突觸部分的變化;
[if !supportLists](4)[endif]神經元的輸出反應是各種輸入值共同作用的結果;
[if !supportLists](5)[endif]輸入類型分為激勵(正)輸出和抑制(負)輸出。
雖然單個神經元的結構極其簡單,功能有限,但由大量神經元組成的網絡行為功能非常龐大,可實現非常多長人無法辦到的事情。用數學表達式對神經元進行抽象和概括,令
表示t時刻神經元j接受的來自神經元i的信息輸入,
表示t+1時刻神經元j的信息輸出,則神經元j的狀態表達式為:
(公式2-1)
其中,
表示神經元的閾值,
表示神經元i到j的權重值,f(o)表示神經元轉移函數。有一點需要說明的是,上式是為了簡單起見,將突觸時延取為單位時間。
輸入總和常稱為神經元在t時刻的凈輸入,用下式表示:
為了簡單起見,在后面用到上式時,常將其中的(t)省略。如果令
,
,則有:
因此凈輸入與國值之差可表達為:
(公式2-2)
綜上,神經元模型可簡化為:
將上述幾個結構數量龐大且結構功能單一的典型神經元分別采用特定的典型拓撲網絡結構方式進行相互連接,便于就可以得出組成這類神經網絡的基本模型。圖3-2是一個簡潔的動態神經網架構模型,該模型主要采用前饋動態神經網。前饋輸入神經網絡控制系統技術是最早由臨床研究工作人員和臨床學者們首次深入設計的并開發實現出來的,構造相對簡單。前饋神經網絡是一種生物學啟發的分類算法。它由(可能很大)許多簡單的類神經元處理單元組成,這些處理單元分層組織。一層中的每個單元都與上一層中的所有單元相連。這些連接并不完全相同:每個連接可能具有不同的強度或重量。這些連接上的權重編碼了網絡知識。通常,神經網絡中的單位也稱為節點。數據進入輸入并逐層通過網絡,直到到達輸出。在正常操作期間(即當它用作分類器時),層之間沒有反饋。這就是為什么它們被稱為前饋神經網絡。
圖3-2中,左側一豎排單元節點
和偏置(圖中標記為+1的圓圈)組成神經網絡的輸入層,右側一豎排的單元節點是輸出層(這里只有一個節點),中間一豎排的全部單元節點是隱含層,隱含層顧名思義是隱藏在輸入和輸出之間的,我們不能通過訓練的數據樣本去了解它的構造和取值。
如果n代表神經網絡模型層的數目,
表示第
層,
和
分別代表權重和偏置,這樣上圖3-2的前饋神經網絡模型里
,
是輸入層,
是隱藏層,
對應表示為輸出層,
代表第輸入信號層的第
個單元和第
輸入信號層的第
個單元兩者構成的權重參數,
是第層的第i個單元的偏置參數。將
代表第l層里第i個神經元輸出值(f(.)的激活值)。當l=1時,
表示第i個輸入特征
。在參數樣本集合W,b確定的情況下,我們就能夠通過上述算法利用非線性模型
計算整個神經網絡的輸出,計算每層輸出結果的詳細步驟見下式:
(公式2-3)
為了方便簡潔,用
代表第l層里第i個單元的輸入加權之和,當l=2,,則。如此公式可以更簡潔地表示為:
上述的信號計算處理步驟即為基于神經網絡前向信號傳播的計算過程,其主要計算目的之一的也便是通過前向傳播網絡信號的計算方式一層層不斷地精確計算出所得到的被激活的網絡輸出信號值。神經網絡結構模型的多種結構性,我們可以通過對不同的隱含層結構進行不斷增加或者進行修改等多種方式對其中的結構類型進行多重次的變更,以求我們能夠有效地將其應用于不同的實際情況,全連接神經網絡模型正是由此方式構建而來形成。
神經網絡從實際上來說就是一種人類可以直接模仿那些人類處在自然界環境中的正常生物神經系統的一種邏輯運算網絡模型,通過訓練和科學研究以及使用那些沒有任何邏輯思維的人類電子腦和計算機等科學技術人和工具都已經可以直接進行電腦仿真利用生物的正常腦部結構去快速分析和準確識別這些信息。整個人體網絡在我們進行人體建模的設計過程中所有的需要同時涉及使用到的網絡計算機數量非常巨大,需要我們自己可以通過各種反復的學習訓練或者學習不斷地進行調整和重新修正整個網絡設計模型的各個基本參數,并且通過這樣一種完全具有合理自適應性的"學習"與"訓練"結合過程,從而最終使得整個網絡對于各類人體內部信息能夠進行"記憶",最終把利用人類身體信息真實"輸入一輸出"之間的適應關系最終確定在合理性和誤差大的區間內,即被人們認為已經完全基本具備了利用人類信息身體對于自然環境的合理適應性。目前基于人類神經網絡的監督學習控制形態主要可以分為3種:分別稱為是無公有私的監督學習、無監督學習以及再勵學習。
監督學習,也稱為監督機器學習,是機器學習和人工智能的子類別。它的定義是使用標記的數據集來訓練算法,以分類數據或準確預測結果。輸入數據輸入模型時,它會調整其重量,直到模型得到適當安裝,這作為交叉驗證過程的一部分發生。監督學習可幫助組織大規模解決各種實際問題,例如將垃圾郵件從收件箱中單獨的文件夾中分類,具體學習方式如圖3-3所示。
在單一的網絡訓練中決定學習結果過程中,通過"監督"將實際學習輸出的計算結果和上次理想學習輸出的計算結果之間的計算誤差分別綜合進行了定量分析和綜合評判,再通過判決結果得出該次的學習是否需要我們繼續進行下一次的網絡學習。同時根據網絡誤差權值函數模型來合理調整各種類型網絡性能模型設計中的網絡權值計算參數,盡可能把網絡誤差權值函數盡量減少或降到最低,直至能夠滿足設定目標的網絡性能指標。
圖2-3 有監督學習
例子結果如圖3-4所示,無監督機器學習比有監督學習更智能,它依賴于神經網絡本身。整個網絡能直接獲取誤差信號進行校準和修正。它依靠輸入的全部信息,通過自己的模型構建和訓練過程,對網絡參數和結構進行更新和修正,最終使網絡的輸入一輸出關系與原來的功能一致。
圖2-4 無監督學習
再勵學習這種模式通常指的是在前2種學習之間的模式,它又可以簡單地統稱為重新加強學習。不需要完全依賴于神經網絡而是通過外部環境的影響來對其進行訓練,針對這次訓練中所有輸入和結果做出一個確定性的判斷只是做出了一個與其相關性評價數據。若本次測試結果良好,就有機會對這些神經網絡做出一些懲罰性的行為,以此來鼓勵和支持這些神經網絡繼續優化自己的系統性能。再勵學習過程如圖2-5所示。
圖2-5 再激勵學習
本文研究的是全連接神經網絡,將使用前向傳播方式對手寫數字識別模型進行訓練,是一種有監督的學習方式。
神經網絡的基本模型目前可以用的劃分可認為很多種,現在最有效的網絡模型主要包括有abpld網絡、hopfieldld網路、波爾茲曼機制的boltzmann、sofm及zmartld網路等等。在以上這些各種網絡傳播模型中,逆向訓練傳播(backpropagation,bp)模式是一種網絡使用率和工作效度均最好的網絡訓練傳播算法。反向信號傳播編碼算法的主要技術優勢之處之一就是它的操作原理簡單、操作量不小、計算機和方法穩定等,十分適用于進行圖像信號處理和視頻信號的信息分類化和辨認。
反向傳播權值算法基于應用梯度下降準則,通過將權值代價計算函數(實際權值輸出與期望權值輸入的均方差與誤差)在權值曲面上沿應用梯度上升下降準則尋找最小值的下降方向,并且不斷地對各個神經網絡各層的所有權值數據參數結果進行重新調整與及時修正,不斷地重新替換與及時更新各個神經網絡的權值參數最終結果可以有效實現神經信息源的識別。它也可能就是目前最為普遍的幾種有限度控制能力訓練方法手段之一及其中的習得訓練模式。
假設我們有一固定的樣本集..,樣本數為m。每一個樣本中的X參數表示n維向量,Y表示離散值。通過在神經網的實際輸出和期望輸出間做一個均方誤差。這種誤差也稱為網絡的損失成本函數。整個反向傳播計算的目標是盡量減少損失成本,即使是在函數值。這樣,訓練好的網能準地預測未知輸入短信的輸出。對于單個樣本,損失函數如下所示。
(公式2-4)
這里為一個樣本數據,表示神經網絡的權重和偏置等參數,||C||表示常取二范數。針對前文給出的有m個樣本的集合,它的整個損失代價函數表示如下:
(公式2-5)
表達式中有兩項。前者表示所有樣本集的期望和實際輸出誤差的均值,后者表示神經網權值的衰減項。在網絡模型中人為地提高了對各權值幅值的約束,預防了訓練網絡的過擬合。算法的目標是最小化代價函數的值,這樣第一步就是要把網絡所有涉及的權重與偏置等參數在最初階段初始化成一個無限逼近于0的隨機值,之后采用梯度下降法調整優化上述參數。梯度下降算法對權重和偏置項的修正調整分別見下式。
(公式2-6)
上式的α代表了網絡的訓練學習速率,可根據真實原因進行調整。整個計算的核心是怎么算代價函數對權重和偏差參數的偏導數,也稱殘差。
對于一個樣本,首先求出其代價函數對權重與偏置項的偏導數,再對整個樣本的代價函數的偏導數進行求解,過程用下式表示:
(公式2-7)
單獨樣本的代價函數對權重W和偏置項b的偏導被算出之后,我們便能計算得到整體網絡的代價函數。
(公式2-8)
最后,把(3-14)與(3-15)得出的結果帶進(3-6)與(3-7)兩式,不斷選代更新修正權重與偏置項b這兩個參數,讓整體網絡的代價函數盡可能的小,最終兩個參數的波動會逐漸趨于0,這時就可以停止反向傳播算法的訓練.
本章節主要是對神經網絡進行介紹。具體內容包括神經網絡的由來、神經元等相關概念。研究了神經網絡的工作模式,確定并推導了前向傳播、后向傳染和梯度下降算法。本文分析了多種神經網絡模式,提出來了基于全連通神經網絡的手寫體數字識別的研究設計框架和方案。
基于全連接神經網絡的手寫式數字識別系統在模型中進行了設計和實現,通過構建合適的全連接神經網絡模型,來分析各種手寫式的數字。多層全連接的神經網絡在技術上具有很強的自我學習能力和超高的非線性模型擬合能力,面對一個大樣本的數據時也具有很強的推理能力,可以充分地逼近任意復雜的非線性關系。為此,提出來了一種基于全連接神經網絡的手寫體數字識別系統。利用全連接神經網絡對手寫體數字進行識別。本節主要簡介全連通神經網的結構定義等以及介紹全連接神經網絡的訓練過程。
將每個神經元根據組織層次不同進行合理布局。最左邊的層我們叫做數據輸入層,負責直接傳送和管理接收我們輸入的信息數據;最右邊的那個層被我們稱為輸出層,我們也就是從這層中直接進行獲取接收到由上層神經網絡直接傳遞的輸出數據信息。輸入層與輸出層之間之間的被稱作隱藏層,因為它們在外部環境是不能肉眼看到的。在同一個神經層次上的兩個神經元之間并非毫無連通。第n層的各個連通神經元與第n-1層的全部各個神經元可以進行雙向連通(這也就可說是full connected),第n和n-1層各個神經元的連通輸入即為第n和n-1層神經元的連通輸入。并且各個連接也只有一個連接權值。
DDNN也可以叫做多層感知器(MLP),DNN的網絡結構太復雜,神經元數量太多,為了方便講解我們設計一個最簡單的DNN網絡結構--感知機。
DNN中的神經元由五部分組成:
輸入:一個感知器可以接收多個輸(x1,x2,...,xn|xi∈R)
權重:每一個輸入都有一個權重
∈R
偏置項:b∈R,就是上圖中的
激活函數:也叫做非線性單元,神經網絡的激活函數有很多。下文會做相關介紹。
輸出:
神經網絡的復雜之處在于其的組成結構太復雜,神經元太多,通過設計一個最簡單的神經網絡來對全連接神經網絡進行詳盡的介紹。
這是一個只有兩層的神經網絡,假定輸入x,我們規定隱層h和輸出層O這兩層都是
和
組合,一旦輸入樣本x和標簽y之后,模型就開始訓練了。那么我們的問題就變成了求隱層的w、b和輸出層的w、b四個參數的過程。
訓練的目的是神經網絡的輸出和真實數據的輸出"一樣",但是在"一樣"之前,模型輸出和真實數據都是存在一定的差異,我們把這個"差異"作這樣的一個參數e代表誤差的意思,那么模型輸出加上誤差之后就等于真實標簽了,作:
。
當我們有n對x和y那么就有n個誤差e,我們試著把n個誤差e都加起來表示一個誤差總量,為了不讓殘差正負抵消我們取平方或者取絕對值,本文取平方。這種誤差我們稱為“殘差”,也就是模型的輸出的結果和真實結果之間的差值。損失函數Loss還有一種稱呼叫做“代價函數Cost”,殘差表達式如下:
(公式3-1)
現在我們要做的就是找到一個比較好的w和b,使得整個Loss盡可能的小,越小說明我們訓練出來的模型越好。
對于上述的全連接神經網絡,需要特殊的訓練方法。在這時間,怎么找最合適的連接權值對每一個神經元數據集進行分類?反向傳播算法(Back,Propagation)提供了一個解決方案。本文著重講解BP算法,思路也是梯度下降算法。本文定義損失函數,并通過向損失函數下降最快的方向移動(即梯度方向)來調整我們的權重系數。損失函數能幫助均方誤差:
(公式3-2)
接下來的問題就是求損失函數E對需要訓練的權重系數的梯度
首先從隱層至輸出層的連接權重為例進行推導。這個求梯度的過程就是鏈式求導法則,首先我們分析ー下是如何影響到我們的損失函數E的,首先影響了第 j個輸出層神經元的輸入值,然后進而通過激勵函數Sigmoid 影響到其輸出值,然后影響到E。
(公式3-3)
第一項:將上面E的表達式代入
第二項:這一項是神經元輸出對輸入求導,實際上就是Sigmoid求導:
第三項:這一項是神經元的輸入對權重求導,實際上就等于上一個神經元的值
:
上式中的
我們定義為:
隱層神經元權系數
首先影響
神經元的輸入
,進而影響輸出。
(公式3-4)
到現在為止,我們能在輸出層計算到權重系數的損失函數梯度,在隱藏層怎么算到權重系數的損失函數梯度,然后根據梯度下降算法來訓練我們的網絡結構。bp神經網絡訓練過程的主要特征:訓練過程實際上是一個反復學習的過程,根據預測的預期輸出和實際測定誤差進行反復調整。隨著調節過程的反復進行,實際輸出逐漸接近預測值。對于bp網絡,在收斂過程中主要存在兩個缺陷:收斂效率不高,容易陷入局部最優的理解。雖然很多學者提出了多種方法來解決這些問題,如共軛梯度法自適應學習,遺傳算法自適應學習等方法,但以上兩種方法都可以在一定程度上加以改進,以解決bp神經網絡收斂的缺陷。
DropOut是深度學習中常用的方法,主要是為了克服過擬合的現象。全連接網絡極高的 VC 維,使得它的記憶能力非常強,甚至把一下無關緊要的細枝末節都記住,一方面使上網參數過大,另一方面訓練后的模型容易過擬合。
dropout:這就是本意指在一輪的訓練結束階段暫時關閉一部分的訓練網絡節點。使得那些被關閉了的那個節點可以進行一個相當程度的去除。如下面框圖所示,去掉了兩個虛線的一條圓和兩個虛線,原則上我們就是去除了的兩個神經元是隨機的.
本章對神經網絡、神經元、以及全連接神經網絡進行的詳盡的介紹,為我們日后基于全連接神經網絡的構建做好了基礎。
python語言是abc編程語言的繼承。python不僅在技術上具有良好的開放性,而且擁有獨特的圖形界面而文本識別功能也是實現本地窗口設計風格的手寫數字識別,以及python編程語言中pl工具提供的強大數字識別功能。創建圖像處理功能是為了方便以各種方式處理數字圖像信號,例如放大和縮小。通過這種編程語言通過使用和學習,我們已經在一個良好的環境中進行了接口調用,然后實現了與接口的對接,從而應用到實際的手寫數字中正在進行識別。
在十種中最成熟、開源的面向對象深度學習框架中至少有6種算法支持python語言,目前已有許多算法在深度學習算法完全基于這一研究和生產框架。與普通的面向對象的深度學習語言相比,它易于學習和管理解決方案。對于人工智能,這個編程語言可以說是一個很好的計算機編程語言,在我們完成了底層的驅動和人工智能體系移植之后,借助于機器學習的算法,將自己編寫的語言研究和開發運用到這上面,這樣就使得我們可以充分利用 Python的特點來發揮人工智能算法和機器學習的兩大優點。本手寫數字識別系統是在Windows系統下實現,采用的是Python3。
關于本手寫識別系統擬采用Qt作為接口進行界面設計。Qt是一個新型的全球跨行業平臺通用c++圖形軟件用戶界面數據庫,由一家挪威trolltech公司自主開發和設計制造,目前主要開發產品分別有Qtcreator,Qtembedded,Qtdesigner快捷應用開發工具,Qtlinguister國際化開發工具等部分組成。
Qt支持所有的linux/unix操作系統,還可以在windowsv等平臺上免費使用。為了能夠提供功能給正在應用程序中的開發人員想要構建一個藝術作品等級的圖形用戶界面必須還需要考慮具備的所有重要功能。Qt很容易被用來擴展,并且它們可以用來讓我們真正容易進行新的組件結構編程。Qt與gtk、kde、mfc、owl、vcl、atl都是同一個基于圖形軟件接口和用戶界面的典型數據庫。同時它還具有一個軟件可以同時支持2d/3d的動態圖形文件渲染,支持opengl、大量支持開發者的文件、xml文件支持等等但功能優點。
本手寫數字識別系采用Pycharm+Anaconda開發工具具體環境配置如下。
1、下載pycharmIDE后,在PyCharm中新建一個project后,該項目的默認編譯器應該是系統默認的Python.exe。為了選擇特定的編譯環境,我們需要個性化設置。
2、點擊菜單欄中的File,打開Settings。在Project選項卡中選擇ProjectInterpreter如圖4-1所示。
3、在右側ProjectInterpreter中選擇你在Anaconda中新建的Python環境。因為我這邊是新建了環境,因此選擇Existingenvironment。具體的路徑為Anaconda3文件夾中envs中你所新建的環境文件中的Python.exe,如下圖4-2所示,其PytorchNLP是新建的環境名。
4、到這里我們已經為當前的project選擇了一個特定的Python編譯器了。接下來還有一項重要的步驟就是選擇該project要加載包文件的路徑。如果不進行這一步,那該project還是從系統環境變量中的路徑來搜索你要加載的包,這樣在你用Anaconda新建的這個環境中所特有的包就會出現無法加載的問題。單擊菜單欄Run選擇EditConfiguration。在Environmentvariables中添加一個新的Path。新的路徑為你用Anaconda新建的環境的文件夾中的…/Library/bin文件夾,如圖4-3所示。
5、選擇保存,寫段代碼開始測試你的環境是否配置成功。
為實現手寫數字識別系統的界面設計使用PyQt5+QtDesigner配置以便進行UI界面設計。配置過程如下:
1、首先我們需要打開一個anaconda,下載后打開environment->notinstalled然后搜索一個pyQt,會在這個屏幕上自動看到一個pyQt的安裝文件包,直接打開點擊安裝勾選之后右下角我的apply就已經自動安裝好了。安裝生成完畢后它還能夠自動切換至ssinstalled,來自動檢測軟件是否可以實現真正的軟件安裝成功。
2、安裝好pyQt5之后,可以在一個anaconda-<<libra->bin的文件目錄下直接可以看到Qtdesigner.exe,這個文件目錄下也就是我們通常用來進行繪制軟件界面的pyQtdesigner。
3、打開PyCharm,打開File—>Settings—>ExternalTools,點擊加號來添加自己的工具,做如下配置:
Name:QtDesigner
Group:Qt
Workingdirectory:$ProjectFileDir$
完成后點" ok ",現在 Qtdesigner就已經被配置好了,就已經可以直接在 pycharm 中重新打開它們一起來繪制界面了,但是想要在 pycharm 中把界面的. ui 文件轉換為. py文件還需要后面的配置。
4、同樣可以在 externaltools 中直接點擊一個加號按鈕來進行配置 pyuic :
Name:Pyuic
Group:Qt
program : f :\ anaconda \ Python. exe (每個位置有自己的 Python路徑)
Arguments:-mPyQt5.uic.pyuic$FileName$-o$FileNameWithoutExtension$.pyWorkingdirectory:$FileDir$
5、至此就全部被配置好了,接下來要做的事情就是 test ,回到 pycharm , tools -< Qt- Qt> Qtdesigner ,點擊按鈕即可直接打開 designer :
然后自己創建一個最簡單的應用界面,把這個應用界面進行保存(我默認為它被保存在當前 pycharm 項目的目錄下,我這里叫" first .ui")。
6、返回 pycharm ,就會看到第一個工程的目錄下己經產生了第一個. ui ,右鍵它, Qt- l的 pyuic ,點擊后就會自動產生第一個. py 文件,接下來便是我們的進行界面設計及編程了。
mnist手寫數字分類數據集是計算機視覺和深度學習中使用的標準數據集。此數據集將是本全連接神經網絡模型訓練的測試集和訓練集。mnist數據集采用的大型手寫體數據庫,它可以被作為一種用來進行訓練和檢索測試的實驗樣品,在機器學習這一技術領域的實驗數據集中被廣泛采納,而且每一個實驗樣品都必須是由0-9的大量手寫體數碼所組合構成。該系統的數據集主要包括四個組成部分:訓練圖像集,測試標簽集,訓練標簽集。其中60000張的圖片可以直接作為一個訓練集,而余的10000張圖片則同樣可以直接作為一次測試的檢查集。每張圖片都被精心地整理成一幅二值化的影像,大小都保持著28*28。針對這些不太方便地處理存儲問題進行了處理,將這些影像處理維度轉化成一個維度(1,784)的矢量。
mnist的一個手寫數字數據來自一個叫做nist的特殊數據庫。它還包含用于手寫二進制的數字文件儲存庫sd1和sd3。其中,sd的數據集主要來自一家普通高中,而sd3的數據集主要來自census bureau。從信息來源的角度來看,sd3樣本在清晰度和信息完整性方面優于sd1號。如果將sd1號和sd3樣本中的一個作為訓練樣本,另一個作為測試樣本,則訓練后的網絡模型在信息量和擬合時效性方面可能較弱。因此,我們總結了數據庫。3000個sd1號樣本和30000個sd3樣本組合形成6000個訓練樣本,測試樣本由5000個sd1號樣本和5000個sd3樣本組成。mnist數據集的結構和組成如表5.1所示。為了最大限度地消除除自身差異外的其他因素的干擾,250名工具作者可以為每個樣本集人編寫,編寫測試集的工作人員和編寫測試集的工作人員互不重復。
NameSD3SD1
Trainig Set3000030000
Testing Set50005000
表4-1mnist數據集組成成分
下面的圖4-5顯示了mnist手寫數字數據集的一些示例圖像。從這些樣本圖像中,我能清晰地看手寫數字的標準化與印刷數字的標準化有很大的區別。手寫體數字的書寫方式是隨機的,一起也考慮了樣本頭像的變形。
對于同一種數字,由于這些數字是不同的人進行閱讀和書寫,每個人的閱讀和書寫方式習慣各有所不同,因此在這些數字相互之間也就會存在很大的區別。下圖4-6顯示了mnist數據集內部的同一位數字0進行差別測試。
為實現編程程序的簡單性,Pytorch框架不包含任何樣式的數據集,這些訓練模型的數據集需要我們自行下載,因此我們需要下載相應的訓練集和測試集和驗證集的數據。首先,下載mnist數據集,它包括四個部分,具體內容如下。
Trainingsetimages:train-images-idx3-byte.gz,其中包含60000個樣本,解壓后大小為47MB;
Trainingsetlabels:tin-labels-idkl-byte.gz,其中包含60000個標簽,解壓后大小為60KB;
Testsetimages:t0k-images-idx3-byte.gz,其中包含10000個樣本,解壓后大小7.8MB;
Testsetlabels:tk-labels-idxi-byte.gz,其中包含1000個標簽,解壓后10KB。
4.4關于Pytouch簡介
Pytorch也就是torch的最新版本 ,屬于基于python 最新一個開發的版本,它所指的是由于facebook 自己設計和研發出來的基于 gpu 加速神經網絡的一個編程框架,專為基于 gpu 加速的基于新型 dnn ( dnn )深度神經網絡而量身定制設計和開發并進行了編程。 torch 是一個基于多維矩陣的最佳張力矢量( tensor )數據庫,它已在智能學習和其他各種新型數學密集型計算領域得到了廣泛研究和應用。與 pensorflow 的完全動態計算圖不同, Pytorch的完全動態計算圖必須保證它們都是完全動態的,能夠按照完全動態計算圖的特點和要求對其進行實時的改變。但因它的 torch 語言所有人都使用的是 lua ,導致其在國內卻非常的小眾,而且也慢慢地被那些長期使用 python 和 tensorflow 使用者和人員搶占了大量的用戶。 Pytorch軟件系統作為最新的編程語言和經典智能學習庫torch的開發終端,為那些熟悉 python 這種編程語言的專業使用者和設計師提供了一種舒適的快速編寫和使用編程代碼的選擇。
1.支持圖形計算的動態方法:
PyTorch在可在運行時播放的動態圖的基礎上構建深度學習應用程序。其他流行的深度學習框架適用于靜態圖,其中必須事先構建計算圖。用戶無法查看處理圖形的GPU或CPU在做什么。而在PyTorch中,每個級別的計算都可以訪問并達到峰值,通過動態方法,可以完全深入到計算的每個層次,并準確了解正在發生的事情。”
2.易用:
3.活躍的社區:
Pytorch提供了完整的文章資料,循序漸進地詳細寫出了文章導讀以及指引,作者親手設計維護的這個論壇平臺可以提供廣大用戶在網上互相交流及發帖求教。facebook中國人工智能技術研究院向它的Pytorch很快提供了強大的技術支撐,作為目前正在全球排名世界前三位的國際深度機器學習領域研究學術組織,fair的大量技術支撐已經完全足夠幫助讓Pytorch很快獲得了高可持續性的產品開發和技術更新,不至于再次像許多由一些私人或者特別是專業開發技術公司所自行設計的開發框架一樣短暫地曇花一現。
4.Pytorch常用工具包
torch:類似NumPy的張量庫,強GPU支持;
torch.nn:為了功能最大化其使用靈活性未被廣泛涉及、與toautograd等等進行數據深度分析集成的大型神經網絡數據庫;
torch . optim :與 torch . nn 一起被廣泛使用的標準優化文件包,其中涵蓋 sgd 、 rmsprop 、 lbfgs 、 adam 等多種標準的優化文件。
torch . utils :一個數據的載入器。具有訓練器和其它的便利用途;
torch.legacy(.nn/.optim):對于一個處理器的向后層從兼容性的角度考慮,從新的torch中直接刪除重寫出來的legacy執行代碼。
本章詳細介紹了實現本基于全連接神經手寫數字識別系統所需要軟件環境的搭建工作,并對使用的數據集以及所使用的神經網絡框架Ptorch進行了簡要的介紹。對我們系統的實現打好了基礎。
Pytorch提供了一種構建這樣的網絡的便捷方法,在這里我們使用torch.nn中的方法。在 Pytorch中的torch . nn數據庫包中為我們提供了許許多多與我們所需要實現的深度神經網絡其中的具體功能密切相關的類,這些主要是涵蓋了基于深度神經網絡模型設計在其基礎上進行參數最小化和設計等各個過程中的常見技術內容,比如基于深度神經網絡模型設計中的卷積層、池化級、全連接層這類進行各種層次結構的計算方法、防止被過擬合的各種參數歸一化的計算方法、 dropout 等等,還有與激活函數組成部分線性激活函數,非線性激活函數及其相關的方法等。
torch.nn.sequential這個參數類我們也是其中的一種基于一個序列的參數容器,通過在這個基于類的參數容器中直接安裝和自動嵌入一套各種與各類神經網絡中具體的參數功能密切息息相關的參數類,來直接地去完成對于各種神經網絡參數模型的自動搭建,最主要的一點就是,參數序列都會按照我們已經預先定義好的每個序列自動地將其傳遞出來給我們直接下去。
我們完全可以把所有被嵌套到容器中的各個單元看成為各種不同類型的模塊,它們之間可以任意地自由選擇。同時我們使用了Pytorch的函數nn.linear()函數方法,它是主要被應用于在卷積中的層中用來設置一個網絡系統中的全域網連接層的,需要特別注意的一個地方就是全網絡連接層的所有網絡輸入與輸出傳遞所得到的所有輸出都必須可以是二維層的張量,一般的張量形狀分別可以表示為[batch_size,size],不同于卷積中的層所設置要求的所有輸入和輸出傳遞所得到的所有輸出都必須是四維張量。通過nn.linear()的特定方法轉化為二維張量。
1、數據歸一化
歸一化就是把我們所有可能需要數據進行統一處理,所有數據都經過統一處理之后(經過某種特殊算法)被統一限制到我們所需要的特定處理區域。歸一化主要用于目的就是為了后面模型的數據處理更加方便,其次就是為了能夠保證整個模型在實際運行過程中的數據收斂計算速度可以加快。
具體實現代碼如下。
#數據歸一化
transform = transforms.Compose([transforms.ToTensor(),
transforms.Normalize((0.5,), (0.5,))])
2、安裝數據集并對數據集進行測試
具體實現代碼如下。
#測試數據集
testset = datasets.MNIST('.', download=False, train=False, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=1, shuffle=True)
3、構建全連接網絡模型
通過nn.Sequential方法可以構建如下五層網絡模型。由于 mnist 的數據集每張圖片 mnist 的數據集每張圖片都是一個有28*28個像素的節點,所以輸入是28*28;MNIST一共有10類,因此輸出是10個點即輸入是28*28的矩陣,為了方便全連接層的處理,我們把它打平成784層的向量,然后中間節點都是逐級遞減變為392-196-98-49-10.總共為五層神經網絡。
具體實現代碼如下。
#神經網絡模型
model=nn.Sequential(nn.Linear(784,392),
nn.ReLU(),
nn.Linear(392,196),
nn.ReLU(),
nn.Linear(196,98),
nn.ReLU(),
nn.Linear(98,49),
nn.ReLU(),
nn.Linear(49,10),
nn.LogSoftmax(dim=1))
4、損失函數
損失函數是一種用來用于判斷和衡量評價分析模型函數中的損失預測值與模型真實值之間得分是否相同的一種程度,損失值在函數中的得分愈高越好,通常該分析模型的基本特點也就是模型性能也就越好。不同能量模型所需要采用的能量損失梯度函數也可能相差很大。本模型使用Pytorch框架中的nn.NLLLoss()方法。
具體實現代碼如下:
#損失函數
????????cretirion = nn.NLLLoss()
????????for e in range(train_number_epochs):
????????????running_loss = 0
????????????for images, labels in trainloader:
????????????????images = images.view(images.shape[0], -1)
????????????????optimizer.zero_grad()
????????????????score = model(images)
????????????????loss = cretirion(score, labels)
????????????????loss.backward()
????????????????optimizer.step()
????????????????running_loss += loss.item()
????????????else:
????????????????self.textBrowser_result.append(f"Training loss: {running_loss / len(trainloader)}")
????????????????print(f"Training loss: {running_loss / len(trainloader)}")
5、保存手寫數字識別系統模型。
具體實現代碼如下:
#存儲模型參數
????????state = {'net': model.state_dict()}
????????torch.save(model.state_dict(), 'modelpara.pth')
支持設計的Python界面代碼如下。界面如圖所示。界面當中兩個按鈕以及三個輸入框。可以通過界面設Train_number_epochs,Train_batchsize,Learning_rate這三個屬性的參數,點擊訓練按鈕進行重新訓啦,即可重新訓練模型,訓練好的模型將保存為modelpara.pth文件,點擊【選擇圖片】將隨機從測試集中選擇一張數字圖片,點擊【開始】將基于modelpara.pth對所選圖片進行識別,并將結果輸出至界面。
圖5-1輸入三種屬性
此章節是本論文的核心部分,實現手寫數字識別系統所涉及到的技術實現部分集中在本章。系統采用Pytorch等機器學習系統框架設計,使用mnist數據集用來模型訓練,搭建實現了一種能夠實現手寫數字識別的全連接式神經網絡。在此項技術的研究基礎上,我們已經完成了基于全連接神經網絡數字手寫圖像識別。通過多次數學仿真和模擬實驗充分研究了不同的網絡優化設計方法和神經網絡優化模型及其結構對神經網絡數據識別率、誤識率、損失函數等產生的直接影響,最終成功設計并研究搭建了一種具有性能最優的全連接神經網絡優化模型emodelpara.pth。可以完美地實現對手寫數字的識別。
在當今世界經濟全面發展、信息化水平全面提高和自動化水平提升的時代大背景下,對于手寫式數字識別的要求已經變得非常急迫。鑒于目前采用手寫體的數字識別系統技術實現方法的應用特殊性和技術局限性,本文將一個基于AI的人工智能、大數據等新興現代信息識別技術以及結合當前我國實際中所應用的研究思路,結合全連接神經網絡在圖像分類和處理上的特點和優勢,提出了如何有效地利用全連接神經網絡來分類識別手寫體的數字,同時為了獲得更高的識別率和更優的性能,現將其主要內容整理總結一下。
。本文主要是通過深度學習算法的研究,將其運用到實際的場景中,解決了實際中的問題。也為我們把深度學習技術運用到實際生活場景中提供了參考。本文對手寫識別系統功能實現的需求、現狀、難點等進行了分析,并對當前解決手寫數字識別方案進行了介紹。
2.對全連接神經網絡、深度學習算法、Pytorch框架等進行了學習。掌握了深度學習訓練前向傳播,反向傳播等的具體實現方式。同時結合了手寫數字識別系統的應用功能對實際開發過程中的要求作出了分析。
3.通過深度學習模型訓練得到手寫數字識別模型,同時通過PyQt技術搭建了可視化的手寫數字識別系統,系統可實現數字識別、模型訓練、更改訓練參數等功能。
4.構建模型時通過參數調優和前向傳播、反向傳播等過程訓練得到優秀的數字手寫識別模型,得到模型后對實用性、識別效果等進行了驗證。但是,由于研究時間有限,本次測試系統在設計上仍然存在一些缺陷,并且有待于進一步改善,比如在訓練數據集上存在的準確率不高及在實際應用中的魯棒性不高等問題。此問題可能需要對前向傳播、反向傳播過程中的損失函數、梯度函數等進行調整,同時加大數據集的數量,采用交叉驗證等訓練方式,取得較好效果的模型。
[1] 何西麟.基于深度學習的手寫體字符識別研究與實現[D].廣州:中山大學,2015.
[2] 黃睿,陸許明,鄔依林.基于Tensor Flow深度學習手寫體數字識別及應用[J].電子技術應用,2018,44(10):6-9.
[3] 徐胤,袁浩巍,李智.基于卷積神經網絡和Tensor Flow的手寫數字識別研究[J].上海電氣技術,2018,11(1):31-34.
[4] 呂紅.基于卷積神經網絡的手寫數字識別系統的設計[J].智能計算機與應用,2019,9(02):54-56+62.
[5] 宋曉茹,吳雪,高嵩,陳超波.基于深度神經網絡的手寫數字識別模擬研究[J].科學技術與工程,2019,19(05):193-196.
[6] 深度學習[M]. 人民郵電出版社, 伊恩·古德費洛;;約書亞·本吉奧;;亞倫·庫維爾, 2017
[7] 機器學習[M]. 清華大學出版社, 周志華,2016
[8]??Neri C G, Villegas O O V, Sánchez V G C, et al. A convolutional neural network for handwritten digit recognition[J]. International Journal of Combinatorial Optimization Problems and Informatics, 2020, 11(1): 97.
[9] ?Y. LeCun, C. Cortes and C. JC Bur, “MNIST handwritten digit database”, AT&T Labs, 2010. Available: http://yann. lecun. com/exdb/mnist 2.
[10] Y. Chajri, B. Bouikhalene, “Handwritten mathematical expressions recognition”, International Journal of Signal Processing, Image Processing and Pattern Recognition, vol. 9, no. 5, p. 69-76, 2016。