{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# ANN Model creation and testing\n", "\n", "## Contents\n", "\n", "1. Training data generation\n", "2. ANN model training and testing\n", "3. Implementation of the model in GWSNR" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# # If you have not installed the following packages, please uncomment and run the following command:\n", "# !pip install ler" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Training data generation\n", "\n", "* The training data is generated using [ler](https://ler.readthedocs.io/en/latest/) package.\n", "* Data needs to be trained for each detector separately.\n", "* I will choose 'L1' detector for this notebook with the following specified parameters:\n", " * Sampling frequency : 2048 Hz\n", " * waveform approximant : IMRPhenomXPHM\n", " * minimum frequency : 20.0\n", " * psd : aLIGO_O4_high_asd.txt from `pycbc` package" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from ler.utils import TrainingDataGenerator" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "tdg = TrainingDataGenerator(\n", " npool=8, # number of processes\n", " verbose=False, # set it to True if you are running the code for the first time\n", " # GWSNR parameters\n", " sampling_frequency=2048.,\n", " waveform_approximant='IMRPhenomXPHM', # spin-precessing waveform model\n", " minimum_frequency=20.,\n", " psds={'L1':'aLIGO_O4_high_asd.txt'}, # chosen interferometer is 'L1'. If multiple interferometers are chosen, optimal network SNR will be considered.\n", " spin_zero=False,\n", " spin_precessing=True,\n", " snr_method='inner_product', # 'interpolation' or 'inner_product'\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* `ler` package, by default, generates astrophysical signals that most likely will not be detected by the detector, i.e. low SNR signals.\n", "\n", "* But you want your ANN model to be sensitive to the signals that near the detection threshold.\n", "\n", "* So, I will generate most of the training data with SNR near the detection threshold.\n", "\n", "**Note:** Increase sample size of the training data to get better accuracy in the ANN model." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Initializing GWRATES class...\n", "\n", "current size of the json file: 1197\n", "\n", "total event to collect: 10000\n", "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 369/369 [00:00<00:00, 378.22it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 1485\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 378/378 [00:00<00:00, 398.39it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 1773\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 314/314 [00:00<00:00, 354.46it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 2043\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 423/423 [00:01<00:00, 399.50it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 2412\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 338/338 [00:00<00:00, 362.23it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 2691\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 454/454 [00:01<00:00, 409.53it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 3006\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 449/449 [00:01<00:00, 400.76it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 3348\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 279/279 [00:00<00:00, 348.12it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 3582\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 396/396 [00:01<00:00, 374.89it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 3915\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 387/387 [00:00<00:00, 402.89it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 4257\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 395/395 [00:01<00:00, 383.34it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 4545\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 377/377 [00:01<00:00, 366.50it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 4833\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 377/377 [00:00<00:00, 389.85it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 5166\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 396/396 [00:01<00:00, 389.59it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 5472\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 405/405 [00:01<00:00, 378.78it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 5769\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 387/387 [00:01<00:00, 382.65it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 6138\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 259/259 [00:00<00:00, 339.38it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 6336\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 315/315 [00:00<00:00, 353.23it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 6588\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 378/378 [00:01<00:00, 363.57it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 6849\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 297/297 [00:00<00:00, 342.76it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 7092\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 305/305 [00:00<00:00, 361.80it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 7317\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 332/332 [00:00<00:00, 376.09it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 7560\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 377/377 [00:00<00:00, 388.24it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 7875\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 306/306 [00:00<00:00, 348.02it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 8127\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 421/421 [00:01<00:00, 394.64it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 8424\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 377/377 [00:01<00:00, 371.58it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 8775\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 432/432 [00:01<00:00, 393.02it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 9144\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 304/304 [00:00<00:00, 334.92it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 9396\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 466/466 [00:01<00:00, 438.22it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 9765\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 369/369 [00:00<00:00, 390.73it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 10098\n", "final size: 10098\n", "\n", "json file saved at: ./ler_data/IMRPhenomXPHM_O4_high_asd_L1_1.json\n", "\n" ] } ], "source": [ "# rerun if hanged\n", "ler = tdg.gw_parameters_generator(\n", " size=10000, # number of samples to generate\n", " batch_size=400000, # reduce this number if you have memory issues\n", " snr_recalculation=True, # pick SNR generated with 'interpolation'; recalculate SNR using 'inner product'\n", " trim_to_size=False, verbose=True,\n", " data_distribution_range = [0., 2., 4., 6., 8., 10., 12., 14., 16., 100.], # equal data samples will be distributed in these ranges\n", " replace=False, # set to True if you want to replace the existing data\n", " output_jsonfile=\"IMRPhenomXPHM_O4_high_asd_L1_1.json\",\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Initializing GWRATES class...\n", "\n", "total event to collect: 5000\n", "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 438/438 [00:01<00:00, 426.01it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 376\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 494/494 [00:01<00:00, 444.68it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 816\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 480/480 [00:01<00:00, 417.20it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 1224\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 464/464 [00:01<00:00, 409.93it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 1630\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 482/482 [00:01<00:00, 392.78it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 2060\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 470/470 [00:01<00:00, 387.19it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 2460\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 472/472 [00:01<00:00, 412.21it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 2856\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 470/470 [00:01<00:00, 423.07it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 3272\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 530/530 [00:01<00:00, 430.88it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 3712\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 438/438 [00:01<00:00, 405.48it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 4092\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 486/486 [00:01<00:00, 419.60it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 4516\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 466/466 [00:01<00:00, 379.73it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 4922\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████| 498/498 [00:01<00:00, 441.36it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 5362\n", "final size: 5362\n", "\n", "json file saved at: ./ler_data/IMRPhenomXPHM_O4_high_asd_L1_2.json\n", "\n" ] } ], "source": [ "# might take 2mins~3mins\n", "# 10 mins 0.7 s, 10000 samples with 8 processes and batch_size=200000 \n", "tdg.gw_parameters_generator(\n", " size=5000, \n", " batch_size=200000, \n", " snr_recalculation=True,\n", " trim_to_size=False, verbose=True, \n", " data_distribution_range = [4., 8., 12.], # equal data samples will be distributed in these ranges\n", " replace=False,\n", " output_jsonfile=\"IMRPhenomXPHM_O4_high_asd_L1_2.json\",\n", ")" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Initializing GWRATES class...\n", "\n", "total event to collect: 10000\n", "\n", "final size: 10000\n", "\n", "json file saved at: ./ler_data/IMRPhenomXPHM_O4_high_asd_L1_3.json\n", "\n" ] } ], "source": [ "tdg.gw_parameters_generator(\n", " size=10000,\n", " batch_size=10000, \n", " snr_recalculation=True,\n", " trim_to_size=False, \n", " verbose=False, \n", " data_distribution_range = None,\n", " replace=True,\n", " output_jsonfile=\"IMRPhenomXPHM_O4_high_asd_L1_3.json\",\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Additional random samples" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Initializing GWSNR class...\n", "\n", "Intel processor has trouble allocating memory when the data is huge. So, by default for IMRPhenomXPHM, duration_max = 64.0. Otherwise, set to some max value like duration_max = 600.0 (10 mins)\n", "\n", "Chosen GWSNR initialization parameters:\n", "\n", "npool: 8\n", "snr type: inner_product\n", "waveform approximant: IMRPhenomXPHM\n", "sampling frequency: 2048.0\n", "minimum frequency (fmin): 20.0\n", "mtot=mass1+mass2\n", "min(mtot): 9.96\n", "max(mtot) (with the given fmin=20.0): 235.0\n", "detectors: ['L1']\n", "psds: [PowerSpectralDensity(psd_file='None', asd_file='/Users/phurailatpamhemantakumar/anaconda3/envs/ler/lib/python3.10/site-packages/bilby/gw/detector/noise_curves/aLIGO_O4_high_asd.txt')]\n", "\n", "\n" ] } ], "source": [ "from gwsnr import GWSNR\n", "import numpy as np\n", "\n", "gwsnr = GWSNR(\n", " npool=8, # number of processes\n", " # GWSNR parameters\n", " sampling_frequency=2048.,\n", " waveform_approximant='IMRPhenomXPHM', # spin-precessing waveform model\n", " minimum_frequency=20.,\n", " psds={'L1':'aLIGO_O4_high_asd.txt'}, # chosen interferometer is 'L1'. If multiple network SNR will be considered.\n", " snr_method='inner_product', # 'interpolation' or 'inner_product'\n", ")" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "solving SNR with inner product\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|███████████████████████████████████████████████████████| 50000/50000 [00:40<00:00, 1247.30it/s]\n" ] } ], "source": [ "# gerneral case, random parameters\n", "np.random.seed(64)\n", "nsamples = 50000\n", "mtot = np.random.uniform(2*4.98, 2*112.5,nsamples)\n", "mass_ratio = np.random.uniform(0.2,1,size=nsamples)\n", "param_dict = dict(\n", " # convert to component masses\n", " mass_1 = mtot / (1 + mass_ratio),\n", " mass_2 = mtot * mass_ratio / (1 + mass_ratio),\n", " # Fix luminosity distance\n", " luminosity_distance = np.random.uniform(40, 10000, size=nsamples), # Random luminosity distance between 40 and 10000 Mpc\n", " # Randomly sample everything else:\n", " theta_jn = np.random.uniform(0,2*np.pi, size=nsamples),\n", " ra = np.random.uniform(0,2*np.pi, size=nsamples), \n", " dec = np.random.uniform(-np.pi/2,np.pi/2, size=nsamples), \n", " psi = np.random.uniform(0,2*np.pi, size=nsamples),\n", " phase = np.random.uniform(0,2*np.pi, size=nsamples),\n", " geocent_time = 1246527224.169434*np.ones(nsamples),\n", " # spin zero\n", " a_1 = np.random.uniform(0.0,0.8, size=nsamples),\n", " a_2 = np.random.uniform(0.0,0.8, size=nsamples),\n", " tilt_1 = np.random.uniform(0, np.pi, size=nsamples), # tilt angle of the primary black hole in radians\n", " tilt_2 = np.random.uniform(0, np.pi, size=nsamples),\n", " phi_12 = np.random.uniform(0, 2*np.pi, size=nsamples), # Relative angle between the primary and secondary spin of the binary in radians\n", " phi_jl = np.random.uniform(0, 2*np.pi, size=nsamples), # Angle between the total angular momentum and the orbital angular momentum in radians\n", ")\n", "\n", "snrs_ = gwsnr.optimal_snr(gw_param_dict=param_dict)\n", "# time: 0.2 s for 50000 samples with 8 processes" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "param_dict.update(snrs_)\n", "from gwsnr.utils import append_json\n", "append_json(\n", " file_name=\"ler_data/IMRPhenomXPHM_O4_high_asd_L1_4.json\", \n", " new_dictionary =param_dict,\n", " replace=True, # set to True if you want to replace the existing data\n", ");" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Combine all the data files into one" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## L1 detector" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "json file saved at: ./ler_data/IMRPhenomXPHM_O4_high_asd_L1.json\n", "\n" ] } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from ler.utils import TrainingDataGenerator\n", "\n", "tdg = TrainingDataGenerator()\n", "tdg.combine_dicts(\n", " file_name_list=[\"IMRPhenomXPHM_O4_high_asd_L1_1.json\", \"IMRPhenomXPHM_O4_high_asd_L1_2.json\", \"IMRPhenomXPHM_O4_high_asd_L1_3.json\", \"IMRPhenomXPHM_O4_high_asd_L1_4.json\"],\n", " detector='L1',\n", " output_jsonfile=\"IMRPhenomXPHM_O4_high_asd_L1.json\",\n", ")" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# from gwsnr.utils import get_param_from_json\n", "# test1 = get_param_from_json(\"./ler_data/IMRPhenomXPHM_O4_high_asd_L1.json\")\n", "\n", "# snr = np.array(test1['L1'])\n", "# print(f\"Number of samples: {len(snr)}\")\n", "\n", "# plt.figure(figsize=[4,4])\n", "# plt.hist(snr, bins=100, density=True, alpha=0.5, color='b', histtype='step', label='L1')\n", "# plt.xlim([0, 40])\n", "# plt.xlabel('Optimal SNR')\n", "# plt.ylabel('Density')\n", "# plt.legend()\n", "# plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### ANN model training and testing" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from gwsnr.ann import ANNModelGenerator" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Initializing GWSNR class...\n", "\n", "Intel processor has trouble allocating memory when the data is huge. So, by default for IMRPhenomXPHM, duration_max = 64.0. Otherwise, set to some max value like duration_max = 600.0 (10 mins)\n", "Interpolator will be loaded for L1 detector from ./interpolator_pickle/L1/partialSNR_dict_1.pickle\n", "\n", "\n" ] } ], "source": [ "amg = ANNModelGenerator(\n", " directory='./ann_data',\n", " npool=8,\n", " gwsnr_verbose=False,\n", " snr_th=8.0,\n", " waveform_approximant=\"IMRPhenomXPHM\",\n", " psds={'L1': 'aLIGO_O4_high_asd.txt'}, \n", ")" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 309us/step - accuracy: 7.4186e-04 - loss: 1195.4056\n", "Epoch 2/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 303us/step - accuracy: 3.7843e-04 - loss: 786.9496\n", "Epoch 3/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 338us/step - accuracy: 5.5559e-04 - loss: 773.3979\n", "Epoch 4/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 312us/step - accuracy: 4.7510e-04 - loss: 870.4972\n", "Epoch 5/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 302us/step - accuracy: 5.0608e-04 - loss: 669.6340\n", "Epoch 6/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 340us/step - accuracy: 2.4172e-04 - loss: 599.0781\n", "Epoch 7/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 296us/step - accuracy: 1.1708e-04 - loss: 615.2960\n", "Epoch 8/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 296us/step - accuracy: 4.0820e-04 - loss: 504.8292\n", "Epoch 9/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 325us/step - accuracy: 3.1350e-04 - loss: 473.1070\n", "Epoch 10/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 318us/step - accuracy: 4.6338e-04 - loss: 455.0616\n", "Epoch 11/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 313us/step - accuracy: 3.6646e-04 - loss: 480.0711\n", "Epoch 12/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 331us/step - accuracy: 6.4646e-04 - loss: 430.3829\n", "Epoch 13/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 331us/step - accuracy: 4.6718e-04 - loss: 326.0745\n", "Epoch 14/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 321us/step - accuracy: 4.8356e-04 - loss: 344.0058\n", "Epoch 15/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 333us/step - accuracy: 6.9886e-04 - loss: 318.9627\n", "Epoch 16/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 360us/step - accuracy: 6.3820e-04 - loss: 316.1301\n", "Epoch 17/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 327us/step - accuracy: 6.0792e-04 - loss: 301.1277\n", "Epoch 18/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 315us/step - accuracy: 6.6761e-04 - loss: 235.1516\n", "Epoch 19/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 315us/step - accuracy: 6.2474e-04 - loss: 272.7290\n", "Epoch 20/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 314us/step - accuracy: 7.3992e-04 - loss: 290.7437\n", "Epoch 21/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 312us/step - accuracy: 4.9990e-04 - loss: 207.5985\n", "Epoch 22/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 319us/step - accuracy: 8.0967e-04 - loss: 263.7404\n", "Epoch 23/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 312us/step - accuracy: 7.1809e-04 - loss: 235.5507\n", "Epoch 24/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 309us/step - accuracy: 6.9704e-04 - loss: 171.0875\n", "Epoch 25/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 314us/step - accuracy: 9.5122e-04 - loss: 188.7950\n", "Epoch 26/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 318us/step - accuracy: 9.8965e-04 - loss: 200.5005\n", "Epoch 27/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 312us/step - accuracy: 7.1190e-04 - loss: 219.7502\n", "Epoch 28/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 311us/step - accuracy: 8.6508e-04 - loss: 195.2021\n", "Epoch 29/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 313us/step - accuracy: 0.0010 - loss: 162.9744\n", "Epoch 30/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 316us/step - accuracy: 8.3644e-04 - loss: 163.9187\n", "Epoch 31/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 322us/step - accuracy: 9.6832e-04 - loss: 186.6651\n", "Epoch 32/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 350us/step - accuracy: 0.0010 - loss: 160.6446\n", "Epoch 33/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 318us/step - accuracy: 0.0011 - loss: 110.9650\n", "Epoch 34/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 316us/step - accuracy: 0.0011 - loss: 148.0654\n", "Epoch 35/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 320us/step - accuracy: 0.0013 - loss: 118.0238\n", "Epoch 36/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 330us/step - accuracy: 0.0014 - loss: 119.6208\n", "Epoch 37/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 315us/step - accuracy: 0.0013 - loss: 123.7099\n", "Epoch 38/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 311us/step - accuracy: 0.0014 - loss: 150.7826\n", "Epoch 39/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 311us/step - accuracy: 0.0014 - loss: 132.0962\n", "Epoch 40/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 311us/step - accuracy: 0.0015 - loss: 112.5593\n", "Epoch 41/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 326us/step - accuracy: 0.0012 - loss: 108.4442\n", "Epoch 42/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 318us/step - accuracy: 0.0015 - loss: 131.0688\n", "Epoch 43/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 311us/step - accuracy: 0.0015 - loss: 130.2682\n", "Epoch 44/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 310us/step - accuracy: 0.0018 - loss: 92.5214\n", "Epoch 45/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 312us/step - accuracy: 0.0015 - loss: 118.0394\n", "Epoch 46/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 321us/step - accuracy: 0.0017 - loss: 87.9507\n", "Epoch 47/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 313us/step - accuracy: 0.0016 - loss: 83.3415\n", "Epoch 48/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 346us/step - accuracy: 0.0014 - loss: 114.2209\n", "Epoch 49/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 313us/step - accuracy: 0.0016 - loss: 56.4827\n", "Epoch 50/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 313us/step - accuracy: 0.0015 - loss: 73.1249\n", "Epoch 51/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 320us/step - accuracy: 0.0015 - loss: 64.7108\n", "Epoch 52/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 311us/step - accuracy: 0.0016 - loss: 80.9203\n", "Epoch 53/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 312us/step - accuracy: 0.0018 - loss: 73.7451\n", "Epoch 54/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 310us/step - accuracy: 0.0012 - loss: 81.1201\n", "Epoch 55/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 322us/step - accuracy: 0.0017 - loss: 79.5091\n", "Epoch 56/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 313us/step - accuracy: 0.0015 - loss: 49.4225\n", "Epoch 57/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 315us/step - accuracy: 0.0018 - loss: 74.7164\n", "Epoch 58/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 312us/step - accuracy: 0.0019 - loss: 70.6322\n", "Epoch 59/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 312us/step - accuracy: 0.0017 - loss: 56.8413\n", "Epoch 60/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 325us/step - accuracy: 0.0018 - loss: 56.4192\n", "Epoch 61/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 319us/step - accuracy: 0.0015 - loss: 45.2987\n", "Epoch 62/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 342us/step - accuracy: 0.0017 - loss: 69.9411\n", "Epoch 63/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 316us/step - accuracy: 0.0017 - loss: 79.2437\n", "Epoch 64/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 324us/step - accuracy: 0.0015 - loss: 65.2600\n", "Epoch 65/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 313us/step - accuracy: 0.0018 - loss: 82.6208\n", "Epoch 66/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 311us/step - accuracy: 0.0019 - loss: 33.4129\n", "Epoch 67/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 309us/step - accuracy: 0.0014 - loss: 51.1544\n", "Epoch 68/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 311us/step - accuracy: 0.0015 - loss: 41.7268\n", "Epoch 69/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 319us/step - accuracy: 0.0015 - loss: 47.2896\n", "Epoch 70/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 351us/step - accuracy: 0.0015 - loss: 53.9465\n", "Epoch 71/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 314us/step - accuracy: 0.0020 - loss: 55.2872\n", "Epoch 72/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 310us/step - accuracy: 0.0014 - loss: 37.5868\n", "Epoch 73/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 314us/step - accuracy: 0.0016 - loss: 48.0865\n", "Epoch 74/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 321us/step - accuracy: 0.0018 - loss: 59.0398\n", "Epoch 75/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 313us/step - accuracy: 0.0014 - loss: 80.2237\n", "Epoch 76/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 312us/step - accuracy: 0.0016 - loss: 43.6412\n", "Epoch 77/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 312us/step - accuracy: 0.0015 - loss: 40.7872\n", "Epoch 78/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 310us/step - accuracy: 0.0014 - loss: 40.5094\n", "Epoch 79/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 318us/step - accuracy: 0.0016 - loss: 53.2459\n", "Epoch 80/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 315us/step - accuracy: 0.0019 - loss: 46.4946\n", "Epoch 81/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 313us/step - accuracy: 0.0018 - loss: 39.9218\n", "Epoch 82/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 318us/step - accuracy: 0.0017 - loss: 35.7595\n", "Epoch 83/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 326us/step - accuracy: 0.0017 - loss: 36.7095\n", "Epoch 84/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 371us/step - accuracy: 0.0020 - loss: 30.4304\n", "Epoch 85/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 320us/step - accuracy: 0.0021 - loss: 34.6025\n", "Epoch 86/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 332us/step - accuracy: 0.0020 - loss: 33.1985\n", "Epoch 87/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 333us/step - accuracy: 0.0020 - loss: 25.5399\n", "Epoch 88/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 352us/step - accuracy: 0.0016 - loss: 40.3483\n", "Epoch 89/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 322us/step - accuracy: 0.0016 - loss: 38.8713\n", "Epoch 90/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 312us/step - accuracy: 0.0016 - loss: 36.6795\n", "Epoch 91/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 314us/step - accuracy: 0.0015 - loss: 35.2267\n", "Epoch 92/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 316us/step - accuracy: 0.0018 - loss: 26.4520\n", "Epoch 93/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 313us/step - accuracy: 0.0016 - loss: 27.2608\n", "Epoch 94/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 329us/step - accuracy: 0.0017 - loss: 33.0001\n", "Epoch 95/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 313us/step - accuracy: 0.0019 - loss: 33.2583\n", "Epoch 96/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 316us/step - accuracy: 0.0017 - loss: 28.9015\n", "Epoch 97/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 328us/step - accuracy: 0.0019 - loss: 24.7544\n", "Epoch 98/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 331us/step - accuracy: 0.0018 - loss: 27.0456\n", "Epoch 99/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 316us/step - accuracy: 0.0018 - loss: 27.1680\n", "Epoch 100/100\n", "\u001b[1m2123/2123\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 351us/step - accuracy: 0.0014 - loss: 33.9702\n", "\u001b[1m236/236\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 297us/step\n", "scaler saved at: ./ann_data/scaler_L1.pkl\n", "model saved at: ./ann_data/ann_model_L1.h5\n", "error adjustment saved at: ./ann_data/error_adjustment_L1.json\n", "ann path dict saved at: ./ann_data/ann_path_dict.json\n" ] } ], "source": [ "amg.ann_model_training(\n", " gw_param_dict='ler_data/IMRPhenomXPHM_O4_high_asd_L1.json', # you can also get the dict from a json file first\n", " randomize=True,\n", " test_size=0.1,\n", " random_state=42,\n", " num_nodes_list = [5, 32, 32, 1],\n", " activation_fn_list = ['relu', 'relu', 'sigmoid', 'linear'],\n", " optimizer='adam',\n", " loss='mean_squared_error',\n", " metrics=['accuracy'],\n", " batch_size=32,\n", " epochs=100,\n", " error_adjustment_snr_range=[2,14],\n", " ann_file_name = 'ann_model_L1.h5',\n", " scaler_file_name = 'scaler_L1.pkl',\n", " error_adjustment_file_name='error_adjustment_L1.json',\n", " ann_path_dict_file_name='ann_path_dict.json',\n", ")\n", "\n", "# # Uncomment the following, if you have already trained the model\n", "# # load the trained model\n", "# amg.load_model_scaler_error(\n", "# ann_file_name='ann_model_L1.h5', \n", "# scaler_file_name='scaler_L1.pkl',\n", "# error_adjustment_file_name='error_adjustment_L1.json',\n", "# )" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m236/236\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 242us/step\n", "Error: 3.45%\n" ] }, { "data": { "text/plain": [ "(3.445534057778956,\n", " array([14.857255 , 0.5539622, 2.7361565, ..., 12.17969 ,\n", " 30.18567 , 30.088642 ], dtype=float32),\n", " array([14.48240752, 0.67263087, 3.5234792 , ..., 12.18434598,\n", " 30.22166581, 30.23929325]))" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "amg.pdet_error()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m236/236\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 243us/step\n", "[[5338 85]\n", " [ 195 1928]]\n", "Accuracy: 96.289%\n" ] }, { "data": { "text/plain": [ "(array([[5338, 85],\n", " [ 195, 1928]]),\n", " 96.28942486085343,\n", " array([ True, False, False, ..., True, True, True]),\n", " array([ True, False, False, ..., True, True, True]))" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "amg.pdet_confusion_matrix()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m2359/2359\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 213us/step\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# predicted snr\n", "pred_snr= amg.predict_snr(gw_param_dict='ler_data/IMRPhenomXPHM_O4_high_asd_L1.json')\n", "# true snr\n", "true_snr = amg.get_parameters(gw_param_dict='ler_data/IMRPhenomXPHM_O4_high_asd_L1.json')['L1']\n", "# select only snr between 4 and 12\n", "snr_min = 4\n", "snr_max = 12\n", "mask = (true_snr >= snr_min) & (true_snr <= snr_max)\n", "true_snr = true_snr[mask]\n", "pred_snr = pred_snr[mask]\n", "\n", "# plot the predicted snr vs true snr\n", "plt.figure(figsize=[4,4])\n", "plt.scatter(true_snr, pred_snr, s=1)\n", "snr_lim = [np.min([true_snr, true_snr]), np.max([true_snr, true_snr])]\n", "plt.plot(snr_lim, snr_lim, 'r--')\n", "plt.xlabel('True SNR')\n", "plt.ylabel('Predicted SNR')\n", "plt.xlim([snr_min, snr_max])\n", "plt.ylim([snr_min, snr_max])\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m2359/2359\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 222us/step\n", "[[53130 947]\n", " [ 1464 19919]]\n", "0.9680492976411343\n" ] } ], "source": [ "# use the following function to predict the pdet\n", "pred_pdet = amg.predict_pdet(gw_param_dict='ler_data/IMRPhenomXPHM_O4_high_asd_L1.json', snr_threshold=8.0)\n", "\n", "true_snr = amg.get_parameters(gw_param_dict='ler_data/IMRPhenomXPHM_O4_high_asd_L1.json')['L1']\n", "# true pdet\n", "true_pdet = np.array([1 if snr >= 8.0 else 0 for snr in true_snr])\n", "\n", "from sklearn.metrics import confusion_matrix, accuracy_score\n", "cm = confusion_matrix(true_pdet, pred_pdet)\n", "print(cm)\n", "\n", "acc = accuracy_score(true_pdet, pred_pdet)\n", "print(acc)\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "vscode": { "languageId": "markdown" } }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Implementation of the ANN model in GWSNR\n", "\n", "Generate new astrophysical data and test the model on it using GWSNR class." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Initializing GWRATES class...\n", "\n", "total event to collect: 20000\n", "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████| 19507/19507 [00:26<00:00, 724.89it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collected number of events: 20000\n", "final size: 20000\n", "\n", "json file saved at: ./ler_data/IMRPhenomXPHM_O4_high_asd_L1_5.json\n", "\n" ] } ], "source": [ "from ler.utils import TrainingDataGenerator\n", "\n", "# generate some new data\n", "tdg = TrainingDataGenerator(\n", " npool=4,\n", " verbose=False, \n", " # GWSNR parameters\n", " sampling_frequency=2048,\n", " waveform_approximant='IMRPhenomXPHM',\n", " psds={'L1': 'aLIGO_O4_high_asd.txt'}, \n", " minimum_frequency=20,\n", " spin_zero=False,\n", " spin_precessing=True,\n", " snr_method='inner_product',\n", ")\n", "\n", "tdg.gw_parameters_generator(\n", " size=20000, \n", " batch_size=20000, \n", " snr_recalculation=False,\n", " trim_to_size=False, \n", " verbose=True, \n", " data_distribution_range = None, \n", " replace=False,\n", " output_jsonfile=\"IMRPhenomXPHM_O4_high_asd_L1_5.json\",\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* using GWSNR class, with the trained ANN model, you can generate SNR of the astrophysical GW signal parameters" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Initializing GWSNR class...\n", "\n", "Intel processor has trouble allocating memory when the data is huge. So, by default for IMRPhenomXPHM, duration_max = 64.0. Otherwise, set to some max value like duration_max = 600.0 (10 mins)\n", "ANN model and scaler path is given. Using the given path.\n", "ANN model for L1 is loaded from ./ann_data/ann_model_L1.h5.\n", "ANN scaler for L1 is loaded from ./ann_data/scaler_L1.pkl.\n", "ANN error_adjustment for L1 is loaded from ./ann_data/error_adjustment_L1.json.\n", "Interpolator will be loaded for L1 detector from ./interpolator_pickle/L1/partialSNR_dict_1.pickle\n", "\n", "Chosen GWSNR initialization parameters:\n", "\n", "npool: 8\n", "snr type: ann\n", "waveform approximant: IMRPhenomXPHM\n", "sampling frequency: 2048.0\n", "minimum frequency (fmin): 20.0\n", "mtot=mass1+mass2\n", "min(mtot): 9.96\n", "max(mtot) (with the given fmin=20.0): 235.0\n", "detectors: ['L1']\n", "psds: [PowerSpectralDensity(psd_file='None', asd_file='/Users/phurailatpamhemantakumar/anaconda3/envs/ler/lib/python3.10/site-packages/bilby/gw/detector/noise_curves/aLIGO_O4_high_asd.txt')]\n", "\n", "\n" ] } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from gwsnr import GWSNR\n", "\n", "gwsnr = GWSNR(\n", " snr_method='ann',\n", " npool=8, # number of processes\n", " waveform_approximant=\"IMRPhenomXPHM\",\n", " psds={'L1': 'aLIGO_O4_high_asd.txt'},\n", " ann_path_dict='./ann_data/ann_path_dict.json',\n", ")" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "# predicted snr, using ANN model \n", "pred_snr = gwsnr.optimal_snr_with_ann(gw_param_dict='./ler_data/IMRPhenomXPHM_O4_high_asd_L1_5.json')['L1']#['snr_net']" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "from gwsnr.utils import get_param_from_json\n", "true_snr = get_param_from_json('./ler_data/IMRPhenomXPHM_O4_high_asd_L1_5.json')['L1']#['snr_net']" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# select only snr between 4 and 12\n", "# snr_min = 4\n", "# snr_max = 12\n", "# mask = (true_snr >= snr_min) & (true_snr <= snr_max)\n", "# true_snr = true_snr[mask]\n", "# pred_snr = pred_snr[mask]\n", "\n", "# plot the predicted snr vs true snr\n", "plt.figure(figsize=[4,4])\n", "plt.scatter(true_snr, pred_snr, s=1)\n", "snr_lim = [np.min([true_snr, true_snr]), np.max([true_snr, true_snr])]\n", "plt.plot(snr_lim, snr_lim, 'r--')\n", "plt.xlabel('True SNR')\n", "plt.ylabel('Predicted SNR')\n", "# plt.xlim([snr_min, snr_max])\n", "# plt.ylim([snr_min, snr_max])\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[19966 0]\n", " [ 7 27]]\n", "0.99965\n" ] } ], "source": [ "# use the following function to predict the pdet\n", "pred_pdet = np.array([1 if snr >= 8.0 else 0 for snr in pred_snr])\n", "# true pdet\n", "true_pdet = np.array([1 if snr >= 8.0 else 0 for snr in true_snr])\n", "\n", "from sklearn.metrics import confusion_matrix, accuracy_score\n", "cm = confusion_matrix(true_pdet, pred_pdet)\n", "print(cm)\n", "\n", "acc = accuracy_score(true_pdet, pred_pdet)\n", "print(acc)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "ler", "language": "python", "name": "ler" }, "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.18" } }, "nbformat": 4, "nbformat_minor": 2 }