BP神经网络

1、BP神经网络发展背景

在人工神经网络的发展历史上,感知机(Multilayer Perceptron,MLP)网络曾对人工神经网络的发展发挥了极大的作用,也被认为是一种真正能够使用的人工神经网络模型,它的出现曾掀起了人们研究人工神经元网络的热潮。单层感知网络(M-P模型)做为最初的神经网络,具有模型清晰、结构简单、计算量小等优点。但是,随着研究工作的深入,人们发现它还存在不足,例如无法处理非线性问题,即使计算单元的作用函数不用阀函数而用其他较复杂的非线性函数,仍然只能解决解决线性可分问题.不能实现某些基本功能,从而限制了它的应用。增强网络的分类和识别能力、解决非线性问题的唯一途径是采用多层前馈网络,即在输入层和输出层之间加上隐含层。构成多层前馈感知器网络。

2、BP神经网络的基本原理

BP (Back Propagation) 网络是1986年由Rinehart和McClelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input) 、隐层(hide layer) 和输出层(output layer)。

3、BP神经网络的具体步骤

1、从训练集中取出某一样本,把信息输入网络中。
2、通过各节点间的连接情况正向逐层处理后,得到神经网络的实际输出。
3、计算网络实际输出与期望输出的误差。
4、将误差逐层反向回传至之前各层,并按一定原则将误差信号加载到连接权值上,使整个神经网络的连接权值向误差减小的方向转化。
5、对训练集中每一个输入—输出样本对重复以上步骤,直到整个训练样本集的误差减小到符合要求为止。

