newff函数的使用——BP神经网络

初识函数

举个例子,下面命令将创建一个二层网络。它的输入是两个元素的向量,第一层有三个神经元(3),第二层有一个神经元(1)。第一层的传递函数是tan-sigmoid,输出层的传递函数是linear。
输入向量的第一个元素的范围是-1到2[-1 2],输入向量的第二个元素的范围是0到5[0 5],训练函数是traingd。

net=newff([-1 2; 0 5],[3,1],{'tansig','purelin'},'traingd');
view(net)

newff函数的使用——BP神经网络_第1张图片

参数学习

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

1、tf为神经网络的传输函数,默认为’tansig’函数为隐层的传输函数,

2、purelin函数为输出层的传输函数

%TF1 = ‘tansig’;TF2 = ‘logsig’;

%TF1 = ‘logsig’;TF2 = ‘purelin’;

%TF1 = ‘logsig’;TF2 = ‘logsig’;

%TF1 = ‘purelin’;TF2 = ‘purelin’;

TF1=‘tansig’;TF2=‘purelin’;

net=newff(minmax(p),[10,1],{TF1 TF2},'traingdm');%网络创建

3、网络参数的设置

net.trainParam.epochs=10000;%训练次数设置

net.trainParam.goal=1e-7;%训练目标设置

net.trainParam.lr=0.01;%学习率设置,应设置为较少值,太大虽然会在开始加快收敛速度,但临近最佳点时,会产生动荡,而致使无法收敛

net.trainParam.mc=0.9;%动量因子的设置,默认为0.9

net.trainParam.show=25;%显示的间隔次数

4、指定训练参数

net.trainFcn = 'traingd'; % 梯度下降算法

net.trainFcn = 'traingdm'; % 动量梯度下降算法

net.trainFcn = 'traingda'; % 变学习率梯度下降算法

net.trainFcn = 'traingdx'; % 变学习率动量梯度下降算法

% (大型网络的首选算法)

net.trainFcn = 'trainrp'; % RPROP(弹性BP)算法,内存需求最小

% 共轭梯度算法

net.trainFcn = 'traincgf'; %Fletcher-Reeves修正算法

net.trainFcn = 'traincgp'; %Polak-Ribiere修正算法,内存需求比Fletcher-Reeves修正算法略大

net.trainFcn = 'traincgb'; % Powell-Beal复位算法,内存需求比Polak-Ribiere修正算法略大

% (大型网络的首选算法)

net.trainFcn = 'trainscg'; % ScaledConjugate Gradient算法,内存需求与Fletcher-Reeves修正算法相同,计算量比上面三种算法都小很多

net.trainFcn = 'trainbfg'; %Quasi-Newton Algorithms - BFGS Algorithm,计算量和内存需求均比共轭梯度算法大,但收敛比较快

net.trainFcn = 'trainoss'; % OneStep Secant Algorithm,计算量和内存需求均比BFGS算法小,比共轭梯度算法略大

% (中型网络的首选算法)

net.trainFcn = 'trainlm'; %Levenberg-Marquardt算法,内存需求最大,收敛速度最快

net.trainFcn = 'trainbr'; % 贝叶斯正则化算法

 有代表性的五种算法为:'traingdx','trainrp','trainscg','trainoss', 'trainlm'

%在这里一般是选取'trainlm'函数来训练,其算对对应的是Levenberg-Marquardt算法

你可能感兴趣的:(newff函数的使用——BP神经网络)