BP神经网络实例Word文件下载.docx
- 文档编号:17273279
- 上传时间:2022-11-30
- 格式:DOCX
- 页数:15
- 大小:235.05KB
BP神经网络实例Word文件下载.docx
《BP神经网络实例Word文件下载.docx》由会员分享,可在线阅读,更多相关《BP神经网络实例Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
(2)输入训练样本
,对每个样本进行(3)~(5)步。
(3)计算各个网络层的实际输出
(4)计算训练误差
,输出层
,隐含层和输入层
(5)修正权值和阈值
(6)当样本集中的所有样本都经历了(3)~(5)步后,即完成了一个训练周期(Epoch),计算性能指标
其中
。
(7)如果性能指标满足精度要求,即
,那么训练结束,否则,转到
(2),继续下一个训练周期。
是小的正数,根据实际情况而定,例如
3、流程图
根据BP网络的算法,我们可得流程图如下。
第二章BP神经网络实例分析
一、实例要求
1、
取九个点来训练网络,然后得出拟合曲线。
2、
取适当数量训练点来训练网络,然后得出拟合曲线
3、
取11*11个点来训练网络,并用21*21个点测试拟合的曲面。
二、计算结果如下
1、第一个函数:
(2)学习率为,训练次数为3300时
训练过程如学习曲线所示,圈圈为学习后产生的,折线为标准函数点连线。
检验过程如检验曲线所示,点序列为拟合曲线上的点,曲线为标准函数曲线。
误差曲线如右图所示。
(2)学习率为,训练次数为3300时的曲线。
从函数1可以看出,学习率比较大时,曲线收敛比较快,可以比较快速达到精度要求。
但实际上,学习率比较大时(即收敛步长比较大),容易超出收敛边界,反而收敛导致不稳定,甚至发散。
2、第二个函数:
(1)学习率为,样本点数为10,学习次数为5000时的曲线如下:
(2)学习率为,样本点数为30,学习次数为5000时的曲线如下:
从函数2可以看出,样本点个数越多时,曲线精度越高。
但学习时间会有所增加。
3、第三个函数
学习率为,动量项学习率为,训练次数为5000,训练样本数为11*11。
图形如下:
附:
程序源代码
第一个和第二个函数的程序:
%此BP网络为两层隐含层,每个隐含层4个节点。
输入输出各一层
%输入层和输出层均采用恒等函数,隐含层采用S形函数
clearall;
closeall;
b=;
%精度要求
a=;
%学习率
c=2;
Num=30;
%训练样本数
N=3300;
%训练次数
Nj=80;
%检验样本数
o0=rand(2,1);
%输入层阈值
o1=rand(4,1);
%第一层隐含层阈值
o2=rand(4,1);
%第二层隐含层阈值
o3=rand(1,1);
%输出层阈值
w1=rand(4,2);
%输入信号为两个
w2=rand(4,4);
%第一层隐含层与第二层隐含层的权系数
w3=rand(1,4);
%第二层隐含层与输出层的权系数
symsxy;
%符号变量,用于两个输入值
%fcn=cos(x);
%被学习的函数
fcn=abs(sin(x));
x0=0:
2*pi/(Num-1):
2*pi;
%输入的训练样本
y0=0:
x=x0;
y=y0;
X(1,:
)=x0;
X(2,:
)=y0;
yf=eval(fcn);
%输出的训练样本
x3=zeros(1,Num);
time=0;
forj=1:
1:
N
fori=1:
Num
%前向计算:
s1=w1*X(:
i)-o1;
x1=1./(1+exp(-s1));
%第一层隐含层输出
s2=w2*x1-o2;
x2=1./(1+exp(-s2));
%第二层隐含层输出
s3=w3*x2-o3;
%x3=1./(1+exp(-s3));
%输出层输出
x3(i)=s3;
%反向计算:
%e3=(yf(i)-x3)./(exp(s3)+2+exp(-s3));
%输出层误差
e3=yf(i)-x3(i);
e2=((w3)'
*e3)./(exp(s2)+2+exp(-s2));
%第二层隐含层误差
e1=((w2)'
*e2)./(exp(s1)+2+exp(-s1));
%第一层隐含层误差
%权值和阈值修正
w3=w3+a*e3*(x2)'
;
%权值修正
w2=w2+a*e2*(x1)'
w1=w1+a*e1*(X(:
i))'
o3=o3-a*e3;
%阈值修正
o2=o2-a*e2;
o1=o1-a*e1;
end
E(j)=*((yf-x3)*(yf-x3)'
);
%方差
time=time+1;
%记录学习次数
ifE(j)<
b
break
end
end
%检验
m=0:
2*pi/(Nj-1):
n=0:
x=m;
y=n;
ym=eval(fcn);
%期望输出
M(1,:
)=x;
M(2,:
)=y;
m3=zeros(1,Nj);
fori=1:
Nj
S1=w1*M(:
m1=1./(1+exp(-S1));
S2=w2*m1-o2;
m2=1./(1+exp(-S2));
%第二层隐含层输出
S3=w3*m2-o3;
%m3(i)=1./(1+exp(-S3));
%输出层输出
m3(i)=S3;
figure
(1);
plot(m,ym,'
g-'
holdon
plot(m,m3,'
r.'
title('
检验曲线'
xlabel('
x'
ylabel('
y=cos(x)'
figure
(2);
plot(x0,yf,'
b-'
plot(x0,x3,'
ro'
学习曲线'
y=cos(x)'
k=1:
time;
figure(3);
plot(k,E);
误差曲线'
训练次数'
误差值'
第三个函数的程序
%此BP网络为两层隐含层,每个隐含层10个节点。
%精度要求
c=;
%动量项学习率
Num=11;
N=5000;
Nj=21;
%检验样本数
%输入层阈值
o1=rand(10,1);
o2=rand(10,1);
%第二层隐含层阈值
%输出层阈值
w1=rand(10,2);
%输入层与第一层隐含层的权系数
w2=rand(10,10);
%第一层隐含层与第二层隐含层的权系数
w3=rand(1,10);
o1_before=zeros(4,1);
%用于存储前一次的阈值
o2_before=zeros(4,1);
o3_before=zeros(1,1);
w1_before=zeros(4,2);
%用于存储前一次的权值
w2_before=zeros(4,4);
w3_before=zeros(1,4);
o1_next=zeros(4,1);
%用于存储后一次的阈值
o2_next=zeros(4,1);
o3_next=zeros(1,1);
w1_next=zeros(4,2);
%用于存储后一次的权值
w2_next=zeros(4,4);
w3_next=zeros(1,4);
[x0,y0]=meshgrid(-10:
20/(Num-1):
10);
%输入的训练样本
yf=(sin(x0).*sin(y0))./(x0.*y0);
x3=zeros(Num,Num);
E=zeros(1,N);
forh=1:
X=zeros(2,1);
X(1,:
)=x0(i,h);
X(2,:
)=y0(i,h);
s1=w1*X-o1;
x3(i,h)=s3;
w3_next=w3+a*e3*(x2)'
+c*(w3-w3_before);
w2_next=w2+a*e2*(x1)'
+c*(w2-w2_before);
w1_next=w1+a*e1*X'
+c*(w1-w1_before);
o3_next=o3-a*e3+c*(o3-o3_before);
%阈值修正
o2_next=o2-a*e2+c*(o2-o2_before);
o1_next=o1-a*e1+c*(o1-o1_before);
w1_before=w1;
w2_before=w2;
w3_before=w3;
o1_before=o1;
o2_before=o2;
o3_before=o3;
w1=w1_next;
w2=w2_next;
w3=w3_next;
o1=o1_next;
o2=o2_next;
o3=o3_next;
d=yf(i,h);
y=x3(i,h);
E(j)=E(j)+*((d-y)^2);
%方差
%记录学习次数
ifE(j)<
break
[m,n]=meshgrid(-10:
(20/(Nj-1):
ym=(sin(m).*sin(n))./(m.*n);
m3=zeros(Nj,Nj);
forj=1:
M=zeros(2,1);
M(1,:
)=m(i,j);
M(2,:
)=n(i,j);
S1=w1*M-o1;
m3(i,j)=S3;
%输出层输出
surf(x0,y0,yf);
title('
学习期望输出'
gridon;
surf(x0,y0,x3);
学习实际输出'
subplot(221);
surf(m,n,ym);
检验期望输出'
subplot(222);
surf(m,n,m3);
检验实际输出'
subplot(212);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- BP 神经网络 实例