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 之前推出
