一、 概述
在人工智能的影响下,机器学习和深度学习也重新掀起了一股热潮。目前人工智能包含语音识别、自然语音处理、计算机视觉、机器学习四大部分[1,2]。其中机器学习是人工智能发展最快的分支之一。
计算机技术和网络技术的发展,大量的数字信息在进行处理之前需要通过一定的方式采集到计算机之中,如信件上的邮政编码,银行各种票据上的数字信息,试卷上的准考证号,物流行业中手写快递单据等手写数字的录入等都可通过手写体数字识别技术来进行识别,提高效率,节省了人力。手写数字识别方法从原理上大致可以分为基于统计特征分类、基于结构特征分类、基于神经网络三大类算法[3.4]。笔者主要针对BP神经网络在手写数字识别方面的技术进行了matlab实现。
二、运行结果
部分代码:
function mytrain(trainSet,trainSet_d,validationSet,validationSet_d) %MYTRAIN用于训练BP神经网络 global w1 w2 epochs goal max_fail sigma validation fail = 0; %当前失败次数 count = 0; %当前迭代次数 sigma = zeros(1); %训练集的误差 validation = zeros(1); %验证集的误差 trainSet_N = size(trainSet,2); validationSet_N = size(validationSet,2); while count<epochs %进行规定次数的迭代 %对全部样本进行遍历,更新权值 i=1; while i<=trainSet_N input = trainSet(:,i); expect_d = trainSet_d(:,i); i=i+1; bp(input,expect_d); end count=count+1; %迭代次数加1 %计算训练集的当前误差 hidden = w1*trainSet; hidden = sigmf(hidden,[1 0]); o = w2*hidden; o = sigmf(o,[1 0]); e = trainSet_d-o; sum = 0; for num = 1:trainSet_N E = e(:,num); sum = sum+E.'*E; end sigma(count) = sum/2; %运行过程可视化 sprintf('第%d次迭代,误差为%f',count,sigma(count)) %判断是否已达到目标误差,若是,退出迭代过程 if sigma(count) <= goal sprintf('Goal is reached!') break end %计算验证集误差 v_hidden = w1*validationSet; v_hidden = sigmf(v_hidden,[1 0]); v_o = w2*v_hidden; v_o = sigmf(v_o,[1 0]); v_e = validationSet_d-v_o; v_sum = 0; for v_num = 1:validationSet_N v_E = v_e(:,v_num); v_sum = v_sum+v_E.'*v_E; end validation(count) = v_sum/2; %判断验证集误差是否连续上升 if count ~= 1 if validation(count) > validation(count-1) fail = fail+1; else fail = 0; end end %备份验证误差上升前的权值 if fail == 0 best_w1 = w1; best_w2 = w2; end %判断误差是否连续上升若干次迭代,若是则停止训练 if fail >= max_fail w1 = best_w1; w2 = best_w2; sprintf('Validation stop.') break end
end
完整代码:神经网络的手写数字识别
三、参考文献
[1]许朋.基于BP神经网络的手写数字识别[J].科技视界,2020(11):51-53.DOI:10.19694/j.cnki.issn2095-2457.2020.11.019.