基于BP人工神经网络的手写英文字符识别

0 前言

    基于Matlab-R2009a实现BP神经网络来训练和识别26个英文字母。

1 程序

    alphabet_train.m如下所示:

clear
clc
[alphabet,targets]=prprob; %alphabet=35x26
S1=10;  % S1,第一层的神经元个数为10
[R,Q]=size(alphabet);
[S2,Q]=size(targets); % S2,第二层的神经元个数为S2
P=alphabet;

% [1] 构建BP网络
net=newff(minmax(P),[S1,S2],{'logsig','logsig'},'traingdx');
net.LW{2,1}=net.LW{2,1}*0.01; % 调整第二层的权值
net.b{2}=net.b{2}+0.01;       % 调整第二层的阈值

% [2] 无噪声训练
T=targets;
net.performFcn='sse';       % 性能函数,误差平方和
net.trainParam.goal=0.1;
net.trainParam.show=20;
net.trainParam.epochs=5000; % 训练次数
net.trainParam.mc=0.95;     % 附加动量 
[net,tr]=train(net,P,T);

% [3] 有噪声训练,两组没有噪的输入,两组有噪声的输入
netn=net;
netn.trainParam.goal=0.6;% 性能目标值
netn.trainParam.epochs=300;% 训练的最大次数
T=[targets targets targets targets];
for pass=1:10   %重复10次训练
        P=[alphabet,alphabet,(alphabet+randn(R,Q)*0.1),(alphabet+randn(R,Q)*0.2)];
        [netn,tr]=train(netn,P,T);
end

% [4] 再次无噪声训练
netn.trainParam.goal=0.1;  % 性能目标值
netn.trainParam.epochs=500;% 训练的最大次数
netn.trainParam.show=5;
P=alphabet;
T=targets;
[netn,tr]=train(netn,P,T);

% [5] 系统性能,绘制网络识别错误与噪声信号关系曲线
noise_range=0:0.05:.5;
max_test=100;
network1=[];
network2=[];
T=targets;
for noiselevel=noise_range
    errors1=0;
    errors2=0;
    for i=1:max_test
        P=alphabet+randn(35,26)*noiselevel;
        A=sim(net,P);   %经过无噪声训练的网络
        AA=compet(A);
        errors1=errors1+sum(sum(abs(AA-T)))/2;
        An=sim(netn,P); %经过有噪声训练的网络
        AAn=compet(An);
        errors2=errors2+sum(sum(abs(AAn-T)))/2;
    end
    network1=[network1 errors1/26/100];
    network2=[network2 errors2/26/100];
end
plot(noise_range,network1*100,'--',noise_range,network2*100);
xlabel('noise indecator');
ylabel('no-noise net -- noise net-');
legend('no-noise net','noise net');

2 训练

 

    运行上述程序查看识别错误与噪声信号的关系:

(1)第一次运行

 

(2)第二次运行

(3)第三次运行

(4)对比分析

       由上面的3次结果可知,每次都存在着差异。这主要是由于每次运行时产生的随机值都是不一样的。

另外,就算每次训练的输入向量都是一样的,但是训练过程中也会产生不同的结果。

       在图中可见,当噪声小于0.05的时候,两个网络的识别错误率是一样的。当噪声增加时,经过噪声训练的网比没有经过噪声训练的网的识别错误率要低,而且噪声越大,两者之间的差距就越明显。

3 仿真

    alphabet_recognise.m实现利用上述训练好的网络进行识别,具体略。

参考资料

[1]基于BP人工神经网络的数字字符识别及MATLAB实现

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OneSea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值