m基于多集成BP神经网络的matlab仿真,神经网络通过编程实现不使用工具箱

目录

1.算法描述

2.仿真效果预览

3.MATLAB核心程序

4.完整MATLAB


1.算法描述

        神经网络主要由处理单元、网络拓扑结构、训练规则组成。处理单元是神经网络的基本操作单元,用以模拟人脑神经元的功能。一个处理单元有多个输入、输出,输入端模拟脑神经的树突功能,起信息传递作用;输出端模拟脑神经的轴突功能,将处理后的信息传给下一个处理单元,如图1.1所示。

基本的神经处理单元其等效于人体的神经元,如图2所示,

   => 

        具有相同功能的处理单元构成处理层。常用的多层感知机由输入层、输出层和若干隐含层组成,神经网络的拓扑结构决定了各处理单元、各层之间信息的传递方式与途径。训练规则利用转换函数进行数据处理的加权及求和,训练网络系统进行模式识别,并将其转换成潜在的输出值。神经网络的基本出发点,就是通过简单函数的多次迭代,实现对复杂映射的拟合和逼近。神经网络能够实现一对一、一对多的映射关系。因此,许多实际问题都可以用神经网络模型来解决。

       神经网络的工作过程主要由两个阶段组成,一个阶段是学习期,即训练阶段,此时连接权值可调整,另一个阶段就是工作期,此时,其各个权值固定。

       在学习阶段,训练集中已知类别的输入向量将随机输入给神经网络,每次的输入使得PE之间的连接权重根据一种固定的学习规则得到细致的调整,使得网络的输出向正确的方向转变。随着训练过程的推进,网络的性能得到的改善,直到网络中每一个PE都收敛到合适的权重为止。

       在神经网络的学习阶段,当网络做出错误的判决的时候,那么通过神经网络的学习,应使得网络减少下次犯同样错误的可能性,通常情况下,系统将会给网络一个随机的权值,然后将信号输入到神经网络,网络将输入的模式进行加权求和、并与门限进行比较,然后进行非线性运算从而得到网络的输出。这个时候系统输出正确和错误的概率是相同的,那么这个时候,系统将正确的输出结果的连接权值增大,从而使下次输入同一个信号的时候,得到正确的输出结果。

       通常情况下,按这种方法学习几次后,神经网络将判断的正确率大大提高,一般来说,网络中所含的神经元个数就越多,那么它能够记忆和识别的模式也越多。

       当训练结束进入工作期时,权重系数保持不变,此外神经网络的输入是未知类别的向量,输入的信息经过神经元层层传播,最后在输出层上产生输出向量,根据此输出向量可以将对象划分到某一类中,从而实现对象的模式识别。

       BP神经网络的网络层包括输入层,隐含层和输出层三个网络层次,其基本结构如下图所示:

基于三层网络结构的BP神经网络具有较为广泛的应用场合和训练效果。

        在BP神经网络中,隐含层数量对神经网络的性能有着至关重要的影响,如果隐含层数量过多,会大大增加BP神经网络的内部结构的复杂度,从而降低学习效率,增加训练时间;如果隐含层数量过少,则无法精确获得训练输入数据和输出结果之间的内在规律,增加预测误差。因此,选择合适的隐含层个数具有十分重要的意义。由于隐含层个数的设置没有明确的理论可以计算,通常情况下,采用逐次分析的方法获得,即通过对不同隐含层所对应的神经网络进行预测误差的仿真分析,选择误差最小情况下所对应的隐含层个数。

        学习率,即网络权值得更新速度,当学习率较大的时候,网络权值的更新速度快,当网络稳定性会下降;当学习率较小的时候,网络权值的更新速度慢,网络较为稳定。这里选择BP神经网络的学习率方式参考上一章节隐含层的选择方式,即通过对比不同学习率的网络训练误差,选择性能较优的学习率。

       BP神经网络的初始网络权值对网络训练的效率以及预测性能有着较大的影响,通常情况下,采用随机生成[-1,1]之间的随机数作为BP神经网络的初始权值

