Home

Awesome

Structured-DGP

This is the companion code for the inference methods for deep Gaussian Processes reported in the paper Beyond the Mean-Field: Structured Deep Gaussian Processes Improve the Predictive Uncertainties by Jakob Lindinger et al.. The code allows the users to experiment with the proposed DGP inference method. Please cite the above paper when reporting, reproducing or extending the results.

<p align="center"> <img src="img/thumbnail_landscape.png" width="350"> </p>

Purpose of the project

This software is a research prototype, solely developed for and published as part of the publication cited above. It will neither be maintained nor monitored in any way.

Requirements

The Structured-DGP core code requires gpflow, tensorflow, tensorflow_probability, numpy, and scipy. Running the demo and the experiments additionally require scikit-learn, matplotlib, h5py and pandas (>= 0.25 with xlrd 1.1). For running the unittests, unittest and doubly_stochastic_dgp are also needed.

A possible environment fulfilling the dependencies consists of python 3.6.9 tensorflow 1.13.1 tensorflow-probability 0.6.0 gpflow 1.3.0

Usage

The Structured-DGP interface is similar to the one of doubly_stochastic_dgp. An exemplary usage is demonstrated in experiments/demo_boston.py. The demo can be executed by running

python demo_boston.py

from the experiments directory.

We have included two experiments that provide the necessary details on experiment setup and data preprocessing to reproduce the major experiments in our paper: The first is the convergence study to reproduce Fig. 2 in the paper, to be found in experiments/convergence_study.py. It can be executed by running

python convergence_study.py --run --plot

from the experiments directory and produces a figure in experiments/results.

The second experiment is the extrapolation study that can be used to reproduce (up to randomness) the entries of MF vs STAR for the energy dataset in Tabs. 2 and S4. Execute first

for i in {0..9}; do python extrapolation_study.py --run --seed "$i"; done

or any other way of running the script with the seeds from 0 to 9, and then

python extrapolation_study.py --eval

To run the unittests, from the root directory execute

python -m unittest discover tests/

Naively trying out new structural approximations to the covariance structure can be done by implementing a new DGP and a new layers class as shown with Approx_Full_DGP in stuctured_dgp/full_dgp.py and Stripes_Arrow_Layers in stuctured_dgp/all_layers.py.

Further information on how to run the experiments on different datasets can be found in the datasets directory.

License

Structured-DGP is open-sourced under the AGPL-3.0 license. See the LICENSE file for details.

For a list of other open source components included in Structured-DGP, see the file 3rd-party-licenses.txt.