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

📄 nn2.m

📁 通过初始化神经网络初值
💻 M
字号:
%取样本数据
clc
clear
k=1;
x0=rand(2,5)
yd=rand(2,5)
[m,n]=size(x0);
%  初值定义
w1=[0.21 0.2 0.43 0.43 0.57;0.21 0.23 0.43 0.43 0.57];
w2=[0.25 0.02; 0.3 0.454 ;0.63 0.34 ;0.26 0.57; 0.72 0.34];
fi=[0.15 0.45 0.52 0.15 0.05]';           %各神经元的阈值
fo=[0.5;0.5];                             %输出阈值
a=0.6 ;                                   %a为学习速率
[wm,wn]=size(w1);
%开始学习,其中times为学习次数
for k=1:1:n
  e=1;
  times=0;
  while e>0.0001&times<1000            %循环条件
     for i=1:1:wn                       %计算第二层各神经元的状态
       net1(i)=w1(1,i)*x0(1,k)+w1(2,i)*x0(2,k)+fi(i);
     end
     for j=1:1:wn                       %计算第二层各神经元的输出o
       o(j)=1/(1+exp(-net1(j)));
     end
                                       %计算第三层神经元的状态
         net2(1)=w2(1,1)*o(1)+w2(2,1)*o(2)+w2(3,1)*o(3)+w2(4,1)*o(4)+w2(5,1)*o(5)+fo(1,1);
         net2(2)=w2(1,2)*o(1)+w2(2,2)*o(2)+w2(3,2)*o(3)+w2(4,2)*o(4)+w2(5,2)*o(5)+fo(2,1);
     
    
            y1=1/(1+exp(-net2(1)));         %计算第三层神经元的输出,即实际输出 
            y2=1/(1+exp(-net2(2)));
    %误差计算并判断神经网络逼近误差是否满足要求或迭代次数是否达到最大容许值
     e=((yd(1,k)-y1)^2)/2; 
     times=times+1; 
    %误差大于0.01时,继续迭代,修改各个权值及阈值
     e2=(yd(1,k)-y1)*y1*(1-y1);                %计算广义误差
     for i=1:1:wn
         e1(i)=e2*w2(i)*o(i)*(1-o(i));
     end 
     for j=1:1:wn                          %权值更新
        w1(j)=w1(j)+a*e1(j)*x0(k);
        w2(j)=w2(j)+a*e2*o(j);
        fi(j)=fi(j)+a*e1(j);
        fo=fo+a*e2;
     end    
  end
  yy(1,k)=y1;
end
%输出学习结果:权值及阈值
w1
w2
fi
fo

⌨️ 快捷键说明

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