- 13
- 0
- 约 9页
- 2016-12-26 发布于天津
- 举报
BP网络实现曲线逼近
班级:自动化1班
学号:S080305001
姓名:陈 洪 霞
一、BP网络学习原理
多次前馈网络中,第一层为输入层,第Q层为输出层,中间各层为隐层,神经处理单元的特征函数是。
BP网络的学习过程是由正向传播和误差反向传播组成,把输入样本从输入层传到隐含层单元,经隐含层单元逐层处理后产生一个输出,至输出层,这个过程为正向传播,如果输出层没有得到所期望的输入值,把期望值和输出值的误差信号按原路径返回,并通过修改各层神经元的连接权值,使误差信号为最小。这个过程为反向传播。
第一层为输入层,第Q层为输出层,中间为隐含层,如图1.1。设第q层的神经元个数为nq,输入到第q层的第i个神经元的连接权系数为(i=1,2,…,nq-1) ( , )
图1.1 神经元网络
设给定P组输入输出样本,
设定拟合误差的代价函数为
采用一阶梯度法调节连接权系数E最小。
最后归纳出BP网络的学习算法如下:
,
二、用BP算法拟合正弦曲线
在本实验中选取的学习曲线为,学习的样本点为21个,输入的样本点:,样本点的输出为 ,输入层为单输入x,输出层为单输出y,中间隐含层为一层,十个神经元。输入层的权值是不可调节,所以在这里不做考虑。隐含层权值变量设为w1,输出层权值变量设为w2。在编程时设定网络的学习结束可以通过限定学习的次数,在学习的次数达到后停止学习,也可以根据学习后的输入和理想值的误差实现网络想学习的结束。这两种方法各有各的优缺点,前者可以要网络在一定的时间内学习结束,但是有可能学习次数相对太少,学习的效果不是最佳,既是没有学习好,输出的误差有可能很大。也有可能学习的次数相对太多了,最后的学习几乎没什么变化,只是循环。输入几乎没变化。后者根据学习输出和理想值输出的误差来实现循环。优点是它能够在学习达到一定的要求后自动跳出循环,这样可以达到规定的要求。也节省学习的时间,但是当误差或者学习率设定的不合理时会出现死循环。需要增添其他代码使之跳出。本文编程采用第一种方法,限定学习次数1000。学习1000后自动跳出停止学习。学习率设定为0.1。代码编写简要流程如图1.2。
图1.2 BP算法程序框图
代码如下:
c=1;
d=1;
sample=zeros(21,1);
for p=0:0.001:1
y(c)=(sin(p*pi*2)+1)/2;
if mod(p,0.05)==0
sample(d,1)=y(c);
d=d+1;
end
c=c+1;
end
w1=rand(21,10);
w2=rand(21,10);
out1=zeros(21,10);
out2=zeros(21,1);
s1=zeros(21,10);
s2=zeros(21,1);
vv2=zeros(21,1);
vv1=zeros(21,10);
dd2=zeros(21,10);
dd1=zeros(21,10);
d=1;
sum=zeros(1001,1);
e=1;
for u=1:1000
hold off
d=1;
for i=0:0.05:1
for j=1:10
s1(d,j)=i*w1(d,j);
out1(d,j)=1/(exp((-1)*s1(d,j))+1); %第一层第j个神经元输出
end
temp =0;
for k=1:10
temp = temp+out1(d,k)*w2(d,k);
end
s2(d,1) = temp;
out2(d,1)=1/(exp((-1)*s2(d,1))+1); %第二层神经元输出
vv2(d,1)=out2(d,1)*(1-out2(d,1))*(sample(d,1)-out2(d,1)); %输出层的d
for b=1:10
dd2(d,b)=0.1*vv2(d,1)*out1(d,b); %输出层的修正 w
vv1(d,b)=vv2(d,1)*w2(d,b)*out1(d,b)*(1.00-out1(d,b));
dd1(d,b)=0.1*vv1(d,b)*i; %隐含层的
原创力文档

文档评论(0)