计算智能——BP神经网络

BP神经网络

BP神经网络是一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络。BP网络是前向神经网络的核心部分,也是整个人工神经网络体系中的精华,广泛用于分类识别、逼近、回归、压缩等领域。在实际应用中,大约80%的神经网络模型采用了BP网络或BP网络的变化形式。

基本原理

BP神经网络是一种按误差反向传播(简称误差反传)训练的多层前馈网络,其算法称为BP算法,它的基本思想是梯度下降法,利用梯度搜索技术,以期使网络的实际输出值和期望输出值的误差均方差为最小

 

当输出层传递函数为线性函数时,输出层与隐含层之间权值调整的规则类似于线性神经网络的权值调整规则。

BP网络的复杂之处在于,隐含层与输入层之间调整权值时,局部梯度的计算需要用到上一步计算的结果。前一层的局部梯度是最后一层局部梯度的加权和。因此,BP网络学习权值时只能从后向前依次计算。

BP网络的设计主要包括网络层数、输入层节点数、隐含层节点数、输出层节点数以及传输函数、训练方法、训练参数的设置等几个方面。

各个函数的基本功能分析

  • logsig—Log-Sigmoid传输函数

Log-Sigmoid函数的特点是(-∞,+∞)范围的数据被映射到区间(0,1)                                                                                                                                          logsig(n)=1/(1+e^-n)

  • tansig—Tan-Sigmoid传输函数 

tansig是双曲正切Sigmoid函数,调用形式与logsig函数相同,取值范围(-1,1)

                                              tansig(n)= 2/(1+e^-2n)-1

  • newff—创建一个BP网络

语法:net=newff(P,N,TF,BTF)

P表示输入向量的典型值, N为各层神经元个数,TF表示传输函数的细胞数组,BTF为训练函数

  • purelin—传递函数

purelin函数是纯线性传递函数

  • train()—网络训练学习函数

语法:[ net, tr, Y1, E ]  = train( net, X, Y )

参数:

X:网络实际输入

Y:网络应有输出

tr:训练跟踪信息

Y1:网络实际输出

E:误差矩阵

实验代码

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 purelin

p1=[0;0];
a5=sim(net,p1)
net.b{2}
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}

 

实验结果展示

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值