BP网络由输入层、隐藏层、输出层组成。给定训练集D={(x1,y1),(x2,y2…(xn,yn)},其中xnϵRd,ynϵRl,表示输入示例由d个属性组成,输出l维实值变量。现在,我们看看如何求得输出值,以及怎么由输出值调整权值和阈值。

4、BP神经网络的算法

xi:输入层第i个结点输入值
wij:输入层结点i到隐含层结点j的权重
θj: 隐含层第j个结点的阈值 φ(x):隐含层激励函数
wjk:隐含层结点j到输出层结点k的权重
bk:输出层结点k的阈值
f(x):输出层激励函数
yk:输出层第k个结点的输出

前馈过程

设网络输入为x,则隐含层第j个结点的输入为:

网络输出层第k个结点的输入为:

因此,网络输出层第k个结点的输出为:

5、BP神经网络优缺点

优点:
(1)神经网络有很强的非线性拟合能力,可映射任意复杂的非线性关系。
(2)学习规则简单,便于计算机实现。
(3)具有很强的鲁棒性、记忆能力、非线性映射能力以及强大的自学习能力,因此有很大的应用市场。

缺点:
(1)最严重的问题是没能力来解释自己的推理过程和推理依据。
(2)不能向用户提出必要的询问,而且当数据不充分的时候,神经网络就无法进行工作。
(3)把一切问题的特征都变为数字,把-切推理都变为数值计算,其结果势必是丢失信息。
(4)理论和学习算法还有待于进一步完善和提高。

6、感知器与感知器神经网络代码:

% 第一章  感知器
% 1. 感知器神经网络的构建
% 1.1  生成网络
net=newp([0 2],1);%单输入,输入值为[0,2]之间的数
inputweights=net.inputweights{1,1};%第一层的权重为1
biases=net.biases{1};%阈值为1
% 1.2  网络仿真net=newp([-2 2;-2 2],1);%两个输入,一个神经元,默认二值激活
net.IW{1,1}=[-1 1];%权重,net.IW{i,j}表示第i层网络第j个神经元的权重向量
net.IW{1,1}
net.b{1}=1;
net.b{1}
p1=[1;1],a1=sim(net,p1)
p2=[1;-1],a2=sim(net,p2)
p3={[1;1] [1 ;-1]},a3=sim(net,p3) %两组数据放一起
p4=[1 1;1 -1],a4=sim(net,p4)%也可以放在矩阵里面
net.IW{1,1}=[3,4];
net.b{1}=[1];
a1=sim(net,p1)
% 1.3  网络初始化
net=init(net);
wts=net.IW{1,1}
bias=net.b{1}
% 改变权值和阈值为随机数
net.inputweights{1,1}.initFcn='rands';
net.biases{1}.initFcn='rands';
net=init(net);
bias=net.b{1}
wts=net.IW{1,1}
a1=sim(net,p1)% 2. 感知器神经网络的学习和训练
% 1 网络学习
net=newp([-2 2;-2 2],1);
net.b{1}=[0];
w=[1 -0.8]
net.IW{1,1}=w;
p=[1;2];
t=[1];
a=sim(net,p)
e=t-a
help learnp
dw=learnp(w,p,[],[],[],[],e,[],[],[],[],[])
w=w+dw
net.IW{1,1}=w;
a=sim(net,p)net = newp([0 1; -2 2],1);
P = [0 0 1 1; 0 1 0 1];
T = [0 1 1 1];
Y = sim(net,P)
net.trainParam.epochs = 20;
net = train(net,P,T);
Y = sim(net,P)% 2 网络训练
net=init(net);
p1=[2;2];t1=0;p2=[1;-2];t2=1;p3=[-2;2];t3=0;p4=[-1;1];t4=1;
net.trainParam.epochs=1;
net=train(net,p1,t1)
w=net.IW{1,1}
b=net.b{1}
a=sim(net,p1)
net=init(net);
p=[[2;2] [1;-2] [-2;2] [-1;1]];
t=[0 1 0 1];
net.trainParam.epochs=1;
net=train(net,p,t);
a=sim(net,p)
net=init(net);
net.trainParam.epochs=2;
net=train(net,p,t);
a=sim(net,p)
net=init(net);
net.trainParam.epochs=20;
net=train(net,p,t);
a=sim(net,p)% 3. 二输入感知器分类可视化问题
P=[-0.5 1 0.5 -0.1;-0.5 1 -0.5 1];
T=[1 1 0 1]
net=newp([-1 1;-1 1],1);
plotpv(P,T);
plotpc(net.IW{1,1},net.b{1});
%hold on;
%plotpv(P,T);
net=adapt(net,P,T);
net.IW{1,1}
net.b{1}
plotpv(P,T);
plotpc(net.IW{1,1},net.b{1})
net.adaptParam.passes=3;
net=adapt(net,P,T);
net.IW{1,1}
net.b{1}
plotpc(net.IW{1},net.b{1})
net.adaptParam.passes=6;
net=adapt(net,P,T)
net.IW{1,1}
net.b{1}
plotpv(P,T);
plotpc(net.IW{1},net.b{1})plotpc(net.IW{1},net.b{1})
%仿真
a=sim(net,p);
plotpv(p,a)p=[0.7;1.2]
a=sim(net,p);
plotpv(p,a);
hold on;
plotpv(P,T);
plotpc(net.IW{1},net.b{1})
%感知器能够正确分类,从而网络可行。% 4. 标准化学习规则训练奇异样本
P=[-0.5 -0.5 0.3 -0.1 -40;-0.5 0.5 -0.5 1.0 50]
T=[1 1 0 0 1];
net=newp([-40 1;-1 50],1);
plotpv(P,T);%标出所有点
hold on;
linehandle=plotpc(net.IW{1},net.b{1});%画出分类线
E=1;
net.adaptParam.passes=3;%passes决定在训练过程中训练值重复的次数。
while (sse(E))[net,Y,E]=adapt(net,P,T);linehandle=plotpc(net.IW{1},net.b{1},linehandle);drawnow;
end;
axis([-2 2 -2 2]);
net.IW{1}
net.b{1}
%另外一种网络修正学习(非标准化学习规则learnp)
hold off;
net=init(net);
net.adaptParam.passes=3;
net=adapt(net,P,T);
plotpc(net.IW{1},net.b{1});
axis([-2 2 -2 2]);
net.IW{1}
net.b{1}
%无法正确分类
%标准化学习规则网络训练速度要快!% 训练奇异样本
% 用标准化感知器学习规则(标准化学习数learnpn)进行分类
net=newp([-40 1;-1 50],1,'hardlim','learnpn');
plotpv(P,T);
linehandle=plotpc(net.IW{1},net.b{1});
e=1;
net.adaptParam.passes=3;
net=init(net);
linehandle=plotpc(net.IW{1},net.b{1});
while (sse(e))
[net,Y,e]=adapt(net,P,T);
linehandle=plotpc(net.IW{1},net.b{1},linehandle);
end;
axis([-2 2 -2 2]);
net.IW{1}%权重
net.b{1}%阈值
%正确分类%非标准化感知器学习规则训练奇异样本的结果
net=newp([-40 1;-1 50],1);
net.trainParam.epochs=30;
net=train(net,P,T);
pause;
linehandle=plotpc(net.IW{1},net.b{1});
hold on;
plotpv(P,T);
linehandle=plotpc(net.IW{1},net.b{1});
axis([-2 2 -2 2]);% 5. 设计多个感知器神经元解决分类问题
p=[1.0 1.2 2.0 -0.8; 2.0 0.9 -0.5 0.7]
t=[1 1 0 1;0 1 1 0]
plotpv(p,t);
hold on;
net=newp([-0.8 1.2; -0.5 2.0],2);
linehandle=plotpc(net.IW{1},net.b{1});
net=newp([-0.8 1.2; -0.5 2.0],2);
linehandle=plotpc(net.IW{1},net.b{1});
e=1;
net=init(net);
while (sse(e))
[net,y,e]=adapt(net,p,t);
linehandle=plotpc(net.IW{1},net.b{1},linehandle);
drawnow;
end;

运行结果:

7 、BP神经网络代码:

net=newff([-1 2;0 5],[3,1],{'tansig','purelin'},'traingd')
net.IW{1}
net.b{1}p=[1;2];
a=sim(net,p)
net=init(net);
net.IW{1}
net.b{1}
a=sim(net,p)
%net.IW{1}*p+net.b{1}
p2=net.IW{1}*p+net.b{1}
a2=sign(p2)
a3=tansig(a2)
a4=purelin(a3)
net.b{2}
net.b{1}net.IW{1}
net.IW{2}
0.7616+net.b{2}
a-net.b{2}
(a-net.b{2})/ 0.7616
help purelinp1=[0;0];
a5=sim(net,p1)
net.b{2}
% BP网络
% BP神经网络的构建
net=newff([-1 2;0 5],[3,1],{'tansig','purelin'},'traingd')
net.IW{1}
net.b{1}
%p=[1;];
p=[1;2];
a=sim(net,p)
net=init(net);
net.IW{1}
net.b{1}
a=sim(net,p)
net.IW{1}*p+net.b{1}
p2=net.IW{1}*p+net.b{1}
a2=sign(p2)
a3=tansig(a2)
a4=purelin(a3)
net.b{2}
net.b{1}P=[1.2;3;0.5;1.6]
W=[0.3 0.6 0.1 0.8]
net1=newp([0 2;0 2;0 2;0 2],1,'purelin');
net2=newp([0 2;0 2;0 2;0 2],1,'logsig');
net3=newp([0 2;0 2;0 2;0 2],1,'tansig');
net4=newp([0 2;0 2;0 2;0 2],1,'hardlim');net1.IW{1}
net2.IW{1}
net3.IW{1}
net4.IW{1}
net1.b{1}
net2.b{1}
net3.b{1}
net4.b{1}net1.IW{1}=W;
net2.IW{1}=W;
net3.IW{1}=W;
net4.IW{1}=W;a1=sim(net1,P)
a2=sim(net2,P)
a3=sim(net3,P)
a4=sim(net4,P)init(net1);
net1.b{1}help tansig% 训练
p=[-0.1 0.5]
t=[-0.3 0.4]
w_range=-2:0.4:2;
b_range=-2:0.4:2;ES=errsurf(p,t,w_range,b_range,'logsig');%单输入神经元的误差曲面
plotes(w_range,b_range,ES)%绘制单输入神经元的误差曲面
pause(0.5);
hold off;
net=newp([-2,2],1,'logsig');
net.trainparam.epochs=100;
net.trainparam.goal=0.001;
figure(2);
[net,tr]=train(net,p,t);
title('动态逼近')
wight=net.iw{1}
bias=net.b
pause;
close;
% 练
p=[-0.2 0.2 0.3 0.4]
t=[-0.9 -0.2 1.2 2.0]
h1=figure(1);
net=newff([-2,2],[5,1],{'tansig','purelin'},'trainlm');
net.trainparam.epochs=100;
net.trainparam.goal=0.0001;
net=train(net,p,t);
a1=sim(net,p)
pause;
h2=figure(2);
plot(p,t,'*');
title('样本')
title('样本');
xlabel('Input');
ylabel('Output');
pause;
hold on;
ptest1=[0.2 0.1]
ptest2=[0.2 0.1 0.9]
a1=sim(net,ptest1);
a2=sim(net,ptest2);net.iw{1}
net.iw{2}
net.b{1}
net.b{2}

运行结果:

计算智能——BP神经网络相关推荐

  1. bp神经网络应用实例_人工智能BP神经网络学习神器——AISPACE

    未经许可请勿转载 更多数据分析内容参看这里 今天我们来介绍一套小工具--AISPACE,它有助于你学习BP神经网络运作的过程及原理.AISPACE涉及的一系列工具用于学习和探索人工智能的概念,它们是在 ...

  2. bp神经网络预测模型优点,bp神经网络缺点及克服

    BP神经网络的核心问题是什么?其优缺点有哪些? 人工神经网络,是一种旨在模仿人脑结构及其功能的信息处理系统,就是使用人工神经网络方法实现模式识别.可处理一些环境信息十分复杂,背景知识不清楚,推理规则不 ...

  3. 神经网络hopfield算法实例,hopfield和bp神经网络区别

    1.神经网络优缺点, 优点: (1)具有自学习功能.例如实现图像识别时,只在先把许多不同的图像样板和对应的应识别的结果输入人工神经网络,网络就会通过自学习功能,慢慢学会识别类似的图像. 自学习功能对于 ...

  4. 【验证码识别】基于遗传算法优化OUST结合BP神经网络实现数字验证码识别含Matlab源码

    1 简介 本项目基于MATLAB完成数字验证码识别的GUI设计,图像处理,验证码生成.识别等功能.采用BP神经网络来实现对验证码图像的识别.验证码的识别,大概分为图片预处理.分割字符.识别字符三个过程 ...

  5. C++毕业设计——基于VC+++BP神经网络+车牌识别的车牌定位和识别系统设计与实现(毕业论文+程序源码)——车牌定位和识别系统

    基于VC+++BP神经网络+车牌识别的车牌定位和识别系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于VC+++BP神经网络+车牌识别的车牌定位和识别系统设计与实现,文章末尾附有本毕业设 ...

  6. 深入理解BP神经网络的细节

    神经网络之BP算法 文章目录 神经网络之BP算法 前言 一.BP算法的流程 二.搭建神经网络 总结 前言   BP神经网络是Back Propagation的简写,它是最简单的前馈神经网络之一通常用于 ...

  7. DL练习1:基于boston_house_prices的BP神经网络

    基于波士顿房价的预测的BP神经网络 在Pycharm上测试可以跑的通. # -*- coding: utf-8 -*- # Import libraries necessary for this pr ...

  8. 第二章:3、BP神经网络

    BP神经网络:BackPropagation Neuron NetWok BP 神经网络是一类基于误差逆向传播 (BackPropagation, 简称 BP) 算法的多层前馈神经网络,BP算法是迄今 ...

  9. 深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失梯度爆炸)

    目录 一.概念与定义 二.损失函数/代价函数(loss) 三.梯度下降法 二维w与loss: 三维w与loss: 四.常用激活函数 1.softmax激活函数 2.sigmoid激活函数 3.tanh ...

