我正在学习使用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
方法损失返回标量,而梯度返回向量,该向量的长度等于图像中的像素数。名称x
是大小为512 * 512 * 3的图像。
如何解决此错误?非常感谢。
答案 0 :(得分:1)
此错误是因为scipy的L-BFGS解算器的fortran实现需要8字节而不是4字节的浮点数。它要求您将初始x和渐变转换为float64
数据类型。