www.pudn.com > bpxl.rar > bpxl.m


%BP neural network 
clear 
inputNums=3; 
outputNums=3; 
hideNums=10; 
maxcount=2000; 
samplenum=3; 
precision=0.001; 
 
alpha=0.5;%设定值 
a=0.5;%设定值 
count=1; 
error=zeros(1,count); 
errorp=zeros(1,samplenum); 
 
v=rand(inputNums,hideNums); 
deltv=zeros(inputNums,hideNums); 
dv=zeros(inputNums,hideNums); 
st1=zeros(1,hideNums); 
 
w=rand(hideNums,outputNums); 
deltw=zeros(hideNums,outputNums); 
dw=zeros(hideNums,outputNums); 
st2=zeros(1,outputNums); 
 
samplelist=[1,0,0;0,1,0;0,0,1]; 
expectlist=[1,0,0;0,1,0;0,0,1]; 
 
while (count<=maxcount) 
    c=1; 
    while (c<=samplenum) 
      for k=1:outputNums 
        d(k)=expectlist(c,k)%获得期望输出的向量 
end 
     
      for i=1:inputNums 
        x(i)=samplelist(c,i);%获得输入的向量(数据) 
end 
 
%Forward(); 
   for j=1:hideNums 
     net=0.0; 
     for i=1:inputNums 
       net=net+x(i)*v(i,j); 
end 
net=net-st1(j); 
     y(j)=1/(1+exp(-net)); 
end 
   for k=1:outputNums 
     net=0.0; 
     for j=1:hideNums 
       net=net+y(j)*w(j,k); 
end 
net=net-st2(k); 
     o(k)=1/(1+exp(-net));  
end 
 
%BpError(c); 
errortmp=0.0; 
   for k=1:outputNums 
     errortmp=errortmp+(d(k)-o(k))^2; 
end 
   errorp(c)=0.5*errortmp;  
%end 
       
      %Backward(); 
for k=1:outputNums 
     yitao(k)=(d(k)-o(k))*o(k)*(1-o(k)); 
end 
   for j=1:hideNums 
     tem=0.0; 
     for k=1:outputNums 
       tem=tem+yitao(k)*w(j,k); 
end 
     yitay(j)=tem*y(j)*(1-y(j)); 
end 
 
   %调整各层权值 
   for j=1:hideNums 
     for k=1:outputNums 
       deltw(j,k)=alpha*yitao(k)*y(j); 
       w(j,k)=w(j,k)+deltw(j,k)+a*dw(j,k); 
       dw(j,k)=deltw(j,k); 
end 
end 
for k=1:outputNums 
st2(k)=st2(k)+alpha*yitao(k); 
end 
   for i=1:inputNums 
     for j=1:hideNums 
       deltv(i,j)=alpha*yitay(j)*x(i); 
       v(i,j)=v(i,j)+deltv(i,j)+a*dv(i,j); 
       dv(i,j)=deltv(i,j); 
end 
end 
for j=1:hideNums 
st1(j)=st1(j)+alpha*yitay(j); 
end 
%end 
 
c=c+1; 
end 
     
    double tmp; 
    tmp=0.0; 
    for i=1:samplenum 
      tmp=tmp+errorp(i)*errorp(i); 
end 
    tmp=tmp/c; 
    error(count)=sqrt(tmp); 
 
    if (error(count)