簡體   English   中英

如何手動停止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進行優化。

用於計算lossgrad計算器由一個類實現

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算法的收斂相關參數為

  1. factr -默認值為1E7,如果你想提前停止了裝修增加其價值。

Factor的典型值為:1e12(低精度); 1e7的精度適中; 10.0具有極高的精度。

如果您熟悉optimize.minimize功能,則關系ftolfactr在給定的文檔

請注意,ftol選項是通過該接口提供的,而factr是通過該接口提供的,其中factr是將默認機器浮點精度乘以ftol的因子:ftol = factr * numpy.finfo(float).eps 。

  1. pgtol :浮動,可選

當max {| proj g_i | i = 1,...,n} <= pgtol其中pg_i是投影梯度的第i個分量。

如果您想使用l_bfgs_boptimize.minimize方法,請嘗試 l_bfgs_b

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM