1 / 13
文档名称:

BP神经网络算法原理.doc

格式:doc   大小:45KB   页数:13页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

BP神经网络算法原理.doc

上传人:rjmy2261 2019/6/28 文件大小:45 KB

下载得到文件列表

BP神经网络算法原理.doc

文档介绍

文档介绍:一BP神经网络模型BP网络模型包括其输入输出模型、作用函数模型、误差计算模型和自学习模型。(1)节点输出模型隐节点输出模型:Oj=f(∑Wij×Xi-qj)   (1)输出节点输出模型:Yk=f(∑Tjk×Oj-qk)(2)f-非线形作用函数;q-神经单元阈值。(2)作用函数模型作用函数是反映下层输入对上层节点刺激脉冲强度的函数又称刺激函数,一般取为(0,1)内连续取值Sigmoid函数:                       f(x)=1/(1+e-x)                  (3)(3)误差计算模型误差计算模型是反映神经网络期望输出与计算输出之间误差大小的函数:                   Ep=1/2×∑(tpi-Opi)2               (4)tpi-i节点的期望输出值;Opi-i节点计算输出值。(4)自学习模型神经网络的学习过程,即连接下层节点和上层节点之间的权重拒阵Wij的设定和误差修正过程。BP网络有师学习方式-需要设定期望值和无师学习方式-只需输入模式之分。自学习模型为                      △Wij(n+1)=h×Фi×Oj+a×△Wij(n)(5)h-学习因子;Фi-输出节点i的计算误差;Oj-输出节点j的计算输出;a-动量因子。二BP网络模型的缺陷分析及优化策略(1)学习因子h的优化采用变步长法根据输出误差大小自动调整学习因子,来减少迭代次数和加快收敛速度。h=h+a×(Ep(n)-Ep(n-1))/Ep(n)a为调整步长,0~1之间取值(6)(2)隐层节点数的优化    隐节点数的多少对网络性能的影响较大,当隐节点数太多时,会导致网络学习时间过长,甚至不能收敛;而当隐节点数过小时,网络的容错能力差。利用逐步回归分析法并进行参数的显著性检验来动态删除一些线形相关的隐节点,节点删除标准:当由该节点出发指向下一层节点的所有权值和阈值均落于死区(通常取±、±)之中,则该节点可删除。最佳隐节点数L可参考下面公式计算:L=(m+n)1/2+c(7)m-输入节点数;n-输出节点数;c-介于1~10的常数。(3)输入和输出神经元的确定利用多元回归分析法对神经网络的输入参数进行处理,删除相关性强的输入参数,来减少输入节点数。(4)算法优化由于BP算法采用的是剃度下降法,因而易陷于局部最小并且训练时间较长。用基于生物免疫机制地既能全局搜索又能避免未成熟收敛的免疫遗传算法IGA取代传统BP算法来克服此缺点。该程序实现神经网络的BP算法,输入节点数,输出节点数,隐层数,隐层节点数任意,由用户决定。其中隐层数指的是总共曾数包含输出层,比如说异或算法为2层,第一层节点数为2,第二层也即输出层节点数为1,输入点数为2。但是该程序对异或算法实现并不理想,对多层多节点的神经网络有较好的结果。#include""#include<>#include<>#include<fstream>#include<>#include""#defineMAXCOUNT1e5//迭代训练次数上限//,范围在-——(){return(float)((rand()%1001)*-);}//高斯随机数产生函数doublegaussrand(){  staticdoubleV1,V2,S;    staticintphase=0;    doubleX;    if(phase==0){  do{     doubleU1=(double)rand()/RAND_MAX;     doubleU2=(double)rand()/RAND_MAX;     V1=2*U1-1;     V2=2*U2-1;     S=V1*V1+V2*V2;  }while(S>=1||S==0);  X=V1*sqrt(-2*log(S)/S);    }else  X=V2*sqrt(-2*log(S)/S);    phase=1-phase;    returnX;}//定义一个多层前向BP网络classBP{public:double***p;//记录所有的权值double***ddp;//记录所有的权值增量int*pnode;//记录每一层的节点数double**pnodey;//记录每组每一层的节点的输出值double**ddlj;//记录每组每一层的节点的ddljdouble**pX;//记录输入样本double**pY;//记录输入理想输出值intSidenum;intInputnodenum;intoutputnodenum;int