BP神经网络实例Word文件下载.docx

上传人:b****6 文档编号:17273279 上传时间:2022-11-30 格式:DOCX 页数:15 大小:235.05KB
下载 相关 举报
BP神经网络实例Word文件下载.docx_第1页
第1页 / 共15页
BP神经网络实例Word文件下载.docx_第2页
第2页 / 共15页
BP神经网络实例Word文件下载.docx_第3页
第3页 / 共15页
BP神经网络实例Word文件下载.docx_第4页
第4页 / 共15页
BP神经网络实例Word文件下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

BP神经网络实例Word文件下载.docx

《BP神经网络实例Word文件下载.docx》由会员分享,可在线阅读,更多相关《BP神经网络实例Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。

BP神经网络实例Word文件下载.docx

(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);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1