From 52761c21a0eb07c798ebf168853c0e30b5514317 Mon Sep 17 00:00:00 2001 From: Alexander Rodin Date: Sat, 27 May 2017 23:24:24 +0300 Subject: [PATCH 1/2] Return identity matrix if no scaling provided --- pymc3/step_methods/hmc/base_hmc.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pymc3/step_methods/hmc/base_hmc.py b/pymc3/step_methods/hmc/base_hmc.py index 0bcf3083c3..b37edd8455 100644 --- a/pymc3/step_methods/hmc/base_hmc.py +++ b/pymc3/step_methods/hmc/base_hmc.py @@ -1,10 +1,12 @@ from ..arraystep import ArrayStepShared +from ...blocking import DictToArrayBijection, ArrayOrdering from .trajectory import get_theano_hamiltonian_functions from pymc3.tuning import guess_scaling from pymc3.model import modelcontext, Point from .quadpotential import quad_potential from pymc3.theanof import inputvars, make_shared_replacements +import numpy as np class BaseHMC(ArrayStepShared): @@ -41,7 +43,8 @@ def __init__(self, vars=None, scaling=None, step_scale=0.25, is_cov=False, vars = inputvars(vars) if scaling is None and potential is None: - scaling = model.test_point + bij = DictToArrayBijection(ArrayOrdering(vars), model.test_point) + scaling = np.ones(bij.map(model.test_point).size) if isinstance(scaling, dict): scaling = guess_scaling(Point(scaling, model=model), model=model, vars=vars) From c4659b499a4ce3d1576876830a31198a35039fdf Mon Sep 17 00:00:00 2001 From: Alexander Rodin Date: Mon, 29 May 2017 13:36:10 +0300 Subject: [PATCH 2/2] Simplify calculation of identity scaling matrix --- pymc3/step_methods/hmc/base_hmc.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pymc3/step_methods/hmc/base_hmc.py b/pymc3/step_methods/hmc/base_hmc.py index b37edd8455..198fd4d707 100644 --- a/pymc3/step_methods/hmc/base_hmc.py +++ b/pymc3/step_methods/hmc/base_hmc.py @@ -1,5 +1,4 @@ from ..arraystep import ArrayStepShared -from ...blocking import DictToArrayBijection, ArrayOrdering from .trajectory import get_theano_hamiltonian_functions from pymc3.tuning import guess_scaling @@ -43,8 +42,7 @@ def __init__(self, vars=None, scaling=None, step_scale=0.25, is_cov=False, vars = inputvars(vars) if scaling is None and potential is None: - bij = DictToArrayBijection(ArrayOrdering(vars), model.test_point) - scaling = np.ones(bij.map(model.test_point).size) + scaling = np.ones(model.dict_to_array(model.test_point).size) if isinstance(scaling, dict): scaling = guess_scaling(Point(scaling, model=model), model=model, vars=vars)