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

📄 charecg.m

📁 用MATLAB实现的网络设计与测试程序
💻 M
字号:
% charecg.m

[alphabet,targets] = prodat;
P =alphabet;	% alphabet = [ letterA, letterB, ..., letterZ ];
T = targets;	% targets = eye(26);
[R,Q] = size(P);
S1 = 10;
[S2,Q] = size(T);
net = newff(minmax(alphabet),[S1 S2],{'logsig' 'logsig'},'traingdx');
net.LW{2,1} = net.LW{2,1}*0.01;
net.b{2} = net.b{2}*0.01;

%    无噪声字母识别网络的训练

net.performFcn = 'sse';                %执行函数为误差平方和函数
net.trainParam.epochs=800;            %最大训练步长
net.trainParam.lr=0.01;                %学习率
net.trainParam.lr_inc =1.05;            %增长的学习率
net.trainParam.lr_dec =0.7;
net.trainParam.goal=0.1;              %执行函数目标值
net.trainParam.mc =0.9;              %附加动量因子
net.trainParam.min_grad=1e-10;       %最小执行梯度
net.trainParam.show = 50;
P = alphabet;
T = targets;
[net,tr] = train(net,P,T);

pause % 按任意键继续

%    具有噪声的输入矢量识别网络的训练

netn = net;
netn.trainParam.goal = 0.1;          %目标误差.
netn.trainParam.epochs = 300;       %最大训练步长.
for pass=1:10
    fprintf('Pass = %.0f\n',pass);

T = [targets targets targets targets];
  P = [alphabet, alphabet, ...
      (alphabet + randn(R,Q)*0.1), ...
      (alphabet + randn(R,Q)*0.2)];
  [netn,tr] = train(netn,P,T);
end

pause % 按任意键继续

%  再次用无噪声字母训练识别网络

netn.trainParam.goal = 0.1;    % 均方误差目标.
netn.trainParam.epochs = 500;  % 最大训练步长
net.trainParam.show = 5;       % 训练中显示的频率
P = alphabet;
T = targets;

[netn,tr] = train(netn,P,T);

pause % 按任意键测试所训练的网络性能

%    测试所训练的网络性能
%    ====================
noise_range = 0:.02:0.2;
max_test = 100;
network1 = [];
network2 = [];
T = targets;

% PERFORM THE TEST
for noiselevel = noise_range
  fprintf('Testing networks with noise level of %.2f.\n',noiselevel);
  errors1 = 0;
  errors2 = 0;

  for i=1:max_test
    P = alphabet + randn(35,26)*noiselevel;

    % TEST NETWORK 1
    A = sim(net,P);
    AA = compet(A);
    errors1 = errors1 + sum(sum(abs(AA-T)))/2;

    % TEST NETWORK 2
    An = sim(netn,P);
    AAn = compet(An);
    errors2 = errors2 + sum(sum(abs(AAn-T)))/2;
    echo off
    end

  % 100组26个矢量的平均误差 
  network1 = [network1 errors1/26/100];
  network2 = [network2 errors2/26/100];
end
echo on

    pause % 按任意键显示结果

%    显示结果
%    ========
clf
plot(noise_range,network1*100,'--',noise_range,network2*100);
grid
xlabel('Noise Level');
ylabel('Percentage of Recognition');
echo off

 %三种情况下字母Y的表示情况
noisyY1 = alphabet(:,25)+randn(35,1) * 0.2;
figure(2);
plotchar(noisyY1);
noiseY2=alphabet(:,25)+randn(35,1)*0.1;
figure(3);
plotchar(noiseY2);
idealY=alphabet(:,25);
figure(4)
plotchar(idealY);

⌨️ 快捷键说明

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