Skip to content

SMC fails with pm.Potential terms #4803

Closed
@ricardoV94

Description

@ricardoV94

Please provide a minimal, self-contained, and reproducible example.

with pm.Model() as m:
    x = pm.Normal('x', 0, 1)
    y = pm.Normal('y', x, 1, observed=[1])
    z = pm.Potential('z', x)
    trace = pm.sample_smc()

Please provide the full traceback.

Complete error traceback
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

~/Documents/Projects/pymc3-venv/lib/python3.8/site-packages/aesara/tensor/basic.py in _as_tensor_Sequence(x, name, ndim, dtype, **kwargs)
    158     try:
--> 159         x = type(x)(extract_constants(i) for i in x)
    160     except TypeError:

~/Documents/Projects/pymc3-venv/lib/python3.8/site-packages/aesara/tensor/basic.py in <genexpr>(.0)
    158     try:
--> 159         x = type(x)(extract_constants(i) for i in x)
    160     except TypeError:

~/Documents/Projects/pymc3-venv/lib/python3.8/site-packages/aesara/tensor/basic.py in extract_constants(i)
    153             else:
--> 154                 raise TypeError
    155         else:

TypeError: 


During handling of the above exception, another exception occurred:

TypeError                                 Traceback (most recent call last)

<ipython-input-191-2a0c62da4e6c> in <module>
      3     y = pm.Normal('y', x, 1, observed=[1])
      4     z = pm.Potential('z', x)
----> 5     trace = pm.sample_smc()

~/Documents/Projects/pymc3/pymc3/smc/sample_smc.py in sample_smc(draws, kernel, n_steps, start, tune_steps, p_acc_rate, threshold, save_sim_data, save_log_pseudolikelihood, model, random_seed, parallel, chains, cores)
    203         results = []
    204         for i in range(chains):
--> 205             results.append(sample_smc_int(*params, random_seed[i], i, _log))
    206 
    207     (

~/Documents/Projects/pymc3/pymc3/smc/sample_smc.py in sample_smc_int(draws, kernel, n_steps, start, tune_steps, p_acc_rate, threshold, save_sim_data, save_log_pseudolikelihood, model, random_seed, chain, _log)
    265     nsteps = []
    266     smc.initialize_population()
--> 267     smc.setup_kernel()
    268     smc.initialize_logp()
    269 

~/Documents/Projects/pymc3/pymc3/smc/smc.py in setup_kernel(self)
    143         self.likelihood_logp_func = logp_forw(
    144             initial_values, [self.model.datalogpt], self.variables, shared
--> 145         )
    146 
    147     def initialize_logp(self):

~/Documents/Projects/pymc3/pymc3/model.py in datalogpt(self)
    809 
    810             factors += [at.sum(factor) for factor in potentials]
--> 811             return at.sum(factors)
    812 
    813     @property

~/Documents/Projects/pymc3-venv/lib/python3.8/site-packages/aesara/tensor/math.py in sum(input, axis, dtype, keepdims, acc_dtype)
   2469     """
   2470 
-> 2471     out = Sum(axis=axis, dtype=dtype, acc_dtype=acc_dtype)(input)
   2472 
   2473     if keepdims:

~/Documents/Projects/pymc3-venv/lib/python3.8/site-packages/aesara/graph/op.py in __call__(self, *inputs, **kwargs)
    269         """
    270         return_list = kwargs.pop("return_list", False)
--> 271         node = self.make_node(*inputs, **kwargs)
    272 
    273         if config.compute_test_value != "off":

~/Documents/Projects/pymc3-venv/lib/python3.8/site-packages/aesara/tensor/elemwise.py in make_node(self, input)
   1759         # we can infer what dtype should be, and create a node from an Op
   1760         # of the appropriate dtype.
-> 1761         input = aesara.tensor.basic.as_tensor_variable(input)
   1762         dtype = self._output_dtype(input.dtype)
   1763         acc_dtype = self._acc_dtype(input.dtype)

~/Documents/Projects/pymc3-venv/lib/python3.8/site-packages/aesara/tensor/__init__.py in as_tensor_variable(x, name, ndim, **kwargs)
     39 
     40     """
---> 41     return _as_tensor_variable(x, name, ndim, **kwargs)
     42 
     43 

/usr/lib/python3.8/functools.py in wrapper(*args, **kw)
    873                             '1 positional argument')
    874 
--> 875         return dispatch(args[0].__class__)(*args, **kw)
    876 
    877     funcname = getattr(func, '__name__', 'singledispatch function')

~/Documents/Projects/pymc3-venv/lib/python3.8/site-packages/aesara/tensor/basic.py in _as_tensor_Sequence(x, name, ndim, dtype, **kwargs)
    171         # couldn't get an underlying non-symbolic sequence of objects and we to
    172         # symbolically join terms.
--> 173         return stack(x)
    174 
    175     return constant(x, name=name, ndim=ndim, dtype=dtype)

~/Documents/Projects/pymc3-venv/lib/python3.8/site-packages/aesara/tensor/basic.py in stack(*tensors, **kwargs)
   2715         dtype = aes.upcast(*[i.dtype for i in tensors])
   2716         return aesara.tensor.basic_opt.MakeVector(dtype)(*tensors)
-> 2717     return join(axis, *[shape_padaxis(t, axis) for t in tensors])
   2718 
   2719 

~/Documents/Projects/pymc3-venv/lib/python3.8/site-packages/aesara/tensor/basic.py in join(axis, *tensors_list)
   2561         return tensors_list[0]
   2562     else:
-> 2563         return join_(axis, *tensors_list)
   2564 
   2565 

~/Documents/Projects/pymc3-venv/lib/python3.8/site-packages/aesara/graph/op.py in __call__(self, *inputs, **kwargs)
    269         """
    270         return_list = kwargs.pop("return_list", False)
--> 271         node = self.make_node(*inputs, **kwargs)
    272 
    273         if config.compute_test_value != "off":

~/Documents/Projects/pymc3-venv/lib/python3.8/site-packages/aesara/tensor/basic.py in make_node(self, *axis_and_tensors)
   2282             return tensor(dtype=out_dtype, broadcastable=bcastable)
   2283 
-> 2284         return self._make_node_internal(
   2285             axis, tens, as_tensor_variable_args, output_maker
   2286         )

~/Documents/Projects/pymc3-venv/lib/python3.8/site-packages/aesara/tensor/basic.py in _make_node_internal(self, axis, tens, as_tensor_variable_args, output_maker)
   2352             [x.ndim == len(bcastable) for x in as_tensor_variable_args[1:]]
   2353         ):
-> 2354             raise TypeError(
   2355                 "Join() can only join tensors with the same " "number of dimensions."
   2356             )

TypeError: Join() can only join tensors with the same number of dimensions.

Please provide any additional information below.

Versions and main components

  • PyMC3 Version:
  • Aesara/Theano Version:
  • Python Version:
  • Operating system:
  • How did you install PyMC3: (conda/pip)

Metadata

Metadata

Assignees

No one assigned

    Labels

    SMCSequential Monte Carlobug

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions