pylops.optimization.cls_sparsity.FISTA

class pylops.optimization.cls_sparsity.FISTA(Op, callbacks=None)[source]

Fast Iterative Shrinkage-Thresholding Algorithm (FISTA).

Solve an optimization problem with \(L_p, \; p=0, 0.5, 1\) regularization, given the operator Op and data y. The operator can be real or complex, and should ideally be either square \(N=M\) or underdetermined \(N<M\).

Parameters:
Op : pylops.LinearOperator

Operator to invert

Raises:
NotImplementedError

If threshkind is different from hard, soft, half, soft-percentile, or half-percentile

ValueError

If perc=None when threshkind is soft-percentile or half-percentile

See also

OMP
Orthogonal Matching Pursuit (OMP).
ISTA
Iterative Shrinkage-Thresholding Algorithm (ISTA).
SPGL1
Spectral Projected-Gradient for L1 norm (SPGL1).
SplitBregman
Split Bregman for mixed L2-L1 norms.

Notes

Solves the following synthesis problem for the operator \(\mathbf{Op}\) and the data \(\mathbf{y}\):

\[J = \|\mathbf{y} - \mathbf{Op}\,\mathbf{x}\|_2^2 + \epsilon \|\mathbf{x}\|_p\]

or the analysis problem:

\[J = \|\mathbf{y} - \mathbf{Op}\,\mathbf{x}\|_2^2 + \epsilon \|\mathbf{SOp}^H\,\mathbf{x}\|_p\]

if SOp is provided.

The Fast Iterative Shrinkage-Thresholding Algorithm (FISTA) [1] is used, where \(p=0, 0.5, 1\). This is a modified version of ISTA solver with improved convergence properties and limited additional computational cost. Similarly to the ISTA solver, the choice of the thresholding algorithm to apply at every iteration is based on the choice of \(p\).

[1]Beck, A., and Teboulle, M., “A Fast Iterative Shrinkage-Thresholding Algorithm for Linear Inverse Problems”, SIAM Journal on Imaging Sciences, vol. 2, pp. 183-202. 2009.

Methods

__init__(Op[, callbacks]) Initialize self.
callback(x, *args, **kwargs) Callback routine
finalize([show]) Finalize solver
run(x[, niter, show, itershow]) Run solver
setup(y[, x0, niter, SOp, eps, alpha, …]) Setup solver
solve(y[, x0, niter, SOp, eps, alpha, …]) Run entire solver
step(x, z[, show]) Run one step of solver
step(x, z, show=False)[source]

Run one step of solver

Parameters:
x : np.ndarray

Current model vector to be updated by a step of ISTA

x : np.ndarray

Current auxiliary model vector to be updated by a step of ISTA

show : bool, optional

Display iteration log

Returns:
x : np.ndarray

Updated model vector

z : np.ndarray

Updated auxiliary model vector

xupdate : float

Norm of the update

run(x, niter=None, show=False, itershow=[10, 10, 10])[source]

Run solver

Parameters:
x : np.ndarray

Current model vector to be updated by multiple steps of CG

niter : int, optional

Number of iterations. Can be set to None if already provided in the setup call

show : bool, optional

Display logs

itershow : list, optional

Display set log for the first N1 steps, last N2 steps, and every N3 steps in between where N1, N2, N3 are the three element of the list.

Returns:
x : np.ndarray

Estimated model of size \([M \times 1]\)

Examples using pylops.optimization.cls_sparsity.FISTA