Bound propagation
Linear and interval bound propagation in Pytorch with easy-to-use API, GPU support, and heavy parallization. Initially made as an alternative to the original CROWN implementation which featured only Numpy, lots of for-loops, and a cumbersome API.
To install:
pip install bound-propagation
Supported bound propagation methods:
For the examples below assume the following network definition:
from torch import nn
from bound_propagation import BoundModelFactory, HyperRectangle
class Network(nn.Sequential):
def __init__(self, *args):
if args:
# To support __get_index__ of nn.Sequential when slice indexing
# CROWN (and implicitly CROWN-IBP) is doing this underlying
super().__init__(*args)
else:
in_size = 30
classes = 10
super().__init__(
nn.Linear(in_size, 16),
nn.Tanh(),
nn.Linear(16, 16),
nn.Tanh(),
nn.Linear(16, classes)
)
net = Network()
factory = BoundModelFactory()
net = factory.build(net)
The method also works with nn.Sigmoid and nn.ReLU, and the three custom layers Residual, Cat, and Parallel.
Interval bounds
To get interval bounds for either IBP, CROWN, or CROWN-IBP:
x = torch.rand(100, 30)
epsilon = 0.1
input_bounds = HyperRectangle.from_eps(x, epsilon)
ibp_bounds = net.ibp(input_bounds)
crown_bounds = net.crown(input_bounds).concretize()
crown_ibp_bounds = net.crown(input_bounds).concretize()
Linear bounds
To get linear bounds for either CROWN or CROWN-IBP:
x = torch.rand(100, 30)
epsilon = 0.1
input_bounds = HyperRectangle.from_eps(x, epsilon)
crown_bounds = net.crown(input_bounds)
crown_ibp_bounds = net.crown(input_bounds)
Authors
- Frederik Baymler Mathiesen - PhD student @ TU Delft
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bound_propagation-0.2.7.tar.gz.
File metadata
- Download URL: bound_propagation-0.2.7.tar.gz
- Upload date:
- Size: 23.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.8.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
92dceb113319109131664850ed656ca1df5d905b80bef385011c6cff80e9ac97
|
|
| MD5 |
c4de7c5ad077b783b2c1b6b79bb4ebc9
|
|
| BLAKE2b-256 |
aede2bb3d738ca157c8e0fe647120400b2e49fd29fabd773956220e6e1fc05b0
|
File details
Details for the file bound_propagation-0.2.7-py3-none-any.whl.
File metadata
- Download URL: bound_propagation-0.2.7-py3-none-any.whl
- Upload date:
- Size: 26.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.8.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
81249f8719fa43e5c56ad375dc143ee1c67b47fdc7648f7a4cb79fa60bc9374a
|
|
| MD5 |
e86b1abe61651646e5bfb4e4f5e25f84
|
|
| BLAKE2b-256 |
b02717174db63049cc8d2a112465f8158e7d480e46c9b1b0bde60328f6b64ecb
|