BP神经网络学习

基本介绍

BP神经网络是一种多层前馈网络,可以进行学习和存储输入输出映射关系,不需要去建立数学方程式,是一种常用的神经网络模型

BP神经网络的过程

BP神经网络的过程主要分为两个阶段,第一阶段是信号的前向传播,从输入层经过隐含层,最后到达输出层;第二阶段是误差的反向传播,从输出层到隐含层,最后到输入层,依次调节隐含层到输出层的权重和偏置,输入层到隐含层的权重和偏置。
在这里插入图片描述

BP网络运行的具体流程

第一步:网络初始化
第二步:随机选取
第三部:隐含层计算
第四步:求偏导数
第五步:修正权值
第六步:修正权值
第七部:修正权值
第八步:计算全局误差
第九步:判断模型合理性
在这里插入图片描述
在这里插入图片描述

函数介绍

net函数

net = newff(minmax§,[隐层的神经元的个数,输出层的神经元的个数],{隐层神经元的传输函数,输出层的传输函数},‘反向传播的训练函数’),其中p为输入数据,t为输出数据。

sim函数

sim执行simulink模型用的命令 相当于windows里的run命令。
sim函数用来运行Simulink模型。需要注意的是,用户无法控制其仿真过程(例如暂停、继续),一旦运行就会直到达到结束条件为止——这一点和通过模型窗口界面运行仿真不同。
调用格式:
[t,x,y] = sim(model,timespan,options,ut);
[t,x,y1, y2, …, yn] = sim(model,timespan,options,ut);
输入参数:
model:模型的名字,用单引号括起来(注意不带扩展名.mdl);
timespan:指定仿真时间范围,可以有几种情况:
标量tFinal,指定仿真结束时间。这种情况下开始时间为0;
两个元素的向量[tStart tFinal],同时指定开始时间和结束时间;
向量[tStart OutputTimes tFinal],除起止时间外,还指定输出时间点(通常输出时间t会包含更多点,这里指定的点相当于附加的点)。
options:指定仿真选项,是一个结构体,该结构体通过simset创建,包括模型求解器、误差控制等都可以通过这个参数指定(不修改模型,但使用和模型对话框里设置的不同选择)。

init函数

功能:
在matlab中init 用于初始化神经网络。
语法:
net = init(net)
性质:
init(net)根据最新的网络初始化函数返回神经网络的权值和误差,其结果由net.initFcn,和参数值,net.initparam影响。
示例:
在这里,我们创建一个双输入(范围在0到1,和-2到2)单神经元感知器。而一旦建立了模型我们就可以得到其权值和阈值。
net = newp([0 1;-2 2],1);
net.iw{1,1}
net.b{1}
对感知器进行训练,改变其权值和阈值。
P = [0 1 0 1; 0 0 1 1];
T = [0 0 0 1];
net = train(net,P,T);
net.iw{1,1}
net.b{1}
重新将权值和阈值初始化。
net = init(net);
net.iw{1,1}
net.b{1}
上面最后的命令已经将权值和阈值重新归零,这就是 init函数在感知器中的应用。

sign函数

sign(x):符号函数 (Signum function)。
当x<0时,sign(x)=-1;
当x=0时,sign(x)=0;
当x>0时,sign(x)=1。

tansig函数

tansig函数是神经网络层传递函数。传递函数将神经网络层的净输入转换为净输出。
tansig()使用格式:
A = tansig(N,FP) %净输出
N——净输入,s-by-q矩阵(列)向量
FP——函数的参数结构(可以忽略)

purelin函数

线性传递函数 y=a*x+b;

newp函数

作用:构造感知器模型。
句法:net=newp[PR,S,TF,LF]
解释:PR:Rx2的输入向量最大值和最小值构成的矩阵,即每一行的最大值最 小值构成一行。
S:构造的神经元的个数
TF:激活函数的设置,可设置为hardlim函数或者hardlins函数,默认为 hardlim函数
LF:学习修正函数的设置,可设置为learnp函数或者learnpn函数,默认 为learnp函数(关于权值误差修正函数learnp函数的使用可看我的上 篇博文learnp)
net:生成的感知器网络

代码及结果

代码

% BP网络
% BP神经网络的构建
net=newff([-1 2;0 5],[3,1],{'tansig','purelin'},'traingd')
%net = newff(minmax(p),[隐层的神经元的个数,输出层的神经元的个数],{隐层神经元的传输函数,输出层的传输函数},'反向传播的训练函数'),其中p为输入数据,t为输出数据

net.IW{1}
net.b{1}

p=[1;2];
a=sim(net,p)
%sim执行simulink模型用的命令 相当于windows里的run命令
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
%purelin函数为输出层的传输函数

p1=[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}

结果

在这里插入图片描述

发布了10 篇原创文章 · 获赞 0 · 访问量 224

猜你喜欢

转载自blog.csdn.net/yuyaoshiniba/article/details/101713367