一般来说,存在一个问题:最初,某个函数function
以一个向量作为输入numpy.ndarray
,随后将其分解为多个向量和矩阵。
function
因为是在里面用numpy
,所以要严格接受numpy.ndarray
。
必须使用需要雅可比矩阵的scipy.optimize.minimize
方法寻找最小值。BFGS
要计算雅可比矩阵,。被使用torch.autograd.functional.jacobian
。
def jac(x, function):
def inner(x):
print(x)
return tensor(function(x.detach().numpy()))
return jacobian(inner, from_numpy(x)).numpy()
但它总是返回一个零向量,这就是为什么该函数在处都有最小值。
更新:
function
在这种情况下,是任何接受numpy.ndarray
并返回数字的函数。重要的是,此函数内部使用的代码在作为输入时可以工作numpy.ndarray
,但在作为输入时不起作用torch.tensor
。
例如(作为测试函数),function
它可以是Rosenbrock函数:
def RosenbrockFunction(x):
print(x.dot(np.eye(2)))
return (1 - x[0]) ** 2 + 100 * (x[1] - x[0] ** 2) ** 2
该行print(x.dot(np.eye(2)))
代表无法执行的代码torch.tensor
。
如何解决这个问题?