李溦 李天宇 李增輝
OCR(Optical Character Recognition,光學(xué)字符識別)是通過檢測字符暗、亮的模式確定它的形狀,然后利用字符識別將形狀翻譯成計算機字符的過程。光學(xué)字符識別是OCR 的核心,然而對于許多類型的機器學(xué)習(xí)算法來說,這種圖像處理都是一項艱巨的任務(wù)。
光學(xué)符號識別原理可分為以下三方面:相關(guān)匹配識別、概率判定準(zhǔn)則、句法模式識別。相關(guān)匹配識別:根據(jù)字符的直接形象,提取簡單特征,利用相關(guān)匹配進行分析識別。這種方法的優(yōu)點是既可以在時間區(qū)域和空間區(qū)域進行,也可以在頻率區(qū)域進行,應(yīng)用廣泛;概率判定準(zhǔn)則:利用文字統(tǒng)計特性中的概率分布,采用概率識別字符的方法;句法模式識別:根據(jù)字符結(jié)構(gòu),用有限文法結(jié)構(gòu),形成形式語句,識別字符。在OCR的發(fā)展進程中,人工神經(jīng)網(wǎng)絡(luò)以及模糊數(shù)學(xué)理論的發(fā)展,推動了OCR技術(shù)的進一步發(fā)展。
本文通過公開的光學(xué)字符數(shù)據(jù)集來進行統(tǒng)計描述,并通過光學(xué)字符數(shù)據(jù)集判斷識別每個字符需要選取哪些恰當(dāng)?shù)奶卣?,建立?shù)學(xué)模型來識別該字符。最后對模型進行評價,用70%的數(shù)據(jù)來學(xué)習(xí)訓(xùn)練模型,30%的數(shù)據(jù)進行驗證測試正確率,并提出推廣。首先,對26個英文字母進行轉(zhuǎn)化處理,分別轉(zhuǎn)化為相應(yīng)的26個數(shù)字,轉(zhuǎn)化之后,利用SPSS軟件對數(shù)據(jù)進行預(yù)處理,剔除了3個無用樣本數(shù)據(jù);其次,建立數(shù)據(jù)統(tǒng)計模型,運用神經(jīng)網(wǎng)絡(luò)算法處理數(shù)據(jù),在利用神經(jīng)網(wǎng)絡(luò)運算的過程中,編寫MATLAB神經(jīng)網(wǎng)絡(luò)算法,將Excel文件中的百分之七十樣本數(shù)據(jù)導(dǎo)入MATLAB程序,對數(shù)據(jù)進行演算推理,從而得出光學(xué)符號數(shù)據(jù)的規(guī)律;最后,在建立模型的過程,可能存在偶然性,所以,還需要利用剩余百分之三十的光學(xué)字符數(shù)據(jù),對模型進行檢驗;然后,根據(jù)檢驗結(jié)果,對所建立的模型進行評價分析,進一步完善模型。
BP神經(jīng)網(wǎng)絡(luò):一種按誤差逆?zhèn)鞑ニ惴ㄓ?xùn)練的多層前饋網(wǎng)絡(luò),屬于目前世界上應(yīng)用最廣泛,前景最好的神經(jīng)網(wǎng)絡(luò)模型。BP神經(jīng)網(wǎng)絡(luò)能夠血液西和存儲大量的輸入與輸出的映射關(guān)系,而且不需要提前揭示描述映射關(guān)系的數(shù)學(xué)方程,并且人工的神經(jīng)網(wǎng)絡(luò)基本結(jié)構(gòu)來源于人腦,具有并行處理特征,并且在計算機的高速運算之下,可以大大的提高數(shù)據(jù)處理以及其他各方面的工作速度,普通計算機功能大都取決于程序中給出的知識和能力,在BP神經(jīng)網(wǎng)絡(luò)的構(gòu)建中,編程處理是十分重要的一個環(huán)節(jié)。
網(wǎng)絡(luò)結(jié)構(gòu)的確定主要就是隱層神經(jīng)元個數(shù)的確定。如果隱層神經(jīng)元的個數(shù)太多會降低網(wǎng)絡(luò)的泛化功能,而且還將會使訓(xùn)練的時間加長,使系統(tǒng)的效率降低;而如果隱層神經(jīng)元個數(shù)太少則就不能達到所規(guī)定的訓(xùn)練誤差。一般可以根據(jù)試算決定,當(dāng)然也可以參考這個公式: ,其中l(wèi)為隱層神經(jīng)元的個數(shù),n與m分別為輸入神經(jīng)元的個數(shù)和輸出神經(jīng)元的個數(shù)。
網(wǎng)絡(luò)初始化的權(quán)值與閾值,可以采用Matlab所提供的初始化函數(shù)newff()來建立一個BP神經(jīng)網(wǎng)絡(luò):
函數(shù)newff是建立一個可訓(xùn)練的前饋網(wǎng)絡(luò)。參數(shù)說明如下:
PR:Rx2的矩陣用來定義R個輸入向量的最大值與最小值;
Si:第i層的神經(jīng)元個數(shù);
TFi:第i層的傳遞函數(shù),默認(rèn)函數(shù)是tansig函數(shù);
BTF:訓(xùn)練函數(shù),默認(rèn)函數(shù)是trainlm函數(shù);
BLF:權(quán)值/閥值學(xué)習(xí)函數(shù),默認(rèn)函數(shù)是learngdm函數(shù);
PF:性能函數(shù),默認(rèn)函數(shù)是mse函數(shù);
net為最新生成的BT神經(jīng)網(wǎng)絡(luò)。
MATLAB軟件提供了很多訓(xùn)練不同的神經(jīng)網(wǎng)絡(luò)的函數(shù),這使得對神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練變得十分簡單,其中,由動量的梯度下降法為代表,訓(xùn)練函數(shù)為traingdx。函數(shù)的結(jié)構(gòu)為:
上式的變量表達與6.3.2中的變量表達意義相同,此處不再多說。當(dāng)網(wǎng)絡(luò)訓(xùn)練達到了最大的訓(xùn)練次數(shù),或者當(dāng)網(wǎng)絡(luò)的誤差平方和小于期望的最小誤差時,那么網(wǎng)絡(luò)就會停止訓(xùn)練
在訓(xùn)練好的網(wǎng)絡(luò)中輸入剩余的樣本,并判斷所給的樣本值與輸出的樣本值是否相等,如果相等的話,那么就說明該神經(jīng)網(wǎng)絡(luò)具有很好的泛化功能,就能夠應(yīng)用于此樣本整體的預(yù)測機選;如果不符的話,就要改動程序,調(diào)整網(wǎng)絡(luò),或者也可以加大樣本的訓(xùn)練數(shù),對該網(wǎng)絡(luò)再次訓(xùn)練。此過程可以采用Matlab 中的sim()函數(shù)來實現(xiàn)。Sire的表達式是:A=sire(net,P),其中,A為輸出數(shù)據(jù),P為輸入的樣本數(shù)據(jù),其他的參數(shù)意義與之前一樣。當(dāng)然,此過程還可以運用傳遞函數(shù)分布來分步實現(xiàn),不過介于本題運用神經(jīng)網(wǎng)絡(luò)來解答,在此就不必多說了。
通過訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)和所采用的函數(shù)進行模擬訓(xùn)練,輸入數(shù)據(jù)P是要預(yù)測的輸入數(shù)據(jù),輸出數(shù)據(jù)A就是要得到的預(yù)測數(shù)據(jù),之后與所給結(jié)果進行對比,得出結(jié)論。最后也可以對網(wǎng)絡(luò)進行保存,以便以后的運用與對比。
根據(jù)題意,我們將所給附件的前14000樣本運用MATLAB軟件進行運算,在此過程中,可以分為以下幾步:
1、由于數(shù)據(jù)較多,不能直接輸入,我們就將數(shù)據(jù)通過Excel導(dǎo)入到MATLAB中,此文件可在附件中看到,具體代碼如下:
num1=xlsread('test 123.xls','Sheet2','A2:Q20001');
input_train=num1(1:14000,2:17)';
output_train=num1(1:14000,1)';
input_test=num1(14000:20000,2:17)';
2、將樣本數(shù)據(jù)進行歸一化處理:
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);
3、初始化網(wǎng)絡(luò)結(jié)果,設(shè)置參數(shù),帶入數(shù)據(jù)對網(wǎng)絡(luò)進行訓(xùn)練。
epochs是設(shè)置的迭代次數(shù);lr是設(shè)置的學(xué)習(xí)率;goal是設(shè)置的目標(biāo)值。
net=newff(inputn,outputn,5);
net,trainParam.epochs=10000;
net.trainParam.lr=0.001;
net.trainParam.goal=0.0000004;
net=train(net,inputn,outputn);
4、設(shè)置好參數(shù),將預(yù)測數(shù)據(jù)進行歸一化處理,然后將預(yù)測結(jié)果輸出,并將輸出結(jié)果進行反歸一化處理,
inputn_test=mapminmax('apply',input_test,inputps);
an=sim(net,inputn_test);
BPoutput+mapminmax('reverse',an,outputps);
從MATLAB的運行結(jié)果可以看出,根據(jù)前70%的數(shù)據(jù)訓(xùn)練出來的神經(jīng)網(wǎng)絡(luò),將剩余30%的數(shù)據(jù)代入求解,發(fā)現(xiàn)與所給數(shù)據(jù)擬合度相當(dāng)高,從而可以得出此模型建立的正確性,但其中的某些數(shù)據(jù)還不能夠準(zhǔn)確得出,說明該模型還不夠完美,還需做更多的數(shù)據(jù)處理來對模型進行改進。
BP算法理論具有可靠、嚴(yán)謹(jǐn)、精度高、通用性好等優(yōu)點,但是標(biāo)準(zhǔn)的BP算法存在以下的缺點:收斂的速度慢;很容易陷入局部的極小值;難以確定隱層數(shù)和隱層節(jié)點的個數(shù)。因此出現(xiàn)了很多改進的算法。
本文只對大家介紹利用動量法改進BP算法。標(biāo)準(zhǔn)的BP算法實質(zhì)上是一種簡單的最速下降的靜態(tài)尋優(yōu)方法,在修正W(K)時只是按照第K步的負(fù)梯度方向進行修正,但沒有考慮到以前的積累經(jīng)驗,也就是以前時刻的梯度方向,從而經(jīng)常使學(xué)習(xí)過程發(fā)生振蕩,收斂緩慢。動量法權(quán)值調(diào)整算法的具體做法是:將上一次權(quán)值調(diào)整量的一部分迭加到本次誤差計算所得的權(quán)值調(diào)整量上,作為本次的實際權(quán)值調(diào)整。
(作者單位:1.華北理工大學(xué)電氣四班;
2.華北理工大學(xué)電氣三班)