optim.FISTA

optim.FISTA#

class bartorch.optim.FISTA#

Bases: IST

Fast iterative soft thresholding, looping FISTABlock.

Solves \(\min_x \tfrac12 \| A x - y \|^2 + g(x)\) with Nesterov momentum.

Parameters:
  • regularizers (Regularizer or ImplicitPrior, default=None) – The single term \(g\); its transform must be the identity.

  • maxiter (int, default=30) – Number of iterations.

  • step (float, default=0.95) – Step size \(\tau\) of the gradient step.

  • eigen (bool, default=False) – Divide the step by maxeigen() of the normal operator.

  • hogwild (bool, default=False) – Halve the step after 10 iterations, and again after each further 20, 40, … iterations.

  • pqr (tuple of float, default=None) – \((p, q, r)\) of the momentum update \(t_{k+1} = (p + \sqrt{q + r t_k^2}) / 2\); None is BART’s (1, 1, 4).

  • cclambda (float, default=0.0) – Weight of an identity added to the normal operator.

  • precond (LinearOperator, default=None) – Left preconditioner \(M\) from A.ishape to itself, positive definite (lsqr2_create’s precond_op); BART’s reconstructions use none.

Raises:
  • ValueError – Not exactly one term; at the call, a term whose transform is not the identity.

  • TypeError – A term with auxiliary variables.

Examples

>>> fista = optim.FISTA(priors.Wavelet((-1, -2), 0.01), maxiter=50)
>>> x = fista(kspace, A)
>>> x = fista(kspace, A, x0=x)                # warm start

A term over a transform is refused, since the iteration is not given the transform:

>>> optim.FISTA(priors.TotalVariation((-1, -2), 0.01))(kspace, A)
Traceback (most recent call last):
    ...
ValueError: FISTA applies the proximal operator to the image, ...

Also has the methods and properties of IST.

Examples using FISTA#

6. Custom encoding and solver

6. Custom encoding and solver