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

📄 matlab bp网络进行特征识别.txt

📁 MATLAB绘制出权值wv和阀值bv确定的误差曲面
💻 TXT
字号:
BP网络进行特征识别2007/06/03 00:04设计一个网络并训练它来识别字母表中的26个字母.输入层需要5*7个神经元,输出层需要26个神经元.

%网络初始化
clear;
[alphabet,targets] = prprob;
[R,Q]=size(alphabet);
[S2,Q]=size(targets);
S1=10;
P=alphabet;
%log-sigmoid函数的输出范围是0到1,.traingdx带动量及自调整lr(Adaptive learning rate)回传的梯度递减
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;    
% 网络训练参数设置
T=targets;
%Sum squared error (总方差)性能函数
net.performFcn='sse'; 
%TRAIN calls the function indicated by NET.trainFcn, using the training parameter values indicated by NET.trainParam.
net.trainParam.goal=0.1;  
net.trainParam.show=20;
net.trainParam.epochs=5000;
net.trainParam.mc=0.95;
%使用无噪声的信号对网络进行训练,net修正后的网络, tr训练记录
[net,tr]=train(net,P,T);   

netn=net;
netn.trainParam.goal=0.6;
netn.trainParam.epochs=300;
T=[targets targets targets targets];
%pause;
%设置向字母表象向量加入的噪声信号的平均值分别为0.1和0.2,使网络对输入向量有一定的容错能力.
for pass=1:10
%for pass=1:2
     P=[alphabet,alphabet,(alphabet + randn(R,Q)*0.1),(alphabet + randn(R,Q)*0.2)];
     [netn,tr]=train(netn,P,T);
     %pause
end

%为了保证网络总是能够正确地对理想输入信号进行分类,需要再一次用无噪声的理想信号对网络进行训练
P=alphabet;
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);
%pause;
noise_range=0:0.05:0.5;
max_test=100;
T=targets;
for i=1:11
     noiselevel(i)=noise_range(i);
     errors1(i)=0;
     errors2(i)=0;
     for j=1:max_test
        P=alphabet+randn(35,26)*noiselevel(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
%pause
figure
plot(noise_range,errors1*100,'--',noise_range,errors2*100);
title('识别错误率');
xlabel('噪声指标');
ylabel('未经误差训练的网络 - -    经过误差训练的网络---');
%对实际噪声的字母进行识别
for index=1:5:26
     noisyJ=alphabet(:,index)+randn(35,1)*0.2;
     figure;
     plotchar(noisyJ);
     A2=sim(net,noisyJ);
     A2=compet(A2);
     answer=find(compet(A2)==1);
     figure;
     plotchar(alphabet(:,answer));
end        


 

⌨️ 快捷键说明

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