torch_concepts.nn.ForwardInference¶
- class ForwardInference(probabilistic_model: ProbabilisticModel, graph_learner: BaseGraphLearner | None = None, *args, **kwargs)[source]¶
Forward inference engine for probabilistic models.
This class implements forward inference through a probabilistic model by topologically sorting variables and computing them in dependency order. It supports parallel computation within topological levels and can optionally use a learned graph structure.
The inference engine: - Automatically sorts variables in topological order - Computes variables level-by-level (variables at same depth processed in parallel) - Supports GPU parallelization via CUDA streams - Supports CPU parallelization via threading - Handles interventions via _InterventionWrapper
- probabilistic_model¶
The probabilistic model to perform inference on.
- Type:
- graph_learner¶
Optional graph structure learner.
- Type:
- Parameters:
probabilistic_model – The probabilistic model to perform inference on.
graph_learner – Optional graph learner for weighted adjacency structure.
- Raises:
RuntimeError – If the model contains cycles (not a DAG).
Example
>>> import torch >>> from torch.distributions import Bernoulli >>> from torch_concepts import InputVariable, EndogenousVariable >>> from torch_concepts.distributions import Delta >>> from torch_concepts.nn import ForwardInference, ParametricCPD, ProbabilisticModel >>> >>> # Create a simple model: latent -> A -> B >>> # Where A is a root concept and B depends on A >>> >>> # Define variables >>> input_var = InputVariable('input', parents=[], distribution=Delta, size=10) >>> var_A = EndogenousVariable('A', parents=['input'], distribution=Bernoulli, size=1) >>> var_B = EndogenousVariable('B', parents=['A'], distribution=Bernoulli, size=1) >>> >>> # Define CPDs (modules that compute each variable) >>> from torch.nn import Identity, Linear >>> latent_cpd = ParametricCPD('input', parametrization=Identity()) >>> cpd_A = ParametricCPD('A', parametrization=Linear(10, 1)) # latent -> A >>> cpd_B = ParametricCPD('B', parametrization=Linear(1, 1)) # A -> B >>> >>> # Create probabilistic model >>> pgm = ProbabilisticModel( ... variables=[input_var, var_A, var_B], ... parametric_cpds=[latent_cpd, cpd_A, cpd_B] ... ) >>> >>> # Create forward inference engine >>> inference = ForwardInference(pgm) >>> >>> # Check topological order >>> print([v.concepts[0] for v in inference.sorted_variables]) >>> # ['input', 'A', 'B'] >>> >>> # Check levels (for parallel computation) >>> for i, level in enumerate(inference.levels): ... print(f"Level {i}: {[v.concepts[0] for v in level]}") >>> # Level 0: ['input'] >>> # Level 1: ['A'] >>> # Level 2: ['B']
- __init__(probabilistic_model: ProbabilisticModel, graph_learner: BaseGraphLearner | None = None, *args, **kwargs)[source]¶
Initialize the inference module.
Methods
__init__(probabilistic_model[, graph_learner])Initialize the inference module.
add_module(name, module)Add a child module to the current module.
apply(fn)Apply
fnrecursively to every submodule (as returned by.children()) as well as self.bfloat16()Casts all floating point parameters and buffers to
bfloat16datatype.buffers([recurse])Return an iterator over module buffers.
children()Return an iterator over immediate children modules.
compile(*args, **kwargs)Compile this Module's forward using
torch.compile().cpu()Move all model parameters and buffers to the CPU.
cuda([device])Move all model parameters and buffers to the GPU.
double()Casts all floating point parameters and buffers to
doubledatatype.eval()Set the module in evaluation mode.
extra_repr()Return the extra representation of the module.
float()Casts all floating point parameters and buffers to
floatdatatype.forward(x, *args, **kwargs)Forward pass delegates to the query method.
get_buffer(target)Return the buffer given by
targetif it exists, otherwise throw an error.get_extra_state()Return any extra state to include in the module's state_dict.
get_parameter(target)Return the parameter given by
targetif it exists, otherwise throw an error.get_parent_kwargs(parametric_cpd[, ...])Prepare keyword arguments for CPD forward pass based on parent outputs.
get_results(results, parent_variable)Process the raw output tensor from a CPD.
get_submodule(target)Return the submodule given by
targetif it exists, otherwise throw an error.half()Casts all floating point parameters and buffers to
halfdatatype.ipu([device])Move all model parameters and buffers to the IPU.
load_state_dict(state_dict[, strict, assign])Copy parameters and buffers from
state_dictinto this module and its descendants.modules()Return an iterator over all modules in the network.
mtia([device])Move all model parameters and buffers to the MTIA.
named_buffers([prefix, recurse, ...])Return an iterator over module buffers, yielding both the name of the buffer as well as the buffer itself.
named_children()Return an iterator over immediate children modules, yielding both the name of the module as well as the module itself.
named_modules([memo, prefix, remove_duplicate])Return an iterator over all modules in the network, yielding both the name of the module as well as the module itself.
named_parameters([prefix, recurse, ...])Return an iterator over module parameters, yielding both the name of the parameter as well as the parameter itself.
parameters([recurse])Return an iterator over module parameters.
predict(external_inputs[, debug, device])Perform forward pass prediction across the entire probabilistic model.
query(query_concepts, evidence[, debug, device])Execute forward pass and return only specified concepts concatenated.
register_backward_hook(hook)Register a backward hook on the module.
register_buffer(name, tensor[, persistent])Add a buffer to the module.
register_forward_hook(hook, *[, prepend, ...])Register a forward hook on the module.
register_forward_pre_hook(hook, *[, ...])Register a forward pre-hook on the module.
register_full_backward_hook(hook[, prepend])Register a backward hook on the module.
register_full_backward_pre_hook(hook[, prepend])Register a backward pre-hook on the module.
register_load_state_dict_post_hook(hook)Register a post-hook to be run after module's
load_state_dict()is called.register_load_state_dict_pre_hook(hook)Register a pre-hook to be run before module's
load_state_dict()is called.register_module(name, module)Alias for
add_module().register_parameter(name, param)Add a parameter to the module.
register_state_dict_post_hook(hook)Register a post-hook for the
state_dict()method.register_state_dict_pre_hook(hook)Register a pre-hook for the
state_dict()method.requires_grad_([requires_grad])Change if autograd should record operations on parameters in this module.
set_extra_state(state)Set extra state contained in the loaded state_dict.
set_submodule(target, module[, strict])Set the submodule given by
targetif it exists, otherwise throw an error.share_memory()state_dict(*args[, destination, prefix, ...])Return a dictionary containing references to the whole state of the module.
to(*args, **kwargs)Move and/or cast the parameters and buffers.
to_empty(*, device[, recurse])Move the parameters and buffers to the specified device without copying storage.
train([mode])Set the module in training mode.
type(dst_type)Casts all parameters and buffers to
dst_type.Build an 'unrolled' view of the ProbabilisticModel based on graph_learner adjacency.
xpu([device])Move all model parameters and buffers to the XPU.
zero_grad([set_to_none])Reset gradients of all model parameters.
Attributes
T_destinationGet all variable names available for querying.
call_super_initdump_patches