1.概述:Rumelhart,McClelland于1985年提出了BP网络的误差反向后传BP(Back Propagation)学习算法。原理是利用输出后的误差来估计输出层的直接前导层的误差,再用这个误差估计更前一层的误差,如此一层一层的反传下去,就获得了所有其他各层的误差估计。将误差分摊给各层的所有单元的误差信号进而修正各单元的权值,迭代直到到达可接受的误差或达到指定的次数。

是一种有导师的学习算法,是梯度下降法在多层前馈网中的应用。可看成是线性自适应神经元学习算法的进一步推广。

BP学习算法=前向计算过程+误差反向传播过程

2.模型:
BP网络的神经元模型是改进了感知器神经元模型得到的。

输入层:Wij=1,f(x)=x;隐层:f(x)=1/(1+e^(-x)) f(x)=(1-e(-x))/(1+e(-x));输出层:f(x)=(1-e(-x))/(1+e(-x)) f(x)=1/(1+e^(-x)) f(x)=kx

若输入层有n个神经元,隐含层有p个神经元,输出层有q个神经元
定义如下
输入向量; x=(x1,x2,…xn)
隐含层输入向量; hi=(hi1,hi2,…hip)
隐含层输出向量; ho=(ho1,ho2,…,hop)
输出层输入向量; yi=(yi1,yi2,…,yiq)
输出层输出向量; yo=(yo1,yo2,…,yoq)
期望输出向量; d=(d1,d2,…,dq)
输入层与中间层的连接权值: Wih
隐含层与输出层的连接权值: Who
隐含层各神经元的阈值: bh
输出层各神经元的阈值: bo
样本数据个数: k=1,2…,m
激活函数: f(·)
误差函数: e=0.5*∑(d(k)-yo(k))^2 从1到q求和

3.算法描述:
(1)网络初始化
给各连接权值分别赋一个区间(-1,1)内的随机数,设定误差函数e,给定计算精度值 和最大学习次数M。
(2)随机选取第 k个输入样本及对应期望输出
x(k)=(x1(k),x2(k),…,xn(k)) ;
d(k)=(d1(k),d2(k),…,dq(k))
(3)计算隐含层各神经元的输入和输出

(4)利用网络期望输出和实际输出,计算误差函数对输出层的各神经元的偏导数

(5)利用隐含层到输出层的连接权值、输出层的 δ0(k) 和隐含层的输出计算误差函数对隐含层各神经元的偏导数 δh(k) 。

(6)利用输出层各神经元的 δ0(k) 和隐含层各神经元的输出来修正连接权值 who(k)

(7)利用隐含层各神经元的 δh(k) 和输入层各神经元的输入修正连接权。

(8)计算全局误差

(9)判断网络误差是否满足要求。当误差达到预设精度或学习次数大于设定的最大次数,则结束算法。否则,选取下一个学习样本及对应的期望输出,返回到第三步,进入下一轮学习。

4.MATLAB的函数:

newff()  %生成一个前馈BP网络
net = newff(PR,[S1 S2...SN1],{TF1 TF2...TFN1},BTF,BLF,PF) %net为创建的新BP神经网络;PR为网络输入取向量取值范围的矩阵;
[S1 S2…SNl]表示网络隐含层和输出层神经元的个数;{TFl TF2…TFN1}表示网络隐含层和输出层的传输函数,默认为‘tansig’;
BTF表示网络的训练函数,默认为‘trainlm’;BLF表示网络的权值学习函数,默认为‘learngdm’;PF表示性能数,默认为‘mse’。 tansig()  %双曲正切S型(Tan-Sigmoid)传输函数
a = tansig(n)  %双曲正切Sigmoid函数把神经元的输入范围从(-∞,+∞)映射到(-1,1)。它是可导函数,适用于BP训练的神经元。logsig()  %对数S型(Log-Sigmoid)传输函数
a = logsig(N)  %对数Sigmoid函数把神经元的输入范围从(-∞,+∞)映射到(0,1)。它是可导函数,适用于BP训练的神经元。traingd()  %梯度下降BP训练函数

5.例题:
构建一个如下的三层BP神经网络对药品的销售进行预测:输入层有三个结点,隐含层结点数为5,隐含层的激活函数为tansig;输出层结点数为1个,输出层的激活函数为logsig,并利用此网络对药品的销售量进行预测,预测方法采用滚动预测方式,即用前三个月的销售量来预测第四个月的销售量,如用1、2、3月的销售量为输入预测第4个月的销售量,用2、3、4月的销售量为输入预测第5个月的销售量.如此反复直至满足预测精度要求为止。

月份 1 2 3 4 5 6 7 8 9 10 11 12
销量 2056 2395 2600 2298 1634 1600 1873 1478 1900 1500 2046 1556

MATLAB代码

clear,clc
%以每三个月的销售量经归一化处理后作为输入
P=[0.5152  0.8173  1.0000;0.8173   1.0000  0.7308;1.0000   0.7308  0.1390;0.7308   0.1390  0.1087;0.1390   0.1087  0.3520;0.1087   0.3520  0.0000;]';
%以第四个月的销售量归一化处理后作为目标向量
T=[0.7308 0.1390 0.1087 0.3520 0.0000 0.3761];
%创建一个BP神经网络,每个输入向量的取值范围为[0 ,1], 5个隐层神经元,一个输出层神经元,隐层的激活函数tansig,输出层激活函数logsig,训练函数为梯度下降函数。
net=newff([0 1;0 1;0 1],[5,1],{'tansig','logsig'},'traingd');
net.trainParam.epochs=20000;
net.trainParam.goal=0.01;
LP.lr=0.1; %设置学习速率为0.1
net=train(net,P,T);
a=net(P);
plot(1:6, a, 'r*', 1:6, T, 'bo')

