当前位置:文档之家› 基于BP神经网络的曲线拟合

基于BP神经网络的曲线拟合

神经网络实验报告
基于BP网络的曲线拟合
学院:控制学院
姓名:李嘉頔
学号:09423021
2015年6月
一、实验目的
⑴掌握BP神经网络的权值修改规则
⑵利用BP网络修改权值对y=sin(x)曲线实现拟合
二、实验要求
人工神经网络是近年来发展起来的模拟人脑生物过程的人工智能技术,具有自学习、自组织、自适应和很强的非线性映射能力。

在人工神经网络的实际应用中,常采用BP神经网络或它的变化形式,BP神经网络是一种多层神经网络,因采用BP算法而得名,主要应用于模式识别和分类、函数逼近、数据压缩等领域。

BP网络是一种多层前馈神经网络,由输入层、隐层和输出层组成。

层与层之间采用全互连方式,同一层之间不存在相互连接,隐层可以有一个或多个。

BP算法的学习过程由前向计算过程和误差反向传播过程组成,在前向计算过程中,输入信息从输入层经隐层逐层计算,并传向输出层,每层神经元的状态只影响下一层神经元的状态。

如输出层不能得到期望的输出,则转入误差反向传播过程,误差信号沿原来的连接通路返回,通过修改各层的神经元的权值,使得网络系统误差最小,最终实现网络的实际输出与各自所对应的期望输出逼近。

三、实验内容
3.1训练数据导入
要对BP网络进行训练,必须准备训练样本。

对样本数据的获取,可以通过用元素列表直接输入、创建数据文件,从数据文件中读取等方式,具体采用哪种方法,取决于数据的多少,数据文件的格式等。

本文采用直接输入100个样本数据的方式,同时采用归一化处理,可以加快网络的训练速度。

将输入x和输出y都变为-1到1之间的数据,归一化后的训练样本如下图:
3.2网络初始化
根据系统输入输出序列,确定网络输入层节点数为1,隐含层节点数H 为20,输出层节点数为1。

初始化输入层、隐含层和输出层神经元之间的连接权值ij w ,
jk v ,初始化隐含层阈值0t ,输出层阈值1t ,给定学习速率0a ,1a 和u ,给定算法
迭代次数inum 和最大可接受误差error ,同时给定神经元激励函数sigmoid 。

3.3前向输出计算
根据输入变量x ,输入层和隐含层间连接权值ij w 和隐含层阈值0t ,计算隐含层输出P :
)
)((∑=-⋅=n
i j i ij j t x w u f P 10l
j ,...,,21=其中n 为输入层节点数,本实验中取1;l 为隐含层节点数,本实验中取20;f 为隐含层激励函数,该函数可设置为多种形式,本实验中所选函数为:
x
e x
f -+=
11
)(根据隐含层输出P ,隐含层和输出层间连接权值jk v 和输出层阈值1t ,计算BP 神经网络预测输出k Q :
∑=-=l
j k
jk j k t v P Q 11m
k ,...,,21=其中m 为输出层节点数,本实验中取1。

3.4权值修正
根据网络预测输入Q 和期望输出y ,计算网络预测误差e :
k
k k Q y e -=BP 神经网络采用梯度修正法作为权值和阈值的学习算法,从网络预测误差的负梯度方向修正权值和阈值。

在本实验采用的sigmoid 激励函数下,隐含层和输出层间连接权值和输出层阈值更新公式为:
k
j jk jk e P a u v v 1*+=m k l j ,...,,;,...,,2121==k
k k e u t t *+=11m
k ,...,,21=输入层和隐含层间连接权值和输出层阈值更新公式为:
∑=*-+=m
k k
jk i j j ij ij e v u x P P a w w 101)(l
j n i ,...,,;,...,,2121==∑=*-+=m
k k
jk j j j j e v u P P a t t 1
0001)(l
j ,...,,21=
通过是否达到迭代次数或者错误率是否在可接受范围内来判断算法迭代是否结束,若没有结束,则继续迭代。

四、实验步骤和结果
3.1数据输入和归一化
%function[x,y,y1,Error]=BPnet(t)
%清空环境变量
clc;
clear;
num=1;%要拟合的曲线试举例
for i=0.01*pi:0.02*pi:2*pi%训练样本
x(num)=i;%输入数据
y(num)=sin(x(num));%期望输出
num=num+1;
end
num1=size(x,2);
max_x=max(x);%训练样本归一化
max_y=max(y);
min_x=min(x);
min_y=min(y);
%最大最小法(归一化)
for i=1:num1
x(i)=2*((x(i)-min_x)/(max_x-min_x))-1;
y(i)=2*((y(i)-min_y)/(max_y-min_y))-1;
end
3.2网络结构初始化
H=20;%隐含层神经元个数
w=2*rand(1,H)-1;%初始化隐层权值
v=2*rand(1,H)-1;%初始化输出层权值
t0=2*rand(1,H)-1;%隐层阈值
t1=2*rand(1,1)-1;%输出层阈值
a0=0.4;a1=0.3;u=1;%步长
error=0.0001;err=error;%可接受误差
inum=1;
y1=zeros(1,100);
3.3BP神经网络训练
while inum<=20&err>=error
ii=randperm(length(x));
y2=y(ii);
x2=x(ii);%打乱样本顺序
err=0;
for m=1:100
d=y2(m);%给定输出
for i=1:H
p(i)=w(i)*x2(m)+t0(i);
P(i)=logsig(p(i).*u);
end
q1=0;
for j=1:H
q(j)=P(j)*v(j);
q1=q1+q(j);
end
q2=q1+t1;%输出
%if m<=100
Q=q2;%Q=tanh(q2.*u);%输出层输出
%Q=2*logsig(q2.*u)-1;%输出层也可用sigmoid做激励函数
%else
%Q=-logsig(q2.*u);
%end
y1(m)=Q;
e=[(d-Q).^2]/2;%误差平方函数
err=err+e;
c1=(d-Q)*u;
%c1=2*(d-Q)*Q*(1-Q)*u;
for n=1:H
d1(n)=c1*P(n);
v1(n)=v(n)+a1*d1(n);
end
t1=t1+a1*c1;%对输出层的每一个权值修正
for r=1:H
d0(r)=c1*v(r)*(1-P(r))*x2(m)*P(r);
w1(r)=w(r)+a0*d0(r);
t0(r)=t0(r)+a0*c1*v(r)*(1-P(r))*P(r);%对隐层的每一个权值修正end
w=w1;
v=v1;
end
err=err/100;
erro(inum)=err;
inum=inum+1;
end
3.4BP神经网络预测
num=1;
for i=0.02*pi:0.02*pi:2*pi%预测样本
z(num)=i;
z1(num)=i;
num=num+1;
end
num1=size(z,2);
max_z=max(z);%预测样本归一化
min_z=min(z);
%最大最小法(归一化)
for i=1:num1
z(i)=2*((z(i)-min_z)/(max_z-min_z))-1; end
for m=1:100
for i=1:H
p(i)=w(i)*z(m)+t0(i);
P(i)=logsig(p(i).*u);%隐含层输出end
q1=0;
for j=1:H
q(j)=P(j)*v(j);
q1=q1+q(j);
end
q2=q1+t1;
Q=q2;%输出层输出
y2(m)=Q;
end
figure;plot(z,sin(z1),'b');%期望输出
hold on;
plot(z,y2,'r*');%预测输出
3.5BP神经网络预测结果
迭代20次后的预测结果如下图:
50次后的预测结果如下图:
迭代
迭代200次后的预测结果如下图:
通过上面四个图可以看出,随着迭代次数的增加,预测误差是逐渐减小的,在开始的迭代中,误差减小较快,最后经过规定次数的迭代,基本上能将函数y=sin(x)拟合出来。

虽然BP神经网络具有较高的拟合能力,但是预测结果仍然存在一定的误差,基本的BP神经网络对于一些复杂系统的预测能力会比较差,其拟合能力存在局限性。

相关主题