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

📄 bp.txt

📁 这是我的一个作业
💻 TXT
字号:
clear all;
clc
n=16;%输入层个数 
p=8;%隐含层个数
q=3;%输出层个数
X1=[1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 1];%输入样本
X2=[0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0];
X3=[1 1 1 1 1 0 0 1 1 0 0 1 1 1 1 1]
X=[X1;X2;X3];
Y1=[1 0 0];%期望输出
Y2=[0 1 0];
Y3=[0 0 1];
Yo=[Y1;Y2;Y3];
%以下为初始化
w=zeros(16,8);v=zeros(8,3); 
t1=zeros(1,8); 
t2=zeros(1,3); 
bi=zeros(1,8);
ct=zeros(1,3); 
dt=zeros(1,3); 
ei=zeros(1,8); 
cntmax=10000; 
a1=0.1,b1=0.1,emax=0.01,cnt=0; 
w=rands(16,8); %输入层与隐含层权值
S='输入层到隐含层初始权值'; 
disp(S);disp(w);
v=rands(8,3); %隐含层与输出层权值
t1=rands(1,8);
t2=rands(1,3);
er=0.012;
    for cnt=1:cntmax
      if (er>emax)
         for cp=1:3
             X0=X(cp,:); 
             Y0=Yo(cp,:);
             Y=X0*w;             
             Y=Y-t1; 
             for j=1:8
                bi(j)=1/(1+exp(-Y(j))); %激活函数
             end
             %计算输出层各神经元输出
             xy=bi*v;
             Y=xy;
             Y=Y-t2;
             for t=1:3
                ct(t)=1/(1+exp(-Y(t))); 
             end
             %计算误差函数、调整连接权值 
             er=(Y0(t)-ct(t))*(Y0(t)-ct(t))/2;        
             for t=1:3
               dt(t)=(Y0(t)-ct(t))*ct(t)*(1-ct(t));
             end
             for t=1:3
               xy=dt*v';
               ei=xy*bi'*(1-bi);
             end
             for t=1:q
               for j=1:p
                 v(j,t)=v(j,t)+a1*dt(t)*bi(j);
               end
               t2(t)=t2(t)+a1*dt(t);
             end
             for j=1:p
               for k=1:n
                 w(k,j)=w(k,j)+b1*X0(k)*ei(j);
               end
               t1(j)=t1(j)+b1*ei(j);
             end
          end
       else break ;
       end
     end
     S='循环次数cnt:';
     disp(S);disp(cnt);
     S='隐含层到输出层最终权值';
     disp(S);disp(v);
     S='er:'
     disp(S);disp(er);

⌨️ 快捷键说明

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