可以看出预测效果与实际值存在误差,此误差可以通过增加运行步数和提高预设误差精度业进一步缩小。

4.人工神经网络(BP神经网络)相关推荐

  1. mlp神经网络和bp神经网络,bp神经网络lm算法原理

    MATLAB中训练LM算法的BP神经网络 1.初始权值不一样,如果一样,每次训练结果是相同的 2.是 3.在train之前修改权值,IW,LW,b,使之相同 4.取多次实验的均值 一点浅见,仅供参考 ...

  2. 神经网络 | BP神经网络-数字识别(附源代码)

    ===================================================== github:https://github.com/MichaelBeechan CSDN: ...

  3. 人工神经网络与bp神经网络,BP神经网络算法原理

    BP神经网络原理 人工神经网络有很多模型,但是日前应用最广.基本思想最直观.最容易被理解的是多层前馈神经网络及误差逆传播学习算法(ErrorBack-Prooaeation),简称为BP网络. 在19 ...

  4. 神经网络 | BP神经网络介绍(附源代码:BP神经网络-异或问题)

    ===================================================== github:https://github.com/MichaelBeechan CSDN: ...

  5. bp神经网络和cnn神经网络,bp神经网络与cnn区别

    深度学习与神经网络有什么区别 深度学习与神经网络关系2017-01-10最近开始学习深度学习,基本上都是zouxy09博主的文章,写的蛮好,很全面,也会根据自己的思路,做下删减,细化. 五.Deep ...

  6. bp神经网络和cnn神经网络,bp神经网络和神经网络

    bp算法在深度神经网络上为什么行不通 BP算法作为传统训练多层网络的典型算法,实际上对仅含几层网络,该训练方法就已经很不理想,不再往下进行计算了,所以不适合深度神经网络. BP算法存在的问题:(1)梯 ...

  7. 神经网络 - BP神经网络与RBF神经网络模型解决实际问题 - (Matlab建模)

    目录 神经网络模型简述 实例:交通运输能力预测设计 MATLAB程序及仿真结果 由于货物运输.地方经济及企业发展的紧密联系,因此作为反映货物运输需求的一项重要指标, 货运量预测研究和分析具有较强的实际 ...

  8. 一文搞定bp神经网络,bp神经网络的实现

    1.自学bp神经网络要有什么基础?? 简介:BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网 ...

  9. bp网络和卷积神经网络,bp神经网络

    与传统bp神经网络相比,极限学习机有哪些优点 极限学习机(ELM)算法,随机产生输入层与隐含层间的连接权值及隐含层神经元的阈值,且在训练过程中无需调整,只需设置隐含层神经元的个数,便可获得唯一的最优解 ...

  10. bp神经网络和神经网络,bp神经网络是什么网络

    神经网络BP模型 一.BP模型概述误差逆传播(Error Back-Propagation)神经网络模型简称为BP(Back-Propagation)网络模型. Pall Werbas博士于1974年 ...

最新文章

  1. 600分钟搞定Python入门到实战
  2. mac系统下git、mysql、nginx、php的环境搭建
  3. UA MATH567 高维统计II 随机向量5 亚高斯随机向量
  4. 代码是写给人看的,请C/C++过来的程序员们多学习软件工程
  5. kubernetes (k8s)的二进制部署单节点(etcd和flannel网络)
  6. java操作Excel之POI(3)
  7. hbase组合rowkey_「从零单排HBase 11」HBase二级索引解决方案
  8. CS229 7.1应用机器学习中的一些技巧
  9. Tomcat 打开jmx
  10. 软件开发项目云端All-In-One体验
  11. 幸福框架:模式驱动开发
  12. stl之queue队列容器
  13. 乐易模块V7.62更新日志
  14. 处理文件的fseek函数
  15. java求航班飞行时间代码,基于JAVA的航班动态接口调用代码实例
  16. 五万字,快速读完《图解TCP/IP》核心内容!!!(建议收藏)
  17. CMM(软件能力成熟度模型)
  18. Docker 目录/var/lib/docker/containers文件过大
  19. Leetcode——唯唯诺诺对并查集的初次相见
  20. 诠释绿色科技 Laedana荣获2022国际CMF设计奖

热门文章

  1. 4保安绑架轮奸女子 海口警方4小时破案
  2. HD Tune中的各种信息表示的含义
  3. html怎么做左侧广告,利用DIV+CSS制作浮动广告
  4. 华东交大计算机绘图,华东交通大学理工学院本科毕业设计(论文)新手册.doc
  5. mud使用mysql_MUD
  6. 短信发送流程:系统短信(SMS)发送流程
  7. HijackThis日志细解【简明教程增强版】(二)
  8. 淘宝推出了定制版本的 JVM
  9. 新倩女幽魂维护服务器时间表,《倩女幽魂2》周常维护服务器合并候选名单
  10. DVWA靶场过程整理