2
我想盡量減少使用scipy.optimize.minimize
在Python中的函數,以確定四個不同的參數。在scipy最小化期間打印當前評估參數
我想在優化算法的每一步打印當前評估的參數,所以我可以使用它們來使我的初步猜測更好。
我該怎麼做?
我想盡量減少使用scipy.optimize.minimize
在Python中的函數,以確定四個不同的參數。在scipy最小化期間打印當前評估參數
我想在優化算法的每一步打印當前評估的參數,所以我可以使用它們來使我的初步猜測更好。
我該怎麼做?
使用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())
嗯並不爲我工作。沒有打印 – Taylor 2016-04-07 21:28:04