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

📄 cha_rec.m

📁 我们上课的资料
💻 M
字号:
% 用BP网络进行字符识别的例子
% 网络生成
[alphabet,targets]=prprob;                      % Character recognition problem definition
S1=10;                                          % 定义隐层神经元数目
[R, Q]= size(alphabet);                         % 获取输入变量数
[S2,Q]=size(targets);                           % 获取输出变量数
P=alphabet;                                     % P为输入矩阵
net= newff(minmax(P),[S1 S2],{'logsig' 'logsig'},'traingdx');   % 生成BP网络
net.LW{2,1}= net.LW{2,1}*0.01;                  % 调整输出层权值
net.b{2}= net.b{2}*0.01;                        % 调整输出层阈值
% 网络训练
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;
% 有噪声训练
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);
    pause;
end
% 再次无噪声训练
netn.trainParam.goal=0.1;                       % 更改训练精度
netn.trainParam.epochs= 500;                    % 设定训练次数
netn.trainParam.show= 5;                        % 结果显示间隔
P=alphabet;                                     % P为输入矩阵
T=targets;                                      % 新的目标矩阵 
[netn,tr] = train(netn,P,T);
pause;
% 系统性能测试
noise_range = 0: 0.05: 0.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
plot(noise_range, network1*100,'--', noise_range, network2*100);
title('识别误差');
xlabel('噪声指标');
ylabel('无噪声训练网络 - - -    有噪声训练网络 ——');
pause;
% A,J,W 单字符识别
noiseJ = alphabet(:,1)+randn(35,1)*0.2;
plotchar(noiseJ);
A2= sim( net, noiseJ);
A2= compet(A2);
answer= find(compet(A2) ==1);
plotchar(alphabet(:,answer));
pause;
%
noiseJ = alphabet(:,10)+randn(35,1)*0.2;
plotchar(noiseJ);
A2= sim( net, noiseJ);
A2= compet(A2);
answer= find(compet(A2) ==1);
plotchar(alphabet(:,answer));
pause;
%
noiseJ = alphabet(:,23)+randn(35,1)*0.2;
plotchar(noiseJ);
A2= sim( net, noiseJ);
A2= compet(A2);
answer= find(compet(A2) ==1);
plotchar(alphabet(:,answer));




⌨️ 快捷键说明

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