资源简介
这个函数可以从UFLDL网站上下载,其好处是在用10000个样本优化30多万个参数时内存不溢出,比网站上所用的minFunc函数好。我下载后整理了一下,翻译了注释,行数从800多行压倒660行
代码片段和文件信息
function [xfvalexitflagoutputgrad]=fminlbfgsWEI(funfcnx_initoptim)
%FMINLBFGS 寻找多变量函数局部最小值
% 此优化器为具有大量未知变量的图像配准方法而开发
%
% 所支持优化方法:
% - 拟牛顿法(BFGS)
% - 有限存储BFGS (L-BFGS)
% - 最陡梯度下降优化
%
% [XFVALEXITFLAGOUTPUTGRAD] = FMINLBFGS(FUNX0OPTIONS)
%
% 输入
% FUN: 被最小化函数的句柄或字符串,返回误差值,误差梯度如在输出指定也返回
% X0: 未知量初始值,可为标量,向量,或矩阵(可选)
% OPTIONS: 对应优化器可选项的结构变量,自定义或者来自optimset(optimset不支持所有输入选项)
%
% 输出
% X : 所找到的最小化函数的位置(值)
% FVAL : 所找到的最小值
% EXITFLAG : 解释优化器停止原因(条件)所对应的值
% OUTPUT : 含所有重要输出值与参数的结构变量
% GRAD : 此位置上的梯度
%
% 输入/输出变量扩展描述
% OPTIONS
% OPTIONS.GoalsExactAchieve : 置0,线搜索(一维搜索);置1,满足Wolfe条件的正态线搜索(默认)
% OPTIONS.GradConstr 如果梯度调用是CPU代价高昂的(默认),置变量值为真;如置为假,梯度调用多,函数调用少
% OPTIONS.HessUpdate : 置为 ‘bfgs‘采用BFGS优化方法(默认),未知量多于3000时,切换到有限内存BFGS方法,
% 与置为‘lbfgs‘相同;置为 ‘steepdesc‘ 采用最陡梯度下降优化方法
% OPTIONS.StoreN : 用于L-BFGS中近似Hessian矩阵的迭代次数,默认值20;对不平滑函数,小值可能更好,
% 因为Hessian仅在特定位置有效;对二次式推荐用大值
% OPTIONS.GradObj : 如果有梯度,置为 ‘on‘;否则采用有限差分
% OPTIONS.Display : 显示的等级。 ‘off‘ 不显示输出;‘plot‘显示图中所有线搜索结果;
% ‘iter‘显示每一次迭代的输出;‘final‘只显示最终输出; ‘notify‘仅在函数不收敛时显示输出
% OPTIONS.TolX : x的中止容限,默认值 1e-6.
% OPTIONS.TolFun : 函数值中止容限,默认值 1e-6.
% OPTIONS.MaxIter : 最大迭代次数,默认值 400.
% OPTIONS.MaxFunEvals : 函数估值最大次数,默认值为未知变量数目100倍
% OPTIONS.DiffMaxChange : 有限差分梯度用最大步长
% OPTIONS.DiffMinChange : 有限差分梯度用最小步长
% OPTIONS.OutputFcn : 用户定义函数,优化器函数在每次迭代时调用
% OPTIONS.rho : 梯度的Wolfe条件 默认值 0.01
% OPTIONS.sigma : 梯度的Wolfe条件 默认值 0.9
% OPTIONS.tau1 : 步长变大时的搜索范围扩展,默认值 3
% OPTIONS.tau2 : 范围切分阶段(section phase)左边界缩减,默认值 0.1
% OPTIONS.tau3 : 范围切分阶段(section phase)右边界缩减,默认值 0.5
% FUN
% 同时提供X处梯度能改进优化器速度,把 FUN 函数写为如下形式
% function [fg]=FUN(X)
% f X处的值计算;
% if ( nargout > 1 )
% g X处的梯度计算
% end
% EXITFLAG
% EXITFLAG可能的取值,对应退出条件
% 1 ‘Change in the objective function value was less than the specified tolerance TolFun.‘
% (目标函数值变化小于指定的容限TolFun)
% 2 ‘Change in x was smaller than the specified tolerance TolX.‘;
% (X变化小于指定容限TolX)
% 3 ‘Magnitude of gradient smaller than the specified tolerance‘;
% (梯度值小于指定容限)
% 4 ‘Boundary fminimum reached.‘
% (达到fminimum边界)
% 0 ‘Number of iterations exceeded options. MaxIter or number of function evaluations exceeded options.FunEvals.‘
% (迭代次数超限,MaxIter或者函数估值次数超过options.FunEvals)
% -1 ‘Algorithm was terminated by the output function.‘
% (输出函数(output)中止了算法)
% -2 ‘Line search cannot find an acceptable point along the current search‘;
% (沿着当前搜索,线搜索无法找到一个可接受点)
%
% 举例
% options = optimset(‘GradObj‘‘on‘);
% X = fminlbfgs(@myfun2options)
%
% % 其中 myfun是一个MATLAB函数,例如
% function [fg] = myfun(x)
% f = sin(x) + 3;
% if ( nargout > 1 ) g = cos(x); end
%
% See also OPTIMSET FMINSEARCH FMINBND FMINCON FMINUNC @ INLINE.
%
% Function is written by D.
- 上一篇:position ba
sed dynamics - 下一篇:fast源代码
评论
共有 条评论