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.BaseInferenceThe
CompositionalInferenceclass 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.fooandmodel.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.