-
大小: 29KB文件類型: .m金幣: 1下載: 1 次發(fā)布日期: 2021-06-04
- 語言: Matlab
- 標(biāo)簽: 優(yōu)化函數(shù)??fminlbfgs??
資源簡介
這個函數(shù)可以從UFLDL網(wǎng)站上下載,其好處是在用10000個樣本優(yōu)化30多萬個參數(shù)時內(nèi)存不溢出,比網(wǎng)站上所用的minFunc函數(shù)好。我下載后整理了一下,翻譯了注釋,行數(shù)從800多行壓倒660行
代碼片段和文件信息
function?[xfvalexitflagoutputgrad]=fminlbfgsWEI(funfcnx_initoptim)
%FMINLBFGS?尋找多變量函數(shù)局部最小值?
%???此優(yōu)化器為具有大量未知變量的圖像配準(zhǔn)方法而開發(fā)?
%
%???所支持優(yōu)化方法:
% -?擬牛頓法(BFGS)??
%???-?有限存儲BFGS?(L-BFGS)
%???-?最陡梯度下降優(yōu)化
%???
%???[XFVALEXITFLAGOUTPUTGRAD]?=?FMINLBFGS(FUNX0OPTIONS)?
%
%???輸入
% FUN:?被最小化函數(shù)的句柄或字符串,返回誤差值,誤差梯度如在輸出指定也返回
% X0:?未知量初始值,可為標(biāo)量,向量,或矩陣(可選)
% OPTIONS:?對應(yīng)優(yōu)化器可選項的結(jié)構(gòu)變量,自定義或者來自optimset(optimset不支持所有輸入選項)
%
%???輸出
% X?:?所找到的最小化函數(shù)的位置(值)
% FVAL?:?所找到的最小值
% EXITFLAG?:?解釋優(yōu)化器停止原因(條件)所對應(yīng)的值
% OUTPUT?:?含所有重要輸出值與參數(shù)的結(jié)構(gòu)變量
% GRAD?:?此位置上的梯度?
%
%???輸入/輸出變量擴展描述?
%???OPTIONS
% OPTIONS.GoalsExactAchieve?:?置0,線搜索(一維搜索);置1,滿足Wolfe條件的正態(tài)線搜索(默認)
% OPTIONS.GradConstr?如果梯度調(diào)用是CPU代價高昂的(默認),置變量值為真;如置為假,梯度調(diào)用多,函數(shù)調(diào)用少
% ????OPTIONS.HessUpdate?:?置為?‘bfgs‘采用BFGS優(yōu)化方法(默認),未知量多于3000時,切換到有限內(nèi)存BFGS方法,
%???????????????與置為‘lbfgs‘相同;置為?‘steepdesc‘?采用最陡梯度下降優(yōu)化方法?
% OPTIONS.StoreN?:?用于L-BFGS中近似Hessian矩陣的迭代次數(shù),默認值20;對不平滑函數(shù),小值可能更好,
%???????????????因為Hessian僅在特定位置有效;對二次式推薦用大值?
% OPTIONS.GradObj?:?如果有梯度,置為?‘on‘;否則采用有限差分
%????? OPTIONS.Display?:?顯示的等級。?‘off‘?不顯示輸出;‘plot‘顯示圖中所有線搜索結(jié)果;?
%???????????????‘iter‘顯示每一次迭代的輸出;‘final‘只顯示最終輸出;?‘notify‘僅在函數(shù)不收斂時顯示輸出?
% ????OPTIONS.TolX?:?x的中止容限,默認值?1e-6.
% ????OPTIONS.TolFun?:?函數(shù)值中止容限,默認值?1e-6.
% OPTIONS.MaxIter?:?最大迭代次數(shù),默認值?400.
%? OPTIONS.MaxFunEvals?:?函數(shù)估值最大次數(shù),默認值為未知變量數(shù)目100倍
% OPTIONS.DiffMaxChange?:?有限差分梯度用最大步長
% OPTIONS.DiffMinChange?:?有限差分梯度用最小步長
% OPTIONS.OutputFcn?:?用戶定義函數(shù),優(yōu)化器函數(shù)在每次迭代時調(diào)用
% 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處梯度能改進優(yōu)化器速度,把?FUN?函數(shù)寫為如下形式
%??? function?[fg]=FUN(X)
%??????? f??X處的值計算;
%??? if?(?nargout?>?1?)
%??????? g??X處的梯度計算
%??? end
% EXITFLAG
% EXITFLAG可能的取值,對應(yīng)退出條件
% 1?‘Change?in?the?objective?function?value?was?less?than?the?specified?tolerance?TolFun.‘
%???????????(目標(biāo)函數(shù)值變化小于指定的容限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.‘
%???????????(迭代次數(shù)超限,MaxIter或者函數(shù)估值次數(shù)超過options.FunEvals)
%?? -1?‘Algorithm?was?terminated?by?the?output?function.‘
%???????????(輸出函數(shù)(output)中止了算法)
%?? -2?‘Line?search?cannot?find?an?acceptable?point?along?the?current?search‘;
%???????????(沿著當(dāng)前搜索,線搜索無法找到一個可接受點)
%
%???舉例
%???????options?=?optimset(‘GradObj‘‘on‘);
%???????X?=?fminlbfgs(@myfun2options)
%
%??? %?其中?myfun是一個MATLAB函數(shù),例如
%???????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源代碼
評論
共有 條評論