2.仿真效果预览

matlab2022a仿真结果如下:

 

 

3.MATLAB核心程序



%BP1~4
KER              = 4;%集成个数
W0               = rand(NI,Nh,KER); 
deltaW0          = zeros(NI,Nh,KER); 
dW0              = zeros(NI,Nh,KER);  
W                = rand(Nh,No,KER);
deltaW           = zeros(Nh,No,KER); 
dW               = zeros(Nh,No,KER);


ERR              = [];
Index            = 1;  

while(Index<=Max_iteration)   
  Index
  jj=1;     
  error2 = zeros(Len,KER);
  while(jj<=Len)         
    for k=1:No;
        d(k)=T(jj);  
    end
    for i=1:NI;
        x(i)=P(jj,i);
    end
    %集成多个BP神经网络
    for bpj = 1:KER      
        for j=1:Nh%BP前向            
            net=0;              
            for i=1:NI                
                net=net+x(i)*W0(i,j,bpj); %加权和∑X(i)V(i)            
            end
            y(j)=1/(1+exp(-net));               
        end
        for k=1:No             
            net=0;              
            for j=1:Nh                  
                net=net+y(j)*W(j,k,bpj);             
            end
            %输出值
            o(k)=1/(1+exp(-net));              
        end
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        errortmp=0.0;         
        for k=1:No              
            errortmp=errortmp+(d(k)-(o(k)))^2;%传统的误差计算方法
        end
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        error2(jj,bpj)=0.5*errortmp/No;         
        for k=1:No%BP反向计算          
            yitao(k)=(d(k)-o(k))*o(k)*(1-o(k));%偏导      
        end
        for j=1:Nh         
            tem=0.0;         
            for k=1:No             
                tem=tem+yitao(k)*W(j,k,bpj);       
            end
            yitay(j)=tem*y(j)*(1-y(j));%偏导    
        end
。。。。。。。。。。。。。。。。。。。。。。。。。。
    end
    jj=jj+1; 
  end
  %BP训练结束     
  error = sum(mean(error2));  
  %误差是否达到精度    
  if error<Paim;
     break;
  end
  Index = Index+1;
  ERR   = [ERR,error]; 
end
05_032_m

4.完整MATLAB

V

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Matlab工具箱中的BP神经网络可以通过使用net=newff函数来创建。该函数的参数含义如下: - PR:表示输入和输出的最大范围,可以用[min,max]的形式表示 - [S1,S2,...]:表示每个隐藏层的神经元数量 - {TF1,TF2,...}:表示每个层的传递函数类型,可以选择的传递函数有'hardlim', 'hardlims', 'logsig', 'tansig', 'purelin'等 - BTF:表示偏差前馈传递函数 - BLF:表示偏差传递函数 - PF:表示权值传递函数 在训练完网络之后,可以使用save函数将网络模型保存到指定路径,例如save 'E:\Matlab Codes\netName' net。然后可以使用load函数加载已经训练好的网络模型进行仿真预测,例如load 'E:\Matlab Codes\netName' net。 Matlab工具箱中提供了多种BP网络训练算法,可以根据不同的需求选择适合的算法[3]: - 对于中等大小的网络(数百权值)、函数逼近和最大存储空间要求,可以使用LM算法(trainlm); - 对于模式识别和存储空间较小的问题,可以使用弹性BP算法(trainrp); - 对于问题普适、大型网络和较小存储空间要求,可以使用变梯度SCG算法(trainscg); - 对于某些问题有效但速度较慢和最小存储空间要求,可以使用变学习率算法(traingdx、traingda)。 此外,还可以通过使用贝叶斯归一化法(trainbr)来提高网络的泛化能力。 参考文献: 周开利,康耀红.神经网络模型及其MATLAB仿真程序设计[M].北京:清华大学出版社,2005. Matlab Documentation 周开利,康耀红.神经网络模型及其MATLAB仿真程序设计[M].北京:清华大学出版社,2005.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱C编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值