using Turing
Troubleshooting
This page collects a number of common error messages observed when using Turing, along with suggestions on how to fix them.
If the suggestions here do not resolve your problem, please do feel free to open an issue.
Initial parameters
failed to find valid initial parameters in {N} tries. This may indicate an error with the model or AD backend…
This error is seen when a Hamiltonian Monte Carlo sampler is unable to determine a valid set of initial parameters for the sampling. Here, ‘valid’ means that the log probability density of the model, as well as its gradient with respect to each parameter, is finite and not NaN
.
NaN
gradient
One of the most common causes of this error is having a NaN
gradient. To find out whether this is happening, you can evaluate the gradient manually. Here is an example with a model that is known to be problematic:
using Turing
using DynamicPPL.TestUtils.AD: run_ad
@model function initial_bad()
~ Normal()
a ~ truncated(Normal(a), 0, Inf)
x end
= initial_bad()
model = AutoForwardDiff()
adtype = run_ad(model, adtype; test=false, benchmark=false)
result result.grad_actual
[ Info: Running AD on initial_bad with ADTypes.AutoForwardDiff() params : [-0.1664880872217592, -0.1831616247756507] actual : (-1.6990474121943835, [NaN, NaN])
2-element Vector{Float64}:
NaN
NaN
(See the DynamicPPL docs for more details on the run_ad
function and its return type.)
In this case, the NaN
gradient is caused by the Inf
argument to truncated
. (See, e.g., this issue on Distributions.jl.) Here, the upper bound of Inf
is not needed, so it can be removed:
@model function initial_good()
~ Normal()
a ~ truncated(Normal(a); lower=0)
x end
= initial_good()
model = AutoForwardDiff()
adtype run_ad(model, adtype; test=false, benchmark=false).grad_actual
[ Info: Running AD on initial_good with ADTypes.AutoForwardDiff() params : [-1.0518029136620572, -2.5257858378423768] actual : (-3.636185919033443, [0.6168218262636673, 0.9094613113108507])
2-element Vector{Float64}:
0.6168218262636673
0.9094613113108507
More generally, you could try using a different AD backend; if you don’t know why a model is returning NaN
gradients, feel free to open an issue.
-Inf
log density
Another cause of this error is having models with very extreme parameters. This example is taken from this Turing.jl issue:
@model function initial_bad2()
~ Exponential(100)
x ~ Uniform(0, x)
y end
= initial_bad2() | (y = 50.0,)
model
@model function initial_bad3()
~ Uniform(0, 1)
x_trf := -log(x_trf) / 100
x @show x
~ Uniform(0, x)
y end
= initial_bad3() | (y = 50.0,) model3
DynamicPPL.Model{typeof(initial_bad3), (), (), (), Tuple{}, Tuple{}, DynamicPPL.ConditionContext{@NamedTuple{y::Float64}, DynamicPPL.DefaultContext}}(initial_bad3, NamedTuple(), NamedTuple(), ConditionContext((y = 50.0,), DynamicPPL.DefaultContext()))
The problem here is that HMC attempts to find initial values for parameters inside the region of [-2, 2]
, after the parameters have been transformed to unconstrained space. For a distribution of Exponential(100)
, the appropriate transformation is log(x)
(see the variable transformation docs for more info).
Thus, HMC attempts to find initial values of log(x)
in the region of [-2, 2]
, which corresponds to x
in the region of [exp(-2), exp(2)]
= [0.135, 7.39]
. However, all of these values of x
will give rise to a zero probability density for y
because the value of y = 50.0
is outside the support of Uniform(0, x)
. Thus, the log density of the model is -Inf
, as can be seen with logjoint
:
logjoint(model, (x = exp(-2),))
-Inf
logjoint(model, (x = exp(2),))
-Inf
The most direct way of fixing this is to manually provide a set of initial parameters that are valid. For example, you can obtain a set of initial parameters with rand(Vector, model)
, and then pass this as the initial_params
keyword argument to sample
:
sample(model, NUTS(), 1000; initial_params=rand(Vector, model))
Sampling 0%| | ETA: N/A ┌ Info: Found initial step size └ ϵ = 0.8 Sampling 0%|▎ | ETA: 0:17:51 Sampling 1%|▍ | ETA: 0:08:55 Sampling 1%|▋ | ETA: 0:05:55 Sampling 2%|▊ | ETA: 0:04:25 Sampling 2%|█ | ETA: 0:03:31 Sampling 3%|█▏ | ETA: 0:02:55 Sampling 3%|█▍ | ETA: 0:02:29 Sampling 4%|█▋ | ETA: 0:02:10 Sampling 4%|█▊ | ETA: 0:01:55 Sampling 5%|██ | ETA: 0:01:43 Sampling 5%|██▏ | ETA: 0:01:33 Sampling 6%|██▍ | ETA: 0:01:25 Sampling 6%|██▌ | ETA: 0:01:18 Sampling 7%|██▊ | ETA: 0:01:12 Sampling 7%|███ | ETA: 0:01:07 Sampling 7%|███▏ | ETA: 0:01:03 Sampling 8%|███▍ | ETA: 0:00:59 Sampling 8%|███▌ | ETA: 0:00:55 Sampling 9%|███▊ | ETA: 0:00:52 Sampling 9%|███▉ | ETA: 0:00:49 Sampling 10%|████▏ | ETA: 0:00:46 Sampling 10%|████▎ | ETA: 0:00:44 Sampling 11%|████▌ | ETA: 0:00:42 Sampling 11%|████▊ | ETA: 0:00:40 Sampling 12%|████▉ | ETA: 0:00:38 Sampling 12%|█████▏ | ETA: 0:00:37 Sampling 13%|█████▎ | ETA: 0:00:35 Sampling 13%|█████▌ | ETA: 0:00:34 Sampling 14%|█████▋ | ETA: 0:00:32 Sampling 14%|█████▉ | ETA: 0:00:31 Sampling 14%|██████▏ | ETA: 0:00:30 Sampling 15%|██████▎ | ETA: 0:00:29 Sampling 15%|██████▌ | ETA: 0:00:28 Sampling 16%|██████▋ | ETA: 0:00:27 Sampling 16%|██████▉ | ETA: 0:00:26 Sampling 17%|███████ | ETA: 0:00:25 Sampling 17%|███████▎ | ETA: 0:00:24 Sampling 18%|███████▌ | ETA: 0:00:23 Sampling 18%|███████▋ | ETA: 0:00:23 Sampling 19%|███████▉ | ETA: 0:00:22 Sampling 19%|████████ | ETA: 0:00:21 Sampling 20%|████████▎ | ETA: 0:00:21 Sampling 20%|████████▍ | ETA: 0:00:20 Sampling 21%|████████▋ | ETA: 0:00:20 Sampling 21%|████████▉ | ETA: 0:00:19 Sampling 21%|█████████ | ETA: 0:00:19 Sampling 22%|█████████▎ | ETA: 0:00:18 Sampling 22%|█████████▍ | ETA: 0:00:18 Sampling 23%|█████████▋ | ETA: 0:00:17 Sampling 23%|█████████▊ | ETA: 0:00:17 Sampling 24%|██████████ | ETA: 0:00:16 Sampling 24%|██████████▎ | ETA: 0:00:16 Sampling 25%|██████████▍ | ETA: 0:00:15 Sampling 25%|██████████▋ | ETA: 0:00:15 Sampling 26%|██████████▊ | ETA: 0:00:15 Sampling 26%|███████████ | ETA: 0:00:14 Sampling 27%|███████████▏ | ETA: 0:00:14 Sampling 27%|███████████▍ | ETA: 0:00:14 Sampling 28%|███████████▋ | ETA: 0:00:13 Sampling 28%|███████████▊ | ETA: 0:00:13 Sampling 28%|████████████ | ETA: 0:00:13 Sampling 29%|████████████▏ | ETA: 0:00:12 Sampling 29%|████████████▍ | ETA: 0:00:12 Sampling 30%|████████████▌ | ETA: 0:00:12 Sampling 30%|████████████▊ | ETA: 0:00:12 Sampling 31%|████████████▉ | ETA: 0:00:11 Sampling 31%|█████████████▏ | ETA: 0:00:11 Sampling 32%|█████████████▍ | ETA: 0:00:11 Sampling 32%|█████████████▌ | ETA: 0:00:11 Sampling 33%|█████████████▊ | ETA: 0:00:10 Sampling 33%|█████████████▉ | ETA: 0:00:10 Sampling 34%|██████████████▏ | ETA: 0:00:10 Sampling 34%|██████████████▎ | ETA: 0:00:10 Sampling 35%|██████████████▌ | ETA: 0:00:10 Sampling 35%|██████████████▊ | ETA: 0:00:10 Sampling 35%|██████████████▉ | ETA: 0:00:09 Sampling 36%|███████████████▏ | ETA: 0:00:09 Sampling 36%|███████████████▎ | ETA: 0:00:09 Sampling 37%|███████████████▌ | ETA: 0:00:09 Sampling 37%|███████████████▋ | ETA: 0:00:09 Sampling 38%|███████████████▉ | ETA: 0:00:09 Sampling 38%|████████████████▏ | ETA: 0:00:08 Sampling 39%|████████████████▎ | ETA: 0:00:08 Sampling 39%|████████████████▌ | ETA: 0:00:08 Sampling 40%|████████████████▋ | ETA: 0:00:08 Sampling 40%|████████████████▉ | ETA: 0:00:08 Sampling 41%|█████████████████ | ETA: 0:00:08 Sampling 41%|█████████████████▎ | ETA: 0:00:07 Sampling 42%|█████████████████▌ | ETA: 0:00:07 Sampling 42%|█████████████████▋ | ETA: 0:00:07 Sampling 42%|█████████████████▉ | ETA: 0:00:07 Sampling 43%|██████████████████ | ETA: 0:00:07 Sampling 43%|██████████████████▎ | ETA: 0:00:07 Sampling 44%|██████████████████▍ | ETA: 0:00:07 Sampling 44%|██████████████████▋ | ETA: 0:00:07 Sampling 45%|██████████████████▉ | ETA: 0:00:06 Sampling 45%|███████████████████ | ETA: 0:00:06 Sampling 46%|███████████████████▎ | ETA: 0:00:06 Sampling 46%|███████████████████▍ | ETA: 0:00:06 Sampling 47%|███████████████████▋ | ETA: 0:00:06 Sampling 47%|███████████████████▊ | ETA: 0:00:06 Sampling 48%|████████████████████ | ETA: 0:00:06 Sampling 48%|████████████████████▎ | ETA: 0:00:06 Sampling 49%|████████████████████▍ | ETA: 0:00:06 Sampling 49%|████████████████████▋ | ETA: 0:00:05 Sampling 49%|████████████████████▊ | ETA: 0:00:05 Sampling 50%|█████████████████████ | ETA: 0:00:05 Sampling 50%|█████████████████████▏ | ETA: 0:00:05 Sampling 51%|█████████████████████▍ | ETA: 0:00:05 Sampling 51%|█████████████████████▌ | ETA: 0:00:05 Sampling 52%|█████████████████████▊ | ETA: 0:00:05 Sampling 52%|██████████████████████ | ETA: 0:00:05 Sampling 53%|██████████████████████▏ | ETA: 0:00:05 Sampling 53%|██████████████████████▍ | ETA: 0:00:05 Sampling 54%|██████████████████████▌ | ETA: 0:00:05 Sampling 54%|██████████████████████▊ | ETA: 0:00:04 Sampling 55%|██████████████████████▉ | ETA: 0:00:04 Sampling 55%|███████████████████████▏ | ETA: 0:00:04 Sampling 56%|███████████████████████▍ | ETA: 0:00:04 Sampling 56%|███████████████████████▌ | ETA: 0:00:04 Sampling 56%|███████████████████████▊ | ETA: 0:00:04 Sampling 57%|███████████████████████▉ | ETA: 0:00:04 Sampling 57%|████████████████████████▏ | ETA: 0:00:04 Sampling 58%|████████████████████████▎ | ETA: 0:00:04 Sampling 58%|████████████████████████▌ | ETA: 0:00:04 Sampling 59%|████████████████████████▊ | ETA: 0:00:04 Sampling 59%|████████████████████████▉ | ETA: 0:00:04 Sampling 60%|█████████████████████████▏ | ETA: 0:00:04 Sampling 60%|█████████████████████████▎ | ETA: 0:00:03 Sampling 61%|█████████████████████████▌ | ETA: 0:00:03 Sampling 61%|█████████████████████████▋ | ETA: 0:00:03 Sampling 62%|█████████████████████████▉ | ETA: 0:00:03 Sampling 62%|██████████████████████████▏ | ETA: 0:00:03 Sampling 63%|██████████████████████████▎ | ETA: 0:00:03 Sampling 63%|██████████████████████████▌ | ETA: 0:00:03 Sampling 63%|██████████████████████████▋ | ETA: 0:00:03 Sampling 64%|██████████████████████████▉ | ETA: 0:00:03 Sampling 64%|███████████████████████████ | ETA: 0:00:03 Sampling 65%|███████████████████████████▎ | ETA: 0:00:03 Sampling 65%|███████████████████████████▌ | ETA: 0:00:03 Sampling 66%|███████████████████████████▋ | ETA: 0:00:03 Sampling 66%|███████████████████████████▉ | ETA: 0:00:03 Sampling 67%|████████████████████████████ | ETA: 0:00:03 Sampling 67%|████████████████████████████▎ | ETA: 0:00:03 Sampling 68%|████████████████████████████▍ | ETA: 0:00:03 Sampling 68%|████████████████████████████▋ | ETA: 0:00:02 Sampling 69%|████████████████████████████▊ | ETA: 0:00:02 Sampling 69%|█████████████████████████████ | ETA: 0:00:02 Sampling 70%|█████████████████████████████▎ | ETA: 0:00:02 Sampling 70%|█████████████████████████████▍ | ETA: 0:00:02 Sampling 70%|█████████████████████████████▋ | ETA: 0:00:02 Sampling 71%|█████████████████████████████▊ | ETA: 0:00:02 Sampling 71%|██████████████████████████████ | ETA: 0:00:02 Sampling 72%|██████████████████████████████▏ | ETA: 0:00:02 Sampling 72%|██████████████████████████████▍ | ETA: 0:00:02 Sampling 73%|██████████████████████████████▋ | ETA: 0:00:02 Sampling 73%|██████████████████████████████▊ | ETA: 0:00:02 Sampling 74%|███████████████████████████████ | ETA: 0:00:02 Sampling 74%|███████████████████████████████▏ | ETA: 0:00:02 Sampling 75%|███████████████████████████████▍ | ETA: 0:00:02 Sampling 75%|███████████████████████████████▌ | ETA: 0:00:02 Sampling 76%|███████████████████████████████▊ | ETA: 0:00:02 Sampling 76%|████████████████████████████████ | ETA: 0:00:02 Sampling 77%|████████████████████████████████▏ | ETA: 0:00:02 Sampling 77%|████████████████████████████████▍ | ETA: 0:00:02 Sampling 77%|████████████████████████████████▌ | ETA: 0:00:02 Sampling 78%|████████████████████████████████▊ | ETA: 0:00:01 Sampling 78%|████████████████████████████████▉ | ETA: 0:00:01 Sampling 79%|█████████████████████████████████▏ | ETA: 0:00:01 Sampling 79%|█████████████████████████████████▍ | ETA: 0:00:01 Sampling 80%|█████████████████████████████████▌ | ETA: 0:00:01 Sampling 80%|█████████████████████████████████▊ | ETA: 0:00:01 Sampling 81%|█████████████████████████████████▉ | ETA: 0:00:01 Sampling 81%|██████████████████████████████████▏ | ETA: 0:00:01 Sampling 82%|██████████████████████████████████▎ | ETA: 0:00:01 Sampling 82%|██████████████████████████████████▌ | ETA: 0:00:01 Sampling 83%|██████████████████████████████████▊ | ETA: 0:00:01 Sampling 83%|██████████████████████████████████▉ | ETA: 0:00:01 Sampling 84%|███████████████████████████████████▏ | ETA: 0:00:01 Sampling 84%|███████████████████████████████████▎ | ETA: 0:00:01 Sampling 84%|███████████████████████████████████▌ | ETA: 0:00:01 Sampling 85%|███████████████████████████████████▋ | ETA: 0:00:01 Sampling 85%|███████████████████████████████████▉ | ETA: 0:00:01 Sampling 86%|████████████████████████████████████▏ | ETA: 0:00:01 Sampling 86%|████████████████████████████████████▎ | ETA: 0:00:01 Sampling 87%|████████████████████████████████████▌ | ETA: 0:00:01 Sampling 87%|████████████████████████████████████▋ | ETA: 0:00:01 Sampling 88%|████████████████████████████████████▉ | ETA: 0:00:01 Sampling 88%|█████████████████████████████████████ | ETA: 0:00:01 Sampling 89%|█████████████████████████████████████▎ | ETA: 0:00:01 Sampling 89%|█████████████████████████████████████▍ | ETA: 0:00:01 Sampling 90%|█████████████████████████████████████▋ | ETA: 0:00:01 Sampling 90%|█████████████████████████████████████▉ | ETA: 0:00:01 Sampling 91%|██████████████████████████████████████ | ETA: 0:00:01 Sampling 91%|██████████████████████████████████████▎ | ETA: 0:00:01 Sampling 91%|██████████████████████████████████████▍ | ETA: 0:00:00 Sampling 92%|██████████████████████████████████████▋ | ETA: 0:00:00 Sampling 92%|██████████████████████████████████████▊ | ETA: 0:00:00 Sampling 93%|███████████████████████████████████████ | ETA: 0:00:00 Sampling 93%|███████████████████████████████████████▎ | ETA: 0:00:00 Sampling 94%|███████████████████████████████████████▍ | ETA: 0:00:00 Sampling 94%|███████████████████████████████████████▋ | ETA: 0:00:00 Sampling 95%|███████████████████████████████████████▊ | ETA: 0:00:00 Sampling 95%|████████████████████████████████████████ | ETA: 0:00:00 Sampling 96%|████████████████████████████████████████▏ | ETA: 0:00:00 Sampling 96%|████████████████████████████████████████▍ | ETA: 0:00:00 Sampling 97%|████████████████████████████████████████▋ | ETA: 0:00:00 Sampling 97%|████████████████████████████████████████▊ | ETA: 0:00:00 Sampling 98%|█████████████████████████████████████████ | ETA: 0:00:00 Sampling 98%|█████████████████████████████████████████▏| ETA: 0:00:00 Sampling 98%|█████████████████████████████████████████▍| ETA: 0:00:00 Sampling 99%|█████████████████████████████████████████▌| ETA: 0:00:00 Sampling 99%|█████████████████████████████████████████▊| ETA: 0:00:00 Sampling 100%|██████████████████████████████████████████| ETA: 0:00:00 Sampling 100%|██████████████████████████████████████████| Time: 0:00:05
Chains MCMC chain (1000×13×1 Array{Float64, 3}): Iterations = 501:1:1500 Number of chains = 1 Samples per chain = 1000 Wall duration = 7.0 seconds Compute duration = 7.0 seconds parameters = x internals = lp, n_steps, is_accept, acceptance_rate, log_density, hamiltonian_energy, hamiltonian_energy_error, max_hamiltonian_energy_error, tree_depth, numerical_error, step_size, nom_step_size Summary Statistics parameters mean std mcse ess_bulk ess_tail rhat ⋯ Symbol Float64 Float64 Float64 Float64 Float64 Float64 ⋯ x 119.7803 79.5890 6.9786 137.3057 184.7574 1.0059 ⋯ 1 column omitted Quantiles parameters 2.5% 25.0% 50.0% 75.0% 97.5% Symbol Float64 Float64 Float64 Float64 Float64 x 51.0960 68.5561 95.4065 143.7126 331.3144
More generally, you may also consider reparameterising the model to avoid such issues.