A PyTorch implementation of Distributionally Robust Neural Posterior Estimation, which provides robust posterior inference under model misspecification.
This repository implements:
- NPE (Neural Posterior Estimation): Standard amortized posterior inference
- DRNPE (Distributionally Robust NPE): Robust variant that accounts for potential model misspecification
Both methods support two variational distribution families:
- Gaussian: Simple location-scale family
- Neural Spline Flow: Flexible normalizing flow using rational quadratic splines
Requires Python 3.12 or 3.13 and uv.
uv syncTo install pre-commit hooks:
uv run pre-commit installTrain encoders using Hydra configs in drnpe/conf/:
# NPE with Gaussian variational distribution
uv run python drnpe/train.py -cn config_npe
# DRNPE with Gaussian variational distribution
uv run python drnpe/train.py -cn config_drnpe
# NPE with Neural Spline Flow
uv run python drnpe/train.py -cn config_npe_flow
# DRNPE with Neural Spline Flow
uv run python drnpe/train.py -cn config_drnpe_flowMonitor training with TensorBoard:
uv run tensorboard --logdir=logsSee examples/gaussian.ipynb for a demonstration on a Gaussian inference problem, comparing coverage probabilities under model misspecification.
drnpe/
├── drnpe/
│ ├── conf/ # Hydra configuration files
│ ├── data.py # Data modules
│ ├── encoder.py # NPE and DRNPE encoder classes
│ ├── networks.py # Neural network architectures
│ └── train.py # Training script
├── examples/
│ └── gaussian.ipynb # Example notebook
├── trained_ckpts/ # Pre-trained model checkpoints
└── logs/ # Training logs and checkpoints