%本程序用BP神经网络实现对十六进制数字的识别
clear all
nntwarn off;
disp(' 本程序用BP神经网络实现对十六进制数字的识别。');
disp(' 首先将进行数字化处理并建立BP神经网络。');
disp(' 请按任意键开始执行本程序。');
pause
%将每个数字进行数字化处理
number0 = [0 1 1 1 0,1 0 0 0 1,1 0 0 0 1,1 0 0 0 1,1 0 0 0 1,1 0 0 0 1,0 1 1 1 0];
number1 = [0 0 1 0 0,0 0 1 0 0,0 0 1 0 0,0 0 1 0 0,0 0 1 0 0,0 0 1 0 0,0 0 1 0 0];
number2 = [0 1 1 1 0,1 0 0 0 1,0 0 0 0 1,0 0 0 1 0,0 0 1 0 0,0 1 0 0 0,1 1 1 1 1];
number3 = [0 1 1 1 0,1 0 0 0 1,0 0 0 0 1,0 0 1 1 0,0 0 0 0 1,1 0 0 0 1,0 1 1 1 0];
number4 = [1 0 0 1 0,1 0 0 1 0,1 0 0 1 0,1 0 0 1 0,1 1 1 1 1,0 0 0 1 0,0 0 0 1 0];
number5 = [1 1 1 1 1,1 0 0 0 0,1 0 0 0 0,1 1 1 1 0,0 0 0 0 1,1 0 0 0 1,0 1 1 1 0];
number6 = [0 1 1 1 0,1 0 0 0 1,1 0 0 0 0,1 1 1 1 0,1 0 0 0 1,1 0 0 0 1,0 1 1 1 0];
number7 = [1 1 1 1 1,0 0 0 0 1,0 0 0 1 0,0 0 1 0 0,0 0 1 0 0,0 0 1 0 0,0 0 1 0 0];
number8 = [0 1 1 1 0,1 0 0 0 1,1 0 0 0 1,0 1 1 1 0,1 0 0 0 1,1 0 0 0 1,0 1 1 1 0];
number9 = [0 1 1 1 0,1 0 0 0 1,1 0 0 0 1,0 1 1 1 1,0 0 0 0 1,1 0 0 0 1,0 1 1 1 0];
number10 = [0 0 1 0 0,0 1 0 1 0,0 1 0 1 0,1 0 0 0 1,1 1 1 1 1,1 0 0 0 1,1 0 0 0 1];
number11 = [1 1 1 1 0,1 0 0 0 1,1 0 0 0 1,1 1 1 1 0,1 0 0 0 1,1 0 0 0 1,1 1 1 1 0];
number12 = [0 1 1 1 0,1 0 0 0 1,1 0 0 0 0,1 0 0 0 0,1 0 0 0 0,1 0 0 0 1,0 1 1 1 0];
number13 = [1 1 1 1 0,1 0 0 0 1,1 0 0 0 1,1 0 0 0 1,1 0 0 0 1,1 0 0 0 1,1 1 1 1 0];
number14 = [1 1 1 1 1,1 0 0 0 0,1 0 0 0 0,1 1 1 1 0,1 0 0 0 0,1 0 0 0 0,1 1 1 1 1];
number15 = [1 1 1 1 1,1 0 0 0 0,1 0 0 0 0,1 1 1 1 0,1 0 0 0 0,1 0 0 0 0,1 0 0 0 0];
number = [number0;number1;number2;number3;number4;number5;number6;number7;...
number8;number9;number10;number11;number12;number13;number14;number15]';
disp(' 数字化处理过程顺利结束(用5×7矩阵)。');
%建立BP神经网络并初始化
targets = eye(16);
P=number; %数字输入矩阵
T=targets; %目标矢量
S1=10; %隐含层个数
[R,Q]=size(number);
[S2,Q]=size(targets);
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;
disp(' BP神经网络已经建立,下面准备训练网络。');
disp(' 网络的训练分为无噪声训练和有噪声训练。');
disp(' 请按任意键开始训练BP神经网络。');
pause
%进行无噪声训练
P=number;
T=targets;
net.performFcn='sse';
net.trainParam.goal=0.01;
net.trainParam.show=10;
net.trainParam.epochs=5000;
net.trainParam.mc=0.95;
[net,tr]=train(net,P,T);
%进行有噪声训练
netn=net;
net.trainParam.goal=0.06;
net.trainParam.epochs=600;
T=[targets targets targets targets];
%重复训练10次
for pass=1:10
P=[number,number,...
(number+randn(R,Q)*0.1),...
(number+randn(R,Q)*0.2)];
[netn,tr]=train(netn,P,T);
end
%再次进行无噪声训练
P=number;
T=targets;
net.performFcn='sse';
net.trainParam.goal=0.01;
net.trainParam.show=10;
net.trainParam.epochs=500;
net.trainParam.mc=0.95;
[net,tr]=train(net,P,T);
disp(' 网络训练结束,下面测试网络容错性。');
disp(' 请等待一会儿,并注意看测试结果图。');
%测试网络的容错性
noise_range=0:0.05:0.5;
max_test=100;
T=targets;
for i=1:11
noise_level(i)=noise_range(i);
errors1(i)=0;
errors2(i)=0;
for j=1:max_test
P=number+randn(35,16)*noise_level(i);
%测试未经误差训练的网络
A=sim(net,P);
AA=compet(A);
errors1(i)=errors1(i)+sum(sum(abs(AA-T)))/2;
%测试经过误差训练的网络
An=sim(netn,P);
AAn=compet(An);
errors2(i)=errors2(i)+sum(sum(abs(AAn-T)))/2;
end;
end;
figure
plot(noise_range,errors1*100,'r--',noise_range,errors2*100);
title('不同训练情况下的网络识别误差');
xlabel('噪声指标');
ylabel('无噪声训练网络 - 有噪声训练网络---');
disp(' 网络容错性测试结束。');
disp(' 按任意键开始数字识别实际测试。');
pause
%对实际含噪声的数字进行识别
for index=1:16
noisyJ=number(:,index)+randn(35,1)*0.2;
figure;
plotchar(noisyJ);
A2=sim(net,noisyJ);
A2=compet(A2);
answer=find(compet(A2)==1);
figure;
plotchar(number(:,answer));
end;
disp(' 程序运行结束,谢谢!');
BP.rar_BP 手写数字_BP手写数字_matlab bp 手写_手写数字_数字 神经
版权申诉
177 浏览量
2022-07-15
10:44:15
上传
评论
收藏 83KB RAR 举报
小波思基
- 粉丝: 74
- 资源: 1万+