一般来说,存在一个问题:最初,某个函数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。
如何解决这个问题?