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