![](/img/trans.png)
[英]How do I fit recurrence relations using scipy.optimize.fmin_l_bfgs_b?
[英]How can I stop the optimization process of scipy.optimize.fmin_l_bfgs_b manually?
我正在使用spicy.optimize.fmin_l_bfgs_b
進行優化。
用於計算loss
和grad
計算器由一個類實現
from calculator import loss_calculator
class one_batch:
def __init__(self, setup_dict):
self.setup_dict = setup_dict
def calculate(self):
temp_instance = loss_calculator(self.setup_dict, self.parameters)
self.loss, self.grad = temp_instance.result()
def objective_function(self, parameter):
self.parameters = parameters
self.calculate()
###########################################################
# I want to check if some convergence occures here. If #
# the convergence occurs, stop l-bfgs-b optimization. #
###########################################################
return self.loss, self.grad
為了優化,每次加載新一批示例時,都會創建一個one_batch
實例。
from scipy.optimize import fmin_l_bfgs_b as optimizer
model_vector = initial_vector
for n in range(niter):
setup_dict = setup_dict # load the batch of examples
temp_batch = one_batch(setup_dict)
model_update = optimizer(temp_batch.objective_function, x0=model_vector)
model_vector = model_update
從代碼中可以看到,我想要實現的是:
當optimizer
調用temp_batch.objective_function
來使損失函數最小化時,如果發生一些收斂,我想“打破”以spicy.optimize.fmin_l_bfgs_b
編碼的優化過程。
我怎樣才能做到這一點?
l_bfgs_b算法的收斂相關參數為
factr
-默認值為1E7,如果你想提前停止了裝修增加其價值。 Factor的典型值為:1e12(低精度); 1e7的精度適中; 10.0具有極高的精度。
如果您熟悉optimize.minimize功能,則關系ftol
和factr
在給定的文檔 。
請注意,ftol選項是通過該接口提供的,而factr是通過該接口提供的,其中factr是將默認機器浮點精度乘以ftol的因子:ftol = factr * numpy.finfo(float).eps 。
pgtol
:浮動,可選 當max {| proj g_i | i = 1,...,n} <= pgtol其中pg_i是投影梯度的第i個分量。
如果您想使用l_bfgs_b
做optimize.minimize方法,請嘗試此 l_bfgs_b
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.