【问题标题】:Why does scipy.optimize.fmin_l_bfgs_b fail to print iteration details despite appropriate inputs?尽管有适当的输入,为什么 scipy.optimize.fmin_l_bfgs_b 无法打印迭代详细信息?
【发布时间】:2017-07-10 13:14:07
【问题描述】:

目标: 查看scipy.optimize.fmin_l_bfgs_b 每次迭代的目标函数值。

问题: 提供可选参数iprint=1 应该会导致打印输出。但是,这样做不会产生任何输出。

其他信息: 我在 Windows 7 机器上使用 Python 2.7 的 Anaconda 4.3 发行版,带有 IPython 控制台的 Spyder IDE。

示例代码:

import numpy as np
import scipy.optimize as opt

A = np.random.rand(20,40)
b = np.random.rand(20,)
x0 = np.ones((40,))

def objective_func(x,A,b):
    objective = np.sum((A.dot(x)-b)**2) + np.sum(np.abs(x))
    return objective

def gradient_func(x,A,b):
    gradient = 2*A.T.dot(A.dot(x)-b) + 2*x/np.sqrt(x**2 + 10**(-8))
    return gradient

x_bar = opt.fmin_l_bfgs_b(func=objective_func,
                          x0=x0,
                          fprime = gradient_func,
                          args=(A,b),
                          iprint=1)

【问题讨论】:

  • 可能你忘记调用函数了?对于这种挑衅性的评论,我深表歉意。这是为了建议添加示例代码以重现问题。

标签: python python-2.7 scipy anaconda spyder


【解决方案1】:

一种解决方案是使用 lambda 函数作为回调函数。这允许除了 x 之外,还可以将 A、b 传递给回调函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多