boundlab.expr.LpEpsilon#
- class boundlab.expr.LpEpsilon[source]#
Bases:
ExprA noise symbol bounded by the \(\ell_p\)-norm constraint.
Represents a perturbation variable \(\boldsymbol{\epsilon}\) satisfying:
\[\|\boldsymbol{\epsilon}\|_p \leq 1\]During backward propagation with direction
"<="or">=", the contribution is \(\pm\|\mathbf{w}\|_q\) where \(\mathbf{w}\) is the materialized weight tensor and \(q\) is the dual norm of \(p\) defined by \(\frac{1}{p} + \frac{1}{q} = 1\).Only
EinsumOpweights are supported.Methods
Compute the dual-norm bound contribution.
Compute the width of the bounds for this expression.
Compute the center of the bounds for this expression.
Return the concrete tensor if self is a pure constant expression, else None.
Recursively compute Jacobian ops for affine expressions.
Compute a lower bound for this expression.
Return string representation with child strings substituted.
Compute an upper bound for this expression.
Compute both an upper bound and a lower bound for this expression.
Return a new expression with the same type and flags but new children.
- property shape: torch.Size#
The shape of the output(s) produced by this expression.
- backward(weights, direction)[source]#
Compute the dual-norm bound contribution.
- Parameters:
- Returns:
(±norm, [])orNonefor"==".- Return type:
tuple[torch.Tensor, list] | None
- __add__(other)#
- __mul__(other)#
Element-wise multiplication (no broadcast).
- bound_width()#
Compute the width of the bounds for this expression.
- center()#
Compute the center of the bounds for this expression.
- diag(diagonal=0)#
- expand(*sizes)#
- flatten(start_dim=0, end_dim=-1)#
- flip(dims)#
- gather(indices)#
- get_const()#
Return the concrete tensor if self is a pure constant expression, else None.
Works for
ConstValand anyAffineSumthat has no symbolic children.
- jacobian_ops_()#
Recursively compute Jacobian ops for affine expressions.
- lb()#
Compute a lower bound for this expression.
- narrow(dim, start, length)#
- permute(*dims)#
- repeat(*sizes)#
- reshape(*shape)#
- roll(shifts, dims)#
- scatter(indices, output_shape)#
- squeeze(dim=None)#
- tile(*sizes)#
- transpose(dim0, dim1)#
- ub()#
Compute an upper bound for this expression.
- ublb()#
Compute both an upper bound and a lower bound for this expression.
- unflatten(dim, sizes)#
- unsqueeze(dim)#
- zeros_set(output_shape)#