我试图了解“
dogleg”方法在Pythonscipy.optimize.minimize
函数中的工作方式。我正在调整帮助页面底部的示例。
根据注释,dogleg方法需要一个Jacobian和Hessian参数。为此,我使用了numdifftools
包装:
import numpy as np
from scipy.optimize import minimize
from numdifftools import Jacobian, Hessian
def fun(x,a):
return (x[0] - 1)**2 + (x[1] - a)**2
x0 = np.array([2,0]) # initial guess
a = 2.5
res = minimize(fun, x0, args=(a), method='dogleg',
jac=Jacobian(fun)([2,0]), hess=Hessian(fun)([2,0]))
print(res)
编辑:
如果我按照以下帖子的建议进行了更改,
res = minimize(fun, x0, args=a, method='dogleg',
jac=Jacobian(lambda x: fun(x,a)),
hess=Hessian(lambda x: fun(x,a)))
我得到一个错误TypeError: <lambda>() takes 1 positional argument but 2 were given
。我究竟做错了什么?
在最初的猜测中计算Jacobian和Hessian是否正确x0
?
该错误是来自和的调用,Jacobian
而Hessian
不是来自的调用minimize
。替换为Jacobian(fun)
,Jacobian(lambda x: fun(x, a))
并类似地Hessian
应该可以解决问题(因为现在要区分的函数只有一个向量参数)。
另一件事:(a)
是a
,如果您希望将其用作元组使用(a,)
。
import numpy as np
from scipy.optimize import minimize
from numdifftools import Jacobian, Hessian
def fun(x, a):
return (x[0] - 1) **2 + (x[1] - a) **2
def fun_der(x, a):
return Jacobian(lambda x: fun(x, a))(x).ravel()
def fun_hess(x, a):
return Hessian(lambda x: fun(x, a))(x)
x0 = np.array([2, 0]) # initial guess
a = 2.5
res = minimize(fun, x0, args=(a,), method='dogleg', jac=fun_der, hess=fun_hess)
print(res)
问题内容: 我想通过Tensorflow计算Jacobian矩阵。 是)我有的: 是损失函数,都是可训练的变量,并且是许多数据。 但是,如果我们增加数据数量,则需要花费大量时间来运行该功能。有任何想法吗? 问题答案: 假设和是Tensorflow张量,并且取决于: 结果具有形状,并提供的每个元素相对于的每个元素的偏导数。
和其他Web服务的实现框架不同的是,Hessian是一个使用二进制Web服务协议的框架,它的好处在于免除了一大堆附加的API包,例如XML的处理之类的jar包,这也就是为什么说它是一个轻量级的Web服务实现框架的原因,这个原因还在于手机上的应用程序可以通过Hessian提供的API很方便的访问Hessian的Web服务。
Hessian 1 协议用于集成 Hessian 的服务,Hessian 底层采用 Http 通讯,采用 Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 作为服务器实现。 Dubbo 的 Hessian 协议可以和原生 Hessian 服务互操作,即: 提供者用 Dubbo 的 Hessian 协议暴露服务,消费者直接用标准 Hessian 接口调用 或者提供方用标准 Hessian
这是用 C# 语言实现的类 Hessian 二进制远程调用的框架
问题内容: 我用来优化一个实际问题,答案只能是整数。我当前的代码如下所示: 这样产生: 但是我希望使用整数值对其进行优化(将所有数值四舍五入到最接近的整数并不总是给出最小值)。 有没有办法只使用整数值? (我想我可以创建一个具有所有可能排列的数组,并为每个组合评估f(x),但这似乎不是一个非常优雅或快速的解决方案。) 问题答案: 纸浆溶液 经过研究,我认为您的目标函数不是线性的。我在Python纸
嗨,我一直在用c编写shell,我在尝试重定向时卡住了。虽然在我的程序中重定向标准输出有效,但标准输入不起作用。 我是< code>fork()的新手,但我的问题是我在这里做错了什么,重定向stdout可以工作,但stdin不会向给定的文件写入任何内容。
问题内容: 在过去的8个月中,我一直在运行和开发一个分类网站,所有错误均仅归因于以下一个原因:用户如何输入文本… 我的问题是 :是否有一个php类,一个插件,我可以做些什么 在发送$ str到我的SQL之前?? PS。当我开始使用JSON时,我还注意到问题翻了一番,因为我还必须小心在JSON中输出结果。 我遇到的一些问题:多语言字符串(不同的字符集),从Excel工作表中复制粘贴。 注意:我不担心
问题内容: 我通过Stata学习了数据操纵和分析,并使用log命令记录了所有写入的命令和生成的输出。这样做可以重现我的发现,检查以前的结果并与其他人共享pdf或txt。在Python中使用什么?如果我使用Python Jupyter Notebook或Spyder有区别吗? 问题答案: 执行所需操作的方法是使用命令,如下所述: 记录IPython输出?