【问题标题】:How to use scipy to optimize a function如何使用 scipy 优化函数
【发布时间】:2019-03-15 23:35:27
【问题描述】:

我正在学习使用 scipy 和 keras 进行图像样式迁移。我正在尝试运行示例代码,但 scipy.optimize.fmin_l_bfgs_b 出现错误:

x, min_val, info = fmin_l_bfgs_b(evaluator.loss, x.flatten(),fprime=evaluator.grads, maxfun=20, epsilon=1e-7)

但我得到一个错误:

ValueError: failed to initialize intent(inout) array -- expected elsize=8 but got 4

其中 evaluator 是类 Evaluator 的对象

class Evaluator():
    def __init__(self):
        self.loss_value = None
        self.grad_values = None

    def loss(self, x):
        assert self.loss_value is None
        loss_value, grad_values = evalurateLossAndGrads(x)
        self.loss_value = loss_value
        self.grad_values = grad_values
        return self.loss_value

    def grads(self,x ):
        assert self.loss_value is not None
        grad_values = np.copy(self.grad_values)
        self.loss_value = None
        self.grad_values = None
        return grad_values

方法 loss 返回一个标量,而 grads 返回一个长度等于图像中像素数的向量。名称x 是大小为 512*512*3 的图像。 我该如何修复这个错误?非常感谢。

【问题讨论】:

  • 你能把它变成一个可运行的例子吗?

标签: python image optimization scipy keras


【解决方案1】:

这个错误是因为 scipy 的 L-BFGS 求解器的 fortran 实现需要 8 字节而不是 4 字节浮点数。它要求您将初始 x 和渐变转换为 float64 数据类型。

【讨论】:

    猜你喜欢
    • 2020-11-25
    • 2016-05-26
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    • 2016-07-24
    • 2018-03-31
    相关资源
    最近更新 更多