📄 p4.522.txt
字号:
%prprob是包含26个字母的函数(布尔值样本数据5*7=35个输入)
[alphabet,targets]=prprob;
[R,Q]=size(alphabet);
[S2,Q]=size(targets);
S1=10;
P=alphabet;
%建立网络,LW输出层权值
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;
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);
%有噪声训练,参数
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);
end
%再次无噪声训练(一步成功,为了节省资源)
netn.trainParam.goal=0.1;
netn.trainParam.epochs=500;
netn.trainParam.show=5;
P=alphabet;
T=targets;
[netn,tr]=train(netn,P,T);
%系统性能,噪声均值为0,范围为0-0.5,100个级别
noise_range=0:.05:.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('无噪声训练网络-- 有噪声训练网络- - -');
%仿真A
noisyJ=alphabet(:,1)+randn(35,1)*0.2;
plotchar(noisyJ);
%验证
A2=sim(net,noisyJ);
A2=compet(A2);
answer=find(compet(A2)==1);
plotchar(alphabet(:,answer));
%仿真J
noisyJ=alphabet(:,10)+randn(35,1)*0.2;
plotchar(noisyJ);
%验证
A2=sim(net,noisyJ);
A2=compet(A2);
answer=find(compet(A2)==1);
plotchar(alphabet(:,answer));
%仿真W
noisyJ=alphabet(:,23)+randn(35,1)*0.2;
plotchar(noisyJ);
%验证
A2=sim(net,noisyJ);
A2=compet(A2);
answer=find(compet(A2)==1);
plotchar(alphabet(:,answer));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -