1 / 5
文档名称:

(完整版)bp神经网络算法.docx

格式:docx   大小:69KB   页数:5页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

(完整版)bp神经网络算法.docx

上传人:青青松松 2022/12/6 文件大小:69 KB

下载得到文件列表

(完整版)bp神经网络算法.docx

文档介绍

文档介绍:该【(完整版)bp神经网络算法 】是由【青青松松】上传分享,文档一共【5】页,该文档可以免费在线阅读,需要了解更多关于【(完整版)bp神经网络算法 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。BP神经网络算法
三层BP神经网络如图:
目标输出向量
传达函数g输出层,输出向量
权值为wjk
传达函数f
隐含层,隐含层
输出向量
输入层,输入
向量
设网络的输入模式为
x
(x1,x2,...xn)T,隐含层有h个单元,隐含层的输出为
y(y1,y2,...yh)T
,输出
层有m个单元,他们的输出为
z
(z1,z2,...zm)T,目标输出为t(t1,t2,...,tm)T设隐含层到输出层的传
递函数为
f,输出层的传达函数为
g
n
n
于是:yj
f(
wijxi
)
f(
wijxi):隐含层第
j个神经元的输出;此中
w0j
,x0
1
i1
i0
h
zkg(
wjkyj):输出层第
k个神经元的输出
j
0
此时网络输出与目标输出的偏差为
1m
(tkzk)2
,显然,它是wij和wjk的函数。
2k1
下边的步骤就是想方法调整权值,使
减小。
由高等数学的知识知道:负梯度方向是函数值减小最快的方向
所以,能够设定一个步长
,每次沿负梯度方向调整
个单位,即每次权值的调整为:
wpq
wpq
,在神经网络中称为学****速率
能够证明:按这个方法调整,偏差会渐渐减小。
BP神经网络(反向流传)的调整次序为:
1)先调整隐含层到输出层的权值
h
设vk为输出层第k个神经元的输入
vk
wjkyj
j
0
-------复合函数偏导公式
1
g'(uk)
evk
1
(1
1
)zk(1zk)
若取g(x)
f(x)1ex,则
(1evk)2
1evk
1evk
于是隐含层到输出层的权值调整迭代公式为:
2)从输入层到隐含层的权值调整迭代公式为:
n
此中uj为隐含层第j个神经元的输入:uj
wijxi
i0
注意:隐含层第
j个神经元与输出层的各个神经元都有连结,即
波及全部的权值
wij,所以
yj
m(tk
zk)2
zk
uk
m
yjk0
zk
uk
yj
(tkzk)f'(uk)wjk
k0
于是:
所以从输入层到隐含层的权值调整迭代为公式为:
例:
下表给出了某地域公路运力的历史统计数据,
请成立相应的展望模型,
并对给出的2010和2011年的数据,
展望相应的公路客运量和货运量。
人数(单位:
灵活车数
公路面积(单
公路客运量
公路货运量
时间
(单位:万
位:万平方公
(单位:万
(单位:万
万人)
辆)
里)
人)
吨)
1990



5126
1237
1991



6217
1379
1992



7730
1385
1993



9145
1399
1994



10460
1663
1995



11387
1714
1996



12353
1834
1997



15750
4322
1998



18304
8132
1999



19836
8936
2000



21024
11099
2001



19490
11203
2002



20433
10524
2003



22598
11115
2004



25107
13320
2005



33442
16762
2006



36836
18673
2007



40548
20724
2008



42927
20803
2009



43462
21804
2010



2011



