MNPE#
- class MNPE(prior=None, density_estimator='mnpe', device='cpu', logging_level='WARNING', summary_writer=None, tracker=None, show_progress_bars=True)[source]#
Bases:
NPE_CMethod that can infer discrete and continuous parameters (Mixed NPE).
MNPE (Mixed Neural Posterior Estimation) is similar to NPE: it directly estimates a distribution over parameters given data. Unlike NPE, it is designed to be applied to parmaeters with mixed types, i.e., continuous and discrete parameters. This can occur, for example, in models with switching components. The emebedding net will only operate on the continuous parameters, note this to design the dimension of the embedding net.
Example:#
import torch from sbi.inference import MNPE dim_theta_discrete = 3 dim_theta_continuous = 2 dim_theta = 5 dim_x = 50 num_sims = 100 discrete_theta = torch.randint(low=0, high=2, size=(100, dim_theta_discrete)) continuous_theta = torch.randn((num_sims, dim_theta_discrete)) # Important: the theta must have all continuous paramters first, and # discrete parameters after this. theta = torch.cat([continuous_theta, discrete_theta], dim=1) x = torch.randn((num_sims, dim_x)) inference = MNPE() _ = inference.append_simulations(theta, x).train() posterior = inference.build_posterior() x_o = torch.randn((1, dim_x)) samples = posterior.sample((100,), x=x_o)
- train(training_batch_size=200, learning_rate=0.0005, validation_fraction=0.1, stop_after_epochs=20, max_num_epochs=2147483647, clip_max_norm=5.0, resume_training=False, discard_prior_samples=False, retrain_from_scratch=False, show_train_summary=False, dataloader_kwargs=None)[source]#
Return density estimator that approximates the distribution \(p(\theta|x)\).
- Parameters:
num_atoms – Number of atoms to use for classification.
training_batch_size (int) – Training batch size.
learning_rate (float) – Learning rate for Adam optimizer.
validation_fraction (float) – The fraction of data to use for validation.
stop_after_epochs (int) – The number of epochs to wait for improvement on the validation set before terminating training.
max_num_epochs (int) – Maximum number of epochs to run. If reached, we stop training even when the validation loss is still decreasing. Otherwise, we train until validation loss increases (see also
stop_after_epochs).clip_max_norm (float | None) – Value at which to clip the total gradient norm in order to prevent exploding gradients. Use None for no clipping.
calibration_kernel – A function to calibrate the loss with respect to the simulations
x. See Lueckmann, Gonçalves et al., NeurIPS 2017.resume_training (bool) – Can be used in case training time is limited, e.g. on a cluster. If
True, the split between train and validation set, the optimizer, the number of epochs, and the best validation log-prob will be restored from the last time.train()was called.force_first_round_loss – If
True, train with maximum likelihood, i.e., potentially ignoring the correction for using a proposal distribution different from the prior.discard_prior_samples (bool) – Whether to discard samples simulated in round 1, i.e. from the prior. Training may be sped up by ignoring such less targeted samples.
use_combined_loss – Whether to train the neural net also on prior samples using maximum likelihood in addition to training it on all samples using atomic loss. The extra MLE loss helps prevent density leaking with bounded priors.
retrain_from_scratch (bool) – Whether to retrain the conditional density estimator for the posterior from scratch each round.
show_train_summary (bool) – Whether to print the number of epochs and validation loss and leakage after the training.
dataloader_kwargs (Dict | None) – Additional or updated kwargs to be passed to the training and validation dataloaders (like, e.g., a collate_fn)
- Returns:
Density estimator that approximates the distribution \(p(\theta|x)\).
- Return type:
MixedDensityEstimator
- build_posterior(density_estimator=None, prior=None, sample_with='direct', mcmc_method='slice_np_vectorized', vi_method='rKL', direct_sampling_parameters=None, mcmc_parameters=None, vi_parameters=None, rejection_sampling_parameters=None, importance_sampling_parameters=None, posterior_parameters=None)[source]#
Build posterior from the neural density estimator.
- Parameters:
density_estimator (MixedDensityEstimator | None) – The density estimator that the posterior is based on. If None, use the latest neural density estimator that was trained.
prior (Distribution | None) – Prior distribution.
sample_with (Literal['mcmc', 'rejection', 'vi', 'importance', 'direct']) – Method to use for sampling from the posterior. Must be one of [direct | mcmc | rejection | vi | importance].
mcmc_method (Literal['slice_np', 'slice_np_vectorized', 'hmc_pyro', 'nuts_pyro', 'slice_pymc', 'hmc_pymc', 'nuts_pymc']) – Method used for MCMC sampling, one of slice_np, slice_np_vectorized, hmc_pyro, nuts_pyro, slice_pymc, hmc_pymc, nuts_pymc. slice_np is a custom numpy implementation of slice sampling. slice_np_vectorized is identical to slice_np, but if num_chains>1, the chains are vectorized for slice_np_vectorized whereas they are run sequentially for slice_np. The samplers ending on _pyro are using Pyro, and likewise the samplers ending on _pymc are using PyMC.
vi_method (Literal['rKL', 'fKL', 'IW', 'alpha']) – Method used for VI, one of [rKL, fKL, IW, alpha].
direct_sampling_parameters (Dict[str, Any] | None) – Additional kwargs passed to DirectPosterior.
mcmc_parameters (Dict[str, Any] | None) – Additional kwargs passed to MCMCPosterior.
vi_parameters (Dict[str, Any] | None) – Additional kwargs passed to VIPosterior.
rejection_sampling_parameters (Dict[str, Any] | None) – Additional kwargs passed to ` RejectionPosterior`.
importance_sampling_parameters (Dict[str, Any] | None) – Additional kwargs passed to ImportanceSamplingPosterior.
posterior_parameters (DirectPosteriorParameters | MCMCPosteriorParameters | VIPosteriorParameters | RejectionPosteriorParameters | ImportanceSamplingPosteriorParameters | None) – Configuration passed to the init method for the posterior. Must be one of the following - VIPosteriorParameters - ImportanceSamplingPosteriorParameters - MCMCPosteriorParameters - DirectPosteriorParameters - RejectionPosteriorParameters
- Returns:
Posterior \(p( heta|x)\) with .sample() and .log_prob() methods.
- Return type:
NeuralPosterior
- append_simulations(theta, x, proposal=None, exclude_invalid_x=None, data_device=None)#
Store parameters and simulation outputs to use them for later training.
Data are stored as entries in lists for each type of variable (parameter/data).
Stores \(\theta\), \(x\), prior_masks (indicating if simulations are coming from the prior or not) and an index indicating which round the batch of simulations came from.
- Parameters:
theta (Tensor) – Parameter sets.
x (Tensor) – Simulation outputs.
proposal (DirectPosterior | None) – The distribution that the parameters \(\theta\) were sampled from. Pass None if the parameters were sampled from the prior. If not None, it will trigger a different loss-function.
exclude_invalid_x (bool | None) – Whether invalid simulations are discarded during training. For single-round SNPE, it is fine to discard invalid simulations, but for multi-round SNPE (atomic), discarding invalid simulations gives systematically wrong results. If None, it will be True in the first round and False in later rounds.
data_device (str | None) – Where to store the data, default is on the same device where the training is happening. If training a large dataset on a GPU with not much VRAM can set to ‘cpu’ to store data on system memory instead.
- Returns:
NeuralInference object (returned so that this function is chainable).
- Return type:
Self
- get_dataloaders(starting_round=0, training_batch_size=200, validation_fraction=0.1, resume_training=False, dataloader_kwargs=None)#
Return dataloaders for training and validation.
- Parameters:
dataset – holding all theta and x, optionally masks.
training_batch_size (int) – training arg of inference methods.
resume_training (bool) – Whether the current call is resuming training so that no new training and validation indices into the dataset have to be created.
dataloader_kwargs (dict | None) – Additional or updated kwargs to be passed to the training and validation dataloaders (like, e.g., a collate_fn).
starting_round (int)
validation_fraction (float)
- Returns:
Tuple of dataloaders for training and validation.
- Return type:
- get_simulations(starting_round=0)#
Returns all \(\theta\), \(x\), and prior_masks from rounds >= starting_round.
If requested, do not return invalid data.
- Parameters:
starting_round (int) – The earliest round to return samples from (we start counting from zero).
warn_on_invalid – Whether to give out a warning if invalid simulations were found.
- Return type:
Returns: Parameters, simulation outputs, prior masks.
- property summary#
- Parameters:
prior (Distribution | None)
density_estimator (Literal['mnpe'] | ~sbi.neural_nets.estimators.base.ConditionalEstimatorBuilder[~sbi.neural_nets.estimators.mixed_density_estimator.MixedDensityEstimator])
device (str)
summary_writer (SummaryWriter | None)
tracker (Tracker | None)
show_progress_bars (bool)