julia - 与 ::getfield() 相关的 ForwardDiff.jl 和 ReverseDiff.jl 错误消息
问题描述
我正在尝试使用 ForwardDiff.jl 和/或 ReverseDiff.jl 库来计算优化问题中的梯度。
这两个包都给我一个与 ::getfield() 相关的错误消息。
ReverseDiff 给了我一个 LoadError:
MethodError: no method matching (::getfield(CalibrationModule, Symbol("#f#4"))
{AlgorithmParameters,ModelParameters,Guess,Array{Float64,1}})
(::ReverseDiff.TrackedArray{Float64,Float64,1,Array{Float64,1},Array{Float64,1}})
ForwardDiff 给了我一个 LoadError:
MethodError: no method matching (::getfield(CalibrationModule, Symbol("#f#10"))
{AlgorithmParameters,ModelParameters,Guess,Array{Float64,1}})
(::Array{ForwardDiff.Dual{ForwardDiff.Tag{getfield(CalibrationModule,
Symbol("#f#10"))
{AlgorithmParameters,ModelParameters,Guess,Array{Float64,1}},Float64},Float64,6},1})
我不知道如何理解这个错误信息。我的代码太复杂,无法在这里发布,但据我所知,我没有使用任何不是用 Julia 编写的库。我确实在整个过程中广泛使用自定义数据类型(可变结构),但我不明白为什么这会导致问题......
解决方案
从 Julia文档中,MethodError: no method matching
当没有与您正在调用的方法具有匹配类型签名的方法时,会抛出 。Julia 有一个动态类型系统,但允许类型注释在值不是预期类型时抛出异常。由于您广泛使用自定义数据类型,因此您可能会将自定义数据类型的值传递给 ForwardDiff/ReverseDiff 中需要不同类型的方法 - 很难在没有看到代码的情况下确认,但这就是我的地方d 开始寻找。
推荐阅读
- winapi - SRW Lock 可以用作二进制信号量吗?
- python - 如何使用 tensorflow 注意力层?
- c# - 如何在一段时间内和外部从列表中获取元素
- python - 获取真实值的熊猫系列标签,而不将系列存储在临时变量中
- python - 在计算运行中出现的次数时创建不重复的新列表
- python - 在脚本错误的末尾给出总金额
- python-3.x - SyntaxError:无效的语法有人知道吗?
- python - Pynput:检测全局热键块 wxPython 框架
- microsoft-graph-api - Microsoft Graph API - beta/users/{id}/photo 上的 MailboxNotEnabledForRESTAPI 404 错误
- javascript - 如何以 webm 格式而不是 mkv 格式保存视频