diff --git a/examples/Neals Funnel/Neals_funnel.ipynb b/examples/Neals Funnel/Neals_funnel.ipynb index a34eaf1..7b7a5c7 100644 --- a/examples/Neals Funnel/Neals_funnel.ipynb +++ b/examples/Neals Funnel/Neals_funnel.ipynb @@ -115,45 +115,6 @@ { "cell_type": "code", "execution_count": 5, - "id": "4d52c9fb", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "_name_variables (generic function with 1 method)" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "function _get_dists(vi)\n", - " mds = values(vi.metadata)\n", - " return [md.dists[1] for md in mds]\n", - "end\n", - "\n", - "function _name_variables(vi, dist_lengths)\n", - " vsyms = keys(vi)\n", - " names = []\n", - " for (vsym, dist_length) in zip(vsyms, dist_lengths)\n", - " if dist_length == 1\n", - " name = [string(vsym)]\n", - " append!(names, name)\n", - " else\n", - " name = [string(vsym, i) for i = 1:dist_length]\n", - " append!(names, name)\n", - " end\n", - " end\n", - " return Vector{String}(names)\n", - "end" - ] - }, - { - "cell_type": "code", - "execution_count": 6, "id": "068aa52e", "metadata": {}, "outputs": [ @@ -163,7 +124,7 @@ "TuringTarget (generic function with 1 method)" ] }, - "execution_count": 6, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -177,8 +138,6 @@ " mds = values(vi.metadata)\n", " dists = [md.dists[1] for md in mds]\n", " dist_lengths = [length(dist) for dist in dists]\n", - " θ_names = _name_variables(vi, dist_lengths)\n", - " d = length(θ_names)\n", " ℓ = LogDensityProblemsAD.ADgradient(DynamicPPL.LogDensityFunction(vi_t, model, ctxt))\n", " ℓπ(x) = LogDensityProblems.logdensity(ℓ, x)\n", " ∂lπ∂θ(x) = LogDensityProblems.logdensity_and_gradient(ℓ, x)\n", @@ -205,61 +164,29 @@ " return vcat(x...)\n", " end\n", "\n", + " \n", + " function _name_variables(vi, dist_lengths)\n", + " vsyms = keys(vi)\n", + " names = []\n", + " for (vsym, dist_length) in zip(vsyms, dist_lengths)\n", + " if dist_length == 1\n", + " name = [string(vsym)]\n", + " append!(names, name)\n", + " else\n", + " name = [string(vsym, i) for i = 1:dist_length]\n", + " append!(names, name)\n", + " end\n", + " end\n", + " return Vector{String}(names)\n", + " end\n", + "\n", " return CustomTarget(ℓπ, ∂lπ∂θ, θ_start;\n", " transform=transform, \n", " inv_transform=inv_transform, \n", - " θ_names=θ_names)\n", + " θ_names=_name_variables(vi, dist_lengths))\n", "end" ] }, - { - "cell_type": "code", - "execution_count": 7, - "id": "7927eac4", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "String\n" - ] - }, - { - "data": { - "text/plain": [ - "MicroCanonicalHMC.Target{Float64}(21, MicroCanonicalHMC.Hamiltonian(var\"#ℓπ#12\"{LogDensityProblemsADForwardDiffExt.ForwardDiffLogDensity{LogDensityFunction{DynamicPPL.TypedVarInfo{@NamedTuple{θ::DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:θ, typeof(identity)}, Int64}, Vector{Truncated{Normal{Float64}, Continuous, Float64, Float64, Float64}}, Vector{AbstractPPL.VarName{:θ, typeof(identity)}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, z::DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:z, typeof(identity)}, Int64}, Vector{IsoNormal}, Vector{AbstractPPL.VarName{:z, typeof(identity)}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}, Float64}, DynamicPPL.Model{typeof(funnel), (), (), (), Tuple{}, Tuple{}, DynamicPPL.ConditionContext{@NamedTuple{x::Vector{Float64}}, DynamicPPL.DefaultContext}}, DynamicPPL.ConditionContext{@NamedTuple{x::Vector{Float64}}, DynamicPPL.DefaultContext}}, ForwardDiff.Chunk{11}, ForwardDiff.Tag{DynamicPPL.DynamicPPLTag, Float64}, ForwardDiff.GradientConfig{ForwardDiff.Tag{DynamicPPL.DynamicPPLTag, Float64}, Float64, 11, Vector{ForwardDiff.Dual{ForwardDiff.Tag{DynamicPPL.DynamicPPLTag, Float64}, Float64, 11}}}}}(ForwardDiff AD wrapper for LogDensityFunction{DynamicPPL.TypedVarInfo{@NamedTuple{θ::DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:θ, typeof(identity)}, Int64}, Vector{Truncated{Normal{Float64}, Continuous, Float64, Float64, Float64}}, Vector{AbstractPPL.VarName{:θ, typeof(identity)}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, z::DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:z, typeof(identity)}, Int64}, Vector{IsoNormal}, Vector{AbstractPPL.VarName{:z, typeof(identity)}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}, Float64}, DynamicPPL.Model{typeof(funnel), (), (), (), Tuple{}, Tuple{}, DynamicPPL.ConditionContext{@NamedTuple{x::Vector{Float64}}, DynamicPPL.DefaultContext}}, DynamicPPL.ConditionContext{@NamedTuple{x::Vector{Float64}}, DynamicPPL.DefaultContext}}(DynamicPPL.TypedVarInfo{@NamedTuple{θ::DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:θ, typeof(identity)}, Int64}, Vector{Truncated{Normal{Float64}, Continuous, Float64, Float64, Float64}}, Vector{AbstractPPL.VarName{:θ, typeof(identity)}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, z::DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:z, typeof(identity)}, Int64}, Vector{IsoNormal}, Vector{AbstractPPL.VarName{:z, typeof(identity)}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}, Float64}((θ = DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:θ, typeof(identity)}, Int64}, Vector{Truncated{Normal{Float64}, Continuous, Float64, Float64, Float64}}, Vector{AbstractPPL.VarName{:θ, typeof(identity)}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}(Dict(θ => 1), [θ], UnitRange{Int64}[1:1], [0.3508965397461393], Truncated{Normal{Float64}, Continuous, Float64, Float64, Float64}[Truncated(Normal{Float64}(μ=0.0, σ=3.0); lower=-3.0, upper=3.0)], Set{DynamicPPL.Selector}[Set()], [0], Dict{String, BitVector}(\"del\" => [0], \"trans\" => [1])), z = DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:z, typeof(identity)}, Int64}, Vector{IsoNormal}, Vector{AbstractPPL.VarName{:z, typeof(identity)}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}(Dict(z => 1), [z], UnitRange{Int64}[1:20], [2.1537549729024352, 0.43124826638854874, -2.9187035926267124, -0.8586026008485836, 1.561407625820226, 0.5112761138866166, 1.1307390905839096, 0.07257462629312353, -0.9661165064294249, 0.22619027636527042, -2.0898283634784756, 0.5343010116067349, 1.9808649615494673, -1.4033724950259823, 0.1993345723850213, 0.22979691650005243, -0.8168408547490131, 2.217047985631006, -1.5445868012467947, 1.0748871599242262], IsoNormal[IsoNormal(\n", - "dim: 20\n", - "μ: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]\n", - "Σ: [1.6837270585595743 0.0 … 0.0 0.0; 0.0 1.6837270585595743 … 0.0 0.0; … ; 0.0 0.0 … 1.6837270585595743 0.0; 0.0 0.0 … 0.0 1.6837270585595743]\n", - ")\n", - "], Set{DynamicPPL.Selector}[Set()], [0], Dict{String, BitVector}(\"del\" => [0], \"trans\" => [1]))), Base.RefValue{Float64}(-93.10266571457056), Base.RefValue{Int64}(1)), DynamicPPL.Model{typeof(funnel), (), (), (), Tuple{}, Tuple{}, DynamicPPL.ConditionContext{@NamedTuple{x::Vector{Float64}}, DynamicPPL.DefaultContext}}(funnel, NamedTuple(), NamedTuple(), ConditionContext((x = [1.2142074831535152, 1.23371919965455, -0.8480146960461767, 0.1600994648479841, 1.9180385508479283, -3.401523464506408, -0.0957684186471088, 0.6734622629464286, -3.2749467689509633, -1.6760091758453226, 1.9567202902549736, 0.1136169088905351, 0.11117896909388916, -0.5373922347882832, -0.12436857036298687, -1.2901071061088532, 1.702584517514787, -0.44460133117954226, 1.0818722439221686, 1.2208011493237483],), DynamicPPL.DefaultContext())), ConditionContext((x = [1.2142074831535152, 1.23371919965455, -0.8480146960461767, 0.1600994648479841, 1.9180385508479283, -3.401523464506408, -0.0957684186471088, 0.6734622629464286, -3.2749467689509633, -1.6760091758453226, 1.9567202902549736, 0.1136169088905351, 0.11117896909388916, -0.5373922347882832, -0.12436857036298687, -1.2901071061088532, 1.702584517514787, -0.44460133117954226, 1.0818722439221686, 1.2208011493237483],), DynamicPPL.DefaultContext())), w/ chunk size 11), var\"#∂lπ∂θ#13\"{LogDensityProblemsADForwardDiffExt.ForwardDiffLogDensity{LogDensityFunction{DynamicPPL.TypedVarInfo{@NamedTuple{θ::DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:θ, typeof(identity)}, Int64}, Vector{Truncated{Normal{Float64}, Continuous, Float64, Float64, Float64}}, Vector{AbstractPPL.VarName{:θ, typeof(identity)}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, z::DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:z, typeof(identity)}, Int64}, Vector{IsoNormal}, Vector{AbstractPPL.VarName{:z, typeof(identity)}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}, Float64}, DynamicPPL.Model{typeof(funnel), (), (), (), Tuple{}, Tuple{}, DynamicPPL.ConditionContext{@NamedTuple{x::Vector{Float64}}, DynamicPPL.DefaultContext}}, DynamicPPL.ConditionContext{@NamedTuple{x::Vector{Float64}}, DynamicPPL.DefaultContext}}, ForwardDiff.Chunk{11}, ForwardDiff.Tag{DynamicPPL.DynamicPPLTag, Float64}, ForwardDiff.GradientConfig{ForwardDiff.Tag{DynamicPPL.DynamicPPLTag, Float64}, Float64, 11, Vector{ForwardDiff.Dual{ForwardDiff.Tag{DynamicPPL.DynamicPPLTag, Float64}, Float64, 11}}}}}(ForwardDiff AD wrapper for LogDensityFunction{DynamicPPL.TypedVarInfo{@NamedTuple{θ::DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:θ, typeof(identity)}, Int64}, Vector{Truncated{Normal{Float64}, Continuous, Float64, Float64, Float64}}, Vector{AbstractPPL.VarName{:θ, typeof(identity)}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, z::DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:z, typeof(identity)}, Int64}, Vector{IsoNormal}, Vector{AbstractPPL.VarName{:z, typeof(identity)}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}, Float64}, DynamicPPL.Model{typeof(funnel), (), (), (), Tuple{}, Tuple{}, DynamicPPL.ConditionContext{@NamedTuple{x::Vector{Float64}}, DynamicPPL.DefaultContext}}, DynamicPPL.ConditionContext{@NamedTuple{x::Vector{Float64}}, DynamicPPL.DefaultContext}}(DynamicPPL.TypedVarInfo{@NamedTuple{θ::DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:θ, typeof(identity)}, Int64}, Vector{Truncated{Normal{Float64}, Continuous, Float64, Float64, Float64}}, Vector{AbstractPPL.VarName{:θ, typeof(identity)}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, z::DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:z, typeof(identity)}, Int64}, Vector{IsoNormal}, Vector{AbstractPPL.VarName{:z, typeof(identity)}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}, Float64}((θ = DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:θ, typeof(identity)}, Int64}, Vector{Truncated{Normal{Float64}, Continuous, Float64, Float64, Float64}}, Vector{AbstractPPL.VarName{:θ, typeof(identity)}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}(Dict(θ => 1), [θ], UnitRange{Int64}[1:1], [0.3508965397461393], Truncated{Normal{Float64}, Continuous, Float64, Float64, Float64}[Truncated(Normal{Float64}(μ=0.0, σ=3.0); lower=-3.0, upper=3.0)], Set{DynamicPPL.Selector}[Set()], [0], Dict{String, BitVector}(\"del\" => [0], \"trans\" => [1])), z = DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:z, typeof(identity)}, Int64}, Vector{IsoNormal}, Vector{AbstractPPL.VarName{:z, typeof(identity)}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}(Dict(z => 1), [z], UnitRange{Int64}[1:20], [2.1537549729024352, 0.43124826638854874, -2.9187035926267124, -0.8586026008485836, 1.561407625820226, 0.5112761138866166, 1.1307390905839096, 0.07257462629312353, -0.9661165064294249, 0.22619027636527042, -2.0898283634784756, 0.5343010116067349, 1.9808649615494673, -1.4033724950259823, 0.1993345723850213, 0.22979691650005243, -0.8168408547490131, 2.217047985631006, -1.5445868012467947, 1.0748871599242262], IsoNormal[IsoNormal(\n", - "dim: 20\n", - "μ: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]\n", - "Σ: [1.6837270585595743 0.0 … 0.0 0.0; 0.0 1.6837270585595743 … 0.0 0.0; … ; 0.0 0.0 … 1.6837270585595743 0.0; 0.0 0.0 … 0.0 1.6837270585595743]\n", - ")\n", - "], Set{DynamicPPL.Selector}[Set()], [0], Dict{String, BitVector}(\"del\" => [0], \"trans\" => [1]))), Base.RefValue{Float64}(-93.10266571457056), Base.RefValue{Int64}(1)), DynamicPPL.Model{typeof(funnel), (), (), (), Tuple{}, Tuple{}, DynamicPPL.ConditionContext{@NamedTuple{x::Vector{Float64}}, DynamicPPL.DefaultContext}}(funnel, NamedTuple(), NamedTuple(), ConditionContext((x = [1.2142074831535152, 1.23371919965455, -0.8480146960461767, 0.1600994648479841, 1.9180385508479283, -3.401523464506408, -0.0957684186471088, 0.6734622629464286, -3.2749467689509633, -1.6760091758453226, 1.9567202902549736, 0.1136169088905351, 0.11117896909388916, -0.5373922347882832, -0.12436857036298687, -1.2901071061088532, 1.702584517514787, -0.44460133117954226, 1.0818722439221686, 1.2208011493237483],), DynamicPPL.DefaultContext())), ConditionContext((x = [1.2142074831535152, 1.23371919965455, -0.8480146960461767, 0.1600994648479841, 1.9180385508479283, -3.401523464506408, -0.0957684186471088, 0.6734622629464286, -3.2749467689509633, -1.6760091758453226, 1.9567202902549736, 0.1136169088905351, 0.11117896909388916, -0.5373922347882832, -0.12436857036298687, -1.2901071061088532, 1.702584517514787, -0.44460133117954226, 1.0818722439221686, 1.2208011493237483],), DynamicPPL.DefaultContext())), w/ chunk size 11)), var\"#transform#15\"{var\"#_reshape_params#14\"{Vector{Int64}}, Vector{ContinuousDistribution}}(var\"#_reshape_params#14\"{Vector{Int64}}([1, 20]), ContinuousDistribution[Truncated(Normal{Float64}(μ=0.0, σ=3.0); lower=-3.0, upper=3.0), IsoNormal(\n", - "dim: 20\n", - "μ: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]\n", - "Σ: [1.6837270585595743 0.0 … 0.0 0.0; 0.0 1.6837270585595743 … 0.0 0.0; … ; 0.0 0.0 … 1.6837270585595743 0.0; 0.0 0.0 … 0.0 1.6837270585595743]\n", - ")\n", - "]), var\"#inv_transform#17\"{var\"#_reshape_params#14\"{Vector{Int64}}, Vector{ContinuousDistribution}}(var\"#_reshape_params#14\"{Vector{Int64}}([1, 20]), ContinuousDistribution[Truncated(Normal{Float64}(μ=0.0, σ=3.0); lower=-3.0, upper=3.0), IsoNormal(\n", - "dim: 20\n", - "μ: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]\n", - "Σ: [1.6837270585595743 0.0 … 0.0 0.0; 0.0 1.6837270585595743 … 0.0 0.0; … ; 0.0 0.0 … 1.6837270585595743 0.0; 0.0 0.0 … 0.0 1.6837270585595743]\n", - ")\n", - "]), [0.3508965397461393, 2.1537549729024352, 0.43124826638854874, -2.9187035926267124, -0.8586026008485836, 1.561407625820226, 0.5112761138866166, 1.1307390905839096, 0.07257462629312353, -0.9661165064294249 … -2.0898283634784756, 0.5343010116067349, 1.9808649615494673, -1.4033724950259823, 0.1993345723850213, 0.22979691650005243, -0.8168408547490131, 2.217047985631006, -1.5445868012467947, 1.0748871599242262], [\"θ\", \"z1\", \"z2\", \"z3\", \"z4\", \"z5\", \"z6\", \"z7\", \"z8\", \"z9\" … \"z11\", \"z12\", \"z13\", \"z14\", \"z15\", \"z16\", \"z17\", \"z18\", \"z19\", \"z20\"])" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "target = TuringTarget(funnel_model)" - ] - }, { "cell_type": "markdown", "id": "e0a3137b", @@ -270,7 +197,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 6, "id": "7fba4eaa", "metadata": { "scrolled": false @@ -282,7 +209,7 @@ "Turing.Inference.ExternalSampler{MicroCanonicalHMC.MCHMCSampler, AutoForwardDiff{nothing, Nothing}, true}(MicroCanonicalHMC.MCHMCSampler(20000, 0.01, true, true, true, true, MicroCanonicalHMC.Hyperparameters{Float64}(0.0, 0.0, [0.0], 0.0, 0.0, 0.0), MicroCanonicalHMC.Leapfrog), AutoForwardDiff{nothing, Nothing}(nothing))" ] }, - "execution_count": 9, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -294,7 +221,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 7, "id": "3fb89023", "metadata": {}, "outputs": [ @@ -306,11 +233,100 @@ "\u001b[33m\u001b[1m│ \u001b[22m\u001b[39m - To prevent this behaviour, do `ProgressMeter.ijulia_behavior(:append)`. \n", "\u001b[33m\u001b[1m│ \u001b[22m\u001b[39m - To disable this warning message, do `ProgressMeter.ijulia_behavior(:clear)`.\n", "\u001b[33m\u001b[1m└ \u001b[22m\u001b[39m\u001b[90m@ ProgressMeter ~/.julia/packages/ProgressMeter/dMfiC/src/ProgressMeter.jl:594\u001b[39m\n", - "\u001b[32mTuning: 100%|███████████████████████████████████████████| Time: 0:02:15\u001b[39m\n", - "\u001b[34m ϵ: 1.0016733142648795\u001b[39m\n", - "\u001b[34m L: 7879.3905299734615\u001b[39m\n", - "\u001b[34m dE/d: 0.014180776901292734\u001b[39m\n", - "\u001b[32mSampling: 100%|█████████████████████████████████████████| Time: 0:00:07\u001b[39m\n" + "\r\u001b[32mTuning: 47%|████████████████████▏ | ETA: 0:00:37\u001b[39m\r\n", + "\u001b[34m ϵ: 0.9438991731463843\u001b[39m\r\n", + "\u001b[34m L: 3487.171653476704\u001b[39m\r\n", + "\u001b[34m dE/d: -0.01546796183126005\u001b[39m" + ] + }, + { + "ename": "LoadError", + "evalue": "InterruptException:", + "output_type": "error", + "traceback": [ + "InterruptException:", + "", + "Stacktrace:", + " [1] _erfcinv(y::Float64)", + " @ SpecialFunctions ~/.julia/packages/SpecialFunctions/npKKV/src/erf.jl:441", + " [2] erfcinv", + " @ ~/.julia/packages/SpecialFunctions/npKKV/src/erf.jl:439 [inlined]", + " [3] norminvcdf", + " @ ~/.julia/packages/StatsFuns/mrf0e/src/distrs/norm.jl:91 [inlined]", + " [4] map!(f::typeof(StatsFuns.norminvcdf), dest::SubArray{Float64, 2, Array{Float64, 3}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}, A::SubArray{Float64, 2, Array{Float64, 3}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true})", + " @ Base ./abstractarray.jl:3278", + " [5] _rank_normalize!(values::SubArray{Float64, 2, Array{Float64, 3}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}, x::SubArray{Float64, 2, Array{Float64, 3}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true})", + " @ MCMCDiagnosticTools ~/.julia/packages/MCMCDiagnosticTools/d8xMp/src/utils.jl:182", + " [6] #4", + " @ ./generator.jl:36 [inlined]", + " [7] iterate", + " @ ./generator.jl:47 [inlined]", + " [8] collect_to!(dest::Vector{SubArray{Float64, 2, Array{Float64, 3}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}}, itr::Base.Generator{Base.Iterators.Zip{Tuple{Slices{Array{Float64, 3}, Tuple{Colon, Colon, Int64}, Tuple{Base.OneTo{Int64}}, SubArray{Float64, 2, Array{Float64, 3}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}, 1}, Slices{Array{Float64, 3}, Tuple{Colon, Colon, Int64}, Tuple{Base.OneTo{Int64}}, SubArray{Float64, 2, Array{Float64, 3}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}, 1}}}, Base.var\"#4#5\"{typeof(MCMCDiagnosticTools._rank_normalize!)}}, offs::Int64, st::Tuple{Tuple{Base.OneTo{Int64}, Int64}, Tuple{Base.OneTo{Int64}, Int64}})", + " @ Base ./array.jl:892", + " [9] collect_to_with_first!", + " @ ./array.jl:870 [inlined]", + " [10] collect(itr::Base.Generator{Base.Iterators.Zip{Tuple{Slices{Array{Float64, 3}, Tuple{Colon, Colon, Int64}, Tuple{Base.OneTo{Int64}}, SubArray{Float64, 2, Array{Float64, 3}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}, 1}, Slices{Array{Float64, 3}, Tuple{Colon, Colon, Int64}, Tuple{Base.OneTo{Int64}}, SubArray{Float64, 2, Array{Float64, 3}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}, 1}}}, Base.var\"#4#5\"{typeof(MCMCDiagnosticTools._rank_normalize!)}})", + " @ Base ./array.jl:844", + " [11] map(::Function, ::Slices{Array{Float64, 3}, Tuple{Colon, Colon, Int64}, Tuple{Base.OneTo{Int64}}, SubArray{Float64, 2, Array{Float64, 3}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}, 1}, ::Slices{Array{Float64, 3}, Tuple{Colon, Colon, Int64}, Tuple{Base.OneTo{Int64}}, SubArray{Float64, 2, Array{Float64, 3}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}, 1})", + " @ Base ./abstractarray.jl:3409", + " [12] _rank_normalize(x::Array{Float64, 3})", + " @ MCMCDiagnosticTools ~/.julia/packages/MCMCDiagnosticTools/d8xMp/src/utils.jl:172", + " [13] #_ess_rhat#53", + " @ ~/.julia/packages/MCMCDiagnosticTools/d8xMp/src/ess_rhat.jl:600 [inlined]", + " [14] _ess_rhat", + " @ ~/.julia/packages/MCMCDiagnosticTools/d8xMp/src/ess_rhat.jl:599 [inlined]", + " [15] _ess_rhat(::Val{:rank}, x::Array{Float64, 3}; split_chains::Int64, kwargs::@Kwargs{})", + " @ MCMCDiagnosticTools ~/.julia/packages/MCMCDiagnosticTools/d8xMp/src/ess_rhat.jl:615", + " [16] _ess_rhat", + " @ ~/.julia/packages/MCMCDiagnosticTools/d8xMp/src/ess_rhat.jl:612 [inlined]", + " [17] ess_rhat(samples::Array{Float64, 3}; kind::Symbol, kwargs::@Kwargs{})", + " @ MCMCDiagnosticTools ~/.julia/packages/MCMCDiagnosticTools/d8xMp/src/ess_rhat.jl:440", + " [18] ess_rhat", + " @ ~/.julia/packages/MCMCDiagnosticTools/d8xMp/src/ess_rhat.jl:433 [inlined]", + " [19] Summarize(samples::Matrix{Float64})", + " @ MicroCanonicalHMC ~/.julia/packages/MicroCanonicalHMC/iiYFK/src/utils.jl:12", + " [20] tune_hyperparameters(rng::TaskLocalRNG, sampler::MicroCanonicalHMC.MCHMCSampler, state::MicroCanonicalHMC.MCHMCState{Float64}; kwargs::@Kwargs{initial_params::Nothing})", + " @ MicroCanonicalHMC ~/.julia/packages/MicroCanonicalHMC/iiYFK/src/tuning.jl:86", + " [21] Step(rng::TaskLocalRNG, sampler::MicroCanonicalHMC.MCHMCSampler, h::MicroCanonicalHMC.Hamiltonian, x::Vector{Float64}; inv_transform::Function, kwargs::@Kwargs{initial_params::Nothing})", + " @ MicroCanonicalHMC ~/.julia/packages/MicroCanonicalHMC/iiYFK/src/sampler.jl:146", + " [22] Step", + " @ ~/.julia/packages/MicroCanonicalHMC/iiYFK/src/sampler.jl:130 [inlined]", + " [23] #step#42", + " @ ~/.julia/packages/MicroCanonicalHMC/iiYFK/src/abstractmcmc.jl:14 [inlined]", + " [24] step(rng::TaskLocalRNG, model::DynamicPPL.Model{typeof(funnel), (), (), (), Tuple{}, Tuple{}, DynamicPPL.ConditionContext{@NamedTuple{x::Vector{Float64}}, DynamicPPL.DefaultContext}}, sampler_wrapper::DynamicPPL.Sampler{Turing.Inference.ExternalSampler{MicroCanonicalHMC.MCHMCSampler, AutoForwardDiff{nothing, Nothing}, true}}; initial_state::Nothing, initial_params::Nothing, kwargs::@Kwargs{})", + " @ Turing.Inference ~/.julia/packages/Turing/cH3wV/src/mcmc/abstractmcmc.jl:67", + " [25] step", + " @ ~/.julia/packages/Turing/cH3wV/src/mcmc/abstractmcmc.jl:36 [inlined]", + " [26] macro expansion", + " @ ~/.julia/packages/AbstractMCMC/YrmkI/src/sample.jl:130 [inlined]", + " [27] macro expansion", + " @ ~/.julia/packages/ProgressLogging/6KXlp/src/ProgressLogging.jl:328 [inlined]", + " [28] (::AbstractMCMC.var\"#22#23\"{Bool, String, Nothing, Int64, Int64, Nothing, @Kwargs{}, TaskLocalRNG, DynamicPPL.Model{typeof(funnel), (), (), (), Tuple{}, Tuple{}, DynamicPPL.ConditionContext{@NamedTuple{x::Vector{Float64}}, DynamicPPL.DefaultContext}}, DynamicPPL.Sampler{Turing.Inference.ExternalSampler{MicroCanonicalHMC.MCHMCSampler, AutoForwardDiff{nothing, Nothing}, true}}, Int64, Int64})()", + " @ AbstractMCMC ~/.julia/packages/AbstractMCMC/YrmkI/src/logging.jl:12", + " [29] with_logstate(f::Function, logstate::Any)", + " @ Base.CoreLogging ./logging.jl:515", + " [30] with_logger", + " @ ./logging.jl:627 [inlined]", + " [31] with_progresslogger(f::Function, _module::Module, logger::Logging.ConsoleLogger)", + " @ AbstractMCMC ~/.julia/packages/AbstractMCMC/YrmkI/src/logging.jl:36", + " [32] macro expansion", + " @ ~/.julia/packages/AbstractMCMC/YrmkI/src/logging.jl:11 [inlined]", + " [33] mcmcsample(rng::TaskLocalRNG, model::DynamicPPL.Model{typeof(funnel), (), (), (), Tuple{}, Tuple{}, DynamicPPL.ConditionContext{@NamedTuple{x::Vector{Float64}}, DynamicPPL.DefaultContext}}, sampler::DynamicPPL.Sampler{Turing.Inference.ExternalSampler{MicroCanonicalHMC.MCHMCSampler, AutoForwardDiff{nothing, Nothing}, true}}, N::Int64; progress::Bool, progressname::String, callback::Nothing, discard_initial::Int64, thinning::Int64, chain_type::Type, initial_state::Nothing, kwargs::@Kwargs{})", + " @ AbstractMCMC ~/.julia/packages/AbstractMCMC/YrmkI/src/sample.jl:120", + " [34] sample(rng::TaskLocalRNG, model::DynamicPPL.Model{typeof(funnel), (), (), (), Tuple{}, Tuple{}, DynamicPPL.ConditionContext{@NamedTuple{x::Vector{Float64}}, DynamicPPL.DefaultContext}}, sampler::DynamicPPL.Sampler{Turing.Inference.ExternalSampler{MicroCanonicalHMC.MCHMCSampler, AutoForwardDiff{nothing, Nothing}, true}}, N::Int64; chain_type::Type, resume_from::Nothing, initial_state::Nothing, kwargs::@Kwargs{})", + " @ DynamicPPL ~/.julia/packages/DynamicPPL/i2EbF/src/sampler.jl:93", + " [35] sample", + " @ ~/.julia/packages/DynamicPPL/i2EbF/src/sampler.jl:83 [inlined]", + " [36] #sample#4", + " @ ~/.julia/packages/Turing/cH3wV/src/mcmc/Inference.jl:263 [inlined]", + " [37] sample", + " @ ~/.julia/packages/Turing/cH3wV/src/mcmc/Inference.jl:256 [inlined]", + " [38] #sample#3", + " @ ~/.julia/packages/Turing/cH3wV/src/mcmc/Inference.jl:253 [inlined]", + " [39] sample(model::DynamicPPL.Model{typeof(funnel), (), (), (), Tuple{}, Tuple{}, DynamicPPL.ConditionContext{@NamedTuple{x::Vector{Float64}}, DynamicPPL.DefaultContext}}, alg::Turing.Inference.ExternalSampler{MicroCanonicalHMC.MCHMCSampler, AutoForwardDiff{nothing, Nothing}, true}, N::Int64)", + " @ Turing.Inference ~/.julia/packages/Turing/cH3wV/src/mcmc/Inference.jl:247", + " [40] top-level scope", + " @ In[7]:1" ] } ], @@ -320,7 +336,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "028ab552", "metadata": {}, "outputs": [], @@ -329,9 +345,17 @@ "x10_mchmc = [samples.value.data[i, 10+1, :][1] for i in axes(samples.value.data)[1]];" ] }, + { + "cell_type": "markdown", + "id": "40b19702", + "metadata": {}, + "source": [ + "### Using the Sample interface" + ] + }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 8, "id": "a1179979", "metadata": {}, "outputs": [ @@ -343,63 +367,110 @@ "\u001b[33m\u001b[1m│ \u001b[22m\u001b[39m - To prevent this behaviour, do `ProgressMeter.ijulia_behavior(:append)`. \n", "\u001b[33m\u001b[1m│ \u001b[22m\u001b[39m - To disable this warning message, do `ProgressMeter.ijulia_behavior(:clear)`.\n", "\u001b[33m\u001b[1m└ \u001b[22m\u001b[39m\u001b[90m@ ProgressMeter ~/.julia/packages/ProgressMeter/dMfiC/src/ProgressMeter.jl:594\u001b[39m\n", - "\r\u001b[32mSampling: 100%|█████████████████████████████████████████| Time: 0:00:03\u001b[39m\n" + "\r\u001b[32mTuning: 31%|█████████████▌ | ETA: 0:00:32\u001b[39m\r\n", + "\u001b[34m ϵ: 2.1587158475693577\u001b[39m\r\n", + "\u001b[34m L: 5097.194115733048\u001b[39m\r\n", + "\u001b[34m dE/d: 0.011535106628282879\u001b[39m" ] }, { - "data": { - "text/plain": [ - "24×50000 Matrix{Float64}:\n", - " -2.91038 -2.90691 -2.89931 … -0.288195 -0.0825508\n", - " 0.331038 0.637943 0.426912 -0.703009 -0.206151\n", - " 0.386373 0.443429 0.275205 0.344951 0.923632\n", - " -0.0307636 -0.32264 -0.415502 0.0170465 -0.255363\n", - " -0.49207 -0.49785 0.0171043 0.822458 1.02032\n", - " 0.187605 0.144874 0.0865758 … 0.189644 0.322097\n", - " -0.472861 -0.625683 -0.329203 -2.27943 -1.54419\n", - " -0.196116 -0.070315 0.0471575 -1.87074 -1.35496\n", - " -0.434444 -0.333156 -0.123177 0.544736 0.583921\n", - " -0.110981 0.199667 0.106557 -0.76501 -0.473178\n", - " -0.37985 -0.196976 -0.00681777 … -0.557298 -0.365607\n", - " 0.332094 -0.0129446 -0.182672 0.836934 1.11121\n", - " -0.111793 -0.0834752 -0.0298604 -0.419171 -0.362107\n", - " -0.632135 -0.702591 -0.517503 1.5155 1.26745\n", - " -0.0773847 0.00632658 0.0574068 0.52772 0.500401\n", - " -0.198682 -0.22446 -0.162725 … 0.797284 0.413926\n", - " 0.268952 -0.143796 -0.427508 -0.927924 -0.839389\n", - " 0.3417 0.393694 0.273482 0.671937 0.727313\n", - " -0.0980516 0.0261337 0.102066 0.602276 0.54209\n", - " 0.41367 0.111713 -0.154965 0.158288 0.374885\n", - " -0.296858 -0.25913 -0.0995254 … -0.498876 -0.376415\n", - " 1.15533 1.14306 1.11592 1.87258 1.87917\n", - " 0.29862 0.738324 -1.00255 -0.677478 0.319505\n", - " -50.967 -53.3954 -43.7224 -62.7314 -58.3967" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" + "ename": "LoadError", + "evalue": "InterruptException:", + "output_type": "error", + "traceback": [ + "InterruptException:", + "", + "Stacktrace:", + " [1] send_to_end!(f::Base.Sort.var\"#21#24\"{Base.Order.Perm{Base.Order.ForwardOrdering, Base.ReshapedArray{Float64, 1, SubArray{Float64, 2, Array{Float64, 3}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}, Tuple{}}}}, v::Vector{Int64}; lo::Int64, hi::Int64)", + " @ Base.Sort ./sort.jl:572", + " [2] send_to_end!", + " @ ./sort.jl:572 [inlined]", + " [3] _sort!(v::Vector{Int64}, a::Base.Sort.IEEEFloatOptimization{Base.Sort.IsUIntMappable{Base.Sort.Small{40, Base.Sort.InsertionSortAlg, Base.Sort.CheckSorted{Base.Sort.ComputeExtrema{Base.Sort.ConsiderCountingSort{Base.Sort.CountingSort, Base.Sort.ConsiderRadixSort{Base.Sort.RadixSort, Base.Sort.Small{80, Base.Sort.InsertionSortAlg, Base.Sort.ScratchQuickSort{Missing, Missing, Base.Sort.InsertionSortAlg}}}}}}}, Base.Sort.StableCheckSorted{Base.Sort.ScratchQuickSort{Missing, Missing, Base.Sort.InsertionSortAlg}}}}, o::Base.Order.Perm{Base.Order.ForwardOrdering, Base.ReshapedArray{Float64, 1, SubArray{Float64, 2, Array{Float64, 3}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}, Tuple{}}}, kw::@NamedTuple{scratch::Nothing, lo::Int64, hi::Int64})", + " @ Base.Sort ./sort.jl:673", + " [4] _sort!", + " @ ./sort.jl:752 [inlined]", + " [5] _sort!", + " @ ./sort.jl:697 [inlined]", + " [6] _sort!", + " @ ./sort.jl:636 [inlined]", + " [7] #sort!#28", + " @ ./sort.jl:1463 [inlined]", + " [8] sort!", + " @ ./sort.jl:1456 [inlined]", + " [9] #_sortperm#33", + " @ ./sort.jl:1664 [inlined]", + " [10] _sortperm", + " @ ./sort.jl:1651 [inlined]", + " [11] #sortperm#32", + " @ ./sort.jl:1648 [inlined]", + " [12] sortperm", + " @ ./sort.jl:1637 [inlined]", + " [13] _rank(f!::typeof(StatsBase._tiedrank!), x::SubArray{Float64, 2, Array{Float64, 3}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}, R::Type; sortkwargs::@Kwargs{})", + " @ StatsBase ~/.julia/packages/StatsBase/ebrT3/src/ranking.jl:21", + " [14] _rank", + " @ ~/.julia/packages/StatsBase/ebrT3/src/ranking.jl:19 [inlined]", + " [15] tiedrank", + " @ ~/.julia/packages/StatsBase/ebrT3/src/ranking.jl:175 [inlined]", + " [16] _rank_normalize!(values::SubArray{Float64, 2, Array{Float64, 3}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}, x::SubArray{Float64, 2, Array{Float64, 3}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true})", + " @ MCMCDiagnosticTools ~/.julia/packages/MCMCDiagnosticTools/d8xMp/src/utils.jl:180", + " [17] #4", + " @ ./generator.jl:36 [inlined]", + " [18] iterate", + " @ ./generator.jl:47 [inlined]", + " [19] collect_to!(dest::Vector{SubArray{Float64, 2, Array{Float64, 3}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}}, itr::Base.Generator{Base.Iterators.Zip{Tuple{Slices{Array{Float64, 3}, Tuple{Colon, Colon, Int64}, Tuple{Base.OneTo{Int64}}, SubArray{Float64, 2, Array{Float64, 3}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}, 1}, Slices{Array{Float64, 3}, Tuple{Colon, Colon, Int64}, Tuple{Base.OneTo{Int64}}, SubArray{Float64, 2, Array{Float64, 3}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}, 1}}}, Base.var\"#4#5\"{typeof(MCMCDiagnosticTools._rank_normalize!)}}, offs::Int64, st::Tuple{Tuple{Base.OneTo{Int64}, Int64}, Tuple{Base.OneTo{Int64}, Int64}})", + " @ Base ./array.jl:892", + " [20] collect_to_with_first!", + " @ ./array.jl:870 [inlined]", + " [21] collect(itr::Base.Generator{Base.Iterators.Zip{Tuple{Slices{Array{Float64, 3}, Tuple{Colon, Colon, Int64}, Tuple{Base.OneTo{Int64}}, SubArray{Float64, 2, Array{Float64, 3}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}, 1}, Slices{Array{Float64, 3}, Tuple{Colon, Colon, Int64}, Tuple{Base.OneTo{Int64}}, SubArray{Float64, 2, Array{Float64, 3}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}, 1}}}, Base.var\"#4#5\"{typeof(MCMCDiagnosticTools._rank_normalize!)}})", + " @ Base ./array.jl:844", + " [22] map(::Function, ::Slices{Array{Float64, 3}, Tuple{Colon, Colon, Int64}, Tuple{Base.OneTo{Int64}}, SubArray{Float64, 2, Array{Float64, 3}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}, 1}, ::Slices{Array{Float64, 3}, Tuple{Colon, Colon, Int64}, Tuple{Base.OneTo{Int64}}, SubArray{Float64, 2, Array{Float64, 3}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}, 1})", + " @ Base ./abstractarray.jl:3409", + " [23] _rank_normalize(x::Array{Float64, 3})", + " @ MCMCDiagnosticTools ~/.julia/packages/MCMCDiagnosticTools/d8xMp/src/utils.jl:172", + " [24] #_ess_rhat#53", + " @ ~/.julia/packages/MCMCDiagnosticTools/d8xMp/src/ess_rhat.jl:600 [inlined]", + " [25] _ess_rhat", + " @ ~/.julia/packages/MCMCDiagnosticTools/d8xMp/src/ess_rhat.jl:599 [inlined]", + " [26] _ess_rhat(::Val{:rank}, x::Array{Float64, 3}; split_chains::Int64, kwargs::@Kwargs{})", + " @ MCMCDiagnosticTools ~/.julia/packages/MCMCDiagnosticTools/d8xMp/src/ess_rhat.jl:615", + " [27] _ess_rhat", + " @ ~/.julia/packages/MCMCDiagnosticTools/d8xMp/src/ess_rhat.jl:612 [inlined]", + " [28] ess_rhat(samples::Array{Float64, 3}; kind::Symbol, kwargs::@Kwargs{})", + " @ MCMCDiagnosticTools ~/.julia/packages/MCMCDiagnosticTools/d8xMp/src/ess_rhat.jl:440", + " [29] ess_rhat", + " @ ~/.julia/packages/MCMCDiagnosticTools/d8xMp/src/ess_rhat.jl:433 [inlined]", + " [30] Summarize(samples::Matrix{Float64})", + " @ MicroCanonicalHMC ~/.julia/packages/MicroCanonicalHMC/iiYFK/src/utils.jl:12", + " [31] tune_hyperparameters(rng::Random._GLOBAL_RNG, sampler::MicroCanonicalHMC.MCHMCSampler, state::MicroCanonicalHMC.MCHMCState{Float64}; kwargs::@Kwargs{})", + " @ MicroCanonicalHMC ~/.julia/packages/MicroCanonicalHMC/iiYFK/src/tuning.jl:86", + " [32] tune_hyperparameters", + " @ ~/.julia/packages/MicroCanonicalHMC/iiYFK/src/tuning.jl:62 [inlined]", + " [33] Step(rng::Random._GLOBAL_RNG, sampler::MicroCanonicalHMC.MCHMCSampler, h::MicroCanonicalHMC.Hamiltonian, x::Vector{Float64}; inv_transform::Function, kwargs::@Kwargs{})", + " @ MicroCanonicalHMC ~/.julia/packages/MicroCanonicalHMC/iiYFK/src/sampler.jl:146", + " [34] Sample(rng::Random._GLOBAL_RNG, sampler::MicroCanonicalHMC.MCHMCSampler, target::MicroCanonicalHMC.Target{Float64}, n::Int64; thinning::Int64, init_params::Nothing, file_chunk::Int64, fol_name::String, file_name::String, include_latent::Bool, kwargs::@Kwargs{})", + " @ MicroCanonicalHMC ~/.julia/packages/MicroCanonicalHMC/iiYFK/src/sampler.jl:261", + " [35] Sample", + " @ ~/.julia/packages/MicroCanonicalHMC/iiYFK/src/sampler.jl:235 [inlined]", + " [36] #Sample#35", + " @ ~/.julia/packages/MicroCanonicalHMC/iiYFK/src/sampler.jl:212 [inlined]", + " [37] Sample(sampler::MicroCanonicalHMC.MCHMCSampler, target::MicroCanonicalHMC.Target{Float64}, n::Int64)", + " @ MicroCanonicalHMC ~/.julia/packages/MicroCanonicalHMC/iiYFK/src/sampler.jl:206", + " [38] top-level scope", + " @ In[8]:2" + ] } ], "source": [ + "target = TuringTarget(funnel_model)\n", "ssamples = Sample(mchmc, target, 100_000)" ] }, { "cell_type": "code", - "execution_count": 33, + "execution_count": null, "id": "c5d19a82", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "-0.1162738449508564 0.9702243481135476\n", - "-0.8193297713482686 0.7852897699709601\n" - ] - } - ], + "outputs": [], "source": [ "println(mean(ssamples[1, :]), \" \", std(ssamples[1, :]))\n", "println(mean(ssamples[11, :]), \" \", std(ssamples[11, :]))" @@ -407,19 +478,10 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": null, "id": "9c5f7abf", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "-0.39408159747045773 1.2875343544418831\n", - "-0.7345098968270953 0.7627960355617235\n" - ] - } - ], + "outputs": [], "source": [ "println(mean(theta_mchmc), \" \", std(theta_mchmc))\n", "println(mean(x10_mchmc), \" \", std(x10_mchmc))" @@ -435,98 +497,17 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "191958da", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mFound initial step size\n", - "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m ϵ = 1.6\n", - "\u001b[32mSampling: 100%|█████████████████████████████████████████| Time: 0:00:45\u001b[39m\n" - ] - }, - { - "data": { - "text/plain": [ - "Chains MCMC chain (50000×33×1 Array{Float64, 3}):\n", - "\n", - "Iterations = 11:1:50010\n", - "Number of chains = 1\n", - "Samples per chain = 50000\n", - "Wall duration = 50.18 seconds\n", - "Compute duration = 50.18 seconds\n", - "parameters = θ, z[1], z[2], z[3], z[4], z[5], z[6], z[7], z[8], z[9], z[10], z[11], z[12], z[13], z[14], z[15], z[16], z[17], z[18], z[19], z[20]\n", - "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\n", - "\n", - "Summary Statistics\n", - " \u001b[1m parameters \u001b[0m \u001b[1m mean \u001b[0m \u001b[1m std \u001b[0m \u001b[1m mcse \u001b[0m \u001b[1m ess_bulk \u001b[0m \u001b[1m ess_tail \u001b[0m \u001b[1m rhat\u001b[0m ⋯\n", - " \u001b[90m Symbol \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64\u001b[0m ⋯\n", - "\n", - " θ -0.0015 0.7147 0.0090 7982.8130 5538.7109 1.0000 ⋯\n", - " z[1] 0.6078 0.7299 0.0031 55674.6739 34269.0630 1.0001 ⋯\n", - " z[2] 0.6221 0.7359 0.0032 54301.2027 33665.9053 1.0000 ⋯\n", - " z[3] -0.4270 0.7192 0.0028 68644.2890 34350.0961 1.0000 ⋯\n", - " z[4] 0.0861 0.7085 0.0023 97350.9728 34244.8349 1.0001 ⋯\n", - " z[5] 0.9633 0.7658 0.0042 33265.7224 34784.6170 1.0000 ⋯\n", - " z[6] -1.7157 0.8830 0.0069 15402.3632 15253.1832 1.0000 ⋯\n", - " z[7] -0.0475 0.7154 0.0023 96550.9565 32072.1335 1.0000 ⋯\n", - " z[8] 0.3436 0.7191 0.0026 79113.9019 34337.5067 1.0000 ⋯\n", - " z[9] -1.6504 0.8748 0.0067 16221.5687 17571.7505 1.0000 ⋯\n", - " z[10] -0.8476 0.7557 0.0039 37279.4311 36978.7096 1.0000 ⋯\n", - " z[11] 0.9873 0.7722 0.0043 32993.9000 36259.0388 1.0000 ⋯\n", - " z[12] 0.0587 0.7111 0.0023 96414.7306 33949.7787 1.0000 ⋯\n", - " z[13] 0.0588 0.7070 0.0022 99726.5533 34159.6753 1.0000 ⋯\n", - " z[14] -0.2749 0.7142 0.0024 87007.1167 33840.2542 1.0000 ⋯\n", - " z[15] -0.0680 0.7070 0.0023 95161.7894 33466.6193 1.0000 ⋯\n", - " z[16] -0.6499 0.7383 0.0032 52708.8731 34858.8889 1.0000 ⋯\n", - " z[17] 0.8624 0.7557 0.0040 35045.0809 34126.5541 1.0000 ⋯\n", - " z[18] -0.2188 0.7137 0.0024 90158.5744 33534.6533 1.0000 ⋯\n", - " z[19] 0.5460 0.7286 0.0030 58709.9477 34323.1640 1.0000 ⋯\n", - " z[20] 0.6130 0.7278 0.0032 52661.2173 33974.2504 1.0000 ⋯\n", - "\u001b[36m 1 column omitted\u001b[0m\n", - "\n", - "Quantiles\n", - " \u001b[1m parameters \u001b[0m \u001b[1m 2.5% \u001b[0m \u001b[1m 25.0% \u001b[0m \u001b[1m 50.0% \u001b[0m \u001b[1m 75.0% \u001b[0m \u001b[1m 97.5% \u001b[0m\n", - " \u001b[90m Symbol \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64 \u001b[0m\n", - "\n", - " θ -1.7374 -0.3830 0.0819 0.4819 1.1761\n", - " z[1] -0.7405 0.1077 0.5755 1.0762 2.1223\n", - " z[2] -0.7567 0.1189 0.5906 1.0962 2.1531\n", - " z[3] -1.9177 -0.8932 -0.4028 0.0606 0.9319\n", - " z[4] -1.3194 -0.3729 0.0795 0.5442 1.5098\n", - " z[5] -0.4181 0.4258 0.9233 1.4630 2.5627\n", - " z[6] -3.5401 -2.3027 -1.6744 -1.0851 -0.1271\n", - " z[7] -1.4850 -0.5043 -0.0435 0.4140 1.3674\n", - " z[8] -1.0383 -0.1333 0.3226 0.8077 1.8116\n", - " z[9] -3.4751 -2.2267 -1.6138 -1.0255 -0.0784\n", - " z[10] -2.4215 -1.3390 -0.8089 -0.3191 0.5236\n", - " z[11] -0.4037 0.4411 0.9467 1.4983 2.6069\n", - " z[12] -1.3468 -0.3988 0.0570 0.5109 1.4746\n", - " z[13] -1.3494 -0.3951 0.0526 0.5118 1.4814\n", - " z[14] -1.7238 -0.7332 -0.2598 0.1978 1.1058\n", - " z[15] -1.4744 -0.5254 -0.0626 0.3940 1.3299\n", - " z[16] -2.1851 -1.1293 -0.6150 -0.1436 0.7270\n", - " z[17] -0.5100 0.3363 0.8167 1.3581 2.4328\n", - " z[18] -1.6694 -0.6746 -0.2014 0.2525 1.1671\n", - " z[19] -0.8160 0.0532 0.5132 1.0142 2.0665\n", - " z[20] -0.7347 0.1118 0.5764 1.0898 2.1194\n" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "samples_hmc = sample(funnel_model, NUTS(10, 0.95), 50_000, progress=true; save_state=true)" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "919c8b29", "metadata": {}, "outputs": [], @@ -537,98 +518,17 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "a23f6d7d", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mFound initial step size\n", - "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m ϵ = 0.4\n", - "\u001b[32mSampling: 100%|█████████████████████████████████████████| Time: 0:02:13\u001b[39m\n" - ] - }, - { - "data": { - "text/plain": [ - "Chains MCMC chain (50000×33×1 Array{Float64, 3}):\n", - "\n", - "Iterations = 11:1:50010\n", - "Number of chains = 1\n", - "Samples per chain = 50000\n", - "Wall duration = 136.46 seconds\n", - "Compute duration = 136.46 seconds\n", - "parameters = θ, z[1], z[2], z[3], z[4], z[5], z[6], z[7], z[8], z[9], z[10], z[11], z[12], z[13], z[14], z[15], z[16], z[17], z[18], z[19], z[20]\n", - "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\n", - "\n", - "Summary Statistics\n", - " \u001b[1m parameters \u001b[0m \u001b[1m mean \u001b[0m \u001b[1m std \u001b[0m \u001b[1m mcse \u001b[0m \u001b[1m ess_bulk \u001b[0m \u001b[1m ess_tail \u001b[0m \u001b[1m rhat\u001b[0m ⋯\n", - " \u001b[90m Symbol \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64\u001b[0m ⋯\n", - "\n", - " θ -0.0020 0.7166 0.0053 19555.6860 22868.4280 1.0001 ⋯\n", - " z[1] 0.5763 0.7005 0.0026 71079.2098 35177.6701 1.0000 ⋯\n", - " z[2] 0.5831 0.7060 0.0026 71371.0605 35288.8766 1.0001 ⋯\n", - " z[3] -0.4003 0.7067 0.0027 70743.1029 36622.7815 1.0000 ⋯\n", - " z[4] 0.0805 0.7055 0.0026 73407.1195 33992.5501 1.0001 ⋯\n", - " z[5] 0.9084 0.7079 0.0027 70100.2733 35832.6658 1.0001 ⋯\n", - " z[6] -1.6099 0.7171 0.0028 66645.4405 34712.5508 1.0001 ⋯\n", - " z[7] -0.0542 0.7038 0.0027 68920.6017 36581.9051 1.0000 ⋯\n", - " z[8] 0.3184 0.7105 0.0027 70058.4341 36984.4874 1.0001 ⋯\n", - " z[9] -1.5476 0.7178 0.0028 65682.5010 36650.6572 1.0000 ⋯\n", - " z[10] -0.7895 0.7035 0.0027 67357.3490 34943.0986 1.0000 ⋯\n", - " z[11] 0.9274 0.7069 0.0027 69044.7743 35063.3531 1.0002 ⋯\n", - " z[12] 0.0543 0.7048 0.0026 73084.8468 35448.6888 1.0000 ⋯\n", - " z[13] 0.0531 0.7050 0.0026 74016.6142 34230.7182 1.0000 ⋯\n", - " z[14] -0.2531 0.7040 0.0026 71414.1285 35946.8009 1.0000 ⋯\n", - " z[15] -0.0556 0.7064 0.0026 70897.3672 34484.4040 1.0000 ⋯\n", - " z[16] -0.6098 0.7087 0.0026 71852.3433 34287.2507 1.0000 ⋯\n", - " z[17] 0.8063 0.7023 0.0026 72010.4797 37433.1969 1.0001 ⋯\n", - " z[18] -0.2112 0.7007 0.0026 70544.6465 34583.3071 1.0000 ⋯\n", - " z[19] 0.5102 0.7097 0.0026 73020.5204 35780.6407 1.0001 ⋯\n", - " z[20] 0.5821 0.7072 0.0027 70121.7921 34443.6526 1.0000 ⋯\n", - "\u001b[36m 1 column omitted\u001b[0m\n", - "\n", - "Quantiles\n", - " \u001b[1m parameters \u001b[0m \u001b[1m 2.5% \u001b[0m \u001b[1m 25.0% \u001b[0m \u001b[1m 50.0% \u001b[0m \u001b[1m 75.0% \u001b[0m \u001b[1m 97.5% \u001b[0m\n", - " \u001b[90m Symbol \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64 \u001b[0m\n", - "\n", - " θ -1.7580 -0.3820 0.0831 0.4826 1.1627\n", - " z[1] -0.8225 0.1212 0.5782 1.0394 1.9506\n", - " z[2] -0.8317 0.1237 0.5882 1.0489 1.9657\n", - " z[3] -1.7978 -0.8637 -0.4006 0.0569 1.0020\n", - " z[4] -1.3206 -0.3820 0.0820 0.5436 1.4817\n", - " z[5] -0.5068 0.4491 0.9092 1.3721 2.2894\n", - " z[6] -3.0042 -2.0814 -1.6138 -1.1523 -0.1699\n", - " z[7] -1.4474 -0.5159 -0.0540 0.4031 1.3473\n", - " z[8] -1.0979 -0.1406 0.3177 0.7820 1.7239\n", - " z[9] -2.9605 -2.0182 -1.5493 -1.0847 -0.1069\n", - " z[10] -2.1752 -1.2479 -0.7937 -0.3313 0.6086\n", - " z[11] -0.4811 0.4704 0.9296 1.3908 2.3192\n", - " z[12] -1.3568 -0.4058 0.0551 0.5192 1.4607\n", - " z[13] -1.3320 -0.4101 0.0532 0.5160 1.4446\n", - " z[14] -1.6542 -0.7088 -0.2500 0.2058 1.1342\n", - " z[15] -1.4449 -0.5168 -0.0549 0.4078 1.3476\n", - " z[16] -2.0134 -1.0703 -0.6110 -0.1549 0.8137\n", - " z[17] -0.5822 0.3488 0.8040 1.2669 2.1887\n", - " z[18] -1.5969 -0.6698 -0.2129 0.2476 1.1767\n", - " z[19] -0.9152 0.0596 0.5136 0.9683 1.9082\n", - " z[20] -0.8353 0.1269 0.5843 1.0377 1.9844\n" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "truth_hmc = sample(true_model, NUTS(10, 0.95), 50_000, progress=true; save_state=true)" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "0c724724", "metadata": {}, "outputs": [], @@ -647,31 +547,10 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "id": "7fd22388", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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9cWLF2P27NmJ3w3DwJVXXpnyWL/97W9hGAbWrFmDNWvWwDCMtH66vPbaazjzzDMxadIk+P1+jB07FosWLcLVV1898G+cRjRPthtAREREgyccDuNb3/oWfvnLXw7I8ebNm4d//vOftnVnnnkmpk2bhu9973vdtv/LX/6CT3/601i8eDHuvPNOjBs3Dvv27cMbb7yBRx55BN///vcHpF1EADu2REREeW3p0qX49a9/jW984xs4+uij+328kpISHHfccbZ1fr8fZWVl3dYDwJ133okpU6bg6aefhscj3Y7ly5fjzjvv7Hd7iDRGEYiIiPLYNddcg1GjRuHaa6/Nyvnr6+tRWVlp69R2cbnYDaGBxW8UERFRHisuLsa3vvUtPP3003jhhReG/PyLFi3Ca6+9hq985St47bXXEI1Gh7wNNHKwY0tERJTnLrvsMkydOhXXXnstLMsa0nPffvvtOPHEE3HPPffguOOOQ2FhIU444QTcfvvtaG1tHdK2UP5jx5aIiCjP+Xw+3HrrrXjjjTfw2GOPDem5R40ahZdffhmvv/46br/9dnzmM5/B+++/jxUrVmDOnDmoq6sb0vZQfmPHloiIaARYvnw55s2bh+uvvz5lHMDtdiMej6fcNxaLAQC8Xm+fz79gwQJce+21+M1vfoO9e/fi61//OrZv384HyGhAsWNLREQ0AhiGgTvuuANbtmzB/fff3+31sWPHYs+ePSn37Vo/duzYAWmL1+vFTTfdBABYv379gByTCGDHloiIaMRYsmQJPv7xj+Pmm2/ulm9dsmQJXnzxRdTW1trWW5aF3/zmN6ipqcFhhx2W8Tn37duXcv17770HABg/fnzGxyRywjq2REREI8gdd9yB+fPn4+DBgzjyyCMT62+88Ub86U9/wrHHHovrrrsO06dPx/79+/HTn/4Ur7/+ep+zuaeffjomTpyIT33qU5g5cyZM08S6devw/e9/H0VFRfjqV786UG+NiB1bIiKikeSYY47BOeecg1//+te29dOmTcO//vUvfPvb38bKlStRW1uLoqIifOQjH8Gzzz6LU089tU/n+9a3voU//OEP+MEPfoB9+/YhHA5j3LhxWLJkCVasWIEjjjhiIN4WEQDAsIa67gcRERER0SBgxpaIiIiI8gI7tkRERESUF9ixJSIiIqK8wI4tEVGWrFq1CgsXLkRxcTHGjBmD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", - "text/plain": [ - "Figure(PyObject
)" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "PyObject Text(0.5, 1.0, 'MCHMC')" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "fig, axis = plt.subplots(2, 2, figsize=(8,8))\n", "fig.suptitle(\"Neal's Funnel Comp.\", fontsize=16)\n",