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

📄 matlab,bpnet.txt

📁 一个三层的神经网络算法,可以用来数据拟合,建模.
💻 TXT
字号:
很多人还是在求BP算法,我传一个三层的简单程序。如果谁想要VC或C++版的,我也有!

%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)<precision)
      break;
end
    count=count+1;%训练次数加1
end

p=1:count;
plot(p,error(p),'-'); 

⌨️ 快捷键说明

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