Closed
Description
I am trying to use the new pm.sample_prior_predictive
method to get a sense of my priors.
I get an internal error when my model contains a mixture-based distribution.
Self-contained example:
with pm.Model() as model:
mu = pm.Normal('mu', mu=[0, math.pi/2], tau=8/math.pi, shape=2)
tau = pm.Gamma('tau', alpha=1, beta=1, shape=2)
w = pm.Dirichlet('w', a=np.ones(2), shape=2)
ys = pm.NormalMixture('ys', w=w, mu=mu, tau=tau, comp_shape=2, shape=1)
prior = pm.sample_prior_predictive()
Traceback:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-21-7e5dc188c0c0> in <module>()
4 w = pm.Dirichlet('w', a=np.ones(2), shape=2)
5 ys = pm.NormalMixture('ys', w=w, mu=mu, tau=tau, shape=1)
----> 6 prior = pm.sample_prior_predictive()
~/Documents/SourceControl/probprog-sandbox/venv/lib/python3.6/site-packages/pymc3/sampling.py in sample_prior_predictive(samples, model, vars, random_seed)
1314 names = get_default_varnames(model.named_vars, include_transformed=False)
1315 # draw_values fails with auto-transformed variables. transform them later!
-> 1316 values = draw_values([model[name] for name in names], size=samples)
1317
1318 data = {k: v for k, v in zip(names, values)}
~/Documents/SourceControl/probprog-sandbox/venv/lib/python3.6/site-packages/pymc3/distributions/distribution.py in draw_values(params, point, size)
291 point=point,
292 givens=temp_givens,
--> 293 size=size))
294 stored.add(next_.name)
295 except theano.gof.fg.MissingInputError:
~/Documents/SourceControl/probprog-sandbox/venv/lib/python3.6/site-packages/pymc3/distributions/distribution.py in _draw_value(param, point, givens, size)
382 return point[param.name]
383 elif hasattr(param, 'random') and param.random is not None:
--> 384 return param.random(point=point, size=size)
385 elif (hasattr(param, 'distribution') and
386 hasattr(param.distribution, 'random') and
~/Documents/SourceControl/probprog-sandbox/venv/lib/python3.6/site-packages/pymc3/model.py in __call__(self, *args, **kwargs)
40
41 def __call__(self, *args, **kwargs):
---> 42 return getattr(self.obj, self.method_name)(*args, **kwargs)
43
44
~/Documents/SourceControl/probprog-sandbox/venv/lib/python3.6/site-packages/pymc3/distributions/mixture.py in random(self, point, size)
179 samples[i, :] = np.squeeze(comp_tmp[np.arange(w_tmp.size), ..., w_tmp])
180 else:
--> 181 samples[i, :] = np.squeeze(comp_tmp[w_tmp])
182
183 return samples
ValueError: could not broadcast input array from shape (500) into shape (1)
Additional information:
It seems to work when I comment out the line with NormalMixture
and I do not get any model error if I don't sample.
Any idea why this happens?
Thanks!
Versions and main components
- PyMC3 Version: 3.5 RC1 (master)
- Theano Version: 1.0.2
- Python Version: 3.6.5
- Operating system: macOS 10.13.5
- How did you install PyMC3: pip
Metadata
Metadata
Assignees
Labels
No labels