BP算法实际例子与程序.doc

上传人:公**** 文档编号:551055633 上传时间:2023-01-30 格式:DOC 页数:13 大小:191.01KB
返回 下载 相关 举报
BP算法实际例子与程序.doc_第1页
第1页 / 共13页
BP算法实际例子与程序.doc_第2页
第2页 / 共13页
BP算法实际例子与程序.doc_第3页
第3页 / 共13页
BP算法实际例子与程序.doc_第4页
第4页 / 共13页
BP算法实际例子与程序.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《BP算法实际例子与程序.doc》由会员分享,可在线阅读,更多相关《BP算法实际例子与程序.doc(13页珍藏版)》请在金锄头文库上搜索。

1、BP算法实际例子与程序 1. 题目1)训练样本集:等间隔选取的9个样本。检验样本集:等间隔选取的361个样本。2)训练样本集:等间隔选取的9个样本。检验样本集:等间隔选取的361个样本。3) 训练样本集1:等间隔选取的1111个样本,应包含2个最高点。训练样本集2:等间隔选取的2121个样本,应包含2个最高点。检验样本集:等间隔选取的3131个样本,或4141个样本2. BP算法原理BP网络简介误差反向传播算法(BP)是感知器学习规则当前著名发展,其中增加了额外的隐含层(在输入层和输出层之间,它不予外界直接相连)。网络拓扑结构被限定为前向输入:例如,由输入层向第一隐含层(或许只有一层)传输,由

2、第一隐含层向第二隐含层传输,或者从最后隐含层向输出层传输,如图1所示,这是一个典型的BP神经网络结构。它包含了三层。隐含层学习对输入层信息重编码(或者说是重复表达输入层信息)。可以使用多于一层的隐含层,这时网络的功能要比单独一层隐含层时功能强大的多。可以证明,一个含有两层隐含层的神经网络可以学习任何映射。这种含两层隐含层的神经网络也就是比原来含有一层隐含层的网络稍微复杂了一些。训练BP网络的权值调整规则是感知器学习规则的发展。权值调整是通过与输出误差的比较调整实现的。图1、BP网络结构网络的运行包括:1) 前向通道:计算输出层的输出结果和误差2) 后向通道:输出误差用于调整输出单元的权值。隐含

3、节点的误差也可以得到(通过输出层的权值将误差反向传播),这样隐含层的权值也可以调整了。每一个数据都被前向通道和后向通道学习。这样不断重复直到误差小到一个允许的范围(或者说我们停止运行)。BP网络最常用的工作形式是这样的:1) 权值和阈值随机取为很小的数据2) 输入训练采样,按下面3)5)步运行每一采样值3) 计算网络中每一层的输出 (i)4) 计算训练误差 ,输出层误差 (ii) ,隐含层和输入层误差 (iii)5) 修正权值和阈值 (iv) (v)6) 所有采样值都完成了3)5)步后,一次训练周期结束。计算误差情况: 7)如果满足Ee,则结束训练。或者返回步骤2),开始下一个训练周期。执行过

4、程根据BP网络规范,我们可以得到现在的BP网络算法流程图如下图2,按照这一思路,我使用Matlab语言完成了BP神经网络程序设计。NoYes参数设定计算和保留所有层的输出修改并保留权值和阈值初始化权值和阈值满足要求?计算并保留误差结束Yes训练周期图2、BP神经网络算法流程图BP网络的运行细节是这样的:1、 为BP网络设定参数。如,隐含层数、神经元个数、精度等等2、 按照随机的规则初始化权值和阈值3、 使用等式(i)计算每层的输出4、 按照等式(ii)或(iii)计算每层的误差5、 通过等式(iv)和(v)重复计算权值和阈值6、 计算同一周期内所有采样值的误差和E7、 比较E与我们的期望值并做

5、出判断。如果满足要求的话,或者停止运行或者返回步骤3)重复执行一个新的周期3. 结果分析以下结果分析中,样本学习率都取u=0.2,动量项的学习率都取n=0.05。4.1 y=sin x下图4.1.1图4.1.3为不同的隐含层神经元数和不同的性能指标E所得到的曲线:图4.1.1 隐含层神经元数为4,性能指标E=0.05图4.1.2 隐含层神经元个数为8,性能指标E=0.05图4.1.3 隐含层神经元数为8,性能指标E=0.01分析:(1)从图4.1.1和图4.1.2中可以看出,对于同样的性能指标,其训练次数会随着隐含层神经元个数的增加;比较图4.2和图4.3可以发现,对应同样数目的隐含层神经元个

6、数,性能指标要求越高,训练次数会相应变多,甚至出现在规定的次数内(程序中最多进行20000此BP训练),性能指标不能满足要求的情况。(2)从上述三个曲线中可以发现,总体误差会随着训练次数的增加而不断趋于0,且越到后面,变化越不明显。(3)从样本与训练结果的误差曲线中可以发现,在样本点的附近,样本与训练结果的误差比较小;在远离样本点的区域,样本与训练结果之间的误差明显变大。4.2 y=|sinx| 样本学习率和动量项的学习率保持不变,只需在上述程序的基础上,将函数y=sinx变换到y=|sinx|。下图4.2.1图4.2.3为不同的隐含层神经元数和不同的性能指标E所得到的曲线:图4.2.1隐含层

7、神经元数为4,性能指标E=0.05图4.2.2隐含层神经元个数为8,性能指标E=0.05图4.2.3隐含层神经元数为8,性能指标E=0.001图4.3.1 异或训练结果曲线4.3 下图4.4.14.4.2所示为程序运行后的曲线:图4.4.1 11*11图4.4.2 21*21附录1:1、2两题clear allclose allx0_0=linspace(0,2*pi,9);x0=x0_0; D=sin(x0_0);%D=abs(sin(x0_0); n0,No=size(x0);n2,No=size(D);n1=8; u=0.2;n=0.05;epoch_max=20000;erro_goa

8、l=0.001;w1=rand(n1,n0);w2=rand(n1,n0);theta1=rand(n1,n0);theta2=rand(n2,n0);x1=0;x2=0;E=0; w1_0=zeros(size(w1); w2_0=zeros(size(w2);theta1_0=zeros(size(theta1);theta2_0=zeros(size(theta2);% training %for epoch=1:1:epoch_max for num=1:1:No S1=w1*x0(:,num)+theta1; x1=logsig(S1); S2=x1*w2+theta2; x2=S2

9、; temp1=w2; temp2=theta2; temp3=w1; temp4=theta1; delta2=(D(:,num)-x2); delta1=x1.*(1-x1).*(w2*delta2); w2=w2+u*delta2*x1+n*(w2-w2_0); w1=w1+u*delta1*x0(:,num)+n*(w1-w1_0); theta2=theta2+u*delta2+n*(theta2-theta2_0); theta1=theta1+u*delta1+n*(theta1-theta1_0); w2_0=temp1; w1_0=temp3; theta2_0=temp2;

10、 theta1_0=temp4; Eq=(D(:,num)-x2)*(D(:,num)-x2)/2; E=E+Eq; end Error(epoch)=E; if(Eerro_goal) break; end E=0;endT=linspace(0,2*pi,361); test_in=T;test_out=sin(T);%test_out=abs(sin(T);out_y=zeros(size(T);for i=1:1:361; S3=w1*test_in(:,i)+theta1; x1=logsig(S3); S4=x1*w2+theta2; out_y(i)=S4; Error_out(

11、i)= out_y(i)-sin(T(i);endoutput=out_y;subplot(3,1,1),plot(T,test_out,r,T,output,b),title(red-blue-);i=1:1:epoch;subplot(3,1,2),plot(i,Error),title();subplot(3,1,3),plot(T,Error_out),title();附录3:%initial%clear all;close all;n0=2;n1=4;n2=1;x1_i=-10:2:10;x2_i=-10:2:10;No=size(x1_i,2);%when the denomina

12、tor is 0, then evaluate it with a little numberfor j=1:No if(x1_i(j)=0.0) x1_i(j)=0.001; end if(x2_i(j)=0.0) x2_i(j)=0.001; endend%actual outputsfor j=1:No for i=1:No D(No*(j-1)+i)=0.9*exp(- ( (x1_i(i)+5)2+(x2_i(j)+5)2 )/10)+0.99996*exp(- ( (x1_i(i)-5)2+(x2_i(j)-5)2 )/20); endendx1=x1_i;x2=x2_i;for j=1:No for i=1:No x1_temp(j-1)*No+i)=x1(i); end endfor j=1:No for i=1:No x2_temp(i+No*(j-1)=x2(j); end endX0=x1_temp x2_temp; %input matrixw1=rand(n1,n0);w2=rand(n2,n1);o1=rand(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号