LION.optimizers.Sparse2InverseSolver

Classes

Sparse2InverseSolver(model, optimizer, loss_fn)

Sparse2Inverse: the measurements are split into sino_split_count interleaved parts (for CT, every k-th angle).


class LION.optimizers.Sparse2InverseSolver.Sparse2InverseSolver(model, optimizer, loss_fn, operator_params=None, solver_params=None, model_regularization=None, scheduler=None, scheduler_step='epoch', verbose=1, device=None, seed=0, deterministic=False)[source]

Bases: LIONsolver

Sparse2Inverse: the measurements are split into sino_split_count interleaved parts (for CT, every k-th angle). The model’s input is the mean reconstruction of input_split_count parts (recon_fn, by default the operator’s default reconstruction), and its output, projected by the operator of the other parts, is compared to their measurements.

Works with any operator whose parameters can be split (OperatorParameters.split); others raise when the solver is made.

Every solver takes (model, optimizer, loss_fn, operator_params, solver_params, model_regularization, scheduler, scheduler_step, verbose, device, seed, deterministic), in that order (ARSolver has no loss_fn).

operator_params: the parameters of the operator (for CT, the geometry); the model’s, if it has them.

solver_params: the solver’s settings, from default_parameters().

model_regularization: None, or a term added to the training loss of every mini-batch, model_regularization(model, step): a penalty on the model’s weights (step unused) or on what it does with the mini-batch (e.g. LION.losses.jacobian_penalty). step has input (what the model was given), output, target (what the output is compared with; None for solvers without one) and forward (the model as the solver calls it, e.g. with the noise level). Recorded as loss_fn is.

scheduler: a torch learning-rate scheduler made on optimizer (e.g. torch.optim.lr_scheduler.StepLR(optimizer, 30)), or None. It steps after every epoch (scheduler_step="epoch", torch’s convention) or every mini-batch ("batch", e.g. for OneCycleLR). ReduceLROnPlateau steps with the validation value of the epochs that validate, or with the training loss when there is no validation. Its state is saved in checkpoints, and the training record has it and the learning rate of every epoch.

seed: the training seed. When training starts, torch (CPU and CUDA), numpy and Python’s random are seeded with it, so the same solver, model and data give the same training, and checkpoints keep the random state, so a resumed run continues the same way. The randomness within a run (shuffling, noise a solver adds) still changes every batch and epoch. Two runs with the same seed give the same model: use different seeds for an ensemble. None: unseeded.

deterministic: use only deterministic algorithms (torch’s use_deterministic_algorithms, deterministic cuDNN), so that on a GPU two runs with the same seed give exactly the same model, and a resumed run the uninterrupted one. Slower; a few operations then raise (torch names them). It applies to the whole program from here on. Off, GPU runs with the same seed differ slightly (e.g. ~1e-3 in the weights after a few epochs). On a GPU it needs CUBLAS_WORKSPACE_CONFIG=:4096:8 before cuBLAS starts: it is set here if it isn’t (exporting it before the script is surer).

verbose: how much progress is shown. 0: nothing; 1 (default): one progress bar for training (every mini-batch of every epoch, with the epoch, the loss, the last validation value and the time left) and one for testing; 2: also the validation bars and messages (each epoch’s losses, checkpoints, the seed). True is 1, False 0.

static input_combinations(sino_split_count, input_split_count=2)[source]

All combinations of input_split_count of the sino_split_count splits, e.g. (0, 1), (0, 2), … for 2 of 4.

static default_parameters()[source]

sino_split_count (k): the number of interleaved splits (4); input_split_count (p): how many splits’ reconstructions are averaged into one input (2); recon_fn: how each split is reconstructed (“default”: the operator’s default reconstruction).

mini_batch_step(y, targets)[source]

The loss: for each group of input_split_count splits, the model’s output on their mean reconstruction, projected onto the other splits’ measurements, against those measurements (mean squared error; targets aren’t used: self-supervised).

reconstruct(y)[source]

The model’s reconstructions of the measurements y: the mean of its outputs on each group of splits.

static cite(cite_format='bib')[source]

Where Sparse2Inverse comes from: its citation, BibTeX (“bib”) or “MLA”.