Turing Model debug info

Is there a way to get more information about when Turing is unable to sample from a model?

For example, I tried a simple (univariate) mixture of gaussians model and when I try to sample from it, I get this error:

ERROR: ArgumentError: Right-hand side of a ~ must be subtype of Distribution or a vector of Distributions.

It would be helpful to know the right-hand side of which “~” is causing the problem. Maybe something in DynamicPPL could give a line number?

Here’s the model:

@model mm(y) = begin
    N = length(y)

    μ1 ~ Normal()
    μ2 ~ Normal()
    μ3 ~ Normal()

    μ ~ [μ1, μ2, μ3]
    ps ~ Dirichlet(ones(3))

    k = Vector{Int}(undef, N)
    for i in 1:N
        k[i] ~ Categorical(ps)
        y[i] ~ Normal(μ[k[i]])
    end
   return k
end

[fce5fe82] Turing v0.13.0
[31c24e10] Distributions v0.23.2

I found the problem, but any debug info or tools would be helpful.

μ ~ [μ1, μ2, μ3]

Should be:

μ = [μ1, μ2, μ3]
1 Like

Could you please open an issue for this on DynamicPPL. Thanks!

Just as a remark, in case you aim to sample z using particle Gibbs you will need to use TArrays.

Here is a slightly modified version using tzeros to construct a TArray.

@model mm(y) = begin
    N = length(y)

    μ ~ filldist(Normal(), 3)
    ps ~ Dirichlet(3, 1.0)
    k = tzeros(Int, N)
    for i in 1:N
        k[i] ~ Categorical(ps)
        y[i] ~ Normal(μ[k[i]])
    end
   return k
end

Thanks Martin. I stumbled across the Turing Guide document. That helped quite a bit. I should have read that first.

However, using your model and using a dataset consisting of 3 gaussians generated in this way:

y = Vector{Float32}()
λ = [Normal(2), Normal(8), Normal(-1)]
G = Categorical([.3, .5, .2])
for i in 1:500
    a = rand(G)
    push!(y, rand(λ[a]))
end

and using this sample statement (with what seems like very relaxed parameters):

s = Gibbs(PG(10, :k), NUTS(20, .65, :μ, :ps))
@time chn = sample(mm(y), s, 500);

it took ~ 45 mins to complete. Does that seem as expected for 500 data points and 500 iterations?