⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bpnetwork_recognition.m

📁 BP神经网络的识别过程
💻 M
字号:
%两层BP网络,35个输入端,输出层26个神经元,隐层和输出层
%的传递函数均为logsigmoid, 输出量在0-1之间,恰好满足输出
%布尔值的要求。隐层含10个神经元,神经元数目的选择是依据经
%和猜测而定。实际训练中,若训练过程不理想,可以适当增加
%隐层神经元数目
%训练网络就是要是其输出向量正确代表字母向量。而噪声的引入
%可能导致不精确的输出,通过竞争传递函数compet训练,能保证
%正确识别带噪声的字母向量


%首先生成代表26个字母布尔值的样本数据
[alphabet,targets]=prprob; %prprob: character recognition problem definition
[R,Q]=size(alphabet);%alphabet-35*26matrix of 5*7 bit maps for each letter
[s2,Q]=size(targets); %targets-26*26 target vectors
s1=10;  %隐层神经元数目
p=alphabet;
%用newff生成bp网络
net=newff(minmax(p),[s1,s2],{'logsig','logsig'},'traingdx');% traingdx-动量
%和自适应lr的梯度下降法
net.LW{2,1}=net.LW{2,1}*0.01;
net.b{2}=net.b{2}*0.01;

%为使网络对输入向量有一定的容错能力,先使用理想信号,再用理想+噪声信号进行训练
%无噪声训练
t=targets;
%net.performFcn='see';
net.trainParam.goal=0.1; %训练精度
net.trainParam.show=20;% 显示训练迭代过程,NaN为不显示
net.trainParam.epochs=5000;%最大训练次数
net.trainParam.mc=0.95;%动量因子,
[net,tr]=train(net,p,t);

%有噪声训练
%
netn=net;
netn.trainParam,goal=0.6;
netn.trainParam.epochs=300;
t=[targets targets targets targets];
for pass=1:10
    p=[alphabet,alphabet,...
        (alphabet+randn(R,Q)*0.1),...
        (alphabet+randn(R,Q)*0.2)];
    [netn,tr]=train(netn,p,t);
end
% 
% %再次无噪声训练,是为了是网络进行理想信号识别时,节省资源
netn.trainParam.goal=0.1;
netn.trainParam.epochs=500;
net.trainParam.show=5;
p=alphabet;
t=targets;
[netn,tr]=train(netn,p,t);
% 
% %系统性能测试,分别用100个不同的噪声信号进行试验
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
figure;
plot(noise_range,network1*100,'--',noise_range,network2*100);
title('识别误差');
xlabel('噪声指标');
ylabel('无噪声训练网络-  有噪声训练网络--');
% 
% 
% %字母识别
noiseJ=alphabet(:,1)+randn(35,1)*0.2; %识别字母A
figure;
plotchar(noiseJ);


a2=sim(net,noiseJ);
a2=compet(a2);
answer=find(compet(a2)==1);
figure;
plotchar(alphabet(:,answer));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -