老饼讲解:一步一步上手学习
在训练BP神经网络之前,我们都会设置相关的训练参数,那么matlab一共提供了哪些训练参数来供我们设置呢?这里我们来展示一下可以设置的参数分别有哪些,以及它们的默认值。
在matlab中,用newff构建BP神经网络后,我们可以对net设置一些训练参数,再对模型进行训练。如下:
X = linspace(-3,3,100); % 用于训练的X
y = 10*sin(X); % 用于训练的Y
net = newff(X,y,3,{'tansig','purelin'},'trainlm'); % 初始化BP神经网络
net.trainparam.goal = 0.00001; % 设置训练误差目标
net.trainparam.epochs = 15000; % 设置最大训练次数.
[net,tr,net_y] = train(net,X,y); % 训练可以看到,用train训练前会设置相关的训练参数。
那么,可以设置哪些训练参数呢?一般来说,有以下两组参数:
1. trainparam:训练算法的相关参数
2. divideParam:数据分割方式的相关参数
下面我们来介绍一下trainparam和divideParam两组训练参数都有哪些。
好了,我们先来说说net.trainparam的参数,它存放的是面向训练算法的一系列参数。
下面是trainParam的所有可设参数:
| 参数名称 | 解释 | 适用方法 |
|---|---|---|
| net.trainParam.epochs | 最大训练次数(缺省为10) | 全部 |
| net.trainParam.goal | 训练要求精度(缺省为0) | 全部 |
| net.trainParam.lr | 学习率(缺省为0.01) | 全部(lm除外) |
| net.trainParam.max_fail | 最大失败次数(缺省为5) | 全部 |
| net.trainParam.min_grad | 最小梯度要求(缺省为1e-10) | 全部 |
| net.trainParam.show | 显示训练过程(NaN表示不显示,默认25) | 全部 |
| net.trainParam.time | 最大训练时间(缺省为inf) | 全部 |
| net.trainParam.mc | 动量因子(缺省0.9) | traingdm、traingdx |
| net.trainParam.lr_inc | 学习率lr增长比(缺省为1.05) | traingda、traingdx |
| net.trainParam.lr_dec | 学习率lr下降比(缺省为0.7) | traingda、traingdx |
| net.trainParam.max_perf_inc | 表现函数增加最大比(缺省为1.04) | traingda、traingdx |
| net.trainParam.delt_inc | 权值变化增加量(缺省为1.2) | trainrp |
| net.trainParam.delt_dec | 权值变化减小量(缺省为0.5) | trainrp |
| net.trainParam.delt0 | 初始权值变化(缺省为0.07) | trainrp |
| net.trainParam.deltamax | 权值变化最大值(缺省为50.0) | trainrp |
| net.trainParam.searchFcn | 一维线性搜索方法(缺省为srchcha) | traincgf、traincgp、traincgb、trainbfg、trainoss |
| net.trainParam.sigma | 二阶导对权值调整的影响参数(默认5.0e-5) | trainscg |
| net.trainParam.lambda | Hessian矩阵不确定性调节参数(默认5.0e-7) | trainscg |
| net.trainParam.men_reduc | 控制计算机内存/速度的参量, 内存较大设为1,否则设为2(缺省为1) | trainlm |
| net.trainParam.mu | u的初始值(缺省为0.001) | trainlm |
| net.trainParam.mu_dec | u的减小率(缺省为0.1) | trainlm |
| net.trainParam.mu_inc | u的增长率(缺省为10) | trainlm |
| net.trainParam.mu_max | u的最大值(缺省为1e10) | trainlm |
大家应该会留意到,trainParam的部分参数是相对训练算法而言的,有一些是某些训练算法的专属参数,例如trainlm中,就不支持设置学习率,这是因为lm算法中是没有学习率的,有些同学用lm算法,也在不断尝试调整lr参数,那就白忙活啦,所以大家设置时,需要根据自己选择的训练算法而设置哦。
好了,下面我们再来说说net.divideParam参数,它存放的是数据分割的相关参数,它相对比较简单,只有三个属性,具体如下:

一般来说, trainRatio、valRatio和testRatio三者之和应该为1,如果不为1,matlab会自动按占比归一。
例如trainRatio、valRatio和testRatio都设为2,则实际会归一为[0.333,0.333,0.333]
BP神经网络常设的就只有trainparam和divideParam两组训练参数,一个用于设置训练算法的参数,另一个用于设置数据分割。而trainparam里的参数并不是通用的,根据选择的训练算法设它相关的参数就可以了。
评论