郭沛延,王中流,王巖,蘭騰凱
(沈陽理工大學(xué)裝備工程學(xué)院,遼寧沈陽,110000)
近年來,隨著信息技術(shù)的飛速發(fā)展,出現(xiàn)了各種應(yīng)用系統(tǒng)。Python是一種面向?qū)ο蟮挠嬎銠C語言。盡管它有超過10年的發(fā)展歷史,但由于其豐富而強大的庫,逐步走向成熟和穩(wěn)定。作為一種文字語言,它具有非常簡單易懂的語法特征。它不僅適合執(zhí)行各種復(fù)雜的任務(wù),而且可以在幾乎所有的操作系統(tǒng)中工作,具有一次性編譯和從任何地方啟動的全部特征。此外,Python有一個非常強大的庫,包含了幾乎所有的標準函數(shù),只需根據(jù)需要對其進行更改。因此,它非常適合作為一個研究人員和初學(xué)者程序員。近年來,工業(yè)、航天、軍事、醫(yī)療等領(lǐng)域?qū)D像處理提出了更高的要求。大多數(shù)在生活或工程應(yīng)用中使用的圖像都是數(shù)字圖像。數(shù)字圖像能夠使用數(shù)字陣列等方式來進行表示,陣列當中的元素被稱為像素,像素點是使用二進制代碼來進行表示的。隨著信息技術(shù)的發(fā)展,圖像變得越來越清晰,圖像處理量越來越大,處理速度越來越慢。開發(fā)可以顯著提高處理速度,因此Python是滿足需求的語言之一。此外,可以直接生成具有許多優(yōu)秀庫的Python語言,也可以通過簡單的修改有效地補充各種需求。
深度學(xué)習(xí)是在人工神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上發(fā)展起來的一種呈現(xiàn)訓(xùn)練的方法,也是人工智能領(lǐng)域最有前途的內(nèi)容,以各種深度神經(jīng)網(wǎng)絡(luò)為主要模型。據(jù)相關(guān)資料顯示,深度訓(xùn)練是近年來機械學(xué)習(xí)中增長最快的領(lǐng)域,也是最流行的技術(shù)方向。深度學(xué)習(xí)的層次結(jié)構(gòu)可以從簡單概念和高級抽象函數(shù)表示的組合中提取教訓(xùn),這使計算機真正有能力理解世界。
Python是一種功能強大的編程語言。它在計算機的許多領(lǐng)域都有廣泛的應(yīng)用,特別是在數(shù)據(jù)科學(xué)領(lǐng)域,功能非常出色,是其他語言無法比擬的。因此,隨著圖像數(shù)據(jù)分析的不斷發(fā)展,它已經(jīng)成為數(shù)據(jù)分析領(lǐng)域首選的編程語言。
圖像數(shù)據(jù)分析是使用數(shù)學(xué)和計算機正確處理和發(fā)展收集的數(shù)據(jù)來檢測數(shù)據(jù)規(guī)律的過程。隨著數(shù)據(jù)科學(xué)的發(fā)展,出現(xiàn)了新的數(shù)據(jù)處理方法,計算機處理數(shù)據(jù)的能力不斷增長,被處理的數(shù)據(jù)量也不斷增加。利用圖像數(shù)據(jù)分析方法可以改進收集到的各種形式的數(shù)據(jù),從數(shù)據(jù)中檢測出規(guī)律,并利用檢測出的規(guī)律來預(yù)測數(shù)據(jù)的趨勢,從而幫助人們采取生產(chǎn)或其他解決方案。
使用矢量支持產(chǎn)品和多種版本的神經(jīng)網(wǎng)絡(luò)算法實現(xiàn)手寫數(shù)字識別。該實驗基于卷積神經(jīng)網(wǎng)絡(luò),用GPU來訓(xùn)練模型。若使用CPU來訓(xùn)練,將增加訓(xùn)練的復(fù)雜性和時間,而圖像分析則使用PIL和theano庫來完成。
本系統(tǒng)采用Python語言表達科學(xué)計算庫NUMPY的神經(jīng)網(wǎng)絡(luò)算法,并使用開放源代碼的圖像處理庫將圖像語法轉(zhuǎn)換成神經(jīng)網(wǎng)絡(luò)所需的適當格式。在代碼開發(fā)方面,嘗試封裝算法和數(shù)據(jù)源類。對系統(tǒng)中對手書寫的圖像進行數(shù)字識別,對分析輸入數(shù)據(jù)進行評估,計算系統(tǒng)識別率,根據(jù)數(shù)字識別率進行LeNet5卷積神經(jīng)網(wǎng)絡(luò)的識別。
通過一組非線性映射的實例,說明了對多層網(wǎng)絡(luò)進行多層網(wǎng)絡(luò)訓(xùn)練和梯度下降訓(xùn)練的能力可以用于復(fù)雜的圖像識別任務(wù)。本文提出手寫圖像的整體多層卷積網(wǎng)絡(luò)主要包括三個層次:輸入層、隱藏層和輸出層。
圖1 系統(tǒng)結(jié)構(gòu)圖
輸入層主要是將神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)進行輸入,通過設(shè)置MNIST數(shù)據(jù),需要進行兩個部分代碼的排序工作。第一步是對于MNIST數(shù)據(jù)的本地加載進行確認,并確定其是否在代碼目錄當中,如果沒有MNIST數(shù)據(jù)的相關(guān)目錄,程序?qū)M行自動下載,獲得數(shù)據(jù)集。當對應(yīng)的目錄當中已經(jīng)有MNIST數(shù)據(jù)的格式,本地數(shù)據(jù)集就會進行加字,從而降低網(wǎng)絡(luò)成本與時間成本。第二步,加載MNIST數(shù)據(jù)集會獲得train_set、valid_set和test_set數(shù)據(jù),使用python的gzip中函數(shù)和CPickle中的函數(shù),并包含了label文本。之后,在theano數(shù)據(jù)庫中將數(shù)據(jù)設(shè)置成sharedvariables形式,這樣能夠為后續(xù)的GPU加速奠定基礎(chǔ)。因為將sharedvariables存到GPUmemory中GPU里數(shù)據(jù)類型只能是float,最后能夠轉(zhuǎn)換為int返回,這樣GPU加速的訓(xùn)練時間就會降低。
隱藏層的第一層為卷積層,設(shè)置了20個卷積核,各層卷積層的計算公式如下:
全聯(lián)接層為第二層,可讀取層域中最大象素,防止過擬合,減少權(quán)值量。二層卷積層為第三層,池化層對第四層進行降采樣操作。用 maxpooling從頂層卷積層中輸出的數(shù)據(jù)降采樣。這個隱層是第五層,即全連通層。輸出層為預(yù)測值。
對于這個結(jié)構(gòu)的一般設(shè)計,學(xué)習(xí)初期的學(xué)習(xí)率是0.1,即在隨機梯度前的系數(shù),學(xué)習(xí)步數(shù)為200,每一次訓(xùn)練都要看全部樣本。在500個樣本之后,計算梯度,更新參數(shù),因此包數(shù)為500。卷積的輸入是4 D,數(shù)據(jù)需要轉(zhuǎn)換。該卷積層的第一層尺寸為28*28。在進入卷積層后,通過內(nèi)積獲得24*24數(shù)據(jù),池化 Maxpooling接收12*12個數(shù)據(jù)。每一包包含500幅圖畫,第一卷積層有20卷的積核,其結(jié)果是(500,20,4,4)次之為卷積層和池化層,函數(shù)圖為12*12,內(nèi)積后為8*8,以及隨后的池 maxpooling完成4*4。這個卷積層有50個卷積核,結(jié)果是(500,50,4,4)。接下來是隱藏層,即數(shù)據(jù)經(jīng)卷積合并后的2維形式。利用卷積核對同一圖象進行卷積,將該特征映射到前一層的特征圖中,合并為一維矢量。輸出大小(500,500)。上一次使用了分類層,并使用定義在logistic回歸回歸。邏輯回歸梯度下降公式:
此層的輸出為(500,500)。
系統(tǒng)的訓(xùn)練流程圖如圖2。
圖2 系統(tǒng)訓(xùn)練流程圖
利用MNIST數(shù)據(jù)集,該數(shù)據(jù)集中了一些優(yōu)秀的開放源碼數(shù)據(jù)開發(fā)人員,它們在轉(zhuǎn)換時無需清理。并可將圖像轉(zhuǎn)換成數(shù)據(jù)格式,以PIL庫和theano庫等搭配作為參考轉(zhuǎn)換。在MNIST程序中,MNIST提供了兩種裝入 MNIST數(shù)據(jù)集的方法:第一種是裝入本地 MNIST數(shù)據(jù)集,然后直接在下載入 MNIST數(shù)據(jù)集。這個模塊只用于裝載數(shù)據(jù)集和轉(zhuǎn)換數(shù)據(jù)格式。
整個訓(xùn)練采用的是LeNet5模式,因此采用了它的隱層結(jié)構(gòu)進行訓(xùn)練??傮w設(shè)計有三個卷積層,分別為C1、C3、C5,在C1和C2卷積層后面有一層下采樣層,用于降低維度,S2和S4層是下采樣層。
卷積和采樣通常被認為是一個整體。選擇層通常在卷積層后連接。所述卷積過程包括:對輸入圖像進行裁剪,每次檢測圖像,提取相應(yīng)的卷積。每一卷積僅關(guān)注檢索的特征。在數(shù)學(xué)上,對數(shù)字圖像進行剪裁,然后計算整個圖像。子樣本采集過程包括:子樣采集過程中,還減少了處理圖像像素所需的像素尺寸,減小按層參數(shù)設(shè)計的權(quán)重,再通過子樣采集層的加權(quán)運算和附加偏移量,生成相應(yīng)尺寸的特征圖??紤]將下采層作為一個模糊濾波,二次提取特征向量。要準確地提取特征信息,層深度越深,空間分辨率越低。
C3中每一個特征映射都包含20個或20個以上的特征。S2中每一個特征映射都沒有直接與C3中的每個特征映射聯(lián)系起來。因為直連會破壞網(wǎng)絡(luò)對稱性。由于每個特性映射的輸入不同,因此需要檢索不同的特性。
RBF參數(shù)向量用于F6層目標向量。為了避免 sigmoid函數(shù)飽和,需要指出這些矢量是+1還是-1,它在F6的sigmoid范圍內(nèi)。實際上,+1和-1是 sigmoid函數(shù)的最大彎曲值。使F6單元工作在最大非線性條件下。sigmoid函數(shù)的飽和會導(dǎo)致收斂速度變慢,使損失函數(shù)變差。
運行界面打開,點擊“選取圖片”按鈕,加載所需要識別的圖像,加載后的界面如圖3所示。
圖3 加載圖像后界面
選擇識別,系統(tǒng)就會得出相關(guān)結(jié)果,如圖4所示。
圖4 識別結(jié)果圖
本文分析了Le Net5神經(jīng)網(wǎng)絡(luò)調(diào)整后的識別率對比,對相同的MNIST數(shù)據(jù)集運行其它算法,對數(shù)字識別的誤碼率進行比較,找出優(yōu)缺點。在此基礎(chǔ)上,對所選模型進行改進,并選取相應(yīng)的測試數(shù)據(jù)集。