diff --git a/HISTORY.md b/HISTORY.md index 039ac6bb9..e3ebea3a0 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,3 +1,7 @@ +# 0.41.2 + +Fixed NUTS not correctly specifying the number of adaptation steps when calling `AdvancedHMC.initialize!`. + # 0.41.1 The `ModeResult` struct returned by `maximum_a_posteriori` and `maximum_likelihood` can now be wrapped in `InitFromParams()`. diff --git a/Project.toml b/Project.toml index cb7b1cb72..2faa78ce5 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "Turing" uuid = "fce5fe82-541a-59a6-adf8-730c64b5f9a0" -version = "0.41.1" +version = "0.41.2" [deps] ADTypes = "47edcb42-4c32-4615-8424-f2b9edc5f35b" diff --git a/src/mcmc/hmc.jl b/src/mcmc/hmc.jl index 101847b75..e691f6c8f 100644 --- a/src/mcmc/hmc.jl +++ b/src/mcmc/hmc.jl @@ -223,7 +223,7 @@ function Turing.Inference.initialstep( end # Generate a kernel and adaptor. kernel = make_ahmc_kernel(spl, ϵ) - adaptor = AHMCAdaptor(spl, hamiltonian.metric; ϵ=ϵ) + adaptor = AHMCAdaptor(spl, hamiltonian.metric, nadapts; ϵ=ϵ) transition = Transition(model, vi, NamedTuple()) state = HMCState(vi, 1, kernel, hamiltonian, z, adaptor) @@ -480,7 +480,9 @@ end #### Default HMC stepsize and mass matrix adaptor #### -function AHMCAdaptor(alg::AdaptiveHamiltonian, metric::AHMC.AbstractMetric; ϵ=alg.ϵ) +function AHMCAdaptor( + alg::AdaptiveHamiltonian, metric::AHMC.AbstractMetric, nadapts::Int; ϵ=alg.ϵ +) pc = AHMC.MassMatrixAdaptor(metric) da = AHMC.StepSizeAdaptor(alg.δ, ϵ) @@ -491,13 +493,13 @@ function AHMCAdaptor(alg::AdaptiveHamiltonian, metric::AHMC.AbstractMetric; ϵ=a adaptor = AHMC.NaiveHMCAdaptor(pc, da) # there is actually no adaptation for mass matrix else adaptor = AHMC.StanHMCAdaptor(pc, da) - AHMC.initialize!(adaptor, alg.n_adapts) + AHMC.initialize!(adaptor, nadapts) end end return adaptor end -function AHMCAdaptor(::Hamiltonian, ::AHMC.AbstractMetric; kwargs...) +function AHMCAdaptor(::Hamiltonian, ::AHMC.AbstractMetric, nadapts::Int; kwargs...) return AHMC.Adaptation.NoAdaptation() end