网站大量收购独家精品文档,联系QQ:2885784924

BP神经网络算法原理.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
BPXiYk,网络训练的每个样本包括输入向量X和期望输出量t,网络输出值Y与期望输出值t之间的偏差,通过调整输入节点与隐层节点的联接强度取值Wij和隐层节点与输出节点之间的联接强度Tjk以及阈值,使误差沿梯度方向下降,经过反复学习训练,确定与最小误差相对应的网络参数〔权值和阈值〕,训练即告停止。此时经过训练的神经网络即能对类似样本的输入信息,自行处理输出误差最小的经过非线形转换的信息。 一 BP神经网络模型 BP 〔1〕节点输出模型 隐节点输出模型:Oj=f(∑Wij×Xi-q j)??? (1) 输出节点输出模型:Yk=f(∑Tjk×Oj-q k) (2) 神经单元阈值。 -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〕隐层节点数的优化 ???? 隐 节点数的多少对网络性能的影响较大,当隐节点数太多时,会导致网络学习时间过长,甚至不能收敛;而当隐节点数过小时,网络的容错能力差。利用逐步回归分析 法并进行参数的显著性检验来动态删除一些线形相关的隐节点,节点删除标准:当由该节点出发指向下一层节点的所有权值和阈值均落于死区〔通常取±0.1、±0.05等区间〕之中,那么该节点可删除。最正确隐节点数L可参考下面公式计算: L=(m+n)1/2+c (7) m-输入节点数;n-输出节点数;c-介于1~10的常数。 〔3〕输入和输出神经元确实定 利用多元回归分析法对神经网络的输入参数进行处理,删除相关性强的输入参数,来减少输入节点数。 〔4〕算法优化 由于BP算法采用的是剃度下降法,因而易陷于局部最小并且训练时间较长。用基于生物免疫机制地既能全局搜索又能防止未成熟收敛的免疫遗传算法IGA取代传统BP算法来克服此缺点。 #include time.h #include stdlib.h #includefstream #include math.h #include stdio.h #define MAXCOUNT 1e5 //迭代训练次数上限 // 精度0.001的随机浮点数,范围在-0.5——0.5 float randf() { return (float)((rand() % 1001) * 0.001f-0.5); } double gaussrand() {?? static double V1, V2, S; ???? static int phase = 0; ???? double X; ???? if(phase == 0) { ?? do { ????? double U1 = (double)rand() / RAND_MAX; ????? double U2 = (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; ???? return X; } //定义一个多层前向BP网络 class BP {public: double ***p;//记录所有的权值 double ***ddp;//记录所有的权值增量 int *pnode;//记录每一层的节点数 double **pnodey;//记录每组每一层的节点的输出值 double **ddlj;//记录每组每一层的节点的ddlj double **pX;//记录输入样本 double **pY;//记录输入理想输出值

文档评论(0)

187****8122 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档