beanmachine.ppl.inference.compositional_infer module
- class beanmachine.ppl.inference.compositional_infer.CompositionalInference(inference_dict: Optional[Dict[Union[Callable, Tuple[Callable, ...], ellipsis], Union[beanmachine.ppl.inference.base_inference.BaseInference, Tuple[beanmachine.ppl.inference.base_inference.BaseInference, ...], ellipsis]]] = None, nnc_compile: bool = True)
Bases:
beanmachine.ppl.inference.base_inference.BaseInference
The
CompositionalInference
class enables combining multiple inference algorithms and blocking random variables together. By default, continuous variables will be blocked together and use theGlobalNoUTurnProposer
. Discrete variables will be proposed independently withSingleSiteUniformProposer
. To override the default behavior, you can pass aninference_dict
. To learn more about Compositional Inference, please see the Compositional Inference page on our website.Example 0 (use different inference method for different random variable families):
CompositionalInference({ model.foo: bm.SingleSiteAncestralMetropolisHastings(), model.bar: bm.SingleSiteNewtonianMonteCarlo(), })
Example 1 (override default inference method):
CompositionalInference({...: bm.SingleSiteAncestralMetropolisHastings()})
Example 2 (block inference (jointly propose)
model.foo
andmodel.bar
):CompositionalInference({(model.foo, model.bar): bm.GlobalNoUTurnSampler()})
Warning
When using the default inference behavior, graphs (i.e. the number of latent variables) must be static and cannot change between iterations.
- Parameters
inference_dict – an optional inference configuration as shown above.
nnc_compile – where available, use NNC to compile proposers.
- get_proposers(world: beanmachine.ppl.world.world.World, target_rvs: Set[beanmachine.ppl.model.rv_identifier.RVIdentifier], num_adaptive_sample: int) List[beanmachine.ppl.inference.proposer.base_proposer.BaseProposer]
Returns the proposer(s) corresponding to every non-observed variable in target_rvs. Should be implemented by the specific inference algorithm.