functionmain()
clc
%清屏
clearall;
%除掉内存以便加速运算速度
closeall;
%封闭目前全部
figure
图像
SamNum=20;
%输入样本数目为
20
TestSamNum=20;
%测试样本数目也是
20
ForcastSamNum=2;
%展望样本数目为
2
HiddenUnitNum=8;
%中间层隐节点数目取
8,比工具箱程序多了
1个
InDim=3;
%网络输入维度为3
OutDim=2;
%网络输出维度为
2
原始数据
人数(单位:万人)
sqrs=[...
];
灵活车数(单位:万辆)
sqjdcs=[...
];
公路面积(单位:万平方公里)
sqglmj=[...
];
公路客运量(单位:万人)
glkyl=[5126621777309145104601138712353157501830419836210241949020433...
22598251073344236836405484292743462];
公路货运量(单位:万吨)
glhyl=[123713791385139916631714183443228132893611099112031052411115...
133201676218673207242080321804];
p=[sqrs;sqjdcs;sqglmj];%输入数据矩阵
t=[glkyl;glhyl];%目标数据矩阵
[SamIn,minp,maxp,tn,mint,maxt]=premnmx(p,t);%原始样本对(输入和输出)初始化
rand('state',sum(100*clock))
%依据系统时钟种子产生随机数
rand是产生
0到1的平均散布,randn
是产生均值为0,方差为
1的正态散布
rand(n)或randn(n)
产生n*n阶矩阵,rand(m,n)或randn(n)产生
m*n的随机数矩阵
NoiseVar=;
%(增添噪声的目的是为了防备网络过分拟合)
Noise=NoiseVar*randn(2,SamNum);
%生成噪声
SamOut=tn+Noise;
%将噪声增添到输出样本上
TestSamIn=SamIn;
%这里取输入样本与测试样真同样由于样本容量偏少
TestSamOut=SamOut;
%也取输出样本与测试样真同样
MaxEpochs=50000;
%最多训练次数为50000
lr=;
%
E0=*10^(-3);
%*10^(-3)
W1=*rand(HiddenUnitNum,InDim)-;%初始化输入层与隐含层之间的权值
B1=*rand(HiddenUnitNum,1)-;%初始化输入层与隐含层之间的阈值
W2=*rand(OutDim,HiddenUnitNum)-;%初始化输出层与隐含层之间的权值
B2=*rand(OutDim,1)-;%初始化输出层与隐含层之间的阈值
ErrHistory=[];%给中间变量早先占有内存
fori=1:MaxEpochs
HiddenOut=logsig(W1*SamIn+repmat(B1,1,SamNum));%隐含层网络输出
NetworkOut=W2*HiddenOut+repmat(B2,1,SamNum);%输出层网络输出
Error=SamOut-NetworkOut;%实质输出与网络输出之差
SSE=sumsqr(Error)%能量函数(偏差平方和)
ErrHistory=[ErrHistorySSE];
ifSSE<E0,break,end%假如达到偏差要求则跳出学****循环
以下六行是BP网络最核心的程序
他们是权值(阈值)依据能量函数负梯度降落原理所作的每一步动向调整量
Delta2=Error;
Delta1=W2'*Delta2.*HiddenOut.*(1-HiddenOut);
dW2=Delta2*HiddenOut';
dB2=Delta2*ones(SamNum,1);
dW1=Delta1*SamIn';
dB1=Delta1*ones(SamNum,1);
对输出层与隐含层之间的权值和阈值进行修正
W2=W2+lr*dW2;
B2=B2+lr*dB2;
对输入层与隐含层之间的权值和阈值进行修正
W1=W1+lr*dW1;
B1=B1+lr*dB1;
end
HiddenOut=logsig(W1*SamIn+repmat(B1,1,TestSamNum));%隐含层输出最后结果
NetworkOut=W2*HiddenOut+repmat(B2,1,TestSamNum);%输出层输出最后结果
a=postmnmx(NetworkOut,mint,maxt);%复原网络输出层的结果
x=1990:2009;%时间轴刻度
newk=a(1,:);%网络输出客运量
newh=a(2,:);%网络输出货运量
figure;
subplot(2,1,1);plot(x,newk,'r-o',x,glkyl,'b--+')%绘值公路客运量比较图;
legend('网络输出客运量','实质客运量');
xlabel('

年份');ylabel('

客运量

/万人');
subplot(2,1,2);plot(x,newh,'r-o',x,glhyl,'b--+')%绘制公路货运量比较图;legend('网络输出货运量','实质货运量');xlabel('年份');ylabel('货运量/万吨');
利用训练好的网络进行展望
当用训练好的网络对新数据pnew进行展望时,也应作相应的办理
pnew=[

];%2010年和2011年的有关数据;
pnewn=tramnmx(pnew,minp,maxp);%利用原始输入数据的归一化参数对新数据进行归一化;
HiddenOut=logsig(W1*pnewn+repmat(B1,1,ForcastSamNum));%隐含层输出展望结果
anewn=W2*HiddenOut+repmat(B2,1,ForcastSamNum);%输出层输出展望结果
把网络展望获得的数据复原为原始的数目级;
anew=postmnmx(anewn,mint,maxt)