untitled2.asv

来自「Matlab应用实例一百个」· ASV 代码 · 共 113 行

ASV
113
字号
%神经网络进行字符识别
close all
clear
echo on 
clc
%用BP神经网络进行英文字符识别
%NEWFF——生成一个新的前向神经网络
%TRAIN——对神经网络进行训练
%SIM——对神经网络进行仿真
pause  % 敲任意键开始
clc
%载入训练样本
[alphabet,targets]=prprob
[R1,Q1]=size(alphabet)
[R2,Q2]=size(targets)
pause
clc
%生成神经网络
S1=10
S2=R2
net=newff(minmax(alphabet),[S1 S2],{'logsig' 'logsig'},'traingdx');
net.LW{2,1}=net.LW{2,1}*0.01;
pause
clc
%训练神经网络
%1.用理想样本训练神经网络
P=alphabet;
T=targets;
%net.performFcn='see';
net.trainParam.goal=0.1;
net.trainParam.show=20;
net.trainParam.epochs=5000;
net.trainParam.mc=0.095;
[net,tr]=train(net,P,T);
pause
clc
%2.用喊有不同程度噪声的样本训练神经网络
netn=net;
netn.trainParam.goal=0.6;
netn.trainPAram.epochs=300;
T=[targets targets targets targets];
for pass=1:10
    fprintf('Pass=%.0f\n',pass);
    P=[alphabet,alphabet,(alphabet+randn(R1,Q1)*0.1),(alphabet+randn(R1,Q1)*0.2)];
    [netn,tr]=train(netn,P,T);
    echo off
end
echo on
pause
%3.再次用理想样本训练神经网络
netn.trainParam.goal=0.1;
netn.trainParam.epochs=500;
netn.trainParam.show=5;
P=alphabet;
T=targets;
 [netn,tr]=train(netn,P,T);
 %训练结束
pause
clc
%对识别网络进行测试
%设置测试参数
noise_range=0:0.05:5;  %噪声均方差
max_test=100;
network1=[];%网络1的误识率
network2=[];%网络2的误识率
%进行网络仿真和测试
for noiselevel=noise_range
    fprintf('Testing network with noise level of %.2f.\n',noiselevel);
    errors1=0;
    errors2=0;
    for i=1:max_test
        P=alphabet+randn(35,26)*noiselevel;
        %测试网络1
        A=sim(net,P);
        AA=compet(A);
        errors1=errors1+sum(sum(abs(AA-T)))/2;
        %测试网络2
         An=sim(net,P);
        AAn=compet(An);
        errors2=errors2+sum(sum(abs(AAn-T)))/2;
        echo off
    end
    network1=[network1 errors1/26/100];
     network2=[network2 errors2/26/100];
 end
 echo on
     pause   %敲任意键绘制测试结果曲线——误识率曲线
       clc
       %绘制网络误识率曲线
       plot(noise_range,network1*100,'--',noise_range,network2*100);
       title('Percentage of Recognition Errors(%)');
      ('Noise Level');
      
      
      ('Network1--  network2---');
       pause
       clc
       %一个测试实例
       %生成一个喊噪声的字母B作为网络输入
noisyB=alphabet(:,2)+randn(35,1)*0.2;
%绘制含噪声的字母B的位图
plotchar(noisyB);
pause
clc
%对输入模式进行识别
A2=sim(netn,noisyB);
A2=compet(A2)
answer=find(alphabet(A2)==1);
%绘制识别结果对应的模式位图
plotchar(alphabet(:,answer));
pause
echo off

⌨️ 快捷键说明

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