Closed fzimmermann89 closed 1 month ago
Thanks for summarizing this.
Just to explain a little bit more in detail why I don't like the first variant.
As far as I got it, we looked up the iterative SENSE paper and there, no regularization is used. Since setting \lambda> 0 is more general, I would instead have a RegularizedIterativeSENSE
class, for which you can set \lambda=0
, T=Id
and reg=None
.
I just find it unintuitive to have IterativeSENSE (whose name historically suggests that it solves 1/2 * ||Ax-y||_2^2
) that is able to solve 1/2 * ||Ax-y||_2^2 + \lambda/2 * ||Tx - reg||_2^2
, while having RegularizedIterativeSENSE
that is also able to solve IterativeSENSE
makes more sense to me.
So my opinion is to either have Only the RegularizedIterativeSENSE
or two separate RegularizedIterativeSENSE
and IterativeSENSE
, instead of only IterativeSENSE
.
No strong opinion here, but I kind of agree with @koflera and would vote for two separate classes IterativeSENSE
and RegularizedIterativeSENSE
. But like I said: I don't care to much 😁
Final decision: IterativeSENSE
with comment that RegularizedIterativeSENSE
is available and only has init with lamba = 0
Should Iterative sense have regularization parameters in the
__call__
? Or, alternatively, should this be a separate Reconstruction class, called RegularizedIterativeSENSE?@fzimmermann89 and @ckolbPTB were in #287 for adding the parameters and keeping the name IterativeSENSE.
@koflera suggested a different class for this, as it is a different type of reconstruction.
My suggestions would be to allow in
__call__
to provide a lambda (defaults to 0) and a x_reg (default to None) If lambda>0, it is tikonov regularization with lambda||x||^2, if x_reg is also set, it performs lambda||x-x_reg||^2 The additional code in the reconstruction is minimal and would avoid having to duplicate much of the existing code.A separate class would mainly copy the same stuff. If you want to, you could have a IterativeSense inheriting from RegularizedIterativeSense and setting lambda to 0... But having a separate class for this seems overkill imho.
Do you have any other opinions?