InvertibleNetworks.jl

InvertibleNetworks.jl: A Julia package for scalable normalizing flows - Published in JOSS (2024)

https://github.com/slimgroup/invertiblenetworks.jl

Science Score: 100.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 7 DOI reference(s) in README and JOSS metadata
  • Academic publication links
    Links to: arxiv.org, joss.theoj.org
  • Committers with academic emails
    14 of 22 committers (63.6%) from academic institutions
  • Institutional organization owner
    Organization slimgroup has institutional domain (slim.gatech.edu)
  • JOSS paper metadata
    Published in Journal of Open Source Software

Keywords

bayesian-inference deep-invertible-networks deep-learning invertible-1x1-convolutions invertible-neural-networks julia julia-language machine-learning normalizing-flow normalizing-flows

Scientific Fields

Engineering Computer Science - 40% confidence
Last synced: 6 months ago · JSON representation ·

Repository

A Julia framework for invertible neural networks

Basic Info
  • Host: GitHub
  • Owner: slimgroup
  • License: mit
  • Language: Julia
  • Default Branch: master
  • Homepage:
  • Size: 2.11 MB
Statistics
  • Stars: 166
  • Watchers: 10
  • Forks: 25
  • Open Issues: 21
  • Releases: 27
Topics
bayesian-inference deep-invertible-networks deep-learning invertible-1x1-convolutions invertible-neural-networks julia julia-language machine-learning normalizing-flow normalizing-flows
Created about 6 years ago · Last pushed about 1 year ago
Metadata Files
Readme Contributing License Citation

README.md

InvertibleNetworks.jl

| Documentation | Build Status | JOSS paper | |:-----------------:|:-----------------:|:----------------:| | | CI| DOI

Building blocks for invertible neural networks in the Julia programming language.

  • Memory efficient building blocks for invertible neural networks
  • Hand-derived gradients, Jacobians $J$ , and $\log |J|$
  • Flux integration
  • Support for Zygote and ChainRules
  • GPU support
  • Includes various examples of invertible neural networks, normalizing flows, variational inference, and uncertainty quantification

Installation

InvertibleNetworks is registered and can be added like any standard Julia package with the command:

] add InvertibleNetworks

Uncertainty-aware image reconstruction

Due to its memory scaling InvertibleNetworks.jl, has been particularily successful at Bayesian posterior sampling with simulation-based inference. To get started with this application refer to a simple example (Conditional sampling for MNSIT inpainting) but feel free to modify this script for your application and please reach out to us for help.

mnist_sampling_cond

Building blocks

  • 1x1 Convolutions using Householder transformations (example)

  • Residual block (example)

  • Invertible coupling layer from Dinh et al. (2017) (example)

  • Invertible hyperbolic layer from Lensink et al. (2019) (example)

  • Invertible coupling layer from Putzky and Welling (2019) (example)

  • Invertible recursive coupling layer HINT from Kruse et al. (2020) (example)

  • Activation normalization (Kingma and Dhariwal, 2018) (example)

  • Various activation functions (Sigmoid, ReLU, leaky ReLU, GaLU)

  • Objective and misfit functions (mean squared error, log-likelihood)

  • Dimensionality manipulation: squeeze/unsqueeze (column, patch, checkerboard), split/cat

  • Squeeze/unsqueeze using the wavelet transform

Examples

  • Invertible recurrent inference machines (Putzky and Welling, 2019) (generic example)

  • Generative models with maximum likelihood via the change of variable formula (example)

  • Glow: Generative flow with invertible 1x1 convolutions (Kingma and Dhariwal, 2018) (generic example, source)

GPU support

GPU support is supported via Flux/CuArray. To use the GPU, move the input and the network layer to GPU via |> gpu

``` using InvertibleNetworks, Flux

Input

nx = 64 ny = 64 k = 10 batchsize = 4

Input image: nx x ny x k x batchsize

X = randn(Float32, nx, ny, k, batchsize) |> gpu

Activation normalization

AN = ActNorm(k; logdet=true) |> gpu

Test invertibility

Y_, logdet = AN.forward(X) ```

