运用Matlab创建BP神经网络

运用Matlab创建BP神经网络(R2010b)
 

一、BP神经网络属于前向网络

1、以下为创建BP神经网络的方法及参数意义

net=newff(P,T,S)或者net = newff(P,T,S,TF,BTF,BLF,PF,IPF,OPF,DDF)

参数说明:

(1)P:输入参数矩阵。(RxQ1)

(2)T:目标参数矩阵。(SNxQ2)

(3)S:N-1个隐含层的数目(S(i)到S(N-1)),输出层的单元数目取决于T,默认为空矩阵。

(4)TF:相关层的传递函数,默认隐含层为tansig函数,输出层为purelin函数。

传递函数:

  • purelin 线性传递函数
  • tansig 正切 S 型传递函数
  • logsig 对数 S 型传递函数

        隐含层和输出层函数的选择对BP神经网络预测精度有较大影响,一般隐含层节点转移函数选用 tansig函数或logsig函数,输出层节点转移函数选用tansig函数或purelin函数。

(5)BTF:BP神经网络学习训练函数,默认值为trainlm函数。

学习训练函数:
神经网络的学习分为有导师学习和无导师学习。

                                                             newff函数中训练函数
最速下降BP算法traingd基本梯度下降法,收敛速度比较慢。
动量BP算法traingdm带有动量项的梯度下降法, 通常要比traingd 速度快。
学习率可变的BP算法trainda(学习率可变的最速下降BP算法)自适应学习率的梯度下降法
traindx(学习率可变的动量BP算法)带有动量项的自适应学习算法, 速度要比traingdm 快。
弹性算法trainrp弹性BP 算法, 具有收敛速度快和占用内存小的优点。
变梯度算法traincgf(Fletcher-Reeves修正算法)Fletcher-Reeves 共轭梯度法,为共轭梯度法中存储量要求最小的算法。
traincgp(Polak_Ribiere修正算法)Polak-Ribiers共轭梯度算法, 存储量比traincgf稍大,但对某些问题收敛更快。
traincgb(Powell-Beale复位算法)Powell-Beale共轭梯度算法,存储量比traincgp稍大,但一般收敛更快,以上三种共轭梯度法,都需要进行线性搜索。
trainbfg(BFGS 拟牛顿算法)BFGS- 拟牛顿法, 其需要的存储空间比共轭梯度法要大,每次迭代的时间也要多,但通常在其收敛时所需的迭代次数要比共轭梯度法少,比较适合小型网络。
 trainoss(OSS算法)一步分割法,为共轭梯度法和拟牛顿法的一种折衷方法。
 trainlm(LM算法)Levenberg-Marquardt算法,对中等规模的网络来说, 是速度最快的一种训练算法, 其缺点是占用内存较大。对于大型网络, 可以通过置参数mem-reduc 为1, 2, 3,⋯,将Jacobian 矩阵分为几个子矩阵。但这样也有弊端, 系统开销将与计算Jacobian的各子矩阵有很大关系。
 trainscg归一化共轭梯度法,是唯一一种不需要线性搜索的共轭梯度法。
 trainbr贝叶斯规则法,对Levenberg-Marquardt算法进行修改, 以使网络的泛化能力更好。同时降低了确定最优网络结构的难

参数说明:

神经网络主要训练参数:

net.trainParam.goal=0.1                 % 训练目标最小误差,这里设置为0.1

net.trainParam.epochs=300;             % 训练次数,这里设置为300次

net.trainParam.show=20;               % 显示频率,这里设置为没训练20次显示一次

net.trainParam.mc=0.95;               % 附加动量因子

net.trainParam.lr=0.05;                % 学习速率,这里设置为0.05

net.trainParam.min_grad=1e-6;         %最小性能梯度

net.trainParam.min_fail=5;             % 最大确认失败次数

(6)BLF:权重学习函数,默认值为learngdm。
(7)PF:性能函数,默认值为mse。
IPF,OPF,DDF均为默认值即可。

2、BP神经网络预测函数
SimOut = sim('model', Parameters) & y=sim(net,x)
函数功能:用训练好的BP神经网络预测函数输出
net:训练好的网络
x:输入数据
y:网络预测数据
3、训练函数
[net,tr] = train(Net,P,T,Pi,Ai)
其中,
Net  待训练的网络
P    输入数据矩阵
T    输出数据矩阵 (default = zeros)
Pi   初始化输入层条件 (default = zeros)
Ai   初始化输出层条件 (default = zeros)
net   训练好的网络
tr    训练过程记录
注意:P   Ni-by-TS cell array   Each element P{i,j,ts} is an Ni-by-Q matrix.
T   Nl-by-TS cell array   Each element T{i,ts} is a Ui-by-Q matrix.
                                                      BP网络的常用函数表

函数类型函数名称函数用途
前向网络创建函数newcf创建级联前向网络
Newff 创建前向BP网络
传递函数logsigS型的对数函数
tansigS型的正切函数
purelin纯线性函数
学习函数learngd基于梯度下降法的学习函数
learngdm梯度下降动量学习函数
性能函数mse均方误差函数
msereg均方误差规范化函数
显示函数plotperf绘制网络的性能
plotes绘制一个单独神经元的误差曲面
plotep绘制权值和阈值在误差曲面上的位置
errsurf计算单个神经元的误差曲

二、matlab代码

function [result]=myBP(option,data)
hiddenumber=data.hiddenumber;
inputnumber=data.inputnumber;
outputnumber=data.outputnumber;
S=data.S;
indexM=data.indexM;
N=data.N;
input_train=data.train_x0;
output_train=data.train_y0;
input_test=data.test_x0;
%新建bp神经网络
net0=newff(input_train',output_train',hiddenumber);
%net0.trainFcn='traingd';
net0.trainParam.epochs=50;%训练次数
net0.trainParam.lr=0.2;%学习率
net0.trainParam.goal=0.01;%训练目标最小误差,这里设置为0.01
net0.trainParam.showWindow = false; % 不显示训练窗口
net0.trainParam.showCommandLine = false;% 命令行不显示结果
%训练
[net0,tr]=train(net0,input_train',output_train');
%仿真
ygabptest=sim(net0,input_test');
ygabptest=mapminmax('reverse',ygabptest,option.ps_y);%预测数据反归一化
T2=mapminmax('reverse',data.test_y0',option.ps_y);%预测数据反归一化
fit=sum(sum((abs(ygabptest-T2)./T2).^2));
result.net=net0;
result.ygabptest=ygabptest;
result.T2=T2;

ygabptrain=sim(net0,input_train');
ygabptrain=mapminmax('reverse',ygabptrain,option.ps_y);%预测数据反归一化
T1=mapminmax('reverse',data.train_y0',option.ps_y);%预测数据反归一化
result.ygabptrain=ygabptrain;
result.T1=T1;

fit=sum(sum((abs(ygabptest-T2)./T2).^2))+sum(sum((abs(ygabptrain-T1)./T1).^2));
result.fit=fit;
end

参考:

神经网络理论 超全超详细 通熟易懂

Matlab mapminmax函数使用及原理

  • 21
    点赞
  • 210
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值