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

📄 matlab十六进制数字识别源码.txt

📁 用BP神经网络实现对十六进制数字的识别。
💻 TXT
字号:
设计一个两层BP神经网络,并训练它来识别0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F这16个十六进制数字,每个数字对应一个7×5的布尔量网格。 
%程序开始
%将每个数字进行数字化处理
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]';
targets = eye(16);
%建立BP神经网络并初始化
nntwarn off;
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;
%进行无噪声训练
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];
for pass=1:10        %重复训练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);
%测试网络的容错性
noise_range=0:0.05:0.5;    T=targets;
max_test=100;    
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('无噪声训练网络-   有噪声训练网络---');
%对实际含噪声的数字进行识别
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;
%程序结束

⌨️ 快捷键说明

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