trainlm
莱文贝格-马夸特反向传播
说明
net.trainFcn = 'trainlm'
设置网络 trainFcn
属性。
[
使用 trainedNet
,tr
] = train(net
,...)trainlm
训练网络。
trainlm
是根据莱文贝格-马夸特优化更新权重和偏置值的网络训练函数。
trainlm
通常是工具箱中最快的反向传播算法,强烈推荐作为首选有监督算法,尽管它确实比其他算法需要更多内存。
训练包含 trainlm
训练参数,此处显示其默认值:
net.trainParam.epochs
- 要训练的最大轮数。默认值为 1000。net.trainParam.goal
- 性能目标。默认值为 0。net.trainParam.max_fail
- 最大验证失败次数。默认值为6
。net.trainParam.min_grad
- 最小性能梯度。默认值为1e-7
。net.trainParam.mu
- 初始mu
。默认值为 0.001。net.trainParam.mu_dec
- 减小mu
的因子。默认值为 0.1。net.trainParam.mu_inc
- 增大mu
的因子。默认值为 10。net.trainParam.mu_max
-mu
的最大值。默认值为1e10
。net.trainParam.show
- 各次显示之间的训练轮数(无显示时为NaN
)。默认值为 25。net.trainParam.showCommandLine
- 生成命令行输出。默认值为false
。net.trainParam.showWindow
- 显示训练 GUI。默认值为true
。net.trainParam.time
- 以秒为单位的最大训练时间。默认值为inf
。
如果经历了一行中的 max_fail
轮训练后,基于验证向量的网络性能没有提升或仍保持不变,则验证向量用于提前停止训练。测试向量用于进一步检查网络是否泛化良好,但对训练没有任何影响。
示例
输入参数
输出参量
限制
此函数使用雅可比矩阵执行计算,假设性能是误差的均值或平方和。因此,用此函数训练的网络必须使用 mse
或 sse
性能函数。
详细信息
算法
如果网络的 NET.divideFcn
属性设置为数据划分函数,则 trainlm
支持使用验证和测试向量进行训练。如果经历了一行中的 max_fail
轮训练后,基于验证向量的网络性能没有提升或仍保持不变,则验证向量用于提前停止训练。测试向量用于进一步检查网络是否泛化良好,但对训练没有任何影响。
trainlm
可以训练任何网络,只要其权重、净输入和传递函数具有导函数。
反向传播用于计算性能 perf
关于权重和偏置变量 X
的雅可比矩阵 jX
。每个变量根据莱文贝格-马夸特进行调整,
jj = jX * jX je = jX * E dX = -(jj+I*mu) \ je
其中 E
是所有误差,I
是单位矩阵。
自适应值 mu
按 mu_inc
递增,直到上述变化导致性能值降低。然后对网络进行更改,将 mu
按 mu_dec
递减。
出现以下任一情况时,训练停止:
达到
epochs
(重复)的最大数量。超出
time
的最大数量。性能最小化到
goal
。性能梯度低于
min_grad
。mu
超过mu_max
。自上次验证性能(使用验证时)下降以来,验证性能(验证误差)上升的次数超过了
max_fail
次。
版本历史记录
在 R2006a 之前推出