本站原创文章,转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com
本文描述使用matlab神经网络工具箱训练BP神经网络的一些最常用的参数和方法。
matlab版本为2014b,一个简单的DEMO代码如下:
%用于训练的数据
X = linspace(-3,3,100);
y = 10*sin(x1);
%网络训练
net = newff(X,y,3,{'tansig','purelin'},'trainlm');
net.trainparam.goal = 0.00001; % 设置训练误差目标
net.trainparam.epochs = 15000; % 设置最大训练次数.
[net,tr,net_y] = train(net,X,y); % 训练
sim_y = sim(net,X); % 预测
关键方法有三个:
newff : 构建网络
train : 训练网络
sim : 网络预测
1、newff:建立一个BP神经网络
newff用于建立一个BP神经网络
● 完整参数:
net = newff(P,T,S,TF,BTF,BLF,PF,IPF,OPF,DDF)
● 完整用例:
net = newff(X,y,3,{'tansig','purelin'},'trainlm','learngdm','mse',{'fixunknowns','removeconstantrows','mapminmax'}, {'removeconstantrows','mapminmax'},'dividerand');
● 入参说明:
P: 输入数据X,每列代表一个样本的X。
T: target,拟合目标,也即输出数据y,每列代表一个样本的Y。
S: 行向量,隐节点个数,例如 [3,2]代表两个隐层,第一个隐层3个神经元,第2个隐层2个神经元。
TF:Transfer function,传递函数(激活函数), {'tansig','purelin'} 代表只有一个隐层,隐层传递函数为tansig,输出层传递函数为purelin.注意,要与S对齐。
BTF: Backprop network training function,训练函数,默认用'trainlm'
BLF: Backprop learning function,反向传播权重/阈值 学习函数,默认learngdm.(adapt时调用,一般不需用到)
PF: Performance function,性能函数,即误差函数,默认为均方差'mse',可选:mse,sse,mae,sae(均方差,总方差,均绝对差,总绝对差),trainlm只支持mse,sse
IPF: input processing functions,输入处理函数,默认{'fixunknowns','removeconstantrows','mapminmax'}
OPF:output processing functions,输出处理函数,默认 {'removeconstantrows','mapminmax'}
DDF:Data division function,数据分割函数,默认值'dividerand',即随机分割。
● 出参说明:
net:训练好的网络
关于训练函数:
只推荐两种:
数据量小,内存够时,用'trainlm',
数据量大,trainlm不能用时,用'trainscg'
trainlm为Levenberg-Marquardt方法,会利用二阶导信息,trainscg则为量化共轭梯度法。
关于数据处理函数:
mapminmax:将数据按最小最大值线性缩放到[-1,1],即2(x - min(x))/(max(x) - min(x))-1,
removeconstantrows:删除 常数变量
fixunknowns:处理NaN数据
2、train:对网络进行训练
train函数用于对网训练进行训练,
train支持多种参数格式,最常用的是: [net,tr,out_T] = train(net,P,T);
● 入参说明:
net:需要训练的网络
P:用于训练的输入数据,
T:用于训练的输出数据
● 出参说明:
net:训练好的网络
tr:训练过程
out_T:网络对训练数据的预测。
训练时使用的方法就是网络设置的训练函数(例如trainlm)。
3、sim:使用网络对X预测y
使用方法:
sim_y = sim(net,X)
● 入参说明:
net : 用于预测的网络
X : 需要预测的数据(X为矩阵格式 ,每列代表一个样本)
● 出参说明:
sim_y : 网络的预测结果
常用的训练参数有:
net.trainparam.goal = 0.00001; % 训练目标:均方误差低于0.0001
net.trainparam.show = 400; % 每训练400次展示一次结果
net.trainparam.epochs = 15000; % 最大训练次数:15000.
net.divideParam.trainRatio= 0.7; % 用于训练的数据比例
net.divideParam.valRatio = 0.15 ; % 用于验证过拟合的数据比例
net.divideParam.testRatio = 0.15; % 用于比例
net.trainparam.max_fail = 6; % 过拟合验证失败次数
训练参数为可选项,可设可不设,为个性化配置。
End