L12Prior#
- class deepinv.optim.L12Prior(*args, l2_axis=-1, **kwargs)[source]#
Bases:
Prior
\(\ell_{1,2}\) prior \(\reg{x} = \sum_i\| x_i \|_2\).
The \(\ell_2\) norm is computed over a tensor axis that can be defined by the user. By default,
l2_axis=-1
.- Parameters:
l2_axis (int) – dimension in which the \(\ell_2\) norm is computed.
- Examples:
>>> import torch >>> from deepinv.optim import L12Prior >>> seed = torch.manual_seed(0) # Random seed for reproducibility >>> x = torch.randn(2, 1, 3, 3) # Define random 3x3 image >>> prior = L12Prior() >>> prior.fn(x) tensor([5.4949, 4.3881]) >>> prior.prox(x) tensor([[[[-0.4666, -0.4776, 0.2348], [ 0.3636, 0.2744, -0.7125], [-0.1655, 0.8986, 0.2270]]], [[[-0.0000, -0.0000, 0.0000], [ 0.7883, 0.9000, 0.5369], [-0.3695, 0.4081, 0.5513]]]])
- fn(x, *args, **kwargs)[source]#
Computes the regularizer \(\reg{x} = \sum_i\| x_i \|_2\).
- Parameters:
x (torch.Tensor) – Variable \(x\) at which the prior is computed.
- Returns:
(torch.Tensor) prior \(\reg{x}\).
- prox(x, *args, gamma=1.0, **kwargs)[source]#
Calculates the proximity operator of the \(\ell_{1,2}\) function at \(x\).
More precisely, it computes
\[\operatorname{prox}_{\gamma g}(x) = (1 - \frac{\gamma}{max{\Vert x \Vert_2,\gamma}}) x\]where \(\gamma\) is a stepsize.
- Parameters:
x (torch.Tensor) – Variable \(x\) at which the proximity operator is computed.
gamma (float) – stepsize of the proximity operator.
l2_axis (int) – axis in which the l2 norm is computed.
- Return torch.Tensor:
proximity operator at \(x\).