BP神经网络的构建
BP网是一种前馈多层(一般都选用3层)网络。理论已经证明一个三层网络可以无限近似任意连续函数。
在进入代码前,我们需先认识这些有关神经网络的函数:
- newff()函数:建立一个可训练的前馈网络。
- sim()函数:运行仿真。
- init()函数:初始化神经网络,根据最新的网络初始化函数返回神经网络的权值和误差。
- sign()函数:符号函数,sign(整数)=1;sign(负数)=-1;sign(0)=0。
- tansig()函数: 神经网络层传递函数,将神经网络层的净输入转换为净输出。
- purelin()函数:神经网络层传递函数。
- newp()函数:构造感知器模型。
- errsurf()函数:单输入神经元的误差面。
- plotes()函数:用来绘制二维图像。
- train()函数:对神经网络进行训练,会弹出窗体。
在了解这些基础函数的基础上,我们来看一个构建BP神经网络的matlab代码:
% BP网络
% BP神经网络的构建
net=newff([-1 2;0 5],[3,1],{
'tansig','purelin'},'traingd')
%newff([-1 2;0 5],[3,1],{
'tansig','purelin'},'traingd')建立一个可训练的前馈网络
%创建一个二层网络,它的输入是两个元素的向量,输入向量的第一个元素的范围是[-1 2],输入向量的第二个元素的范围是[0 5]。
%第一层有三个神经元,第二层有一个神经元。
%第一层的传递函数是tansig(正切S型传递函数),输出层的传递函数是purelin(线性传递函数)。训练函数是traingd(最速下降BP算法)。
%net.IW{
1} %输入层到隐含层的权重
%net.b{
1} %输入层的阈值
p=[1;2]; %p为网络输入
a=sim(net,p) %sim()函数对于神经网络进行仿真,返回输出
net=init(net); %init(net)根据最新的网络初始化函数返回神经网络的权值和误差,此时new.IW{
1}、net.b{
1}的值已改变
a=sim(net,p)
p2=net.IW{
1}*p+net.b{
1} %p2为隐含层的输入
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
p1=[0;0]; %改变网络输入
a5=sim(net,p1)
net.b{
2}
% BP网络
% BP神经网络的构建
net=newff([-1 2;0 5],[3,1],{
'tansig','purelin'},'traingd')
p=[1;2];
a=sim(net,p)
net=init(net);
a=sim(net,p)
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}=W;
net2.IW{
1}=W;
net3.IW{
1}=W