Yinhao Zhu, Nicholas Zabaras
PyTorch Implementation of Bayesian surrogate modeling for PDEs with high-dimensional stochstic input, such as permeability field, Young's modulus, etc.
KLE4225 (No dim reduction) | KLE500 | KLE50 |
---|---|---|
The three columns in each image correspond to three output fields: (1) pressure field, (2)(3) velocities field in x and y axies. The four rows in each image from top to bottom show: (1) simulator output, (2) surrogate prediction (predictive mean), (3) error between simulator and prediction, (4) two standard devivation of prediction.
- python 3 or 2
- PyTorch 0.4
- h5py
- matplotlib
- seaborn
-
Install PyTorch and other dependencies
-
Clone this repo:
git clone https://github.com/cics-nd/cnn-surrogate.git
cd cnn-surrogate
Download Darcy flow simulation dataset with input Gaussian random field (with exponential kernel) and three output fields (pressure and velocities fields).
Download KLE4225 dataset:
bash ./scripts/download_dataset.sh 4225
Change 4225 to 500, 50 to download KLE500, KLE50 datasets.
Data is saved at ./dataset/
.
Number of training data within each dataset:
- KLE50: [32, 64, 128, 256],
- KLE500: [64, 128, 256, 512],
- KLE4225: [128, 256, 512, 1024].
Number of test data: 500. Number of Monte Carlo sampling data: 10,000.
KLE4225 | KLE500 | KLE50 |
---|---|---|
Download a pre-trained model:
bash ./scripts/download_checkpoints.sh 4225 256
where 4225 and 256 refer to the intrinsic input dimensionality of dataset and
number of training data. The pre-trained model is downloaded to the same location (./experiments/Bayesian/*/
) as if it was trained on local machines. You may proceed to use the pre-trained model for UQ tasks.
Perform UQ tasks, including:
- Prediction at one input realization
- Uncertainty propagation
- Distribution estimate
- Uncertainty quality assessment (realiability diagram)
python post_proc.py --post --kle 4225 --ntrain 256
Do not forget to add the --post
switch. For KLE4225 with 128 data, --epochs
should be set to 400 to show convergence.
Train a non-Bayesian surroagte (e.g. with 256 data from KLE4225 dataset):
python train_det.py --kle 4225 --ntrain 256
The runs are saved at ./experiments/deterministic
.
Train a Bayesian surrogate (e.g. with 256 data from KLE4225 dataset using SVGD with 20 samples):
python train_svgd.py --kle 4225 --ntrain 256 --n-samples 20
The runs are saved at ./experiments/Bayesian
.
It takes 1-2 hours to train a Bayesian surrogate with 256-512 training data
(20 samples, 300 epochs, batch-size 16) on a single GPU.
If you find this repo useful for your research, please consider to cite:
@article{ZHU2018415,
title = "Bayesian deep convolutional encoder–decoder networks for surrogate modeling and uncertainty quantification",
journal = "Journal of Computational Physics",
volume = "366",
pages = "415 - 447",
year = "2018",
issn = "0021-9991",
doi = "https://doi.org/10.1016/j.jcp.2018.04.018",
url = "http://www.sciencedirect.com/science/article/pii/S0021999118302341",
author = "Yinhao Zhu and Nicholas Zabaras"
}
Thanks Dr. Steven Atkinson for providing Darcy flow simulation dataset.
Code is inspired by pix2pix.