autograd 原则上可以在 python 包装的 C 函数上工作吗?
我想区分的 C 函数需要REAL8数据类型的参数,我可以通过给它一个或参数来成功地在 python 中调用它。float
np.float64
用我的调试器仔细检查后,我发现当 autograd 将or更改为 ArrayBox对象时,当它尝试评估渐变时,我得到了一个TypeError 。float
np.float64
有没有办法让 autograd 在这种情况下继续进行?
是否有其他策略可能更适合我的情况?
我可以编写任何原语来解决这个问题吗?
背景:
Bilby 是一个较新的 python 库,它包装了用 C 编写的旧代码(LALSIMULATION)。它提供了广泛的预编码引力波模型,我想在我的研究中使用这些预编码模型。我的首要任务是弄清楚如何计算这些模型的准确 Hessian 和梯度。由于其臭名昭著的数值准确性,我想使用自动微分来解决这个问题,但我被卡住了。
import autograd.numpy as np
from autograd import grad
import BILBY_TAYLORF2 # My own class that wraps Bilby
model = BILBY_TAYLORF2()
gradient_likelihood = grad(model.logLikelihood)
gradient_likelihood(np.array([10., 10.]))
TypeError: in method 'SimInspiralChooseFDWaveform', argument 3 of type 'REAL8'
SimInspiralChooseFDWaveform 是第一次调用 C 代码以供参考。