Reference

If you use InvertibleNetworks.jl in your research, we would be grateful if you cite us with the following bibtex:

@article{Orozco2024, doi = {10.21105/joss.06554}, url = {https://doi.org/10.21105/joss.06554}, year = {2024}, publisher = {The Open Journal}, volume = {9}, number = {99}, pages = {6554}, author = {Rafael Orozco and Philipp Witte and Mathias Louboutin and Ali Siahkoohi and Gabrio Rizzuti and Bas Peters and Felix J. Herrmann}, title = {InvertibleNetworks.jl: A Julia package for scalable normalizing flows}, journal = {Journal of Open Source Software} }

Papers

The following publications use InvertibleNetworks.jl:

Contributing

We welcome contributions and bug reports! Please see CONTRIBUTING.md for guidance.

InvertibleNetworks.jl development subscribes to the Julia Community Standards.

Authors

  • Rafael Orozco, Georgia Institute of Technology [rorozco@gatech.edu]

  • Philipp Witte, Georgia Institute of Technology (now Microsoft)

  • Gabrio Rizzuti, Utrecht University

  • Mathias Louboutin, Georgia Institute of Technology

  • Ali Siahkoohi, Georgia Institute of Technology

## Acknowledgments

This package uses functions from NNlib.jl, Flux.jl and Wavelets.jl

Owner

  • Name: SLIM GROUP
  • Login: slimgroup
  • Kind: organization
  • Email: Felix.herrmann@gatech.edu
  • Location: Georgia Institute of Technology, USA

Repositories for software by SLIM group

JOSS Publication

InvertibleNetworks.jl: A Julia package for scalable normalizing flows
Published
July 30, 2024
Volume 9, Issue 99, Page 6554
Authors
Rafael Orozco
Georgia Institute of Technology (GT), USA
Philipp Witte
Microsoft Research, USA
Mathias Louboutin
Devito Codes, UK
Ali Siahkoohi
Rice University, USA
Gabrio Rizzuti
Shearwater GeoServices, UK
Bas Peters
Computational Geosciences Inc, Canada
Felix J. Herrmann
Georgia Institute of Technology (GT), USA
Editor
Vincent Knight ORCID
Tags
inverse problems Bayesian inference imaging normalizing flows

Citation (CITATION.bib)

@article{Orozco2024, doi = {10.21105/joss.06554}, url = {https://doi.org/10.21105/joss.06554}, year = {2024}, publisher = {The Open Journal}, volume = {9}, number = {99}, pages = {6554}, author = {Rafael Orozco and Philipp Witte and Mathias Louboutin and Ali Siahkoohi and Gabrio Rizzuti and Bas Peters and Felix J. Herrmann}, title = {InvertibleNetworks.jl: A Julia package for scalable normalizing flows}, journal = {Journal of Open Source Software} }

GitHub Events

Total
  • Watch event: 11
  • Delete event: 4
  • Issue comment event: 5
  • Push event: 4
  • Pull request review comment event: 6
  • Pull request review event: 4
  • Pull request event: 7
  • Fork event: 1
  • Create event: 3
Last Year
  • Watch event: 11
  • Delete event: 4
  • Issue comment event: 5
  • Push event: 4
  • Pull request review comment event: 6
  • Pull request review event: 4
  • Pull request event: 7
  • Fork event: 1
  • Create event: 3

Committers

Last synced: 7 months ago

All Time
  • Total Commits: 445
  • Total Committers: 22
  • Avg Commits per committer: 20.227
  • Development Distribution Score (DDS): 0.674
Past Year
  • Commits: 2
  • Committers: 2
  • Avg Commits per committer: 1.0
  • Development Distribution Score (DDS): 0.5
Top Committers
Name Email Commits
philippwitte p****e@y****m 145
rafaelorozco r****o@g****u 101
Mathias Louboutin m****n@g****m 58
Gabrio Rizzuti r****o@g****m 43
Gabrio Rizzuti g****3@g****u 13
Rafael Orozco r****3@c****u 13
Ali Siahkoohi a****i@g****m 11
Orozco r****3@c****u 11
Ali Siahkoohi a****k@g****u 11
rafael orozco r****o@l****u 8
Rafael Orozco r****3@d****u 6
CompatHelper Julia c****y@j****g 5
Felix Herrmann f****n@g****u 4
rafael orozco r****o@l****u 3
pwitte3 p****3@g****u 3
Páll Haraldsson P****n@g****m 2
PetersBas 1****s@g****m 2
felix f****n@e****a 2
rafael orozco r****o@i****u 1
rafael orozco r****o@i****u 1
Ziyi (Francis) Yin z****n@g****u 1
Grant Bruer g****l@g****m 1

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 27
  • Total pull requests: 94
  • Average time to close issues: 5 months
  • Average time to close pull requests: about 1 month
  • Total issue authors: 19
  • Total pull request authors: 15
  • Average comments per issue: 4.37
  • Average comments per pull request: 0.89
  • Merged pull requests: 68
  • Bot issues: 0
  • Bot pull requests: 13
Past Year
  • Issues: 2
  • Pull requests: 7
  • Average time to close issues: N/A
  • Average time to close pull requests: about 2 hours
  • Issue authors: 2
  • Pull request authors: 4
  • Average comments per issue: 0.0
  • Average comments per pull request: 0.71
  • Merged pull requests: 2
  • Bot issues: 0
  • Bot pull requests: 2
Top Authors
Issue Authors
  • flo-he (3)
  • ziyiyin97 (3)
  • yl4070 (2)
  • sethaxen (2)
  • itsdfish (2)
  • ryxchina (1)
  • alisiahkoohi (1)
  • JuliaTagBot (1)
  • eshantenglish (1)
  • gbruer15 (1)
  • advaitb (1)
  • scheidan (1)
  • rafaelorozco (1)
  • kramsretlow (1)
  • aurorarossi (1)
Pull Request Authors
  • rafaelorozco (39)
  • mloubout (18)
  • github-actions[bot] (15)
  • grizzuti (7)
  • philippwitte (6)
  • alisiahkoohi (6)
  • gbruer15 (4)
  • PetersBas (2)
  • drvinceknight (2)
  • aurorarossi (2)
  • Nando-Hegemann (2)
  • ziyiyin97 (1)
  • jayjay-park (1)
  • PallHaraldsson (1)
  • danielskatz (1)
Top Labels
Issue Labels
bug (1)
Pull Request Labels
enhancement (7) bug (5) dependencies (3) WIP (2) documentation (1)

Packages

  • Total packages: 1
  • Total downloads:
    • julia 10 total
  • Total dependent packages: 0
  • Total dependent repositories: 0
  • Total versions: 21
juliahub.com: InvertibleNetworks

A Julia framework for invertible neural networks

  • Versions: 21
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 10 Total
Rankings
Stargazers count: 7.5%
Forks count: 9.8%
Dependent repos count: 9.9%
Average: 16.6%
Dependent packages count: 38.9%
Last synced: 6 months ago

Dependencies

.github/workflows/CompatHelper.yml actions
.github/workflows/TagBot.yml actions
  • JuliaRegistries/TagBot v1 composite
.github/workflows/cancel.yml actions
  • styfle/cancel-workflow-action 0.4.0 composite
.github/workflows/docs.yml actions
  • actions/checkout v3 composite
  • julia-actions/setup-julia latest composite
.github/workflows/runtests.yml actions
  • actions/checkout v3 composite
  • codecov/codecov-action v1 composite
  • julia-actions/julia-buildpkg latest composite
  • julia-actions/julia-processcoverage v1 composite
  • julia-actions/julia-runtest latest composite
  • julia-actions/setup-julia v1 composite