基本介绍
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