boundlab.zono.tanh_linearizer#

boundlab.zono.tanh_linearizer(expr)[source]#

Minimal-area tanh relaxation (DeepT, Section 4.4).

y = lambda*x + mu + beta*eps_new lambda = min(sech^2(l), sech^2(u)) = min(1-tanh^2(l), 1-tanh^2(u)) mu = 0.5*(tanh(u) + tanh(l) - lambda*(u + l)) beta = 0.5*(tanh(u) - tanh(l) - lambda*(u - l))

Examples

>>> import torch
>>> import boundlab.expr as expr
>>> from boundlab.zono.tanh import tanh_linearizer
>>> x = expr.ConstVal(torch.tensor([0.0])) + expr.LpEpsilon([1])
>>> b = tanh_linearizer(x)
>>> b.bias.shape
torch.Size([1])