bp神经网络算法
更新时间:2024-03-10 04:57:01 阅读量: 综合文库 文档下载
BP神经网络算法 三层BP神经网络如图:
传递函数g 目标输出向量
tk 输出层,输出向量
zk 权值为wjk 传递函数f yj 隐含层,隐含层输出向量
权值为wij 输入层,输入向量
x1x2x3 xn
设网络的输入模式为x?(x1,x2,...xn)T,隐含层有h个单元,隐含层的输出为
y?(y1,y2,...yh)T,输出层有m个单元,他们的输出为z?(z1,z2,...zm)T,目标输出为t?(t1,t2,...,tm)T设隐含层到输出层的传递函数为f,输出层的传递函数为g
于是:yj?f(?wxi?1niji??)?f(?wijxi):隐含层第j个神经元的输出;其中
i?0nw0j???,hx0?1
zk?g(?wjkyj):输出层第k个神经元的输出
j?01m2此时网络输出与目标输出的误差为???(tk?zk),显然,它是wij和wjk的函数。
2k?1下面的步骤就是想办法调整权值,使?减小。
由高等数学的知识知道:负梯度方向是函数值减小最快的方向
因此,可以设定一个步长?,每次沿负梯度方向调整?个单位,即每次权值的调整为:
?wpq?????,?在神经网络中称为学习速率 ?wpq可以证明:按这个方法调整,误差会逐渐减小。 BP神经网络(反向传播)的调整顺序为: 1)先调整隐含层到输出层的权值 设vk为输出层第k个神经元的输入vk??wj?0hjkyj
1m1m22(t?z)(t?z)?kk2?kk?zk?vk??2k?1k?1????(tk?zk)g'(vk)yj ?wjk?wjk?zk?vk?wjk-------复合函数偏导公式
1e?vk11若取g(x)?f(x)?,则g'(u)??(1?)?zk(1?zk) k?x?vk2?vk?vk1?e(1?e)1?e1?e于是隐含层到输出层的权值调整迭代公式为:
wjk(t?1)?wjk(t)??zk(1?zk)yj
2)从输入层到隐含层的权值调整迭代公式为:
1m1m2(tk?zk)(tk?zk)2???yj?uj??22?k?1?k?1?wij?wij?yj?uj?wij其中uj为隐含层第j个神经元的输入:uj?
?wxi?0niji注意:隐含层第j个神经元与输出层的各个神经元都有连接,即
??涉及所有的权值wij,?yj
mm?(tk?zk)2?zk?uk???????(tk?zk)f'(uk)wjk因此
?yjk?0?zk?uk?yjk?0于是:
1m (tk?zk)2?m???2?k?1???{(tk?zk)f'(uk)wjk}f'(uj)xi???jxi ?wij?wijk?0
因此从输入层到隐含层的权值调整迭代为公式为:
wij(t?1)?wij(t)???jxi
例:
下表给出了某地区公路运力的历史统计数据,请建立相应的预测模型,并对给出的2010和2011年的数据,预测相应的公路客运量和货运量。 时间 人数(单位:万人) 20.55 22.44 25.37 27.13 29.45 30.1 30.96 34.06 36.42 38.09 39.13 39.99 41.93 44.59 47.3 52.89 55.73 56.76 59.17 60.63 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 73.3900 2010 75.5500 2011
机动车数公路面积(单公路客运量(单位:万位:万平方公(单位:万辆) 里) 人) 0.6 0.09 5126 0.75 0.11 6217 0.85 0.11 7730 0.9 0.14 9145 1.05 0.2 10460 1.35 0.23 11387 1.45 0.23 12353 1.6 0.32 15750 1.7 0.32 18304 1.85 0.34 19836 2.15 0.36 21024 2.2 0.36 19490 2.25 0.38 20433 2.35 0.49 22598 2.5 0.56 25107 2.6 0.59 33442 2.7 0.59 36836 2.85 0.67 40548 2.95 0.69 42927 3.1 0.79 43462 3.9635 0.9880 54359 4.0975 1.0268 55606 公路货运量(单位:万吨) 1237 1379 1385 1399 1663 1714 1834 4322 8132 8936 11099 11203 10524 11115 13320 16762 18673 20724 20803 21804 27827 28453
function main()
clc % 清屏
clear all; %清除内存以便加快运算速度 close all; %关闭当前所有figure图像 SamNum=20; %输入样本数量为20 TestSamNum=20; %测试样本数量也是20 ForcastSamNum=2; %预测样本数量为2
HiddenUnitNum=8; %中间层隐节点数量取8,比工具箱程序多了1个 InDim=3; %网络输入维度为3 OutDim=2; %网络输出维度为2
%原始数据
%人数(单位:万人)
sqrs=[20.55 22.44 25.37 27.13 29.45 30.10 30.96 34.06 36.42 38.09 39.13 39.99 ... 41.93 44.59 47.30 52.89 55.73 56.76 59.17 60.63];
%机动车数(单位:万辆)
sqjdcs=[0.6 0.75 0.85 0.9 1.05 1.35 1.45 1.6 1.7 1.85 2.15 2.2 2.25 2.35 2.5 2.6... 2.7 2.85 2.95 3.1];
%公路面积(单位:万平方公里)
sqglmj=[0.09 0.11 0.11 0.14 0.20 0.23 0.23 0.32 0.32 0.34 0.36 0.36 0.38 0.49 ... 0.56 0.59 0.59 0.67 0.69 0.79]; %公路客运量(单位:万人)
glkyl=[5126 6217 7730 9145 10460 11387 12353 15750 18304 19836 21024 19490 20433 ... 22598 25107 33442 36836 40548 42927 43462]; %公路货运量(单位:万吨)
glhyl=[1237 1379 1385 1399 1663 1714 1834 4322 8132 8936 11099 11203 10524 11115 ... 13320 16762 18673 20724 20803 21804]; p=[sqrs;sqjdcs;sqglmj]; %输入数据矩阵 t=[glkyl;glhyl]; %目标数据矩阵
[SamIn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %原始样本对(输入和输出)初始化
rand('state',sum(100*clock)) %依据系统时钟种子产生随机数
NoiseVar=0.01; %噪声强度为0.01(添加噪声的目的是为了防止网络过度拟合)
Noise=NoiseVar*randn(2,SamNum); %生成噪声
SamOut=tn + Noise; %将噪声添加到输出样本上
TestSamIn=SamIn; %这里取输入样本与测试样本相同因为样本容量偏少
TestSamOut=SamOut; %也取输出样本与测试样本相同
MaxEpochs=50000; %最多训练次数为50000 lr=0.035; %学习速率为0.035
E0=0.65*10^(-3); %目标误差为0.65*10^(-3)
W1=0.5*rand(HiddenUnitNum,InDim)-0.1; %初始化输入层与隐含层之间的权值 B1=0.5*rand(HiddenUnitNum,1)-0.1; %初始化输入层与隐含层之间的阈值
W2=0.5*rand(OutDim,HiddenUnitNum)-0.1; %初始化输出层与隐含层之间的权值 B2=0.5*rand(OutDim,1)-0.1; %初始化输出层与隐含层之间的阈值
ErrHistory=[]; %给中间变量预先占据内存 for i=1:MaxEpochs
HiddenOut=logsig(W1*SamIn+repmat(B1,1,SamNum)); % 隐含层网络输出 NetworkOut=W2*HiddenOut+repmat(B2,1,SamNum); % 输出层网络输出
Error=SamOut-NetworkOut; % 实际输出与网络输出之差 SSE=sumsqr(Error) %能量函数(误差平方和)
ErrHistory=[ErrHistory SSE];
if SSE % 以下六行是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=[73.39 75.55 3.9635 4.0975 0.9880 1.0268]; 10年和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)
正在阅读:
bp神经网络算法03-10
初一心理健康教育课教案08-27
中国石油天燃气市场发展研究及投资前景报告(目录) - 图文04-22
第五章向量代数07-12
常用免疫学名词解释04-27
为什么叫“基本不等式”03-23
口腔材料学复习题04-23
艺体组教研工作计划07-27
中考宝典 209-19
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 神经网络
- 算法
- 个人总结系列-61IPFIX FLOW总结
- 领导层岗位职责
- openwrt ubus简介
- 汽车专业英语翻译
- 地域文化 青海省情考试参考答案
- 菜单翻译中英文
- 语文版必修二《《新青》时代的鲁迅》教案
- 《当代中国政治制度》试题库
- 叙利亚危机影响全球石油市场 doc
- 网络消费的诚信问题
- 2011届高考历史第一轮经济文明史专题复习4
- 惯性秤实验报告(完全版) - 图文
- 教育学资料1
- 铁路交通事故调查基本步骤与程序
- 管理学基础 - 考试大纲
- 大跨度桁架分段吊装施工工法 - 图文
- 阜阳市控制性详细规划通则
- 福建泉州四校2012届高三第二次联考卷地理(DOC)
- 2019年整理--市年上半年政法综治工作总结
- 2019江西公务员考试申论范文:最多跑一次 服务零距离