From 1f25887e55ae8c7607ca86caf8b5ada1b2cab3a0 Mon Sep 17 00:00:00 2001 From: pilavciy <yusuf-yigit.pilavci@grenoble-inp.fr> Date: Tue, 26 Mar 2024 11:16:53 +0100 Subject: [PATCH] clean up --- denoising-plots/denoised_via_kerreg.pdf | Bin 28303 -> 0 bytes denoising-plots/examples.ipynb | 197 ------------------------ 2 files changed, 197 deletions(-) delete mode 100644 denoising-plots/denoised_via_kerreg.pdf delete mode 100644 denoising-plots/examples.ipynb diff --git a/denoising-plots/denoised_via_kerreg.pdf b/denoising-plots/denoised_via_kerreg.pdf deleted file mode 100644 index c129e230aed54d8196152bf497e39825b3c7b3b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28303 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�&DgL(k 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 diff --git a/denoising-plots/examples.ipynb b/denoising-plots/examples.ipynb deleted file mode 100644 index e9e8b9d..0000000 --- a/denoising-plots/examples.ipynb +++ /dev/null @@ -1,197 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "6db15641", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [], - "text/plain": [ - "<IPython.core.display.HTML object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[36m(pid=3980984)\u001b[0m /usr/lib/python3/dist-packages/scipy/__init__.py:146: UserWarning: A NumPy version >=1.17.3 and <1.25.0 is required for this version of SciPy (detected version 1.26.4\n", - "\u001b[36m(pid=3980984)\u001b[0m warnings.warn(f\"A NumPy version >={np_minversion} and <{np_maxversion}\"\n", - "2024-03-14 15:03:03,729\tWARNING tune.py:186 -- Stop signal received (e.g. via SIGINT/Ctrl+C), ending Ray Tune run. This will try to checkpoint the experiment state one last time. Press CTRL+C (or send SIGINT/SIGKILL/SIGTERM) to skip. \n", - "2024-03-14 15:03:09,319\tWARNING tune.py:1057 -- Experiment has been interrupted, but the most recent state was saved.\n", - "Resume experiment with: Tuner.restore(path=\"/home/ypilavci/ray_results/objective_STIS_2024-03-14_14-56-04\", trainable=...)\n", - "2024-03-14 15:03:15,927\tWARNING experiment_analysis.py:193 -- Failed to fetch metrics for 17 trial(s):\n", - "- objective_STIS_99690_00970: FileNotFoundError('Could not fetch metrics for objective_STIS_99690_00970: both result.json and progress.csv were not found at /home/ypilavci/ray_results/objective_STIS_2024-03-14_14-56-04/objective_STIS_99690_00970_970_beta1=100.0000,beta2=0.0100,lambdaS=0.0000,lambdax=0.0000,sigma2=0.0400,t=ref_ph_8d1a09f1,x=ref_ph__2024-03-14_15-02-55')\n", - "- objective_STIS_99690_00971: FileNotFoundError('Could not fetch metrics for objective_STIS_99690_00971: both result.json and progress.csv were not found at /home/ypilavci/ray_results/objective_STIS_2024-03-14_14-56-04/objective_STIS_99690_00971_971_beta1=10.0000,beta2=0.0100,lambdaS=0.0000,lambdax=0.0000,sigma2=0.0400,t=ref_ph_8d1a09f1,x=ref_ph_a_2024-03-14_15-02-55')\n", - "- objective_STIS_99690_00972: FileNotFoundError('Could not fetch metrics for objective_STIS_99690_00972: both result.json and progress.csv were not found at /home/ypilavci/ray_results/objective_STIS_2024-03-14_14-56-04/objective_STIS_99690_00972_972_beta1=1.0000,beta2=0.0100,lambdaS=0.0000,lambdax=0.0000,sigma2=0.0400,t=ref_ph_8d1a09f1,x=ref_ph_a5_2024-03-14_15-02-55')\n", - "- objective_STIS_99690_00974: FileNotFoundError('Could not fetch metrics for objective_STIS_99690_00974: both result.json and progress.csv were not found at /home/ypilavci/ray_results/objective_STIS_2024-03-14_14-56-04/objective_STIS_99690_00974_974_beta1=0.0100,beta2=0.0100,lambdaS=0.0000,lambdax=0.0000,sigma2=0.0400,t=ref_ph_8d1a09f1,x=ref_ph_a5_2024-03-14_15-02-55')\n", - "- objective_STIS_99690_00976: FileNotFoundError('Could not fetch metrics for objective_STIS_99690_00976: both result.json and progress.csv were not found at /home/ypilavci/ray_results/objective_STIS_2024-03-14_14-56-04/objective_STIS_99690_00976_976_beta1=10.0000,beta2=100.0000,lambdaS=0.0000,lambdax=0.0000,sigma2=0.0400,t=ref_ph_8d1a09f1,x=ref_ph_2024-03-14_15-03-00')\n", - "- objective_STIS_99690_00977: FileNotFoundError('Could not fetch metrics for objective_STIS_99690_00977: both result.json and progress.csv were not found at /home/ypilavci/ray_results/objective_STIS_2024-03-14_14-56-04/objective_STIS_99690_00977_977_beta1=1.0000,beta2=100.0000,lambdaS=0.0000,lambdax=0.0000,sigma2=0.0400,t=ref_ph_8d1a09f1,x=ref_ph__2024-03-14_15-03-00')\n", - "- objective_STIS_99690_00978: FileNotFoundError('Could not fetch metrics for objective_STIS_99690_00978: both result.json and progress.csv were not found at /home/ypilavci/ray_results/objective_STIS_2024-03-14_14-56-04/objective_STIS_99690_00978_978_beta1=0.1000,beta2=100.0000,lambdaS=0.0000,lambdax=0.0000,sigma2=0.0400,t=ref_ph_8d1a09f1,x=ref_ph__2024-03-14_15-03-00')\n", - "- objective_STIS_99690_00980: FileNotFoundError('Could not fetch metrics for objective_STIS_99690_00980: both result.json and progress.csv were not found at /home/ypilavci/ray_results/objective_STIS_2024-03-14_14-56-04/objective_STIS_99690_00980_980_beta1=100.0000,beta2=10.0000,lambdaS=0.0000,lambdax=0.0000,sigma2=0.0400,t=ref_ph_8d1a09f1,x=ref_ph_2024-03-14_15-03-01')\n", - "- objective_STIS_99690_00982: FileNotFoundError('Could not fetch metrics for objective_STIS_99690_00982: both result.json and progress.csv were not found at /home/ypilavci/ray_results/objective_STIS_2024-03-14_14-56-04/objective_STIS_99690_00982_982_beta1=1.0000,beta2=10.0000,lambdaS=0.0000,lambdax=0.0000,sigma2=0.0400,t=ref_ph_8d1a09f1,x=ref_ph_a_2024-03-14_15-03-01')\n", - "- objective_STIS_99690_00983: FileNotFoundError('Could not fetch metrics for objective_STIS_99690_00983: both result.json and progress.csv were not found at /home/ypilavci/ray_results/objective_STIS_2024-03-14_14-56-04/objective_STIS_99690_00983_983_beta1=0.1000,beta2=10.0000,lambdaS=0.0000,lambdax=0.0000,sigma2=0.0400,t=ref_ph_8d1a09f1,x=ref_ph_a_2024-03-14_15-03-01')\n", - "- objective_STIS_99690_00984: FileNotFoundError('Could not fetch metrics for objective_STIS_99690_00984: both result.json and progress.csv were not found at /home/ypilavci/ray_results/objective_STIS_2024-03-14_14-56-04/objective_STIS_99690_00984_984_beta1=0.0100,beta2=10.0000,lambdaS=0.0000,lambdax=0.0000,sigma2=0.0400,t=ref_ph_8d1a09f1,x=ref_ph_a_2024-03-14_15-03-01')\n", - "- objective_STIS_99690_00986: FileNotFoundError('Could not fetch metrics for objective_STIS_99690_00986: both result.json and progress.csv were not found at /home/ypilavci/ray_results/objective_STIS_2024-03-14_14-56-04/objective_STIS_99690_00986_986_beta1=10.0000,beta2=1.0000,lambdaS=0.0000,lambdax=0.0000,sigma2=0.0400,t=ref_ph_8d1a09f1,x=ref_ph_a_2024-03-14_15-03-01')\n", - "- objective_STIS_99690_00987: FileNotFoundError('Could not fetch metrics for objective_STIS_99690_00987: both result.json and progress.csv were not found at /home/ypilavci/ray_results/objective_STIS_2024-03-14_14-56-04/objective_STIS_99690_00987_987_beta1=1.0000,beta2=1.0000,lambdaS=0.0000,lambdax=0.0000,sigma2=0.0400,t=ref_ph_8d1a09f1,x=ref_ph_a5_2024-03-14_15-03-01')\n", - "- objective_STIS_99690_00988: FileNotFoundError('Could not fetch metrics for objective_STIS_99690_00988: both result.json and progress.csv were not found at /home/ypilavci/ray_results/objective_STIS_2024-03-14_14-56-04/objective_STIS_99690_00988_988_beta1=0.1000,beta2=1.0000,lambdaS=0.0000,lambdax=0.0000,sigma2=0.0400,t=ref_ph_8d1a09f1,x=ref_ph_a5_2024-03-14_15-03-01')\n", - "- objective_STIS_99690_00989: FileNotFoundError('Could not fetch metrics for objective_STIS_99690_00989: both result.json and progress.csv were not found at /home/ypilavci/ray_results/objective_STIS_2024-03-14_14-56-04/objective_STIS_99690_00989_989_beta1=0.0100,beta2=1.0000,lambdaS=0.0000,lambdax=0.0000,sigma2=0.0400,t=ref_ph_8d1a09f1,x=ref_ph_a5_2024-03-14_15-03-01')\n", - "- objective_STIS_99690_00990: FileNotFoundError('Could not fetch metrics for objective_STIS_99690_00990: both result.json and progress.csv were not found at /home/ypilavci/ray_results/objective_STIS_2024-03-14_14-56-04/objective_STIS_99690_00990_990_beta1=100.0000,beta2=0.1000,lambdaS=0.0000,lambdax=0.0000,sigma2=0.0400,t=ref_ph_8d1a09f1,x=ref_ph__2024-03-14_15-03-01')\n", - "- objective_STIS_99690_00991: FileNotFoundError('Could not fetch metrics for objective_STIS_99690_00991: both result.json and progress.csv were not found at /home/ypilavci/ray_results/objective_STIS_2024-03-14_14-56-04/objective_STIS_99690_00991_991_beta1=10.0000,beta2=0.1000,lambdaS=0.0000,lambdax=0.0000,sigma2=0.0400,t=ref_ph_8d1a09f1,x=ref_ph_a_2024-03-14_15-03-03')\n" - ] - } - ], - "source": [ - "import numpy as np\n", - "import scipy\n", - "import matplotlib.pyplot as plt\n", - "import quaternion # load the quaternion module\n", - "import bispy as bsp\n", - "import torch\n", - "from utils import STIS,optimize_loop,snr_bivariate,param_search,objective_STIS,objective_KReSP,KReSP,plot_on_sphere\n", - "from ray import tune,init\n", - "import pickle\n", - "\n", - "\n", - "init(num_cpus=16)\n", - "\n", - "## PLOT AN EXAMPLE \n", - "\n", - "np.random.seed(5)\n", - "N = 1024 # length of the signal\n", - "t = np.linspace(0, 2*np.pi/4, N) # time vector\n", - "dt = t[1]-t[0]\n", - "\n", - "# ellipse parameters - AM-FM-PM polarized \n", - "theta1 = np.pi/4 - 2*t\n", - "chi1 = np.pi/16 - t\n", - "phi1 = 0 \n", - "f0 = 25/N/dt \n", - "S0 = bsp.utils.windows.hanning(N)\n", - "\n", - "x_quad = bsp.signals.bivariateAMFM(S0, theta1, chi1, 2*np.pi*f0*t+ phi1)\n", - "x = quaternion.as_float_array(x_quad)[:,:2]\n", - "\n", - "\n", - "bsp.utils.visual.plot3D(t,x_quad)\n", - "plt.savefig(\"clean_sig.pdf\")\n", - "plt.close()\n", - "\n", - "sigma = 0.2\n", - "n = np.zeros([N,4])\n", - "noise_complex = np.random.randn(N,2)\n", - "y = x +sigma*noise_complex\n", - "\n", - "uH = np.imag(scipy.signal.hilbert(noise_complex[:,0]))\n", - "vH = np.imag(scipy.signal.hilbert(noise_complex[:,1]))\n", - "n[:,0] = noise_complex[:,0]\n", - "n[:,1] = noise_complex[:,1]\n", - "n[:,2] = uH\n", - "n[:,3] = vH\n", - "n = quaternion.from_float_array(n)\n", - "y_quad = sigma*n + x_quad # Noisy signal\n", - "\n", - "ax = plt.figure().add_subplot(projection='3d')\n", - "# ax.view_init(15,-135,0)\n", - "plt.title(\"Normalized Stokes Parameters\")\n", - "plt.tight_layout()\n", - "plot_on_sphere(y_quad,ax,label=\"noisy signal\",t=t,scatter=True)\n", - "plot_on_sphere(x_quad,ax,label=\"original signal\",scatter=False)\n", - "\n", - "plt.legend()\n", - "plt.tight_layout()\n", - "plt.savefig(\"noisy_sig_sphere.pdf\")\n", - "plt.close()\n", - "\n", - "bsp.utils.visual.plot3D(t,y_quad)\n", - "plt.savefig(\"noisy_sig.pdf\")\n", - "\n", - "\n", - "print(\"sigma: \" + str(sigma) + \" Noise SNR: \"+ str(snr_bivariate(x,y) ) )\n", - "search_space = {\"x\":tune.grid_search([x]),\"t\":tune.grid_search([t]),\"y\":tune.grid_search([y]),\"lambdax\": tune.grid_search((0.1)**np.linspace(5,15,7)), \"lambdaS\": tune.grid_search((0.1)**np.linspace(5,10,7)) , \"beta1\":tune.grid_search((0.10)**np.linspace(-2,2,5)),\"beta2\":tune.grid_search((0.10)**np.linspace(-2,2,5)),\"sigma2\":tune.grid_search([sigma**2])}\n", - "config = param_search(objective_STIS,search_space)\n", - "model = STIS(t,y,lambdax=config[\"lambdax\"],lambdaS=config[\"lambdaS\"],beta1=config[\"beta1\"],beta2=config[\"beta2\"],sigma2=sigma**2,p=2)\n", - "optimizer = torch.optim.Adam(model.parameters(), lr=0.01)\n", - "model = optimize_loop(model,optimizer,numit=1000)\n", - "\n", - "x_stis = quaternion.from_float_array(model.Xquad.detach().numpy())\n", - "bsp.utils.visual.plot2D(t,x_stis)\n", - "plt.savefig(\"denoised_via_all_terms.pdf\")\n", - "\n", - "print(\"sigma: \" + str(sigma) + \" STIS SNR: \"+ str(snr_bivariate(x,model.X.detach().numpy())))\n", - "\n", - "\n", - "# NO STOKES REGULARIZATION \n", - "search_space = {\"x\":tune.grid_search([x]),\"t\":tune.grid_search([t]),\"y\":tune.grid_search([y]),\"lambdax\": tune.grid_search((0.1)**np.linspace(5,15,7)), \"lambdaS\":tune.grid_search([0.0]) , \"beta1\":tune.grid_search([0.0]),\"beta2\":tune.grid_search([0.0]),\"sigma2\":tune.grid_search([sigma**2])}\n", - "config = param_search(objective_STIS,search_space)\n", - "model = STIS(t,y,lambdax=config[\"lambdax\"],lambdaS=config[\"lambdaS\"],beta1=config[\"beta1\"],beta2=config[\"beta2\"],sigma2=sigma**2,p=2)\n", - "optimizer = torch.optim.Adam(model.parameters(), lr=0.01)\n", - "model = optimize_loop(model,optimizer,numit=1000)\n", - "\n", - "print(\"sigma: \" + str(sigma) + \" STIS SNR: \"+ str((snr_bivariate(x,model.X.detach().numpy()))))\n", - "x_nostokes = quaternion.from_float_array(model.Xquad.detach().numpy())\n", - "bsp.utils.visual.plot2D(t,x_nostokes)\n", - "plt.savefig(\"denoised_via_no_stokes.pdf\")\n", - "\n", - "# ONLY SMOOTH STOKES\n", - "search_space = {\"x\":tune.grid_search([x]),\"t\":tune.grid_search([t]),\"y\":tune.grid_search([y]),\"lambdax\": tune.grid_search([0.0]), \"lambdaS\": tune.grid_search((0.1)**np.linspace(5,10,7)) , \"beta1\":tune.grid_search((0.1)**np.linspace(-2,2,7)),\"beta2\":tune.grid_search((0.1)**np.linspace(-2,2,5)),\"sigma2\":tune.grid_search([sigma**2])}\n", - "config = param_search(objective_STIS,search_space)\n", - "model = STIS(t,y,lambdax=config[\"lambdax\"],lambdaS=config[\"lambdaS\"],beta1=config[\"beta1\"],beta2=config[\"beta2\"],sigma2=sigma**2,p=2)\n", - "optimizer = torch.optim.Adam(model.parameters(), lr=0.01)\n", - "model = optimize_loop(model,optimizer,numit=1000)\n", - "x_onlystokes = quaternion.from_float_array(model.Xquad.detach().numpy())\n", - "bsp.utils.visual.plot2D(t,x_onlystokes)\n", - "plt.savefig(\"denoised_via_no_signal_smoother.pdf\")\n", - "\n", - "print(\"sigma: \" + str(sigma) + \" STIS SNR: \"+ str((snr_bivariate(x,model.X.detach().numpy()))))\n", - "\n", - "# Kernel regression on normalized \n", - "search_space = {\"x\":tune.grid_search([x]),\"t\":tune.grid_search([t]),\"y\":tune.grid_search([y]),\"alpha\": tune.grid_search((0.1)**np.linspace(5,15,5)),\"lambda_1\": tune.grid_search((0.1)**np.linspace(5,15,5)), \"lambda_s\": tune.grid_search((0.1)**np.linspace(5,10,5)) , \"beta\":tune.grid_search((0.10)**np.linspace(-2,2,5)),\"gamma\":tune.grid_search((0.1)**np.linspace(0,1,5)),\"sigma2\":tune.grid_search([sigma**2])}\n", - "config = param_search(objective_KReSP,search_space)\n", - "model = KReSP(t,y,lambda_1=config[\"lambda_1\"],beta=config[\"beta\"],lambda_s=config[\"lambda_s\"],alpha=config[\"alpha\"],gamma=config[\"gamma\"],eps=10**-7,win_width=64,sigma2=sigma**2)\n", - "optimizer = torch.optim.Adam(model.parameters(), lr=0.01)\n", - "model = optimize_loop(model,optimizer,numit=300)\n", - "\n", - "\n", - "print(\"sigma: \" + str(sigma) + \" KReSP SNR: \"+ str(snr_bivariate(x,model.X.detach().numpy())))\n", - "x_kerreg = quaternion.from_float_array(model.Xquad.detach().numpy())\n", - "bsp.utils.visual.plot2D(t,x_kerreg)\n", - "plt.savefig(\"denoised_via_kerreg.pdf\")\n", - "\n", - "with open('example.pkl', 'wb') as f:\n", - "\tpickle.dump(x,f)\n", - "\tpickle.dump(y,f)\n", - "\tpickle.dump(x_stis,f)\n", - "\tpickle.dump(x_nostokes,f)\n", - "\tpickle.dump(x_onlystokes,f)\n", - "\tpickle.dump(x_kerreg,f)\n" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.12" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} -- GitLab