plt.figure() plt.semilogy(FISTA_alg.objective) plt.title('FISTA Least squares criterion') plt.show() # FISTA can also solve regularised forms by specifying a second function object # such as 1-norm regularisation with choice of regularisation parameter lam: # Create 1-norm function object lam = 1.0 g0 = lam * L1Norm() # Run FISTA for least squares plus 1-norm function. FISTA_alg1 = FISTA() FISTA_alg1.set_up(x_init=x_init, f=f, g=g0) FISTA_alg1.max_iteration = 2000 FISTA_alg1.run(opt['iter']) x_FISTA1 = FISTA_alg1.get_output() plt.figure() plt.imshow(x_FISTA1.array) plt.title('FISTA LS+L1Norm reconstruction') plt.colorbar() plt.show() plt.figure() plt.semilogy(FISTA_alg1.objective) plt.title('FISTA LS+L1norm criterion') plt.show()
axarro[k].imshow(z.as_array()[k], vmin=0, vmax=3500) plt.show() # Using the test data b, different reconstruction methods can now be set up as # demonstrated in the rest of this file. In general all methods need an initial # guess and some algorithm options to be set: x_init = ig.allocate(0.0) opt = {'tol': 1e-4, 'iter': 200} # Create least squares object instance with projector, test data and a constant # coefficient of 0.5. Note it is least squares over all channels: #f = Norm2Sq(Aop,b,c=0.5) f = FunctionOperatorComposition(L2NormSquared(b=b), Aop) # Run FISTA for least squares without regularization FISTA_alg = FISTA() FISTA_alg.set_up(x_init=x_init, f=f, g=ZeroFunction()) FISTA_alg.max_iteration = 2000 FISTA_alg.run(opt['iter']) x_FISTA = FISTA_alg.get_output() # Display reconstruction and criterion ff0, axarrf0 = plt.subplots(1, numchannels) for k in numpy.arange(3): axarrf0[k].imshow(x_FISTA.as_array()[k], vmin=0, vmax=2.5) plt.show() plt.figure() plt.semilogy(FISTA_alg.objective) plt.title('Criterion vs iterations, least squares') plt.show()
pdhg = PDHG() pdhg.set_up(f=f, g=g, operator=operator, tau=tau, sigma=sigma) pdhg.max_iteration = 1000 pdhg.update_objective_interval = 100 pdhg.run(1000, verbose=True) #%% ############################################################################### # Setup and run the FISTA algorithm print("Running FISTA reconstruction") fidelity = FunctionOperatorComposition(L2NormSquared(b=sinogram), Aop) regularizer = ZeroFunction() fista = FISTA() fista.set_up(x_init=x_init, f=fidelity, g=regularizer) fista.max_iteration = 500 fista.update_objective_interval = 100 fista.run(500, verbose=True) #%% Show results plt.figure(figsize=(10, 10)) plt.suptitle('Reconstructions ', fontsize=16) plt.subplot(2, 2, 1) plt.imshow(cgls.get_output().as_array()) plt.colorbar() plt.title('CGLS reconstruction') plt.subplot(2, 2, 2)