最新文章

  1. Beta 冲刺 (7/7)
  2. SpringMVC框架介绍
  3. IDEA出现import org.junit.Test飘红解决方案
  4. 数据中心机房消防演练方案
  5. 【新年快乐】缤纷多彩的Vue点赞组件
  6. 解决yarn报错:Found incompatible module (yarn config set ignore-engines true)
  7. java技术详解_Java反射技术详解及实例解析
  8. DOS网络命令 之 ping
  9. 【XSY2469】graph 分治 并查集
  10. 2017年闰秒linux_2017年Linux专业人员的4个热门技能
  11. php遍历文件制作删除,使用PHP遍历文件目录与清除目录中文件的实现详解
  12. java 二进制 归属权限_java 二进制 权限管理
  13. 你应该知道的 8 个Java 的领军人物
  14. 如何在appconfig中配置服务的ip
  15. codevs 1029 遍历问题
  16. WM_CLOSE、WM_DESTROY、WM_QUIT区别
  17. u盘魔术师装linux,U盘魔术师安装步骤
  18. 关于三星研究院adv机试(开发人员入职机试)
  19. wd移动硬盘插电脑没反应_WD MY BOOK 桌面移动硬盘 插电脑不识别的解决办法。
  20. erp计算机英语词汇,ERP词汇 - 外贸英语 - 福步外贸论坛(FOB Business Forum) |中国第一外贸论坛...

热门文章

  1. 线程池的分类(5种)
  2. 易优CMS蓝色平面设计广告印刷网站模板源码+带手机版
  3. ZigBee系统初始化流程
  4. Redis- 对象的空转时长(总结)
  5. 【推荐系统技术实现】
  6. CoreDNS 健康检查详解
  7. 【Android】Launcher3 app列表桌面图标按安装时间排序app图标
  8. html页面字体调节语言,HTML页面中文字体(font-family)的CSS设置
  9. php 取整 floor,php 取整函数(floor,ceil,round,intval)
  10. python中带有小数的字符串如何转化为数字_python中,如何将字符串转换为数字(将数字转换为整型),字符串的10转换为整型的10,10.5转换为10...