📄 bpsuanfa.m
字号:
CHA1=zeros(3,13);
CHA2=zeros(3,13);
SSEA=zeros(max_epoch,13);
for k=3:15
S1(k)=k;
[R ,Q]=size(P);
[S2,Q]=size(T);
hidout=zeros(S1(k),Q);
netout=zeros(S2,Q);%对隐含层和网络输出进行初始化
max_epoch=2000;%最大训练次数
lr=0.003;%学习步长
E0=0.5;%最小平方误差
W1=0.2*rand(S1(k),R)-0.1;
B1=0.2*rand(S1(k),1)-0.1;
W2=0.2*rand(S2,S1(k))-0.1;
B2=0.2*rand(S2,1)-0.1;%对权值和阈值进行初始化
W1EX=[W1,B1];
W2EX=[W2,B2];%将权值和阈值合并为一个矩阵
PEX=[P' ones(Q,1)]';%也就将阈值作为一个输入
Errhistory=zeros(max_epoch,1);%记录每次训练的误差初始化
tic
for i=1:max_epoch
hidout=logsig(W1EX*PEX);
hidoutEX=[hidout' ones(Q,1)]';
netout=logsig(W2EX*hidoutEX);
Error=T-netout;
SSE=sumsqr(Error);
Errhistory(i)=SSE;
if SSE<E0,
break,
end
delta=Error;
delta2=delta.*netout.*(ones(S2,Q)-netout);
delta1=W2'*delta2.*hidout.*(ones(S1(k),Q)-hidout);
dW2EX=delta2*hidoutEX';%输出层的权值和阈值修正量
dW1EX=delta1*PEX';%隐含层的权值和阈值修正量
W2EX=W2EX+lr*dW2EX;
W1EX=W1EX+lr*dW1EX;
W2=W2EX(:,1:S1(k));
B2=W2EX(:,S1(k)+1);
W1=W1EX(:,1:R);
B1=W1EX(:,R+1);%将权值和阈值分开
end
toc
SSEA(:,k-2)=Errhistory;
class1=zeros(S2,1);
class2=zeros(S2,1);
class3=zeros(S2,1);
class4=zeros(S2,1);
indexout1=zeros(S2,Q);
indexout2=zeros(S2,Q);
for i=1:Q
[m1,count1]=max(T(:,i));
class1(count1)=class1(count1)+1;
indexout1(count1,class1(count1))=i;
end
for i=1:S2
index1=indexout1(i,1:class1(i));
[b1,pos1]=max(T(:,index1));
[b2,pos2]=max(netout(:,index1));
for j=1:class1(i)
if pos1(j)==pos2(j),
class3(i)=class3(i)+1;
end
end
end
cha1=class3./class1;
CHA1(:,k-2)=cha1;
for i=1:Q
[m2,count2]=max(netout(:,i));
class2(count2)=class2(count2)+1;
indexout2(count2,class2(count2))=i;
end
for i=1:S2
index2=indexout2(i,1:class2(i));
[b3,pos3]=max(T(:,index2));
[b4,pos4]=max(netout(:,index2));
for j=1:class2(i)
if pos3(j)==pos4(j),
class4(i)=class4(i)+1;
end
end
end
cha2=class4./class2;
CHA2(:,k-2)=cha2;
end
figure
plot(1:max_epoch,SSEA(:,1),'r');
text(1,107.9774 ,'\leftarrow3');
hold on
plot(1:max_epoch,SSEA(:,2),'b');
text(100,93.7003,'\leftarrow4');
hold on
plot(1:max_epoch,SSEA(:,3),'r');
text(250,56.0246,'\leftarrow5');
hold on
plot(1:max_epoch,SSEA(:,4),'b');
text(400,44.3037,'\leftarrow6');
hold on
plot(1:max_epoch,SSEA(:,5),'r');
text(550,39.4520,'\leftarrow7');
hold on
plot(1:max_epoch,SSEA(:,6),'b');
text(700,28.5728,'\leftarrow8');
hold on
plot(1:max_epoch,SSEA(:,7),'r');
text(850,21.9691,'\leftarrow9');
hold on
plot(1:max_epoch,SSEA(:,8),'b');
text(1000,17.0683,'\leftarrow10');
hold on
plot(1:max_epoch,SSEA(:,9),'r');
text(1200,12.5269,'\leftarrow11');
hold on
plot(1:max_epoch,SSEA(:,10),'b');
text(1400,9.4222,'\leftarrow12');
hold on
plot(1:max_epoch,SSEA(:,11),'r');
text(1600,8.7123,'\leftarrow13');
hold on
plot(1:max_epoch,SSEA(:,12),'b');
text(1800,7.9255,'\leftarrow14');
hold on
plot(1:max_epoch,SSEA(:,13),'r');
text(2000,7.4506,'\leftarrow15');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -