-
Notifications
You must be signed in to change notification settings - Fork 106
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
FISTA for tomographic reconstruction #1610
Comments
It might be a bit confusing, but one must define f to be a regularizer and g to be data discrepancy, see and also this example https://github.com/odlgroup/odl/blob/master/examples/solvers/proximal_gradient_wavelet_tomography.py |
Thanks for getting back to me! Soon after posting my question I realized this and made the edit accordingly (not sure if you can see the edit). I have looked at the proximal gradient wavelet tomography example and ran it but I don't seem to be able to get essentially the same thing to work without the wavelet operator (so just || Ax-f ||_2^2 + Tv(x), where A is the ray_trafo operator defined using Astra). Could you let me know if I am defining my data discrepancy/ TV operators wrong somehow? |
Why not using regularizer = reg_param * odl.solvers.L1Norm(grad.range)*grad ? |
I tried that but it still gives me the same "not implemented" error: Traceback (most recent call last): |
Right, the proximal is not implemented for the composition of l1 and gradient. This is because there is no closed form formula for that. If you want to do TV regularization, you have to apply another optimization algorithm, for instance, ADMM: https://github.com/odlgroup/odl/blob/master/examples/solvers/admm_tomography.py |
ok, so then there's no proximal for TV I guess - thank you for the help! :) |
Hello, I am trying to perform FISTA reconstruction but the f_prox = f.proximal(gamma) line in proximal_gradient_solvers.py throws me an error because (I guess) my regularizer functional f falls into the "functional(operator)" class (in functional.py) which is not implemented. Am I not defining something correctly?
My data discrepancy functional g (||A(x) - sino||^2_2) is defined as follows (based on some other odl examples):
and the regularizer f (TV(x)) as follows:
(I also tried:
but that gave the same result)
and then calling the solver with:
The text was updated successfully, but these errors were encountered: