gpt4 book ai didi

Python:Levenberg Marquardt 算法并行化

转载 作者:太空宇宙 更新时间:2023-11-04 01:34:27 49 4
gpt4 key购买 nike

我有一些代码可以使理论预测与实验数据相吻合,我想运行 LMA(Levenberg-Marquardt 算法)以使理论与实验相吻合。然而,计算是非常重要的,每个模型在单个处理器上需要大约 10-30 分钟的时间来计算,但是这个问题是可并行化的,并且代码当前设置为将(单次迭代的)不同组件提交给集群计算机(这个计算仍然需要大约 1-2 分钟)。

现在这个提交脚本是在 python 中的一个可调用函数中设置的——所以用 scipy LMA (scipy.optimise.leastsq) 设置它是相对微不足道的——但是我想,scipy LMA 会通过每个人连续计算(用于测量梯度),然后等待返回,而我更喜欢 LMA 一次发送一整套计算,然后等待返回。 python 提交脚本看起来有点像:

def submission_script(number_iterations,number_parameters,value_parameters):
fitness_parameter = [0]*number_iterations
<fun stuff>
return (fitness_parameter)

其中“value_parameters”是维度[number_iterations][number_parameters]的嵌套列表,其中包含要为每个模型计算的变量,“number_parameters”是要拟合的参数数量,“number_iterations”是要计算的模型数量(因此每一步,为了衡量梯度,LMA 计算 2*number_parameters 个模型),“fitness_parameter”是必须最小化的值(并且具有维度 [iterations])。

现在,显然,我可以编写自己的 LMA,但这有点重新发明轮子 - 我想知道是否有任何东西可以满足我的需求(或者 scipy LMA 是否可以用于此方式)。

Gauss-Newton 算法应该也有效,因为起点应该接近最小值。限制拟合的能力(即为拟合参数设置最大值和最小值)会很好,但不是必需的。

最佳答案

scipy.optimize.leastsq 函数让您有机会提供一个函数 J 来评估给定参数向量的雅可比矩阵。您可以实现多处理解决方案来计算此矩阵,而不是让 scipy.optimize.leastsq 通过连续调用您的函数 f 来近似它。

不幸的是,scipy 中的 LMA 实现对 fJ 使用了单独的函数。您可能希望缓存在 f 中计算的信息,以便在使用相同参数 vecor 调用时在 J 中重用它。或者,您可以实现自己的 LMA 版本,该版本使用单个 fJ 调用。

关于Python:Levenberg Marquardt 算法并行化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11158461/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com