【问题标题】:print currently evaluated params during scipy minimization在 scipy 最小化期间​​打印当前评估的参数
【发布时间】:2014-12-19 10:48:39
【问题描述】:

我正在尝试使用scipy.optimize.minimize 最小化 Python 中的一个函数,以确定四个不同的参数。

我想在优化算法的每一步打印当前评估的参数,以便我可以使用它们来使我的初始猜测更好。

我该怎么做?

【问题讨论】:

    标签: python scipy params minimization


    【解决方案1】:

    使用 callback 关键字参数。

    scipy.optimize.minimize 可以接受关键字参数callback。这应该是一个接受当前参数向量作为输入的函数。每次迭代后都会调用此函数。

    例如,

    from scipy.optimize import minimize
    
    def objective_function(xs):
        """ Function to optimize. """
        x, y = xs
        return (x-1)**2 + (y-2)**4
    
    def print_callback(xs):
        """
        Callback called after every iteration.
    
        xs is the estimated location of the optimum.
        """
        print xs
    
    minimize(objective_function, x0 = (0., 0.), callback=print_callback)
    

    通常,人们希望在对回调的不同调用之间保留信息,例如迭代次数。一种方法是使用闭包:

    def generate_print_callback():
        """
        Generate a callback that prints 
    
            iteration number | parameter values | objective function
    
        every tenth iteration.
        """
        saved_params = { "iteration_number" : 0 }
        def print_callback(xs):
            if saved_params["iteration_number"] % 10 == 0:
                print "{:3} | {} | {}".format(
                    saved_params["iteration_number"], xs, objective_function(xs))
            saved_params["iteration_number"] += 1
        return print_callback
    

    调用最小化函数:

    minimize(objective_function, x0 = (0., 0.), callback=generate_print_callback())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-06
      • 2019-07-02
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 2019-03-02
      • 1970-01-01
      • 2019-10-04
      相关资源
      最近更新 更多