微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Julia的图灵模块中使用CDF函数?

如何解决如何在Julia的图灵模块中使用CDF函数?

我想知道 Gamma distribution of Awareness 的参数。 意识在 1 周时为 0.336,在 4 周时为 0.554,在 13 周时为 0.64。 数据集建在这里。数据是 Gamma dist 的 cdf。

 xs = [ 1 0.336 ; 4 0.554 ; 13 0.64 ] 

我用 Julia 编码并使用图灵

@model function gmodel(ds)
    m,n = size(ds)
    k ~ InverseGamma(3,2)
    a ~ InverseGamma(3,2)
    for i in 1:m
        cdf_g = cdf(Gamma(k,a),ds[i,1])
        ds[i,2] ~ normal(cdf_g,3)
    end
end
c = sample(gmodel(xs),NUTS(),1000) 

但是,我得到了一个错误

MethodError: no method matching gammacdf(::ForwardDiff.Dual{ForwardDiff.Tag{Turing.Core.var"#f#1"{DynamicPPL.VarInfo{NamedTuple{(:k,:a),Tuple{DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:k,Tuple{}},Int64},Array{InverseGamma{Float64},1},Array{DynamicPPL.VarName{:k,Array{Float64,Array{Set{DynamicPPL.Selector},1}},DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:a,Array{DynamicPPL.VarName{:a,1}}}},Float64},DynamicPPL.Model{var"#33#34",(:ds,),(),Tuple{Array{Float64,2}},DynamicPPL.Sampler{NUTS{Turing.Core.ForwardDiffAD{40},AdvancedHMC.DiagEuclideanMetric}},DynamicPPL.DefaultContext},Float64,2},::ForwardDiff.Dual{ForwardDiff.Tag{Turing.Core.var"#f#1"{DynamicPPL.VarInfo{NamedTuple{(:k,::Float64)
Closest candidates are:
  gammacdf(!Matched::Union{Float64,!Matched::Union{Float64,::Union{Float64,Int64}) at C:\Users\kimse\.julia\packages\StatsFuns\zJ1EI\src\rmath.jl:77

如何在图灵中实现和使用CDF或PDF函数的Function?

解决方法

那并不是真正的图灵问题——NUTS 作为 HMC 采样器,使用自动微分来获取 logpdf 的梯度。 gammacdf 来自 StatsFuns,未向 ForwardDiff 注册 AD。此外,实现可能是 ccall 中的 Rmath

可能的解决方案:

  • 使用另一个采样器,而不是基于 AD。
  • 使用 Turing.setadbackend 尝试不同的 AD 后端。
  • 在纯 Julia 中表达 gammacdf,由原始可微函数组成。
  • 添加必要的后退或前推(即适用于前向或后向 AD 模式的梯度实现),可能使用不同的后端。

我建议您在 Julia slack#autodiff 频道上提问,那里有很多非常有帮助的人。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?