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

📄 bp1.m

📁 基本的BP算法
💻 M
字号:
%在线模式 
a=load('a.txt');
t=load('t.txt')
b=mean(a);
c=std(a); 
for i=1:528
for j=1:10
a(i,j)=(a(i,j)-b(j))/c(j);
end
end 
tic
p=a';
t1=t';
samnum=528;
testnum=528;
hiddennum=12;
indim=10;
outdim=4;
maxepochs=2000;
lr=0.012;
e0=1;r=0;
W1=0.2*rand(hiddennum,indim)-0.1;
B1=0.2*rand(hiddennum,1)-0.1;
W2=0.2*rand(outdim,hiddennum)-0.1;
B2=0.2*rand(outdim,1)-0.1;
W1EX=[W1,B1];
W2EX=[W2,B2];
saminex=[p',ones(samnum,1)]';
errhistory=[ ];
for i=1:maxepochs
 hiddenout=tansig(W1EX*saminex);
    hiddenoutex=[hiddenout' ones(samnum,1)]';
    networkout=logsig(W2EX*hiddenoutex);
    error=t1-networkout;
    SSE=sumsqr(error);
    errhistory=[errhistory SSE];
    if  SSE<e0,
       break
    end
  delta2=error.*networkout.*(1-networkout);
  delta1=W2'*delta2.*hiddenout.*(1-hiddenout);
  dW2EX=delta2*hiddenoutex';
    dW1EX=delta1*saminex';
    W2EX=W2EX+lr*dW2EX;
    W1EX=W1EX+lr*dW1EX;
  r=r+1;
h(r)=SSE;
end
h
plot(h)  

 W1=W1EX(:,1:indim);
  B1=W1EX(:,indim+1);
  W2=W2EX(:,1:hiddennum);
  B2=W2EX(:,1+hiddennum);
 testhiddenout=tansig(W1*p+repmat(B1,1,testnum));
 testout=logsig(W2*testhiddenout+repmat(B2,1,testnum));
    s=testout;
  for i=1:4
  for  j=1:528
 if  s(i,j)>=0.52
 s(i,j)=0.99;
 else  s(i,j)=0.01;
 end 
 end
 end

count(1,1:11)=0;
for j=1:528
if s(:,j)==t1(:,j)
 if s(:,j)==[0.01;0.01;0.01;0.99]
  count(1)=count(1)+1;
 elseif  s(:,j)==[0.01;0.01;0.99;0.01]
  count(2)=count(2)+1;
 elseif   s(:,j)==[0.01;0.01;0.99;0.99]
  count(3)=count(3)+1;
 elseif  s(:,j)==[0.01;0.99;0.01;0.01]
  count(4)=count(4)+1;
 elseif  s(:,j)==[0.01;0.99;0.01;0.99]
  count(5)=count(5)+1;
 elseif s(:,j)==[0.01;0.99;0.99;0.01]
  count(6)=count(6)+1;
 elseif  s(:,j)==[0.01;0.99;0.99;0.99]
  count(7)=count(7)+1;
 elseif s(:,j)==[0.99;0.01;0.01;0.01]
  count(8)=count(8)+1;
 elseif s(:,j)==[0.99;0.01;0.01;0.99]
  count(9)=count(9)+1;
 elseif  s(:,j)==[0.99;0.01;0.99;0.01]
  count(10)=count(10)+1;
 elseif  s(:,j)==[0.99;0.01;0.99;0.99]
  count(11)=count(11)+1;
 
    else  end  

end
   end 
COUNT(1,1:11)=0;
for j=1:528
if s(:,j)==[0.01;0.01;0.01;0.99]
  COUNT(1)=COUNT(1)+1;
 elseif  s(:,j)==[0.01;0.01;0.99;0.01]
  COUNT(2)=COUNT(2)+1;
 elseif   s(:,j)==[0.01;0.01;0.99;0.99]
  COUNT(3)=COUNT(3)+1;
 elseif  s(:,j)==[0.01;0.99;0.01;0.01]
  COUNT(4)=COUNT(4)+1;
 elseif   s(:,j)==[0.01;0.99;0.01;0.99]
  COUNT(5)=COUNT(5)+1;
 elseif  s(:,j)==[0.01;0.99;0.99;0.01]
  COUNT(6)=COUNT(6)+1;
 elseif   s(:,j)==[0.01;0.99;0.99;0.99]
  COUNT(7)=COUNT(7)+1;
 elseif  s(:,j)==[0.99;0.01;0.01;0.01]
  COUNT(8)=COUNT(8)+1;
 elseif   s(:,j)==[0.99;0.01;0.01;0.99]
  COUNT(9)=COUNT(9)+1;
 elseif  s(:,j)==[0.99;0.01;0.99;0.01]
  COUNT(10)=COUNT(10)+1;
 elseif   s(:,j)==[0.99;0.01;0.99;0.99]
  COUNT(11)=COUNT(11)+1;
  
else  m=0;
   end
 end
CIUNT(1,1:11)=0;
for j=1:528;
if t1(:,j)==[0.01;0.01;0.01;0.99]
  CIUNT(1)=CIUNT(1)+1;
 elseif  t1(:,j)==[0.01;0.01;0.99;0.01]
  CIUNT(2)=CIUNT(2)+1;
 elseif   t1(:,j)==[0.01;0.01;0.99;0.99]
  CIUNT(3)=CIUNT(3)+1;
 elseif  t1(:,j)==[0.01;0.99;0.01;0.01]
  CIUNT(4)=CIUNT(4)+1;
 elseif   t1(:,j)==[0.01;0.99;0.01;0.99]
  CIUNT(5)=CIUNT(5)+1;
 elseif  t1(:,j)==[0.01;0.99;0.99;0.01]
  CIUNT(6)=CIUNT(6)+1;
 elseif   t1(:,j)==[0.01;0.99;0.99;0.99]
  CIUNT(7)=CIUNT(7)+1;
 elseif  t1(:,j)==[0.99;0.01;0.01;0.01]
  CIUNT(8)=CIUNT(8)+1;
 elseif   t1(:,j)==[0.99;0.01;0.01;0.99]
  CIUNT(9)=CIUNT(9)+1;
 elseif  t1(:,j)==[0.99;0.01;0.99;0.01]
  CIUNT(10)=CIUNT(10)+1;
 elseif   t1(:,j)==[0.99;0.01;0.99;0.99]
  CIUNT(11)=CIUNT(11)+1;
 
 else   
   end
end 
time=toc
for   i=1:11
pc(i)=count(i)/COUNT(i);
pe(i)=count(i)/CIUNT(i);
end
pc  
pe






  

⌨️ 快捷键说明

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