diff --git "a/insurance/lct_gan/mlu-eval.ipynb" "b/insurance/lct_gan/mlu-eval.ipynb" new file mode 100644--- /dev/null +++ "b/insurance/lct_gan/mlu-eval.ipynb" @@ -0,0 +1,2674 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "982e76f5", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T12:41:55.980748Z", + "iopub.status.busy": "2024-02-29T12:41:55.980389Z", + "iopub.status.idle": "2024-02-29T12:41:56.013514Z", + "shell.execute_reply": "2024-02-29T12:41:56.012639Z" + }, + "papermill": { + "duration": 0.048201, + "end_time": "2024-02-29T12:41:56.015613", + "exception": false, + "start_time": "2024-02-29T12:41:55.967412", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import joblib\n", + "\n", + "#joblib.parallel_backend(\"threading\")" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "675f0b41", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T12:41:56.040986Z", + "iopub.status.busy": "2024-02-29T12:41:56.040638Z", + "iopub.status.idle": "2024-02-29T12:41:56.047244Z", + "shell.execute_reply": "2024-02-29T12:41:56.046384Z" + }, + "papermill": { + "duration": 0.021542, + "end_time": "2024-02-29T12:41:56.049125", + "exception": false, + "start_time": "2024-02-29T12:41:56.027583", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'\\n%cd /kaggle/working\\n#!git clone https://github.com/R-N/ml-utility-loss\\n%cd ml-utility-loss\\n!git pull\\n#!pip install .\\n!pip install . --no-deps --force-reinstall --upgrade\\n#'" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\"\"\"\n", + "%cd /kaggle/working\n", + "#!git clone https://github.com/R-N/ml-utility-loss\n", + "%cd ml-utility-loss\n", + "!git pull\n", + "#!pip install .\n", + "!pip install . --no-deps --force-reinstall --upgrade\n", + "#\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "5ae30f5c", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T12:41:56.072553Z", + "iopub.status.busy": "2024-02-29T12:41:56.072280Z", + "iopub.status.idle": "2024-02-29T12:41:56.076151Z", + "shell.execute_reply": "2024-02-29T12:41:56.075362Z" + }, + "papermill": { + "duration": 0.017935, + "end_time": "2024-02-29T12:41:56.078076", + "exception": false, + "start_time": "2024-02-29T12:41:56.060141", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.rcParams['figure.figsize'] = [3,3]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "9f42c810", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T12:41:56.101677Z", + "iopub.status.busy": "2024-02-29T12:41:56.101357Z", + "iopub.status.idle": "2024-02-29T12:41:56.105462Z", + "shell.execute_reply": "2024-02-29T12:41:56.104647Z" + }, + "executionInfo": { + "elapsed": 678, + "status": "ok", + "timestamp": 1696841022168, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "ns5hFcVL2yvs", + "papermill": { + "duration": 0.018392, + "end_time": "2024-02-29T12:41:56.107632", + "exception": false, + "start_time": "2024-02-29T12:41:56.089240", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "datasets = [\n", + " \"insurance\",\n", + " \"treatment\",\n", + " \"contraceptive\"\n", + "]\n", + "\n", + "study_dir = \"./\"" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "85d0c8ce", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T12:41:56.132779Z", + "iopub.status.busy": "2024-02-29T12:41:56.132429Z", + "iopub.status.idle": "2024-02-29T12:41:56.138350Z", + "shell.execute_reply": "2024-02-29T12:41:56.137479Z" + }, + "papermill": { + "duration": 0.021063, + "end_time": "2024-02-29T12:41:56.140226", + "exception": false, + "start_time": "2024-02-29T12:41:56.119163", + "status": "completed" + }, + "tags": [ + "parameters" + ] + }, + "outputs": [], + "source": [ + "#Parameters\n", + "import os\n", + "\n", + "path_prefix = \"../../../../\"\n", + "\n", + "dataset_dir = os.path.join(path_prefix, \"ml-utility-loss/datasets\")\n", + "dataset_name = \"treatment\"\n", + "model_name=\"ml_utility_2\"\n", + "models = [\"tvae\", \"realtabformer\", \"lct_gan\", \"tab_ddpm_concat\"]\n", + "single_model = \"lct_gan\"\n", + "random_seed = 42\n", + "gp = True\n", + "gp_multiply = True\n", + "folder = \"eval\"\n", + "debug = False\n", + "path = None\n", + "param_index = 0" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "2646260c", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T12:41:56.167711Z", + "iopub.status.busy": "2024-02-29T12:41:56.166754Z", + "iopub.status.idle": "2024-02-29T12:41:56.172026Z", + "shell.execute_reply": "2024-02-29T12:41:56.171127Z" + }, + "papermill": { + "duration": 0.021124, + "end_time": "2024-02-29T12:41:56.174023", + "exception": false, + "start_time": "2024-02-29T12:41:56.152899", + "status": "completed" + }, + "tags": [ + "injected-parameters" + ] + }, + "outputs": [], + "source": [ + "# Parameters\n", + "dataset = \"insurance\"\n", + "dataset_name = \"insurance\"\n", + "single_model = \"lct_gan\"\n", + "gp = False\n", + "gp_multiply = False\n", + "random_seed = 2\n", + "debug = False\n", + "folder = \"eval\"\n", + "path_prefix = \"../../../../\"\n", + "path = \"eval/insurance/lct_gan/2\"\n", + "param_index = 2\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bd7c02d6", + "metadata": { + "papermill": { + "duration": 0.0118, + "end_time": "2024-02-29T12:41:56.197555", + "exception": false, + "start_time": "2024-02-29T12:41:56.185755", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "5f45b1d0", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T12:41:56.222174Z", + "iopub.status.busy": "2024-02-29T12:41:56.221850Z", + "iopub.status.idle": "2024-02-29T12:41:56.231486Z", + "shell.execute_reply": "2024-02-29T12:41:56.230651Z" + }, + "executionInfo": { + "elapsed": 7, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "UdvXYv3c3LXy", + "papermill": { + "duration": 0.024384, + "end_time": "2024-02-29T12:41:56.233470", + "exception": false, + "start_time": "2024-02-29T12:41:56.209086", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/kaggle/working\n", + "/kaggle/working/eval/insurance/lct_gan/2\n" + ] + } + ], + "source": [ + "from pathlib import Path\n", + "import os\n", + "\n", + "%cd /kaggle/working/\n", + "\n", + "if path is None:\n", + " path = os.path.join(folder, dataset_name, single_model, random_seed)\n", + "Path(path).mkdir(parents=True, exist_ok=True)\n", + "\n", + "%cd {path}" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "f85bf540", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T12:41:56.258505Z", + "iopub.status.busy": "2024-02-29T12:41:56.258188Z", + "iopub.status.idle": "2024-02-29T12:41:58.610430Z", + "shell.execute_reply": "2024-02-29T12:41:58.609479Z" + }, + "papermill": { + "duration": 2.367122, + "end_time": "2024-02-29T12:41:58.612552", + "exception": false, + "start_time": "2024-02-29T12:41:56.245430", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Set seed to \n" + ] + } + ], + "source": [ + "from ml_utility_loss.util import seed\n", + "if single_model:\n", + " model_name=f\"{model_name}_{single_model}\"\n", + "if random_seed is not None:\n", + " seed(random_seed)\n", + " print(\"Set seed to\", seed)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "8489feae", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T12:41:58.640394Z", + "iopub.status.busy": "2024-02-29T12:41:58.639422Z", + "iopub.status.idle": "2024-02-29T12:41:58.651843Z", + "shell.execute_reply": "2024-02-29T12:41:58.651095Z" + }, + "papermill": { + "duration": 0.028052, + "end_time": "2024-02-29T12:41:58.653855", + "exception": false, + "start_time": "2024-02-29T12:41:58.625803", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import json\n", + "import os\n", + "\n", + "df = pd.read_csv(os.path.join(dataset_dir, f\"{dataset_name}.csv\"))\n", + "with open(os.path.join(dataset_dir, f\"{dataset_name}.json\")) as f:\n", + " info = json.load(f)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "debcc684", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T12:41:58.677919Z", + "iopub.status.busy": "2024-02-29T12:41:58.677663Z", + "iopub.status.idle": "2024-02-29T12:41:58.685003Z", + "shell.execute_reply": "2024-02-29T12:41:58.684140Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "Vrl2QkoV3o_8", + "papermill": { + "duration": 0.021603, + "end_time": "2024-02-29T12:41:58.686934", + "exception": false, + "start_time": "2024-02-29T12:41:58.665331", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "task = info[\"task\"]\n", + "target = info[\"target\"]\n", + "cat_features = info[\"cat_features\"]\n", + "mixed_features = info[\"mixed_features\"]\n", + "longtail_features = info[\"longtail_features\"]\n", + "integer_features = info[\"integer_features\"]\n", + "\n", + "test = df.sample(frac=0.2, random_state=42)\n", + "train = df[~df.index.isin(test.index)]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "7538184a", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T12:41:58.711050Z", + "iopub.status.busy": "2024-02-29T12:41:58.710792Z", + "iopub.status.idle": "2024-02-29T12:41:58.813475Z", + "shell.execute_reply": "2024-02-29T12:41:58.812734Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "TilUuFk9vqMb", + "papermill": { + "duration": 0.1174, + "end_time": "2024-02-29T12:41:58.815932", + "exception": false, + "start_time": "2024-02-29T12:41:58.698532", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import ml_utility_loss.synthesizers.tab_ddpm.params as TAB_DDPM_PARAMS\n", + "import ml_utility_loss.synthesizers.lct_gan.params as LCT_GAN_PARAMS\n", + "import ml_utility_loss.synthesizers.realtabformer.params as RTF_PARAMS\n", + "from ml_utility_loss.synthesizers.realtabformer.params.default import GPT2_PARAMS, REALTABFORMER_PARAMS\n", + "from ml_utility_loss.util import filter_dict_2, filter_dict\n", + "\n", + "tab_ddpm_params = getattr(TAB_DDPM_PARAMS, dataset_name).BEST\n", + "lct_gan_params = getattr(LCT_GAN_PARAMS, dataset_name).BEST\n", + "lct_ae_params = filter_dict_2(lct_gan_params, LCT_GAN_PARAMS.default.AE_PARAMS)\n", + "rtf_params = getattr(RTF_PARAMS, dataset_name).BEST\n", + "rtf_params = filter_dict(rtf_params, REALTABFORMER_PARAMS)\n", + "\n", + "lct_ae_embedding_size=lct_gan_params[\"embedding_size\"]\n", + "tab_ddpm_normalization=\"quantile\"\n", + "tab_ddpm_cat_encoding=tab_ddpm_params[\"cat_encoding\"]\n", + "#tab_ddpm_cat_encoding=\"one-hot\"\n", + "tab_ddpm_y_policy=\"default\"\n", + "tab_ddpm_is_y_cond=True" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "cca61838", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T12:41:58.843222Z", + "iopub.status.busy": "2024-02-29T12:41:58.842456Z", + "iopub.status.idle": "2024-02-29T12:42:03.450984Z", + "shell.execute_reply": "2024-02-29T12:42:03.450183Z" + }, + "executionInfo": { + "elapsed": 3113, + "status": "ok", + "timestamp": 1696841025277, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "7Abt8nStvr9Z", + "papermill": { + "duration": 4.624356, + "end_time": "2024-02-29T12:42:03.453351", + "exception": false, + "start_time": "2024-02-29T12:41:58.828995", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-02-29 12:42:01.052754: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:9261] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", + "2024-02-29 12:42:01.052810: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:607] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", + "2024-02-29 12:42:01.054457: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1515] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n" + ] + } + ], + "source": [ + "from ml_utility_loss.loss_learning.estimator.pipeline import load_lct_ae\n", + "\n", + "lct_ae = load_lct_ae(\n", + " dataset_name=dataset_name,\n", + " model_dir=os.path.join(path_prefix, \"ml-utility-loss/models\"),\n", + " model_name=\"lct_ae\",\n", + " df_name=\"df\",\n", + ")\n", + "lct_ae = None" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "6f83b7b6", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T12:42:03.478386Z", + "iopub.status.busy": "2024-02-29T12:42:03.477808Z", + "iopub.status.idle": "2024-02-29T12:42:03.484201Z", + "shell.execute_reply": "2024-02-29T12:42:03.483544Z" + }, + "papermill": { + "duration": 0.020941, + "end_time": "2024-02-29T12:42:03.486155", + "exception": false, + "start_time": "2024-02-29T12:42:03.465214", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "from ml_utility_loss.loss_learning.estimator.pipeline import load_rtf_embed\n", + "\n", + "rtf_embed = load_rtf_embed(\n", + " dataset_name=dataset_name,\n", + " model_dir=os.path.join(path_prefix, \"ml-utility-loss/models\"),\n", + " model_name=\"realtabformer\",\n", + " df_name=\"df\",\n", + " ckpt_type=\"best-disc-model\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "0026de74", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T12:42:03.512422Z", + "iopub.status.busy": "2024-02-29T12:42:03.512135Z", + "iopub.status.idle": "2024-02-29T12:42:11.955354Z", + "shell.execute_reply": "2024-02-29T12:42:11.954221Z" + }, + "executionInfo": { + "elapsed": 20137, + "status": "ok", + "timestamp": 1696841045408, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "tbaguWxAvtPi", + "papermill": { + "duration": 8.459386, + "end_time": "2024-02-29T12:42:11.958044", + "exception": false, + "start_time": "2024-02-29T12:42:03.498658", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", + " warnings.warn(\n", + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:119: ConvergenceWarning: Number of distinct clusters (6) found smaller than n_clusters (10). Possibly due to duplicate points in X.\n", + " .fit(X)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 0%| | 0/1 [00:00 torch.Tensor>,\n", + " 'single_model': True,\n", + " 'bias': True,\n", + " 'bias_final': True,\n", + " 'pma_ffn_mode': 'shared',\n", + " 'patience': 10,\n", + " 'inds_init_mode': 'fixnorm',\n", + " 'grad_clip': 0.77,\n", + " 'head_final_mul': 'identity',\n", + " 'gradient_penalty_mode': {'gradient_penalty': False,\n", + " 'calc_grad_m': False,\n", + " 'avg_non_role_model_m': False,\n", + " 'inverse_avg_non_role_model_m': False},\n", + " 'synth_data': 2,\n", + " 'dataset_size': 2048,\n", + " 'batch_size': 8,\n", + " 'epochs': 100,\n", + " 'n_warmup_steps': 100,\n", + " 'Optim': torch_optimizer.diffgrad.DiffGrad,\n", + " 'loss_balancer_beta': 0.75,\n", + " 'loss_balancer_r': 0.95,\n", + " 'fixed_role_model': 'lct_gan',\n", + " 'd_model': 256,\n", + " 'attn_activation': torch.nn.modules.activation.LeakyReLU,\n", + " 'tf_d_inner': 512,\n", + " 'tf_n_layers_enc': 4,\n", + " 'tf_n_head': 64,\n", + " 'tf_activation': torch.nn.modules.activation.ReLU6,\n", + " 'tf_activation_final': ml_utility_loss.activations.LeakyHardsigmoid,\n", + " 'ada_d_hid': 1024,\n", + " 'ada_n_layers': 7,\n", + " 'ada_activation': torch.nn.modules.activation.ReLU,\n", + " 'ada_activation_final': torch.nn.modules.activation.Softsign,\n", + " 'head_d_hid': 128,\n", + " 'head_n_layers': 9,\n", + " 'head_n_head': 64,\n", + " 'head_activation': torch.nn.modules.activation.RReLU,\n", + " 'head_activation_final': torch.nn.modules.activation.Softsign,\n", + " 'models': ['lct_gan'],\n", + " 'max_seconds': 3600,\n", + " 'tf_lora': False,\n", + " 'tf_num_inds': 32,\n", + " 'ada_n_seeds': 0,\n", + " 'gradient_penalty_kwargs': {'mag_loss': True,\n", + " 'mse_mag': False,\n", + " 'mag_corr': False,\n", + " 'seq_mag': False,\n", + " 'cos_loss': False,\n", + " 'mag_corr_kwargs': {'only_sign': False},\n", + " 'cos_loss_kwargs': {'only_sign': True, 'cos_matrix': False},\n", + " 'mse_mag_kwargs': {'target': 0.1, 'multiply': False}}}" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import ml_utility_loss.loss_learning.estimator.params2 as PARAMS\n", + "from ml_utility_loss.tuning import map_parameters\n", + "from ml_utility_loss.loss_learning.estimator.params.default import update_param_space, update_param_space_2\n", + "import wandb\n", + "\n", + "#\"\"\"\n", + "param_space = {\n", + " **getattr(PARAMS, dataset_name).PARAM_SPACE,\n", + "}\n", + "params = {\n", + " **getattr(PARAMS, dataset_name).BESTS[param_index],\n", + "}\n", + "if gp:\n", + " params[\"gradient_penalty_mode\"] = \"ALL\"\n", + " params[\"mse_mag\"] = True\n", + " if gp_multiply:\n", + " params[\"mse_mag_multiply\"] = True\n", + " params[\"mse_mag_target\"] = 1.0\n", + " else:\n", + " params[\"mse_mag_multiply\"] = False\n", + " params[\"mse_mag_target\"] = 0.1\n", + "else:\n", + " params[\"gradient_penalty_mode\"] = \"NONE\"\n", + " params[\"mse_mag\"] = False\n", + "params[\"single_model\"] = False\n", + "if models:\n", + " params[\"models\"] = models\n", + "if single_model:\n", + " params[\"fixed_role_model\"] = single_model\n", + " params[\"single_model\"] = True\n", + " params[\"models\"] = [single_model]\n", + "if params[\"fixed_role_model\"] == \"realtabformer\" and dataset_name == \"treatment\":\n", + " params[\"batch_size\"] = 2\n", + "params[\"max_seconds\"] = 3600\n", + "params[\"patience\"] = 10\n", + "params[\"epochs\"] = 100\n", + "if debug:\n", + " params[\"epochs\"] = 2\n", + "with open(\"params.json\", \"w\") as f:\n", + " json.dump(params, f)\n", + "params = map_parameters(params, param_space=param_space)\n", + "params" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "a48bd9e9", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T12:42:12.465760Z", + "iopub.status.busy": "2024-02-29T12:42:12.465462Z", + "iopub.status.idle": "2024-02-29T12:42:12.537486Z", + "shell.execute_reply": "2024-02-29T12:42:12.536552Z" + }, + "papermill": { + "duration": 0.08776, + "end_time": "2024-02-29T12:42:12.539858", + "exception": false, + "start_time": "2024-02-29T12:42:12.452098", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "load_dataset_3_factory 2\n", + "Caching in ../../../../insurance/_cache/lct_gan/all inf False\n", + "Splitting without random!\n", + "Split with reverse index!\n", + "../../../../ml-utility-loss/datasets_2/insurance [80, 20]\n", + "Caching in ../../../../insurance/_cache4/lct_gan/all inf False\n", + "Splitting without random!\n", + "Split with reverse index!\n", + "../../../../ml-utility-loss/datasets_4/insurance [80, 20]\n", + "Caching in ../../../../insurance/_cache5/lct_gan/all inf False\n", + "Splitting without random!\n", + "Split with reverse index!\n", + "../../../../ml-utility-loss/datasets_5/insurance [160, 40]\n", + "[320, 80]\n", + "[320, 80]\n" + ] + } + ], + "source": [ + "train_set, val_set = datasetsn(model=params[\"fixed_role_model\"], synth_data=params[\"synth_data\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "2fcb1418", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "execution": { + "iopub.execute_input": "2024-02-29T12:42:12.570494Z", + "iopub.status.busy": "2024-02-29T12:42:12.570173Z", + "iopub.status.idle": "2024-02-29T12:42:13.013319Z", + "shell.execute_reply": "2024-02-29T12:42:13.012260Z" + }, + "executionInfo": { + "elapsed": 396850, + "status": "error", + "timestamp": 1696841446059, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "_bt1MQc5kpSk", + "outputId": "01c1d3e5-ac64-461d-835a-b76f4a66e6d6", + "papermill": { + "duration": 0.460597, + "end_time": "2024-02-29T12:42:13.015412", + "exception": false, + "start_time": "2024-02-29T12:42:12.554815", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Creating model of type \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[*] Embedding False True\n", + "['lct_gan'] 1\n" + ] + } + ], + "source": [ + "from ml_utility_loss.loss_learning.estimator.model.pipeline import remove_non_model_params\n", + "from ml_utility_loss.loss_learning.estimator.pipeline import create_model\n", + "from ml_utility_loss.util import filter_dict, clear_memory\n", + "\n", + "clear_memory()\n", + "\n", + "params2 = remove_non_model_params(params)\n", + "adapters = filter_dict(preprocessor.adapter_sizes, params[\"models\"])\n", + "\n", + "model = create_model(\n", + " adapters=adapters,\n", + " #Body=\"twin_encoder\",\n", + " **params2,\n", + ")\n", + "#cf.apply_weight_standardization(model, n_last_layers_ignore=0)\n", + "print(model.models, len(model.adapters))" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "938f94fc", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T12:42:13.070814Z", + "iopub.status.busy": "2024-02-29T12:42:13.070443Z", + "iopub.status.idle": "2024-02-29T12:42:13.074413Z", + "shell.execute_reply": "2024-02-29T12:42:13.073661Z" + }, + "papermill": { + "duration": 0.035244, + "end_time": "2024-02-29T12:42:13.076511", + "exception": false, + "start_time": "2024-02-29T12:42:13.041267", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "study_name=f\"{model_name}_{dataset_name}\"" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "12fb613e", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T12:42:13.131950Z", + "iopub.status.busy": "2024-02-29T12:42:13.131563Z", + "iopub.status.idle": "2024-02-29T12:42:13.140556Z", + "shell.execute_reply": "2024-02-29T12:42:13.139807Z" + }, + "papermill": { + "duration": 0.045465, + "end_time": "2024-02-29T12:42:13.142649", + "exception": false, + "start_time": "2024-02-29T12:42:13.097184", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "9631361" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def count_parameters(model):\n", + " return sum(p.numel() for p in model.parameters() if p.requires_grad)\n", + "\n", + "count_parameters(model)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "bd386e57", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T12:42:13.187726Z", + "iopub.status.busy": "2024-02-29T12:42:13.187391Z", + "iopub.status.idle": "2024-02-29T12:42:13.278191Z", + "shell.execute_reply": "2024-02-29T12:42:13.277246Z" + }, + "papermill": { + "duration": 0.108973, + "end_time": "2024-02-29T12:42:13.280766", + "exception": false, + "start_time": "2024-02-29T12:42:13.171793", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "========================================================================================================================\n", + "Layer (type:depth-idx) Output Shape Param #\n", + "========================================================================================================================\n", + "MLUtilitySingle [2, 1071, 29] --\n", + "├─Adapter: 1-1 [2, 1071, 29] --\n", + "│ └─Sequential: 2-1 [2, 1071, 256] --\n", + "│ │ └─FeedForward: 3-1 [2, 1071, 1024] --\n", + "│ │ │ └─Linear: 4-1 [2, 1071, 1024] 30,720\n", + "│ │ │ └─ReLU: 4-2 [2, 1071, 1024] --\n", + "│ │ └─FeedForward: 3-2 [2, 1071, 1024] --\n", + "│ │ │ └─Linear: 4-3 [2, 1071, 1024] 1,049,600\n", + "│ │ │ └─ReLU: 4-4 [2, 1071, 1024] --\n", + "│ │ └─FeedForward: 3-3 [2, 1071, 1024] --\n", + "│ │ │ └─Linear: 4-5 [2, 1071, 1024] 1,049,600\n", + "│ │ │ └─ReLU: 4-6 [2, 1071, 1024] --\n", + "│ │ └─FeedForward: 3-4 [2, 1071, 1024] --\n", + "│ │ │ └─Linear: 4-7 [2, 1071, 1024] 1,049,600\n", + "│ │ │ └─ReLU: 4-8 [2, 1071, 1024] --\n", + "│ │ └─FeedForward: 3-5 [2, 1071, 1024] --\n", + "│ │ │ └─Linear: 4-9 [2, 1071, 1024] 1,049,600\n", + "│ │ │ └─ReLU: 4-10 [2, 1071, 1024] --\n", + "│ │ └─FeedForward: 3-6 [2, 1071, 1024] --\n", + "│ │ │ └─Linear: 4-11 [2, 1071, 1024] 1,049,600\n", + "│ │ │ └─ReLU: 4-12 [2, 1071, 1024] --\n", + "│ │ └─FeedForward: 3-7 [2, 1071, 256] --\n", + "│ │ │ └─Linear: 4-13 [2, 1071, 256] 262,400\n", + "│ │ │ └─Softsign: 4-14 [2, 1071, 256] --\n", + "├─Adapter: 1-2 [2, 267, 29] (recursive)\n", + "│ └─Sequential: 2-2 [2, 267, 256] (recursive)\n", + "│ │ └─FeedForward: 3-8 [2, 267, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-15 [2, 267, 1024] (recursive)\n", + "│ │ │ └─ReLU: 4-16 [2, 267, 1024] --\n", + "│ │ └─FeedForward: 3-9 [2, 267, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-17 [2, 267, 1024] (recursive)\n", + "│ │ │ └─ReLU: 4-18 [2, 267, 1024] --\n", + "│ │ └─FeedForward: 3-10 [2, 267, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-19 [2, 267, 1024] (recursive)\n", + "│ │ │ └─ReLU: 4-20 [2, 267, 1024] --\n", + "│ │ └─FeedForward: 3-11 [2, 267, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-21 [2, 267, 1024] (recursive)\n", + "│ │ │ └─ReLU: 4-22 [2, 267, 1024] --\n", + "│ │ └─FeedForward: 3-12 [2, 267, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-23 [2, 267, 1024] (recursive)\n", + "│ │ │ └─ReLU: 4-24 [2, 267, 1024] --\n", + "│ │ └─FeedForward: 3-13 [2, 267, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-25 [2, 267, 1024] (recursive)\n", + "│ │ │ └─ReLU: 4-26 [2, 267, 1024] --\n", + "│ │ └─FeedForward: 3-14 [2, 267, 256] (recursive)\n", + "│ │ │ └─Linear: 4-27 [2, 267, 256] (recursive)\n", + "│ │ │ └─Softsign: 4-28 [2, 267, 256] --\n", + "├─TwinEncoder: 1-3 [2, 4096] --\n", + "│ └─Encoder: 2-3 [2, 16, 256] --\n", + "│ │ └─ModuleList: 3-16 -- (recursive)\n", + "│ │ │ └─EncoderLayer: 4-29 [2, 1071, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-1 [2, 1071, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-1 [2, 32, 256] 8,192\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-2 [2, 32, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-1 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-2 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-3 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-4 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-1 [2, 64, 32, 1071] --\n", + "│ │ │ │ │ │ └─Linear: 7-5 [2, 32, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-6 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-3 [2, 1071, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-7 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-8 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-9 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-10 [2, 64, 1071, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-2 [2, 64, 1071, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-11 [2, 1071, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-12 [2, 1071, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-2 [2, 1071, 256] --\n", + "│ │ │ │ │ └─Linear: 6-4 [2, 1071, 512] 131,584\n", + "│ │ │ │ │ └─ReLU6: 6-5 [2, 1071, 512] --\n", + "│ │ │ │ │ └─Linear: 6-6 [2, 1071, 256] 131,328\n", + "│ │ │ └─EncoderLayer: 4-30 [2, 1071, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-3 [2, 1071, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-7 [2, 32, 256] 8,192\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-8 [2, 32, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-13 [2, 32, 256] 65,536\n", + "│ │ │ │ │ �� └─Linear: 7-14 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-15 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-16 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-3 [2, 64, 32, 1071] --\n", + "│ │ │ │ │ │ └─Linear: 7-17 [2, 32, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-18 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-9 [2, 1071, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-19 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-20 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-21 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-22 [2, 64, 1071, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-4 [2, 64, 1071, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-23 [2, 1071, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-24 [2, 1071, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-4 [2, 1071, 256] --\n", + "│ │ │ │ │ └─Linear: 6-10 [2, 1071, 512] 131,584\n", + "│ │ │ │ │ └─ReLU6: 6-11 [2, 1071, 512] --\n", + "│ │ │ │ │ └─Linear: 6-12 [2, 1071, 256] 131,328\n", + "│ │ │ └─EncoderLayer: 4-31 [2, 1071, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-5 [2, 1071, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-13 [2, 32, 256] 8,192\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-14 [2, 32, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-25 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-26 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-27 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-28 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-5 [2, 64, 32, 1071] --\n", + "│ │ │ │ │ │ └─Linear: 7-29 [2, 32, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-30 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-15 [2, 1071, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-31 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-32 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-33 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-34 [2, 64, 1071, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-6 [2, 64, 1071, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-35 [2, 1071, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-36 [2, 1071, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-6 [2, 1071, 256] --\n", + "│ │ │ │ │ └─Linear: 6-16 [2, 1071, 512] 131,584\n", + "│ │ │ │ │ └─ReLU6: 6-17 [2, 1071, 512] --\n", + "│ │ │ │ │ └─Linear: 6-18 [2, 1071, 256] 131,328\n", + "│ │ │ └─EncoderLayer: 4-32 [2, 16, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-7 [2, 1071, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-19 [2, 32, 256] 8,192\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-20 [2, 32, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-37 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-38 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-39 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-40 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-7 [2, 64, 32, 1071] --\n", + "│ │ │ │ │ │ └─Linear: 7-41 [2, 32, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-42 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-21 [2, 1071, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-43 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-44 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-45 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-46 [2, 64, 1071, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-8 [2, 64, 1071, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-47 [2, 1071, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-48 [2, 1071, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-8 [2, 1071, 256] --\n", + "│ │ │ │ │ └─Linear: 6-22 [2, 1071, 512] 131,584\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-23 [2, 1071, 512] --\n", + "│ │ │ │ │ └─Linear: 6-24 [2, 1071, 256] 131,328\n", + "│ │ │ │ └─PoolingByMultiheadAttention: 5-9 [2, 16, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-25 [2, 16, 256] 4,096\n", + "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-26 [2, 16, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-49 [2, 16, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-50 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-51 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-52 [2, 64, 16, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-9 [2, 64, 16, 1071] --\n", + "│ │ │ │ │ │ └─Linear: 7-53 [2, 16, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-54 [2, 16, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-10 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-27 [2, 16, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-28 [2, 16, 512] --\n", + "│ │ │ │ │ └─Linear: 6-29 [2, 16, 256] (recursive)\n", + "│ └─Encoder: 2-4 [2, 16, 256] (recursive)\n", + "│ │ └─ModuleList: 3-16 -- (recursive)\n", + "│ │ │ └─EncoderLayer: 4-33 [2, 267, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-11 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-30 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-31 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-55 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-56 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-57 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-58 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-10 [2, 64, 32, 267] --\n", + "│ │ │ │ │ │ └─Linear: 7-59 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-60 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-32 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-61 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-62 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-63 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-64 [2, 64, 267, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-11 [2, 64, 267, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-65 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-66 [2, 267, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-12 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-33 [2, 267, 512] (recursive)\n", + "│ │ │ │ │ └─ReLU6: 6-34 [2, 267, 512] --\n", + "│ │ │ │ │ └─Linear: 6-35 [2, 267, 256] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-34 [2, 267, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-13 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-36 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-37 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-67 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-68 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-69 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-70 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-12 [2, 64, 32, 267] --\n", + "│ │ │ │ │ │ └─Linear: 7-71 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-72 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-38 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-73 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-74 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-75 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-76 [2, 64, 267, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-13 [2, 64, 267, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-77 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-78 [2, 267, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-14 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-39 [2, 267, 512] (recursive)\n", + "│ │ │ │ │ └─ReLU6: 6-40 [2, 267, 512] --\n", + "│ │ │ │ │ └─Linear: 6-41 [2, 267, 256] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-35 [2, 267, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-15 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-42 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-43 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-79 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-80 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-81 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-82 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-14 [2, 64, 32, 267] --\n", + "│ │ │ │ │ │ └─Linear: 7-83 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-84 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-44 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-85 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-86 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-87 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-88 [2, 64, 267, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-15 [2, 64, 267, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-89 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-90 [2, 267, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-16 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-45 [2, 267, 512] (recursive)\n", + "│ │ │ │ │ └─ReLU6: 6-46 [2, 267, 512] --\n", + "│ │ │ │ │ └─Linear: 6-47 [2, 267, 256] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-36 [2, 16, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-17 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-48 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-49 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-91 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-92 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-93 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-94 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-16 [2, 64, 32, 267] --\n", + "│ │ │ │ │ │ └─Linear: 7-95 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-96 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-50 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-97 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-98 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-99 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-100 [2, 64, 267, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-17 [2, 64, 267, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-101 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-102 [2, 267, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-18 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-51 [2, 267, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-52 [2, 267, 512] --\n", + "│ │ │ │ │ └─Linear: 6-53 [2, 267, 256] (recursive)\n", + "│ │ │ │ └─PoolingByMultiheadAttention: 5-19 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-54 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-55 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-103 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-104 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-105 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-106 [2, 64, 16, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-18 [2, 64, 16, 267] --\n", + "│ │ │ │ │ │ └─Linear: 7-107 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-108 [2, 16, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-20 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-56 [2, 16, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-57 [2, 16, 512] --\n", + "│ │ │ │ │ └─Linear: 6-58 [2, 16, 256] (recursive)\n", + "├─Head: 1-4 [2] --\n", + "│ └─Sequential: 2-5 [2, 1] --\n", + "│ │ └─FeedForward: 3-17 [2, 128] --\n", + "│ │ │ └─Linear: 4-37 [2, 128] 524,416\n", + "│ │ │ └─RReLU: 4-38 [2, 128] --\n", + "│ │ └─FeedForward: 3-18 [2, 128] --\n", + "│ │ │ └─Linear: 4-39 [2, 128] 16,512\n", + "│ │ │ └─RReLU: 4-40 [2, 128] --\n", + "│ │ └─FeedForward: 3-19 [2, 128] --\n", + "│ │ │ └─Linear: 4-41 [2, 128] 16,512\n", + "│ │ │ └─RReLU: 4-42 [2, 128] --\n", + "│ │ └─FeedForward: 3-20 [2, 128] --\n", + "│ │ │ └─Linear: 4-43 [2, 128] 16,512\n", + "│ │ │ └─RReLU: 4-44 [2, 128] --\n", + "│ │ └─FeedForward: 3-21 [2, 128] --\n", + "│ │ │ └─Linear: 4-45 [2, 128] 16,512\n", + "│ │ │ └─RReLU: 4-46 [2, 128] --\n", + "│ │ └─FeedForward: 3-22 [2, 128] --\n", + "│ │ │ └─Linear: 4-47 [2, 128] 16,512\n", + "│ │ │ └─RReLU: 4-48 [2, 128] --\n", + "│ │ └─FeedForward: 3-23 [2, 128] --\n", + "│ │ │ └─Linear: 4-49 [2, 128] 16,512\n", + "│ │ │ └─RReLU: 4-50 [2, 128] --\n", + "│ │ └─FeedForward: 3-24 [2, 128] --\n", + "│ │ │ └─Linear: 4-51 [2, 128] 16,512\n", + "│ │ │ └─RReLU: 4-52 [2, 128] --\n", + "│ │ └─FeedForward: 3-25 [2, 1] --\n", + "│ │ │ └─Linear: 4-53 [2, 1] 129\n", + "│ │ │ └─Softsign: 4-54 [2, 1] --\n", + "========================================================================================================================\n", + "Total params: 9,631,361\n", + "Trainable params: 9,631,361\n", + "Non-trainable params: 0\n", + "Total mult-adds (M): 38.15\n", + "========================================================================================================================\n", + "Input size (MB): 0.31\n", + "Forward/backward pass size (MB): 307.47\n", + "Params size (MB): 38.53\n", + "Estimated Total Size (MB): 346.31\n", + "========================================================================================================================" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from torchinfo import summary\n", + "\n", + "role_model = params[\"fixed_role_model\"]\n", + "s = train_set[0][role_model]\n", + "summary(model[role_model], input_size=((2, *s[0].shape), (2, *s[1].shape)), depth=9) # 8 max" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "0f42c4d1", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T12:42:13.312205Z", + "iopub.status.busy": "2024-02-29T12:42:13.311907Z", + "iopub.status.idle": "2024-02-29T13:06:34.619283Z", + "shell.execute_reply": "2024-02-29T13:06:34.618279Z" + }, + "papermill": { + "duration": 1461.343801, + "end_time": "2024-02-29T13:06:34.639603", + "exception": false, + "start_time": "2024-02-29T12:42:13.295802", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: Tracking run with wandb version 0.16.3\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: W&B syncing is set to \u001b[1m`offline`\u001b[0m in this directory. \n", + "\u001b[34m\u001b[1mwandb\u001b[0m: Run \u001b[1m`wandb online`\u001b[0m or set \u001b[1mWANDB_MODE=online\u001b[0m to enable cloud syncing.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "g_loss_mul 0.1\n", + "Epoch 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.07503844532329822, 'avg_role_model_std_loss': 3.76196769104788, 'avg_role_model_mean_pred_loss': 0.039352887886764186, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.07503844532329822, 'n_size': 320, 'n_batch': 40, 'duration': 42.94257736206055, 'duration_batch': 1.0735644340515136, 'duration_size': 0.1341955542564392, 'avg_pred_std': 0.13469835626892745}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.008877724732155912, 'avg_role_model_std_loss': 3.33818835544007, 'avg_role_model_mean_pred_loss': 2.9330407841143823e-06, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.008877724732155912, 'n_size': 80, 'n_batch': 10, 'duration': 9.165157794952393, 'duration_batch': 0.9165157794952392, 'duration_size': 0.1145644724369049, 'avg_pred_std': 0.037592777702957395}\n", + "Epoch 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.02608004305366194, 'avg_role_model_std_loss': 2.0130314562969813, 'avg_role_model_mean_pred_loss': 0.005282479949307373, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.02608004305366194, 'n_size': 320, 'n_batch': 40, 'duration': 42.331037521362305, 'duration_batch': 1.0582759380340576, 'duration_size': 0.1322844922542572, 'avg_pred_std': 0.10117223353590817}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.005078719957964495, 'avg_role_model_std_loss': 0.2115427433644072, 'avg_role_model_mean_pred_loss': 3.133896269957859e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.005078719957964495, 'n_size': 80, 'n_batch': 10, 'duration': 9.217864990234375, 'duration_batch': 0.9217864990234375, 'duration_size': 0.11522331237792968, 'avg_pred_std': 0.11006196644157171}\n", + "Epoch 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.007246867158391979, 'avg_role_model_std_loss': 3.0597032676599154, 'avg_role_model_mean_pred_loss': 9.03313408463391e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.007246867158391979, 'n_size': 320, 'n_batch': 40, 'duration': 42.494264125823975, 'duration_batch': 1.0623566031455993, 'duration_size': 0.13279457539319992, 'avg_pred_std': 0.07669011817779392}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0074968072643969205, 'avg_role_model_std_loss': 2.55860044410183, 'avg_role_model_mean_pred_loss': 0.00017504165297967944, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0074968072643969205, 'n_size': 80, 'n_batch': 10, 'duration': 9.166083335876465, 'duration_batch': 0.9166083335876465, 'duration_size': 0.11457604169845581, 'avg_pred_std': 0.09575922545045615}\n", + "Epoch 3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.006846483054687269, 'avg_role_model_std_loss': 2.2157006146561513, 'avg_role_model_mean_pred_loss': 0.0007793176604440372, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.006846483054687269, 'n_size': 320, 'n_batch': 40, 'duration': 42.40406584739685, 'duration_batch': 1.0601016461849213, 'duration_size': 0.13251270577311516, 'avg_pred_std': 0.08761264618951828}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0020610511739505453, 'avg_role_model_std_loss': 0.43892243231239264, 'avg_role_model_mean_pred_loss': 7.913704455120296e-06, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0020610511739505453, 'n_size': 80, 'n_batch': 10, 'duration': 9.511794328689575, 'duration_batch': 0.9511794328689576, 'duration_size': 0.1188974291086197, 'avg_pred_std': 0.08304880987852811}\n", + "Epoch 4\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.002302334751948365, 'avg_role_model_std_loss': 0.6305191363795544, 'avg_role_model_mean_pred_loss': 1.4314678949647008e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.002302334751948365, 'n_size': 320, 'n_batch': 40, 'duration': 43.27270483970642, 'duration_batch': 1.0818176209926604, 'duration_size': 0.13522720262408255, 'avg_pred_std': 0.08970329142175615}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.004081522431806661, 'avg_role_model_std_loss': 0.026551660033874214, 'avg_role_model_mean_pred_loss': 2.7209868290256623e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.004081522431806661, 'n_size': 80, 'n_batch': 10, 'duration': 9.23831558227539, 'duration_batch': 0.923831558227539, 'duration_size': 0.11547894477844238, 'avg_pred_std': 0.11656681830063462}\n", + "Epoch 5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0013704985673030023, 'avg_role_model_std_loss': 0.32384693517769847, 'avg_role_model_mean_pred_loss': 7.155363357548236e-06, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0013704985673030023, 'n_size': 320, 'n_batch': 40, 'duration': 42.453025341033936, 'duration_batch': 1.0613256335258483, 'duration_size': 0.13266570419073104, 'avg_pred_std': 0.09745097612030804}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0033582281379494817, 'avg_role_model_std_loss': 0.619899958840142, 'avg_role_model_mean_pred_loss': 2.357043052825247e-06, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0033582281379494817, 'n_size': 80, 'n_batch': 10, 'duration': 9.264163732528687, 'duration_batch': 0.9264163732528686, 'duration_size': 0.11580204665660858, 'avg_pred_std': 0.06247350247576833}\n", + "Epoch 6\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0025572317323167225, 'avg_role_model_std_loss': 1.3281221274127346, 'avg_role_model_mean_pred_loss': 4.255108958927875e-06, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0025572317323167225, 'n_size': 320, 'n_batch': 40, 'duration': 42.2554829120636, 'duration_batch': 1.05638707280159, 'duration_size': 0.13204838410019876, 'avg_pred_std': 0.08552498414646834}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.001253202352381777, 'avg_role_model_std_loss': 0.32618888739889373, 'avg_role_model_mean_pred_loss': 2.2838767717248133e-06, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.001253202352381777, 'n_size': 80, 'n_batch': 10, 'duration': 9.205610513687134, 'duration_batch': 0.9205610513687134, 'duration_size': 0.11507013142108917, 'avg_pred_std': 0.07330623050220311}\n", + "Epoch 7\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0017415513455489417, 'avg_role_model_std_loss': 0.39128143024250334, 'avg_role_model_mean_pred_loss': 1.98570894781383e-06, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0017415513455489417, 'n_size': 320, 'n_batch': 40, 'duration': 42.568729639053345, 'duration_batch': 1.0642182409763337, 'duration_size': 0.1330272801220417, 'avg_pred_std': 0.08582097220933065}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.002552773474599235, 'avg_role_model_std_loss': 0.38444976235623474, 'avg_role_model_mean_pred_loss': 9.21505393498695e-06, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.002552773474599235, 'n_size': 80, 'n_batch': 10, 'duration': 9.204639673233032, 'duration_batch': 0.9204639673233033, 'duration_size': 0.11505799591541291, 'avg_pred_std': 0.09078566757962107}\n", + "Epoch 8\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.001197526408395788, 'avg_role_model_std_loss': 0.5185240543789404, 'avg_role_model_mean_pred_loss': 6.638705742609621e-06, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.001197526408395788, 'n_size': 320, 'n_batch': 40, 'duration': 42.46436643600464, 'duration_batch': 1.061609160900116, 'duration_size': 0.1327011451125145, 'avg_pred_std': 0.0921793600777164}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0011125051009003074, 'avg_role_model_std_loss': 0.1445327332803572, 'avg_role_model_mean_pred_loss': 3.7028677351003125e-06, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0011125051009003074, 'n_size': 80, 'n_batch': 10, 'duration': 9.251813411712646, 'duration_batch': 0.9251813411712646, 'duration_size': 0.11564766764640808, 'avg_pred_std': 0.08213724349625409}\n", + "Epoch 9\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0011423767211454106, 'avg_role_model_std_loss': 0.24242009912380066, 'avg_role_model_mean_pred_loss': 5.1029623472642616e-06, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0011423767211454106, 'n_size': 320, 'n_batch': 40, 'duration': 42.30474233627319, 'duration_batch': 1.0576185584068298, 'duration_size': 0.13220231980085373, 'avg_pred_std': 0.086794763058424}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0021649388814694247, 'avg_role_model_std_loss': 1.9614427807347965, 'avg_role_model_mean_pred_loss': 1.2043508045372908e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0021649388814694247, 'n_size': 80, 'n_batch': 10, 'duration': 9.148065567016602, 'duration_batch': 0.9148065567016601, 'duration_size': 0.11435081958770751, 'avg_pred_std': 0.0991100890096277}\n", + "Epoch 10\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0008830112970827031, 'avg_role_model_std_loss': 0.4022787155074184, 'avg_role_model_mean_pred_loss': 5.028790277500362e-07, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0008830112970827031, 'n_size': 320, 'n_batch': 40, 'duration': 42.54185461997986, 'duration_batch': 1.0635463654994965, 'duration_size': 0.13294329568743707, 'avg_pred_std': 0.09175913570215925}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0017155635854578578, 'avg_role_model_std_loss': 1.2685116354904722, 'avg_role_model_mean_pred_loss': 2.10015661070706e-06, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0017155635854578578, 'n_size': 80, 'n_batch': 10, 'duration': 9.253859281539917, 'duration_batch': 0.9253859281539917, 'duration_size': 0.11567324101924896, 'avg_pred_std': 0.0978053328813985}\n", + "Epoch 11\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.001937569323945354, 'avg_role_model_std_loss': 0.6675240401481404, 'avg_role_model_mean_pred_loss': 3.123376906712105e-06, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.001937569323945354, 'n_size': 320, 'n_batch': 40, 'duration': 42.27454662322998, 'duration_batch': 1.0568636655807495, 'duration_size': 0.1321079581975937, 'avg_pred_std': 0.09221202009357513}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0027879032801138236, 'avg_role_model_std_loss': 0.09599128968548029, 'avg_role_model_mean_pred_loss': 1.215036173931594e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0027879032801138236, 'n_size': 80, 'n_batch': 10, 'duration': 9.17811369895935, 'duration_batch': 0.917811369895935, 'duration_size': 0.11472642123699188, 'avg_pred_std': 0.11065587596967816}\n", + "Epoch 12\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0013319606783625203, 'avg_role_model_std_loss': 0.16566794978843974, 'avg_role_model_mean_pred_loss': 6.807524444540914e-07, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0013319606783625203, 'n_size': 320, 'n_batch': 40, 'duration': 42.627525091171265, 'duration_batch': 1.0656881272792815, 'duration_size': 0.1332110159099102, 'avg_pred_std': 0.10023473438341171}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0013272355950903147, 'avg_role_model_std_loss': 0.5792492911004956, 'avg_role_model_mean_pred_loss': 6.966086060211652e-08, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0013272355950903147, 'n_size': 80, 'n_batch': 10, 'duration': 9.216788053512573, 'duration_batch': 0.9216788053512573, 'duration_size': 0.11520985066890717, 'avg_pred_std': 0.07118493653833866}\n", + "Epoch 13\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0007021169698418816, 'avg_role_model_std_loss': 0.11813758928258485, 'avg_role_model_mean_pred_loss': 2.759127278142287e-06, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0007021169698418816, 'n_size': 320, 'n_batch': 40, 'duration': 42.255826234817505, 'duration_batch': 1.0563956558704377, 'duration_size': 0.1320494569838047, 'avg_pred_std': 0.09224181645549834}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0008028386626392602, 'avg_role_model_std_loss': 0.06161341504857774, 'avg_role_model_mean_pred_loss': 6.375153506842091e-07, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0008028386626392602, 'n_size': 80, 'n_batch': 10, 'duration': 9.26439380645752, 'duration_batch': 0.9264393806457519, 'duration_size': 0.11580492258071899, 'avg_pred_std': 0.0892744664568454}\n", + "Epoch 14\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0006613305880819098, 'avg_role_model_std_loss': 0.18104081245551243, 'avg_role_model_mean_pred_loss': 6.271647721827747e-07, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0006613305880819098, 'n_size': 320, 'n_batch': 40, 'duration': 42.603567361831665, 'duration_batch': 1.0650891840457917, 'duration_size': 0.13313614800572396, 'avg_pred_std': 0.09589193011634052}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0005620345647912473, 'avg_role_model_std_loss': 0.01514620759198806, 'avg_role_model_mean_pred_loss': 4.4228354818542924e-07, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0005620345647912473, 'n_size': 80, 'n_batch': 10, 'duration': 9.197651863098145, 'duration_batch': 0.9197651863098144, 'duration_size': 0.1149706482887268, 'avg_pred_std': 0.09222434270195663}\n", + "Epoch 15\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0007842243476261501, 'avg_role_model_std_loss': 0.3221512252403457, 'avg_role_model_mean_pred_loss': 1.0985442627384213e-06, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0007842243476261501, 'n_size': 320, 'n_batch': 40, 'duration': 42.46329689025879, 'duration_batch': 1.0615824222564698, 'duration_size': 0.13269780278205873, 'avg_pred_std': 0.09709920620080084}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.001301504473667592, 'avg_role_model_std_loss': 2.9538385085063057, 'avg_role_model_mean_pred_loss': 4.959147403504893e-07, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.001301504473667592, 'n_size': 80, 'n_batch': 10, 'duration': 9.24899411201477, 'duration_batch': 0.924899411201477, 'duration_size': 0.11561242640018463, 'avg_pred_std': 0.1033931726939045}\n", + "Epoch 16\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013570401900506113, 'avg_role_model_std_loss': 0.36384937064023576, 'avg_role_model_mean_pred_loss': 0.0018209778673778428, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.013570401900506113, 'n_size': 320, 'n_batch': 40, 'duration': 42.59553337097168, 'duration_batch': 1.064888334274292, 'duration_size': 0.1331110417842865, 'avg_pred_std': 0.12845125668682159}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.16798840463161469, 'avg_role_model_std_loss': 0.3928926819935441, 'avg_role_model_mean_pred_loss': 0.06907801991328597, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.16798840463161469, 'n_size': 80, 'n_batch': 10, 'duration': 9.341678619384766, 'duration_batch': 0.9341678619384766, 'duration_size': 0.11677098274230957, 'avg_pred_std': 0.28858067095279694}\n", + "Epoch 17\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.22693241573870182, 'avg_role_model_std_loss': 0.459286569285905, 'avg_role_model_mean_pred_loss': 0.10300876491237432, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.22693241573870182, 'n_size': 320, 'n_batch': 40, 'duration': 42.3380069732666, 'duration_batch': 1.058450174331665, 'duration_size': 0.13230627179145812, 'avg_pred_std': 0.32175534069538114}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.4309734970331192, 'avg_role_model_std_loss': 0.6810152728110552, 'avg_role_model_mean_pred_loss': 0.33519675582647324, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.4309734970331192, 'n_size': 80, 'n_batch': 10, 'duration': 9.211932897567749, 'duration_batch': 0.921193289756775, 'duration_size': 0.11514916121959687, 'avg_pred_std': 0.35243880599737165}\n", + "Epoch 18\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.2022466917289421, 'avg_role_model_std_loss': 0.7070020012586611, 'avg_role_model_mean_pred_loss': 0.11807100524520138, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.2022466917289421, 'n_size': 320, 'n_batch': 40, 'duration': 42.41661763191223, 'duration_batch': 1.0604154407978057, 'duration_size': 0.1325519300997257, 'avg_pred_std': 0.34771558828651905}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.023606129095423967, 'avg_role_model_std_loss': 0.21133080043364316, 'avg_role_model_mean_pred_loss': 0.0015780384962681636, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.023606129095423967, 'n_size': 80, 'n_batch': 10, 'duration': 9.170459747314453, 'duration_batch': 0.9170459747314453, 'duration_size': 0.11463074684143067, 'avg_pred_std': 0.16341671436093747}\n", + "Epoch 19\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.005479642776481342, 'avg_role_model_std_loss': 0.5328093900557633, 'avg_role_model_mean_pred_loss': 8.112759967222604e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.005479642776481342, 'n_size': 320, 'n_batch': 40, 'duration': 42.17777228355408, 'duration_batch': 1.0544443070888518, 'duration_size': 0.13180553838610648, 'avg_pred_std': 0.1161046927794814}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0007801399522577412, 'avg_role_model_std_loss': 0.05935813882520051, 'avg_role_model_mean_pred_loss': 5.190229413365443e-07, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0007801399522577412, 'n_size': 80, 'n_batch': 10, 'duration': 9.320383310317993, 'duration_batch': 0.9320383310317993, 'duration_size': 0.11650479137897492, 'avg_pred_std': 0.0829056172631681}\n", + "Epoch 20\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0016211183414270637, 'avg_role_model_std_loss': 0.5920635455369594, 'avg_role_model_mean_pred_loss': 2.3483921812016834e-06, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0016211183414270637, 'n_size': 320, 'n_batch': 40, 'duration': 42.64041256904602, 'duration_batch': 1.0660103142261506, 'duration_size': 0.13325128927826882, 'avg_pred_std': 0.08777563656913116}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0008631729724584147, 'avg_role_model_std_loss': 0.09347999086021445, 'avg_role_model_mean_pred_loss': 1.679538957422011e-06, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0008631729724584147, 'n_size': 80, 'n_batch': 10, 'duration': 9.24825143814087, 'duration_batch': 0.9248251438140869, 'duration_size': 0.11560314297676086, 'avg_pred_std': 0.07839330667629837}\n", + "Epoch 21\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0005253879406154737, 'avg_role_model_std_loss': 0.10636353976760801, 'avg_role_model_mean_pred_loss': 2.6855408757735233e-07, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0005253879406154737, 'n_size': 320, 'n_batch': 40, 'duration': 42.83327293395996, 'duration_batch': 1.070831823348999, 'duration_size': 0.13385397791862488, 'avg_pred_std': 0.09573199808364734}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0005467957133078016, 'avg_role_model_std_loss': 0.23533951704739592, 'avg_role_model_mean_pred_loss': 2.0549961012861218e-07, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0005467957133078016, 'n_size': 80, 'n_batch': 10, 'duration': 9.286863803863525, 'duration_batch': 0.9286863803863525, 'duration_size': 0.11608579754829407, 'avg_pred_std': 0.08401567195542156}\n", + "Epoch 22\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0006425162649065896, 'avg_role_model_std_loss': 0.10582681066216537, 'avg_role_model_mean_pred_loss': 6.702316121443182e-07, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0006425162649065896, 'n_size': 320, 'n_batch': 40, 'duration': 42.88295650482178, 'duration_batch': 1.0720739126205445, 'duration_size': 0.13400923907756807, 'avg_pred_std': 0.09285907801240682}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.003129586172872223, 'avg_role_model_std_loss': 0.14476592368632737, 'avg_role_model_mean_pred_loss': 2.8466294405604663e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.003129586172872223, 'n_size': 80, 'n_batch': 10, 'duration': 9.417258024215698, 'duration_batch': 0.9417258024215698, 'duration_size': 0.11771572530269622, 'avg_pred_std': 0.10630810875445604}\n", + "Epoch 23\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0012267698623873002, 'avg_role_model_std_loss': 0.3422558290479515, 'avg_role_model_mean_pred_loss': 5.092052370217958e-06, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0012267698623873002, 'n_size': 320, 'n_batch': 40, 'duration': 42.59943246841431, 'duration_batch': 1.0649858117103577, 'duration_size': 0.1331232264637947, 'avg_pred_std': 0.0916012367233634}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.001950129849865334, 'avg_role_model_std_loss': 1.6070946810563327, 'avg_role_model_mean_pred_loss': 1.2394382595015685e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.001950129849865334, 'n_size': 80, 'n_batch': 10, 'duration': 9.218074083328247, 'duration_batch': 0.9218074083328247, 'duration_size': 0.11522592604160309, 'avg_pred_std': 0.06952399904839694}\n", + "Epoch 24\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0015580077400954907, 'avg_role_model_std_loss': 0.5951609104130398, 'avg_role_model_mean_pred_loss': 1.101507371748138e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0015580077400954907, 'n_size': 320, 'n_batch': 40, 'duration': 42.20673155784607, 'duration_batch': 1.0551682889461518, 'duration_size': 0.13189603611826897, 'avg_pred_std': 0.08924343169201165}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0014282745076343417, 'avg_role_model_std_loss': 1.1416928244575502, 'avg_role_model_mean_pred_loss': 5.442704249958296e-07, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0014282745076343417, 'n_size': 80, 'n_batch': 10, 'duration': 9.161205768585205, 'duration_batch': 0.9161205768585206, 'duration_size': 0.11451507210731507, 'avg_pred_std': 0.08108144407160581}\n", + "Epoch 25\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.001158999443759967, 'avg_role_model_std_loss': 0.673237547548581, 'avg_role_model_mean_pred_loss': 1.6942943679773905e-06, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.001158999443759967, 'n_size': 320, 'n_batch': 40, 'duration': 42.81976580619812, 'duration_batch': 1.070494145154953, 'duration_size': 0.13381176814436913, 'avg_pred_std': 0.09180414919974282}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: - 0.000 MB of 0.000 MB uploaded\r" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.003335691889151349, 'avg_role_model_std_loss': 0.1234515317961268, 'avg_role_model_mean_pred_loss': 9.410348545632954e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.003335691889151349, 'n_size': 80, 'n_batch': 10, 'duration': 9.541585206985474, 'duration_batch': 0.9541585206985473, 'duration_size': 0.11926981508731842, 'avg_pred_std': 0.10400733416900039}\n", + "Stopped False\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: \n", + "\u001b[34m\u001b[1mwandb\u001b[0m: Run history:\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_loss_test ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▄█▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_loss_train ▃▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▇▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_embed_loss_test ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_embed_loss_train ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_cos_loss_test ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_cos_loss_train ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_mag_loss_test ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_mag_loss_train ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_pred_std_test ▁▃▂▂▃▂▂▂▂▂▂▃▂▂▂▂▇█▄▂▂▂▃▂▂▂\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_pred_std_train ▂▂▁▁▁▂▁▁▁▁▁▁▂▁▁▂▂▇█▂▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_cos_loss_test ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_cos_loss_train ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_mag_loss_test ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_mag_loss_train ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_loss_test ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▄█▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_loss_train ▃▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▇▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_mean_pred_loss_test ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▂█▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_mean_pred_loss_train ▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▇█▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_std_loss_test █▁▆▂▁▂▂▂▁▅▄▁▂▁▁▇▂▂▁▁▁▁▁▄▃▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_std_loss_train █▅▇▅▂▁▃▂▂▁▂▂▁▁▁▁▁▂▂▂▂▁▁▁▂▂\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_batch_test ▁▂▁▇▃▃▂▂▃▁▃▂▂▃▂▃▄▂▁▄▃▃▆▂▁█\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_batch_train ▆▂▃▂█▃▁▃▃▂▃▂▄▁▄▃▄▂▃▁▄▅▆▄▁▅\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_size_test ▁▂▁▇▃▃▂▂▃▁▃▂▂▃▂▃▄▂▁▄▃▃▆▂▁█\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_size_train ▆▂▃▂█▃▁▃▃▂▃▂▄▁▄▃▄▂▃▁▄▅▆▄▁▅\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_test ▁▂▁▇▃▃▂▂▃▁▃▂▂▃▂▃▄▂▁▄▃▃▆▂▁█\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_train ▆▂▃▂█▃▁▃▃▂▃▂▄▁▄▃▄▂▃▁▄▅▆▄▁▅\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: n_batch_test ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: n_batch_train ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: n_size_test ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: n_size_train ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: \n", + "\u001b[34m\u001b[1mwandb\u001b[0m: Run summary:\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_loss_test 0.00334\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_loss_train 0.00116\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_embed_loss_test 0.0\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_embed_loss_train 0.0\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_cos_loss_test 0.0\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_cos_loss_train 0.0\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_mag_loss_test 0.0\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_mag_loss_train 0.0\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_pred_std_test 0.10401\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_pred_std_train 0.0918\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_cos_loss_test 0.0\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_cos_loss_train 0.0\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_mag_loss_test 0.0\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_mag_loss_train 0.0\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_loss_test 0.00334\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_loss_train 0.00116\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_mean_pred_loss_test 9e-05\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_mean_pred_loss_train 0.0\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_std_loss_test 0.12345\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_std_loss_train 0.67324\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_batch_test 0.95416\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_batch_train 1.07049\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_size_test 0.11927\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_size_train 0.13381\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_test 9.54159\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_train 42.81977\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: n_batch_test 10\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: n_batch_train 40\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: n_size_test 80\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: n_size_train 320\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: \n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: You can sync this run to the cloud by running:\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[1mwandb sync /kaggle/working/eval/insurance/lct_gan/2/wandb/offline-run-20240229_124214-gelsvnyc\u001b[0m\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: Find logs at: \u001b[35m\u001b[1m./wandb/offline-run-20240229_124214-gelsvnyc/logs\u001b[0m\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval loss {'role_model': 'lct_gan', 'n_size': 399, 'n_batch': 50, 'role_model_metrics': {'avg_loss': 0.0007405610326770926, 'avg_g_mag_loss': 0.1445552625342968, 'avg_g_cos_loss': 0.08170349127554655, 'pred_duration': 0.9051024913787842, 'grad_duration': 0.5714690685272217, 'total_duration': 1.4765715599060059, 'pred_std': 0.15517398715019226, 'std_loss': 1.0358485269534867e-05, 'mean_pred_loss': 9.762113677425077e-07, 'pred_rmse': 0.02721325121819973, 'pred_mae': 0.02064499258995056, 'pred_mape': 0.3238719403743744, 'grad_rmse': 0.05469190701842308, 'grad_mae': 0.03549487516283989, 'grad_mape': 0.7790535688400269}, 'non_role_model_metrics': {'avg_loss': 0, 'avg_g_mag_loss': 0, 'avg_g_cos_loss': 0, 'avg_pred_duration': 0, 'avg_grad_duration': 0, 'avg_total_duration': 0, 'avg_pred_std': 0, 'avg_std_loss': 0, 'avg_mean_pred_loss': 0}, 'avg_metrics': {'avg_loss': 0.0007405610326770926, 'avg_g_mag_loss': 0.1445552625342968, 'avg_g_cos_loss': 0.08170349127554655, 'avg_pred_duration': 0.9051024913787842, 'avg_grad_duration': 0.5714690685272217, 'avg_total_duration': 1.4765715599060059, 'avg_pred_std': 0.15517398715019226, 'avg_std_loss': 1.0358485269534867e-05, 'avg_mean_pred_loss': 9.762113677425077e-07}, 'min_metrics': {'avg_loss': 0.0007405610326770926, 'avg_g_mag_loss': 0.1445552625342968, 'avg_g_cos_loss': 0.08170349127554655, 'pred_duration': 0.9051024913787842, 'grad_duration': 0.5714690685272217, 'total_duration': 1.4765715599060059, 'pred_std': 0.15517398715019226, 'std_loss': 1.0358485269534867e-05, 'mean_pred_loss': 9.762113677425077e-07, 'pred_rmse': 0.02721325121819973, 'pred_mae': 0.02064499258995056, 'pred_mape': 0.3238719403743744, 'grad_rmse': 0.05469190701842308, 'grad_mae': 0.03549487516283989, 'grad_mape': 0.7790535688400269}, 'model_metrics': {'lct_gan': {'avg_loss': 0.0007405610326770926, 'avg_g_mag_loss': 0.1445552625342968, 'avg_g_cos_loss': 0.08170349127554655, 'pred_duration': 0.9051024913787842, 'grad_duration': 0.5714690685272217, 'total_duration': 1.4765715599060059, 'pred_std': 0.15517398715019226, 'std_loss': 1.0358485269534867e-05, 'mean_pred_loss': 9.762113677425077e-07, 'pred_rmse': 0.02721325121819973, 'pred_mae': 0.02064499258995056, 'pred_mape': 0.3238719403743744, 'grad_rmse': 0.05469190701842308, 'grad_mae': 0.03549487516283989, 'grad_mape': 0.7790535688400269}}}\n" + ] + } + ], + "source": [ + "import torch\n", + "from ml_utility_loss.loss_learning.estimator.pipeline import train, train_2\n", + "from ml_utility_loss.loss_learning.estimator.process_simple import train_epoch, eval as _eval\n", + "from ml_utility_loss.params import GradientPenaltyMode\n", + "from ml_utility_loss.util import clear_memory\n", + "import time\n", + "#torch.autograd.set_detect_anomaly(True)\n", + "\n", + "clear_memory()\n", + "\n", + "opt = params[\"Optim\"](model.parameters())\n", + "loss = train_2(\n", + " [train_set, val_set, test_set],\n", + " preprocessor=preprocessor,\n", + " whole_model=model,\n", + " optim=opt,\n", + " log_dir=\"logs\",\n", + " checkpoint_dir=\"checkpoints\",\n", + " verbose=True,\n", + " allow_same_prediction=False,\n", + " wandb=wandb,\n", + " study_name=study_name,\n", + " **params\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "9b514a07", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T13:06:34.680448Z", + "iopub.status.busy": "2024-02-29T13:06:34.680130Z", + "iopub.status.idle": "2024-02-29T13:06:34.684279Z", + "shell.execute_reply": "2024-02-29T13:06:34.683537Z" + }, + "papermill": { + "duration": 0.027317, + "end_time": "2024-02-29T13:06:34.686263", + "exception": false, + "start_time": "2024-02-29T13:06:34.658946", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "model = loss[\"whole_model\"]\n", + "opt = loss[\"optim\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "331a49e1", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T13:06:34.724114Z", + "iopub.status.busy": "2024-02-29T13:06:34.723566Z", + "iopub.status.idle": "2024-02-29T13:06:34.983440Z", + "shell.execute_reply": "2024-02-29T13:06:34.982646Z" + }, + "papermill": { + "duration": 0.281322, + "end_time": "2024-02-29T13:06:34.985810", + "exception": false, + "start_time": "2024-02-29T13:06:34.704488", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import torch\n", + "from copy import deepcopy\n", + "\n", + "torch.save(deepcopy(model.state_dict()), \"model.pt\")\n", + "torch.save(deepcopy(opt.state_dict()), \"optim.pt\")" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "123b4b17", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T13:06:35.028483Z", + "iopub.status.busy": "2024-02-29T13:06:35.027626Z", + "iopub.status.idle": "2024-02-29T13:06:35.304518Z", + "shell.execute_reply": "2024-02-29T13:06:35.303633Z" + }, + "papermill": { + "duration": 0.300942, + "end_time": "2024-02-29T13:06:35.306789", + "exception": false, + "start_time": "2024-02-29T13:06:35.005847", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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F2M2m5k1axbbt2+P6LyNGzeiaRrz588fyGWFJODkyZPU1dVxzz33cO211zJp0iS+/PLLgDbf+c536O7uZsuWLWzYsIHFixf7jn3lK1/B6XSya9cu377PPvusz2v0IYTgTJo0iY8//hir1erb995776HT6fjKV77i23fppZeycuVK3n//faZMmcKGDRt8xyZMmMAdd9zB66+/zne/+12efvrpfu+D0WiMeN7S+++/z/nnn8/dd9/NjBkzGD9+vC9ofbYRteBs2rSJiooKVq1axc6dO5k2bRpz587tNyh36NAh7rzzTl+/WxCCkZOTQ25uLk8++SSfffYZb731FhUVFQFt0tLSmD9/Pvfeey/79+/n5ptv9h2bOHEipaWlLF++nO3bt7Nr1y6WL19OampqeE8rRAxn8eLFmM1mli5dyt///ne2bt3KT37yE2655Rby8/M5ePAgK1eupLa2lsOHD/P666/z6aefMmnSJLq6uigvL6empobDhw/z3nvv8eGHHwbEeEJRXFxMR0cH1dXVtLS00NnZGbLt+PHjqa+vZ+PGjXz++ec8+uijg/aihoqoBeeRRx5h2bJllJWVMXnyZNatW4fFYmH9+vUhz3G5XCxevJj777+fCy64YFAGC4mNTqdj48aN7NixgylTpnDHHXfw0EMP9Wm3ePFiPv74Y6688krGjh0bcOxPf/oT+fn5XHXVVSxYsMA3YmM2m0NfOISHY7FYeO211zh16hSXX3453/ve97j22mt5/PHHfccPHDjAwoULmTBhAsuXL2fFihX88z//M3q9npMnT7JkyRImTJjAD37wA66//nruv//+fu/DnDlz+OEPf8iiRYsYOXIkDz74YMi23/72t7njjjsoLy+npKSE999/n3vvvbffa8QDTUWRJGG327FYLPz1r38N6BYtXbqU06dP89JLLwU9b9WqVezZs4fNmzdz6623cvr06bCp4zabDZvN5vvbu+5Na2urLBMTAd3d3Rw8eJBx48aF/5IlCUePHqWoqIg333yTa6+9tm8DpeD47t6/TVmQKz+M/oT7TLW1tZGVlRXR9zOqUaqWlhZcLhf5+fkB+/Pz8zlw4EDQc959913+/d//nd27d0d8naqqqoh+BQQhGG+99RYdHR1ccsklHD9+nF/84hcUFxdz1VVXBT/hzO6UTN4cMoZ0lKq9vZ1bbrmFP/7xj+Tl5UV83sqVK2ltbfVtR44cGUIrhUTD4XDwq1/9iosvvpgFCxYwcuRIXxLgc88950vz922Z2aSPv4KLr/me5wWGQXCuv/76vnb0bL/73e+G/PrxIioPJy8vD71eT1NTU8D+pqamoAlKn3/+OYcOHWLevHm+fd5ht5SUFOrq6oLmJJhMJkwmUzSmCYKPuXPnMndu8Jyjb3/728yaNStwp70LvvwCg6Hn6zAMgvPUU0/R1dUV9NiIESOG/PrxIirBMRqNTJ8+nerqal8Mx+12U11dTXl5eZ/2EydO7JNIdM8999De3s4f/vAHioqKBm65IAyAjIyMvmtgd7fBqeEtwDVmzJghv8bZSNSZxhUVFSxdupQZM2Ywc+ZM1qxZg9VqpaysDPDMYxkzZgxVVVWYzWamTJkScL53yv2Z+wUhbnhjOJrOIzYSwxkyohacRYsW0dzcTGVlJY2NjZSUlLBlyxZfILm+vj4mC2YJwrDhHRLXG8BpE8EZQqIaFo8X0Qy7CTIsHjXtTdDeAMYMsLd79o0uASlC7yNWw+LiigiC8vNwenfGxZRERwRHELwzxf0FZ4gnMSYrIjiC4I3h6FIADW3MZbz44tk5F+lcRwRHEHyCo/eMVIFnukMciXURdfCULtU0jdOnT8f0daNBBEcQlJ+Hc5YITqIigpMsKAV2a3y2s72IujeGo/l5OPTGcM6mIuo2m40777yTMWPGkJaWxqxZs6ipqfGde/jwYebNm0dOTg5paWlcfPHFvPrqqxw6dIhrrrkG8JQA0TSNW2+9NawdQ4GUGE0WHJ3wu8L4XPtXDWBM679dD8NeRD1Ml+psK6JeXl7Ovn372LhxI4WFhWzevJl/+Id/YO/evYwfP54VK1Zgt9t55513SEtLY9++faSnp1NUVMR//ud/snDhQurq6sjMzCQ1NTXi/0msEMERzjqGtYi6Un5dqr6CczYVUa+vr+fpp5+mvr6ewkLPj8edd97Jli1bePrpp/nd735HfX09Cxcu9JVc9a8/5Z2jNWrUqJjHhyJFBCdZMFg8nka8rh0Fw1pE3T+rWEsBXWCX6mwqor53715cLhcTJkwI2G+z2cjNzQXgX/7lX/jRj37E66+/TmlpKQsXLmTq1KkDut5QIDGcZEHTPN2aeGxncxF132oNmkdsfB5O5Hk4w1VEvaOjA71ez44dO9i9e7dv279/P3/4wx8AuO222/jiiy+45ZZb2Lt3LzNmzOCxxx4b0PWGBHUO0NraqgDV2toab1POCbq6utS+fftUV1dXvE2JmpaWFgWod955x7fvv//7vxWgNm/erJRSqqOjQ6Wlpam//e1vavLkyWr16tW+tvv371eA+uijj3z7Pv30UwWo3//+930vaLMqdWynUsf3eP4+ddBzrQ1PK6WUevLJJ1VOTo7q6OjwnfLKK68onU6nGhsbg76Hr371q+onP/lJ0GM33XSTmjdvXr/34bnnnlPp6ekB++rq6vrcm/745S9/qS655BKllFLvvfeeAlRLS0vE53sJ95mK5vspHo5wVjHsRdT94zfQZ5TqbCqiPmHCBBYvXsySJUt44YUXOHjwINu3b6eqqopXXnkFgNtvv53XXnuNgwcPsnPnTrZu3eq73vnnn4+mabz88ss0NzcHjLQNG1FLXRwQDyc6zmUPRyml3njjDTVp0iRlMpnU1KlTVU1NTYCHo5RSr776qgLUVVdd1ef8hoYGdf311yuTyaTOP/98tWHDBjVq1Ci1bt26vhfr/NLj4Zyo8/x9+qjnWn9+ytdkz5496pprrlFms1mNGDFCLVu2TLW3tyullGpsbFTz589Xo0ePVkajUZ1//vmqsrJSuVwuZbPZ1E033aSKioqU0WhUhYWFqry8POL/yw9/+EOVm5urALVq1SqllFJ2u11VVlaq4uJiZTAY1OjRo9WCBQvUnj0eD628vFxdeOGFymQyqZEjR6pbbrklwKP59a9/rQoKCpSmaWrp0qUR2aFU7DwcmS2egMhs8UDCFlG3tkDrETBlQu6F0HYcOhrBkgfZUiDOS1yKqAvCuUBURdT7dKl6ul1SE2dIkBiOkHBEVUS94ALSx19BetHFXHzxxZ5sYxhywZEi6oKQIERVRL3tOHSdAstIDCPGDGhYfCBIEXVBSAL6FFE/lQLd6ZA5BtJHQVfPGuRDLDjJWkRdulQJzDkwHhB/VE/i35nD4hLDCSBWnyURnATEOzmws7MzzpacA3gnbmoiOOHwZnnr9fpBvY50qRIQvV5Pdna2b4a0xWIJnvQmgM0BbgUOF2jdYHeAU3mmPHR3x9u6swK3201zczMWi4WUlMFJhghOguKdZRy2LIMArY2eofE2PeiN4HJAe7PH42mXr4cXnU7H2LFjB/3DJXc0QdE0jdGjRzNq1CgcDke8zTk7UQr+7/8C5YClL0NGAbQegy0/A70JfvRevC08azAajTFZb04EJ8HR6/WD7ncnLHYrtH/heZ6ZByYzODOh44hnn9HoV65CiAVyN4Xkpeu051GX0luR0OhXu8chQfdYI4IjJC/dpz2P5qzeKQ0pfmU3RXBijgiOkLx4PRxzdu8+na63QqHdOtwWJTwiOELy4vVwUrMD93sFRzycmCOCIyQvwTwc6I3j2EVwYo0IjpC8hPRwegLIDulSxRoRHCF56W71PIqHM2yI4AjJi7dLJTGcYUMER0hefMPi2YH7RXCGDBEcIXnxBY2zAvdLl2rIEMERkhcJGg87IjhC8iLD4sOOCI6QvEji37AjgiMkLyE9nJ4ulUxtiDkDEpy1a9dSXFyM2Wxm1qxZbN++PWTbF154gRkzZpCdnU1aWholJSU8++yzAzZYEGKCoxtcNs9z8XCGjagFZ9OmTVRUVLBq1Sp27tzJtGnTmDt3bsjKciNGjODuu++mtraWPXv2UFZWRllZGa+99tqgjReEAePtTmk6MGYEHpMYzpARteA88sgjLFu2jLKyMiZPnsy6deuwWCysX78+aPuvf/3rLFiwgEmTJnHhhRfy05/+lKlTp/Luu+8O2nhBGDDe7pQps2+RLRmlGjKiEhy73c6OHTsoLS3tfQGdjtLSUmpra/s9XylFdXU1dXV1wZdd7cFms9HW1hawCUJMCRUwBjD01MRxBF+oThg4UQlOS0sLLpeL/Pz8gP35+fk0NjaGPK+1tZX09HSMRiM33HADjz32GN/85jdDtq+qqiIrK8u3FRXJovJCjAkVMAbpUg0hwzJKlZGRwe7du/nwww/57W9/S0VFBTU1NSHbr1y5ktbWVt925MiR4TBTSCbCejjSpRoqoiqinpeXh16vp6mpKWB/U1OTb1mSYOh0Oi666CIASkpK2L9/P1VVVXz9618P2t5kMmEymaIxTRCiQzycuBCVh2M0Gpk+fTrV1dW+fW63m+rqambPnh3x67jdbmw2WzSXFoTY4i1NEdbDEcGJNVEvE1NRUcHSpUuZMWMGM2fOZM2aNVitVsrKygBYsmQJY8aMoaqqCvDEY2bMmMGFF16IzWbj1Vdf5dlnn+WJJ56I7TsRhGgINVMc/Dwcq2ftKlm1NGZELTiLFi2iubmZyspKGhsbKSkpYcuWLb5Acn19fcCCWVarlR//+MccPXqU1NRUJk6cyJ///GcWLVoUu3chCNESqhYO9Cb+KRe47JAi3ftYoSmlVLyN6I+2tjaysrJobW0lMzMz3uYIicBfboa6V+HG38OMfwo85nLAb/I8z39xECwjht++c4hovp8yl0pITsIFjfUG0Bk8zyWOE1NEcITkJNywOPjNp5Lkv1gigiMkJ+E8HAgMHAsxQwRHSE4i9nCkSxVLRHCE5MNp7xWSfj0cEZxYIoIjJB/epD/oW0Ddi0xvGBJEcITkw9udMmWCTh+8jXg4Q4IIjpB89BcwBr8Yjng4sUQER0g+fAHjEN0p8KtrLB5OLBHBEZKPqDwcEZxYIoIjJB/9DYmDCM4QIYIjJB+ReDgSNB4SRHCE5EM8nLghgiMkH+Fq4XiRxfCGBBEcIfnwdanCjFKJhzMkiOAIyYevvGhO6DYSwxkSRHCE5COiYXGZ2jAUiOAIyUckQWPxcIYEERwh+YjKwxHBiSUiOEJy4XKCvd3zPOyweM9yvzJKFVNEcITkwua3Tn24USqjlBgdCkRwhOSi60vPoyHNUyw9FN4ulbML3O6htytJEMERkotIAsbQ6+GAxHFiiAiOkFxEEjAGSEntfS6CEzNEcITkIlIPR6frzTaWwHHMEMERkotIPRyQ6Q1DgAiOkFxE6uGAJP8NASI4QnLhnUcVxMNZ/+5BHq3+FKWUZ4fUNY45KfE2QBCGFW+X6gwPp8vu4jev7EMpyLEYuGV2sV8MRzycWCEejpBc+GrhBCb9tXTY8Do2/+eV/Xx2or23Jo7EcGKGCI6QXIQIGp+y2n3PbU43t2/ajds7NC6CEzNEcITkIkTQ2Cs4Y7JTybYY+PuxNv7ny54MY+lSxQwRHCG5COHhnOwRnAtGplG14BIA9pxweA5K0DhmiOAIyUUID+fLHsEZkWbk+ktG873p59GpTADYujqG0cDERgRHSB7cbujumS0ewsMZkWYEYNW8yaSYPUHjDw4cGTYTEx0RHCF5sLUBPUNRZ4xSnbLaAMjtEZwMs4FrLikG4NiJFl7Zc3y4rExoRHCE5MHbnUoxg8EccOiUz8Mx+faNGZkLgEWz8avNe2ls7R4WMxMZERwheQgzj6q3S+VXI6cn8a8g1U1rl4M7n/8Yt1sNsZGJzYAEZ+3atRQXF2M2m5k1axbbt28P2faPf/wjV155JTk5OeTk5FBaWhq2vSAMGWHmUX0ZxMPxJv5NzTdiNuh497MWnnn/0NDamOBELTibNm2ioqKCVatWsXPnTqZNm8bcuXM5ceJE0PY1NTXcfPPNbN26ldraWoqKirjuuus4duzYoI0XhKiIyMMx9u7s8XAs2LjnhskArN5ygE+b2ofSyoQmasF55JFHWLZsGWVlZUyePJl169ZhsVhYv3590PbPPfccP/7xjykpKWHixIk89dRTuN1uqqurQ17DZrPR1tYWsAnCoAnh4didbtq7nUBv0BgImC2+eNZYrhyfh93pZvMu+bEcKFEJjt1uZ8eOHZSWlva+gE5HaWkptbW1Eb1GZ2cnDoeDESNGhGxTVVVFVlaWbysqKorGTEEITggP58tOj3ej0yAr1T+G07sYnqZpfPUCTxC5ud02xIYmLlEJTktLCy6Xi/z8/ID9+fn5NDY2RvQad911F4WFhQGidSYrV66ktbXVtx05InkQQgzwLfGbHbD7ZIdHcHIsRnQ6rffAGfVw8tI93k9LhwjOQBnW8hSrV69m48aN1NTUYDabQ7YzmUyYTKaQxwVhQPhmimcH7PZ6OAHxG+izGF5euucz2dJhRxgYUQlOXl4eer2epqamgP1NTU0UFBSEPffhhx9m9erVvPnmm0ydOjV6SwVhsPi6VIFJf0EDxuDn4VhBKXJ7BOekeDgDJqouldFoZPr06QEBX28AePbs2SHPe/DBB/nNb37Dli1bmDFjxsCtFYTBEGqmeI+A5Kaf6eH0lKdQLnDZ/bpU9t6qgEJURN2lqqioYOnSpcyYMYOZM2eyZs0arFYrZWVlACxZsoQxY8ZQVVUFwAMPPEBlZSUbNmyguLjYF+tJT08nPT09hm9FEPqhn1o4IbtUAHYreekez8juctNuc5JpDrOQnhCUqAVn0aJFNDc3U1lZSWNjIyUlJWzZssUXSK6vr0en63WcnnjiCex2O9/73vcCXmfVqlXcd999g7NeEKIhlIfjjeFYzhCcFCPoUsDtBEcXZssI0k0pdNictLTbRHAGwICCxuXl5ZSXlwc9VlNTE/D3oUOHBnIJQYg90Xo44PFybK2+wHFuupEOm5OTVjsXjBxCWxMUmUslJAdK9TssPiI9yMioMXAxPN9IleTiDAgRHCE5sHd4gr8Q0sPJDerhBC6G523TYpWh8YEggiMkB97ulM7QO/rUQ9gu1ZnJfxni4QwGERwhOfAPGGu92cRutwqd+AcB0xsA8nranLSK4AwEERwhOQgRMG7tcuAtcZNz5igVhPFwpEs1EERwhOQgxJC4N8s4w5yCMSXI1+GM5X57pzeIhzMQRHCE5KCfIfGgAWPos9xvrq9LJR7OQBDBEZKDkAvgeTyVoPEb6O1SOboACRoPFhEcITmwtngeLbkBu09ZPYvdhRScPkFjj+C025x0O1yxtzPBEcERkoP2nmVeMkYH7I7Yw+npUmWmpmDQe0a5pFsVPSI4QnLQ1uB5PENwTgYrnu7PGYl/mqaRmyZlKgaKCI6QHLT3VKTMPNPD6Sdo3LNyg3dqA0BehlT+GygiOEJyELJLFSbpD/p4OIDPw5HKf9EjgiMkPrZ2z1wqiF5wzojhgOTiDAYRHCHxaevxbkyZYAos+ha5h+PXpeqp/HdSPJyoEcEREp92b8A4sO62Uip0PWMvBvFwYokIjpD4eAPGZ3SnrHYXdqcbCFLP2IsxcOUG6A0ai4cTPSI4QuLjHRLPLAzYfapHMMwGHRZjiOKXYYPG4uFEiwiOkPj4PJzALlXIWsb+SNA4pojgCImPL4ZzhofjzTIO1Z2C3qkNzi5we7pf3qDxKasdl1uWi4kGERwh8fGOUp3h4fhqGYfKMoZeDwd83SpvgNmtelftFCJDBEdIfHxZxmd6OP1kGQOk+JUj7RGcFL2OHItniRgJHEeHCI6Q2Ljd0BF8lKrfHBwAnc5vaNw/F0fiOANBBEdIbKzNnoXs0CB9VMChiAQHeouu+49Upct8qoEggiMkNt45VOmjQB+4UmbkguOdwBlspEq6VNEggiMkNiEmbQL9Zxl7MQab3iAlKgaCCI6Q2IQRnIiCxuCX/Nfl25UnXaoBIYIjJDbeIfHM0ILTv4cTpCaOz8ORLlU0iOAIiY0v6S9QcGxOFx02JxBJDCfI9AYZpRoQIjhCYhNi4uaXPcXT9TqNTLPhzLMCCTq9wdulEg8nGkRwhMQmRJfKu1RvjsWITqedeVYgZ6zcAIF5OErJ9IZIEcEREpt+Sov2GzCGoB6ONw/H5nT7umZC/4jgCImLoxu6TnmeDyTL2EuQxD+LMQWLUQ9I4DgaRHCExMXr3ehNkJoTcCg6wek7SgUyvWEgiOAIiYv/0jBaYJwmKsEx9h2lAv/pDeLhRIoIjpC4hKiDA1FkGUPQxD8QD2cgiOAIiUuIOjjQW140ZC1jf4Ik/oGs3jAQBiQ4a9eupbi4GLPZzKxZs9i+fXvItp988gkLFy6kuLgYTdNYs2bNQG0VhOjwxnAy+3o40cVwgnepxMOJnqgFZ9OmTVRUVLBq1Sp27tzJtGnTmDt3LidOnAjavrOzkwsuuIDVq1dTUND3l0YQhoxw86giqWfsJciwOPhNb7CK4ERK1ILzyCOPsGzZMsrKypg8eTLr1q3DYrGwfv36oO0vv/xyHnroIW666SZMpjClHAUh1oQong5+Hk4kXaogiX/gFzRuly5VpEQlOHa7nR07dlBaWtr7AjodpaWl1NbWxswom81GW1tbwCYIURNieRiXW/lqEUc1ShXCw5EuVeREJTgtLS24XC7y8/MD9ufn59PY2Bgzo6qqqsjKyvJtRUVFMXttIUlQyq9LFejhnO60452NkBNJlypkDEdKVETLWTlKtXLlSlpbW33bkSNH4m2ScK7RfRqc3Z7nIbKMM80pGPQRfAX8axr7zZvyejht3U5sTtegTU4GQiw3GJy8vDz0ej1NTU0B+5uammIaEDaZTBLvEQaHd0g8Nad3akIPvnlU6RF+xrxdKuUClx1SPOdlmg2k6DScbsUpq53RWalhXkSAKD0co9HI9OnTqa6u9u1zu91UV1cze/bsmBsnCAMmgkp/EcVvoDdoDAHdKp1Ok8BxlETl4QBUVFSwdOlSZsyYwcyZM1mzZg1Wq5WysjIAlixZwpgxY6iqqgI8geZ9+/b5nh87dozdu3eTnp7ORRddFMO3Igh+xKKWsZcUI+hSPKs/2DsD5mXlpploarPRIkPjERG14CxatIjm5mYqKytpbGykpKSELVu2+ALJ9fX16HS9jlNDQwOXXnqp7++HH36Yhx9+mKuvvpqamprBvwNBCEZbDGoZ+2NIA1tr38BxhgmOQ0u7CE4kRC04AOXl5ZSXlwc9dqaIFBcXS4EiYfhpD154C3oFJycawTFaPIJz5vSGntfwek1CeM7KUSpBGDSxWK3Bn1BD4xk9uTji4USECI6QmHiT/mIRNIYwyX/i4USDCI6QmPjXwjmDqIPG4OfhnDG9IU2yjaNBBEdIPFxOsPZMJg5SC+dUz4iSVywiwhDCw+npUjVLlyoiEkZwlFI8t+0wNz1ZK782yY71BCg3aHpIyws4pJTyCxr3szyMP8YQEzglaBwVCSM4mqax6cMjfPDFKV7Zczze5gjxxL/wlk4fcKjD5sTh8oyaDsjDOaPq38geD+eU1Y7bLaOx/ZEwggPwnZIxALy4+1icLRHiiq+0aOiyFKkGPalGfZ/jIQkRNPbGgVxuxekuR/S2JhkJJTjzpo5Gp8Gu+tPUn+zs/wQhMQmx2iYMMGAMIWviGPQ6si2erpl05fsnoQRnVKaZORd6+uwviZeTvISogwNR1jL2J4SHA71xHBGc/kkowQH4TonnQ/bi7mOS4ZysRFDpL6I6OP6ESPwD/0JcEjjuj4QTnLlTCjCm6Pi82conDVIpMCkJszyMt5ZxVFnGEHLlBvCrbSweTr8knOBkmg2UThoFSLcqaQm3PMyAYzh9l/v1IpX/IifhBAd6R6v+9nEDLhmqTD58WcZBFsDriKJ4uj8hEv/A38ORLlV/JKTgfP0rI8k0p9DUZmPbwZPxNkcYTuxWz6xuCDGPyptlPMAulaNvlypXiqlHTEIKjilFz7cu8XzY/ra7Ic7WCMOKtztlSANTRp/Dgw4aB/VwPK/VLB5OvySk4AB8u2e06tW9x6XAdTLhXwdH0/oc9gWNox4W93o4XX0O5UrQOGISVnC+Oi6Xgkwzbd1Oth5ojrc5wnARpg4O9ObhjIhmWgOEnC0OMNKvSyWpGOFJWMHR6TSfl/O3j2W0KmkIIzjdDhdWu8fbjXqUKlziX4+31O1w02kXbzocCSs4AN+e5hGcN/efoK1b5rkkBW39lxZN0WlkmqOsruud2uDsArc74FCaKYVUg2delgSOw5PQgnNxYSYXjUrH7nSz5e+xWxlUOIvxJf2Fr2WsBYnvhMXr4UDQXBzfcjESOA5LQguOpml8p8fLkdGqJCHMxM0B1TL2kuK3yF3Y6Q3i4YQjoQUHepMA3/+8hRNt3XG2RhhyfF2qYJX+BphlDKDT9YpO0OkNPYW4xMMJS8ILzthcC5eNzcat4L+kMFdio5Rf0LjvtIYBl6bwYoxkAqd4OOFIeMGBXi9H5lYlOJ0nwd0zOJAebB7VALOMvXgDx2GnN4jghCMpBOeGqaPR6zT2HG3li+aOeJsjDBXeOjiWPM/yvGcwoAXw/Anj4UjQODKSQnDy0k1cOd5bmEuCxwlLmKVhYJBBY4ioJk6zeDhhSQrBgd7CXC9JYa7EJUwdHPAPGkeZZewlTE2cXF/QWAQnHEkjONdNLsBs0HHoZCd7jrbG2xxhKAhTBwdiEDQO4+GMlKp/EZE0gpNmSuGbkz0fxL/uOBpna4QhoT30kDj4daminbjpJez0Bo/gtHY5sDvdfY4LHpJGcAAWXuYZrfrztsMyYpWIhJlH5XS5Od3pGcGKujSFlzATOLNTDeh1nuzlU7IoXkiSSnCunjCSJbPPRyn42X98TE3diXibJMSSMILjv2ZUjiWKFTf9Sc3xPH76hmc5YT90Os3XVZNcnNAkleBomsZ98y5m3rRCnG7Fj/68kx2Hv4y3WUKsiGDiZrbFQIp+gB/7Gf8ExnSor4Wtv+1zWJL/+iepBAc8v0T/+v1pXDVhJF0OF//0zIf8T1N7vM0SBovTBp0tnufBFsDrGGTAGCD3Qvj2o57n7z4C//NawGGZ3tA/SSc4AMYUHev+8TIuHZtNa5eDW/59G0dOyUqd5zQdTZ5HvREsuX0ODzoHx8uUhXD5Ms/zF5bD6XrfIfFw+icpBQfAYkzh6VsvZ0J+Ok1tNpas3y4flHMZ/yHxIKUnmts9E3cHHDD2Z+5vofBS6D4Nz5eB0yNmPg9HgsYhSVrBAci2GPnTP81iTHYqB1usLF2/nXYp1HVuEiZg/MLOozz4Wh0AxXlpg79Wigm+/wyYs+DYR/BGJeC3ekO7/HCFIrEE57M3Yd/fen/tIqAgy8yfb5tFbpqRTxrauO3/fUS3Q8pEnnMEERyrzcnP/uNjKv7jYzrtLmZfkMuPrr4wNtfLKYb56zzPtz0B+16S6Q0REGWdxbOc9x6Fg297nmeeB0WXw3k9W8FUMJj7nuPoZpw6ygvXtrLxtbcZfeQ47/7eQHvRNTSMmI1mSsWo12HwbRrGFB2TR3uqCUZdOU4YGrwTN3uS/vY1tFH+l5180WxFp8HtpRNYcc1FvlyZmDDxWzDnX+D9R+Glcs775guABI3DMSDBWbt2LQ899BCNjY1MmzaNxx57jJkzZ4Zs//zzz3Pvvfdy6NAhxo8fzwMPPMC3vvWtARsdkoJLoPMUnPgE2o7CJ0fhk82eYzoDjJ4KY6Z7RjROfQGnDkLbMUBxPnCXhueOdAJ1r9KljLztnsbrrulUuy+jlfSAy43KMDHnwlzmXJTHFRflMSY7FSFO9EzcVOkF/Ln2EL95ZT92p5uCTDN/uKmEWRf0DSTHhGsr4eiHUF/LtNqfYuLnHPmykxd2HuWysTmcn2uRHyU/NBXlTMZNmzaxZMkS1q1bx6xZs1izZg3PP/88dXV1jBo1qk/7999/n6uuuoqqqipuvPFGNmzYwAMPPMDOnTuZMmVKRNdsa2sjKyuL1tZWMjMz+z/B1gENu+Dodjj6kecDYQ2zVIwxA0aMgxEX0JRSSH1TC+O/fIdse28dZBc6PjVP5aPUK3hPfzkHGtvJczVTqLVQqJ2iUGvhItNpig1fkuc6QYqz07MetTENzWDxZKkaLZ59hjTPRMDM0ZA1FrKLIKsIe/oYWpWF1i4HrV123AosRj1pxhQsJs9jKjZ03V96hNXe4YkjWPI8IzP6KH8/XA7PvCCdwROX0On7ae8EW5snWNrd2ru5HGAZ4bEjbaTHliDlIYaUZ26EQ//N+vy7+fXhiwG4duIoHvr+tMENhUdCWwOs+xp0nuQvrmtZ6fjfvkO5aUYuHZvNpWNzuGxsDtOKsrAYB/A773Z5RsROfg4nP/N8ns2ZnmREczakZvs9z/F8viIVOqU8n6e2Y5734ntsgIIpMHtF+LcfxfczasGZNWsWl19+OY8//jgAbreboqIifvKTn/DLX/6yT/tFixZhtVp5+eWXffu++tWvUlJSwrp16yK6ZtSCcyZKwenDHvFp2OX5Z4y4wLPljIO0vL7/HKWgcQ8ceMWzNf09+usOgDZl4ZjK46jKw4aBHDrI0TrI1trJoYNULbS73q7LoEOXjTUlG6shhy5DDpqmYXa1k+rqwOyyYnZ1YHZ3YHZ1YHQHllx1o8OlM+DSjLh1Rlw6A26dAZ3LjtHZjskdeepAh5ZOmy6bjpQsOlOycaSkofQm0Js84pZiRksxoRnM6AxmtBQj6PQorWfTpaA0PWh6lE4Pmg7NaUPn7ELv7ETv6kLn7ETv7ELv7GJswyuYHG3cZL+HHdrF3PUPE/nfXxs3fN7F52/Bs98FFO8WLGFPRxbHWztRPSs8aCg0FCkajMwwYjaZMBiMmEwmjEYjJqMJs9mE2Wgi1Wwk1dZCattBzG0HsbQfJLWjHp078gENF3rsulScmgGHZsSuGXBgwK4ZseN5rldORrhPkutuwaiCf64aRn6NwhWvhL1WNN/PqKTWbrezY8cOVq5c6dun0+koLS2ltrY26Dm1tbVUVFQE7Js7dy4vvvhiyOvYbDZstt7AW1tbWzRm9kXTPEG+nGK45HuRnzN6mme75leeLtiBVz3iU18LegNkjoGs8yCrCFvaaD63ZbOjNY2aRhN1X4LebcOCjVRspGr+z+2k00mhdooxWgtjtGbGaC2M0DrI1DrJ1OqZRH1I0xxKz2nS6VBmMrVOcuhApyky3O1kuNvBeQQGUL5Zhxud24YBG4SJm3coM21YaFcW2rDgUCnkaO3kaW3k0E6K5iZddZDu6gDXURimGKpbaTgyi/nPf5zD1POyh+eiXi78Blx9F7y9mq81/omvAeh7tjPp6tmixKYMHFQFHFQFnFDZpGtdZGMlS7OSTQdZmpUsOjBqLvS4SHVHV2yuWWXSqEZwXOVyXI2gUeVi1k3hp9GbGpKoBKelpQWXy0V+fn7A/vz8fA4cOBD0nMbGxqDtGxtDL9tSVVXF/fffH41pQ8+IC2BOuWdzdHsSzHS9g3wmYHLPdkvPPpvThdXmoqPbSbvNQUe3kw6bZ+u0uzzrGaUacKcaaLcY0OltZHQ3om87Cq31ni6MZQSkjkBZRmAzZGPVZ2JVqVgdLjrtTo473NjsDlTnSehsQes8ib6rBX3XKQzdJ3ErsKWk061Px5aSgU3f+7xbl4ZNZ0a5nWhOO7jtnkeXHc1lR3Pb0Zw2NGMqKZZsDJZsTOk5pFvMZJoNZJhTyEw1YDbosTldHHO4+cLuwNn5JaqjGay99ihHJ8rRDc5ulNOO5uxGc9l6Njt6t90jeMqFDjd65UKHC51yex5x49AM2LVUbJoZm86MQ2fGpnke7Toz9pFTePq788k0D3Cu1GC5+heebu2xnYDW6zVrOtA8Pk6Xw017txOX04HLacfldOB2OVAuJ8rl8HRP3U5Oa1kc04/huL6QhpTzOJ5yHid1eaDTo9M0dDoNU4oOs0GP2aDvea7DrNeRrreTiZVUzY5JefwZIw5M2DHgxKDsGHGApqPDlE+7cRTtKXnYSMHuUjhcbhxONwaXm7EjY5BG4MdZOUq1cuXKAK+ora2NoqKiOFp0BsFGu4JgStFjStFHEUNIA0ZAweQ+RzTA3LMFD38Gr3IXH0YCE+JtxPCj08NVPw95WAMsPVskzIiFTWcZUQlOXl4eer2epqamgP1NTU0UFAQvelRQUBBVewCTyYTJNMCqbIIgnLVElfhnNBqZPn061dXVvn1ut5vq6mpmz54d9JzZs2cHtAd44403QrYXBCFxibpLVVFRwdKlS5kxYwYzZ85kzZo1WK1WysrKAFiyZAljxoyhqqoKgJ/+9KdcffXV/Ou//is33HADGzdu5KOPPuLJJ5+M7TsRBOGsJ2rBWbRoEc3NzVRWVtLY2EhJSQlbtmzxBYbr6+vR+QVT58yZw4YNG7jnnnv41a9+xfjx43nxxRcjzsERBCFxiDoPJx4MOg9HEIQhI5rvZ2JN3hQE4axGBEcQhGHjrMzDORNvr2/QGceCIMQc7/cykujMOSE47e2emsNnVfKfIAgBtLe3k5WVFbbNORE0drvdNDQ0kJGREXYynjcj+ciRIxJcjhFyT2NLIt5PpRTt7e0UFhYGjFAH45zwcHQ6Heedd17E7TMzMxPmn3m2IPc0tiTa/ezPs/EiQWNBEIYNERxBEIaNhBIck8nEqlWrZOJnDJF7GluS/X6eE0FjQRASg4TycARBOLsRwREEYdgQwREEYdgQwREEYdgQwREEYdhIKMFZu3YtxcXFmM1mZs2axfbt2+Nt0jnDO++8w7x58ygsLETTtD7L+CilqKysZPTo0aSmplJaWsqnn34aH2PPAaqqqrj88svJyMhg1KhRzJ8/n7q6uoA23d3drFixgtzcXNLT01m4cGGf+t+JRsIIzqZNm6ioqGDVqlXs3LmTadOmMXfuXE6cOBFv084JrFYr06ZNY+3atUGPP/jggzz66KOsW7eObdu2kZaWxty5c+nuHsACWEnA22+/zYoVK/jggw944403cDgcXHfddVitVl+bO+64g//6r//i+eef5+2336ahoYHvfve7cbR6GFAJwsyZM9WKFSt8f7tcLlVYWKiqqqriaNW5CaA2b97s+9vtdquCggL10EMP+fadPn1amUwm9Ze//CUOFp57nDhxQgHq7bffVkp57p/BYFDPP/+8r83+/fsVoGpra+Nl5pCTEB6Od0XQ0tJS377+VgQVIufgwYM0NjYG3N+srCxmzZol9zdCWltbARgxYgQAO3bswOFwBNzTiRMnMnbs2IS+pwkhOOFWBA23wqcQGd57KPd3YLjdbm6//XauuOIK3+IBjY2NGI1GsrOzA9om+j09J8pTCMK5zIoVK/j73//Ou+++G29T4k5CeDgDWRFUiBzvPZT7Gz3l5eW8/PLLbN26NaCmU0FBAXa7ndOnTwe0T/R7mhCCM5AVQYXIGTduHAUFBQH3t62tjW3btsn9DYFSivLycjZv3sxbb73FuHHjAo5Pnz4dg8EQcE/r6uqor69P7Hsa76h1rNi4caMymUzqmWeeUfv27VPLly9X2dnZqrGxMd6mnRO0t7erXbt2qV27dilAPfLII2rXrl3q8OHDSimlVq9erbKzs9VLL72k9uzZo77zne+ocePGqa6urjhbfnbyox/9SGVlZamamhp1/Phx39bZ2elr88Mf/lCNHTtWvfXWW+qjjz5Ss2fPVrNnz46j1UNPwgiOUko99thjauzYscpoNKqZM2eqDz74IN4mnTNs3bpVAX22pUuXKqU8Q+P33nuvys/PVyaTSV177bWqrq4uvkafxQS7l4B6+umnfW26urrUj3/8Y5WTk6MsFotasGCBOn78ePyMHgakHo4gCMNGQsRwBEE4NxDBEQRh2BDBEQRh2BDBEQRh2BDBEQRh2BDBEQRh2BDBEQRh2BDBEQRh2BDBEQRh2BDBEQRh2BDBEQRh2Pj/1RJ9yPHTqfYAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "history = loss[\"history\"]\n", + "history.to_csv(\"history.csv\")\n", + "history[[\"avg_loss_train\", \"avg_loss_test\"]].plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "2586ba0a", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T13:06:35.348888Z", + "iopub.status.busy": "2024-02-29T13:06:35.348545Z", + "iopub.status.idle": "2024-02-29T13:07:26.702212Z", + "shell.execute_reply": "2024-02-29T13:07:26.701154Z" + }, + "papermill": { + "duration": 51.37756, + "end_time": "2024-02-29T13:07:26.704760", + "exception": false, + "start_time": "2024-02-29T13:06:35.327200", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "\n", + "from ml_utility_loss.loss_learning.estimator.pipeline import eval\n", + "#eval_loss = loss[\"eval_loss\"]\n", + "\n", + "batch_size = params[\"batch_size_low\"] if \"batch_size_low\" in params else params[\"batch_size\"]\n", + "\n", + "eval_loss = eval(\n", + " test_set, model,\n", + " batch_size=batch_size,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "187137f6", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T13:07:26.747179Z", + "iopub.status.busy": "2024-02-29T13:07:26.746496Z", + "iopub.status.idle": "2024-02-29T13:07:26.766712Z", + "shell.execute_reply": "2024-02-29T13:07:26.765820Z" + }, + "papermill": { + "duration": 0.043433, + "end_time": "2024-02-29T13:07:26.768758", + "exception": false, + "start_time": "2024-02-29T13:07:26.725325", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
avg_g_cos_lossavg_g_mag_lossavg_lossgrad_durationgrad_maegrad_mapegrad_rmsemean_pred_losspred_durationpred_maepred_mapepred_rmsepred_stdstd_losstotal_duration
lct_gan0.0793520.1306050.0007410.5596820.0354920.7786030.0546919.762089e-070.8873210.0206440.3238650.0272130.1551740.000011.447003
\n", + "
" + ], + "text/plain": [ + " avg_g_cos_loss avg_g_mag_loss avg_loss grad_duration grad_mae \\\n", + "lct_gan 0.079352 0.130605 0.000741 0.559682 0.035492 \n", + "\n", + " grad_mape grad_rmse mean_pred_loss pred_duration pred_mae \\\n", + "lct_gan 0.778603 0.054691 9.762089e-07 0.887321 0.020644 \n", + "\n", + " pred_mape pred_rmse pred_std std_loss total_duration \n", + "lct_gan 0.323865 0.027213 0.155174 0.00001 1.447003 " + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "metrics = pd.DataFrame(eval_loss[\"model_metrics\"]).T\n", + "metrics.to_csv(\"eval.csv\")\n", + "metrics" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "123d305b", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T13:07:26.808278Z", + "iopub.status.busy": "2024-02-29T13:07:26.808002Z", + "iopub.status.idle": "2024-02-29T13:07:27.270693Z", + "shell.execute_reply": "2024-02-29T13:07:27.269810Z" + }, + "papermill": { + "duration": 0.484984, + "end_time": "2024-02-29T13:07:27.272767", + "exception": false, + "start_time": "2024-02-29T13:07:26.787783", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "from ml_utility_loss.util import clear_memory\n", + "clear_memory()" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "a3eecc2a", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T13:07:27.315442Z", + "iopub.status.busy": "2024-02-29T13:07:27.315124Z", + "iopub.status.idle": "2024-02-29T13:08:20.918770Z", + "shell.execute_reply": "2024-02-29T13:08:20.917945Z" + }, + "papermill": { + "duration": 53.628117, + "end_time": "2024-02-29T13:08:20.921192", + "exception": false, + "start_time": "2024-02-29T13:07:27.293075", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../insurance/_cache_test/lct_gan/all inf False\n" + ] + } + ], + "source": [ + "#\"\"\"\n", + "from ml_utility_loss.loss_learning.estimator.process import pred, pred_2\n", + "from ml_utility_loss.util import stack_samples\n", + "\n", + "#samples = test_set[list(range(len(test_set)))]\n", + "#y = {m: pred(model[m], s) for m, s in samples.items()}\n", + "y = pred_2(model, test_set, batch_size=batch_size)\n", + "#\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "6ab51db8", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T13:08:20.964645Z", + "iopub.status.busy": "2024-02-29T13:08:20.964272Z", + "iopub.status.idle": "2024-02-29T13:08:20.981733Z", + "shell.execute_reply": "2024-02-29T13:08:20.980987Z" + }, + "papermill": { + "duration": 0.041566, + "end_time": "2024-02-29T13:08:20.983748", + "exception": false, + "start_time": "2024-02-29T13:08:20.942182", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import os\n", + "import pandas as pd\n", + "from ml_utility_loss.util import transpose_dict\n", + "\n", + "os.makedirs(\"pred\", exist_ok=True)\n", + "y2 = transpose_dict(y)\n", + "for k, v in y2.items():\n", + " df = pd.DataFrame(v)\n", + " df.to_csv(f\"pred/{k}.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "d81a30f1", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T13:08:21.024340Z", + "iopub.status.busy": "2024-02-29T13:08:21.024024Z", + "iopub.status.idle": "2024-02-29T13:08:21.029282Z", + "shell.execute_reply": "2024-02-29T13:08:21.028479Z" + }, + "papermill": { + "duration": 0.027882, + "end_time": "2024-02-29T13:08:21.031356", + "exception": false, + "start_time": "2024-02-29T13:08:21.003474", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'lct_gan': 0.06832179765130643}\n" + ] + } + ], + "source": [ + "print({k: sum(v[\"pred\"])/len(v[\"pred\"]) for k, v in y.items()})" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "3b3ff322", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T13:08:21.073329Z", + "iopub.status.busy": "2024-02-29T13:08:21.073044Z", + "iopub.status.idle": "2024-02-29T13:08:21.409287Z", + "shell.execute_reply": "2024-02-29T13:08:21.408346Z" + }, + "papermill": { + "duration": 0.360199, + "end_time": "2024-02-29T13:08:21.411526", + "exception": false, + "start_time": "2024-02-29T13:08:21.051327", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAASUAAAE8CAYAAACGvqckAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABB90lEQVR4nO3deXxU5b348c+ZfZLMZCEJSSAhLAGRHQTEhUWpItZKbb2tYgUVtbdYtZT7qtz+6toW9eWCXS719irR61q9bq1FpSq4AgKCCAqCCQRICJA9s885vz/OzCQhCUySSWaSfN+v17wmOTk582Qg33yf53yf51E0TdMQQogEYYh3A4QQojkJSkKIhCJBSQiRUCQoCSESigQlIURCkaAkhEgoEpSEEAlFgpIQIqFIUBJCJBQJSuKUiouLURSF0tLSeDdF9BMSlETMPffcc6xatSrezRC9lAQlEXMSlERXSFASQiQUCUqiw9auXcusWbNwOBw4nU6mTp3Kc889B8Ds2bN58803OXDgAIqioCgKhYWFUV9bVVXuvvtu8vLySEpKYs6cOezevZvCwkIWL14cOa+qqorly5czbtw4UlJScDqdXHLJJezYsaPF9davX4+iKPztb3/jd7/7HYMHD8Zms3HhhReyb9++WLwdIsZM8W6A6F2Ki4u5/vrrGTNmDCtWrCAtLY3PP/+ct956i6uvvppf//rX1NbWcujQIR599FEAUlJSor7+ihUrePDBB7nsssu4+OKL2bFjBxdffDEej6fFed9++y2vvfYaV155JUOHDuXo0aM8/vjjzJo1i927d5OXl9fi/Pvvvx+DwcDy5cupra3lwQcfZOHChWzatKnrb4qILU2IU1izZo0GaCUlJVpNTY3mcDi06dOna263u8V5qqpGPr700ku1IUOGdPi1KioqNJPJpC1YsKDF8bvvvlsDtEWLFkWOeTweLRgMtjivpKREs1qt2r333hs59v7772uANnr0aM3r9UaOP/bYYxqg7dy5s8PtFN1Lum8iauvWraO+vp477rgDm83W4muKonT5+u+++y6BQICf/exnLY7//Oc/b3Wu1WrFYND/+waDQU6cOEFKSgqjRo1i27Ztrc6/7rrrsFgskc/PP/98QM+4RGKRoCSitn//fgDGjh3bLdc/cOAAACNGjGhxPCMjg/T09BbHVFXl0UcfpaioCKvVSmZmJllZWXzxxRfU1ta2unZBQUGLz8PXq66ujuWPIGJAgpLolX7/+9+zbNkyZs6cyTPPPMPbb7/NunXrGDNmDKqqtjrfaDS2eR1NVoNOODLQLaI2fPhwAL788stW2Uxzne3KDRkyBIB9+/YxdOjQyPETJ060ymhefvll5syZwxNPPNHieE1NDZmZmZ16fZEYJFMSUbvoootwOBysXLmy1d2w5hlHcnJym12o07nwwgsxmUysXr26xfE//elPrc41Go2tspyXXnqJw4cPd/h1RWKRTElEzel08uijj7JkyRKmTp3K1VdfTXp6Ojt27MDlcvHUU08BMGXKFF588UWWLVvG1KlTSUlJ4bLLLjvt9QcOHMhtt93Gww8/zPe+9z3mzZvHjh07WLt2LZmZmS0ysO9+97vce++9XHfddZxzzjns3LmTZ599lmHDhnXbzy96SJzv/okE17wkIOyNN97QzjnnHM1ut2tOp1ObNm2a9vzzz0e+3tDQoF199dVaWlqaBnSoPCAQCGi/+c1vtJycHM1ut2sXXHCB9tVXX2kDBgzQfvrTn0bO83g82i9/+UstNzdXs9vt2rnnnqt9+umn2qxZs7RZs2ZFzguXBLz00kstXqekpEQDtDVr1nT0LRHdTNE0GekTia2mpob09HR++9vf8utf/zrezRHdTMaUREJxu92tjoUn986ePbtnGyPiQsaURI84duwYwWCw3a9bLBYyMjJ48cUXKS4uZv78+aSkpPDRRx/x/PPPc9FFF3Huuef2YItFvEhQEj1i6tSpkeLItsyaNYv169czfvx4TCYTDz74IHV1dZHB79/+9rc92FoRTzKmJHrExx9/3GbXLCw9PZ0pU6b0YItEopKgJIRIKDLQLYRIKL16TElVVY4cOYLD4YjJLHUhRGxpmkZ9fT15eXmRVR1Op1cHpSNHjpCfnx/vZgghTqOsrIzBgwdHdW6vDkoOhwPQf2Cn0xnn1gghTlZXV0d+fn7kdzUavToohbtsTqdTgpIQCawjwysy0C2ESCgSlIQQCUWCkhAiofTqMaVoaJpGIBA45bwr0Taj0YjJZJJyC9Gj+nRQ8vl8lJeX43K54t2UXispKYnc3NwWO4EI0Z36bFBSVZWSkhKMRiN5eXlYLBb5i98Bmqbh8/k4duwYJSUlFBUVRV38JkRX9Nmg5PP5UFWV/Px8kpKS4t2cXslut2M2mzlw4AA+n6/VXm+ibQ3eAO9/XYndbGT2qCxMRgnmHdFng1KY/HXvGnn/Ou69ryvZX9kAQHqymSlDMuLcot5F/scJEUMef5CSY42Rz3cfqYtja3qnPp8pCdGTDpxwoWoayVYjwzJTyM9IQtM0Gc/sAMmU+rnCwsLIGtii68pr9YXsigY6mHvmQEblyAoWHSVBSYgY0gCLycBAh9wU6CzpvvUBPp9P6ogSxJxR2cwemYWqgS+gcqzBiz+gUpiZHO+m9Rr9MlPyBdR2H4GgGvW5/ijO7YzZs2dzyy23cMstt5CamkpmZia/+c1vIttUFxYWct9993HttdfidDq56aabAPjoo484//zzsdvt5Ofnc+utt9LY2DToWllZyWWXXYbdbmfo0KE8++yznWqfODVFUTAaFMpr3fztszLW76mMd5N6lX6ZKf35/X3tfm1oZjILJg2KfP7fH+zHH2x7GfPB6XauPKtpkbknPy7B7Ws5neUX3xnZqTY+9dRT3HDDDWzevJktW7Zw0003UVBQwI033gjAQw89xJ133sldd90FwP79+5k3bx6//e1vefLJJzl27FgksK1ZswaAxYsXc+TIEd5//33MZjO33norlZXyC9NdMpL17LXG7SeoahgNMrYUjX4ZlHqD/Px8Hn30URRFYdSoUezcuZNHH300EpQuuOACfvnLX0bOX7JkCQsXLuT2228HoKioiD/84Q/MmjWL1atXc/DgQdauXcvmzZuZOnUqAE888QSjR4/u8Z+tr/qqvI7NJVUUZadwzohMUqwmTAaFgKrR4AmQmmSOdxN7hX4ZlJbOGdHu107+Y3bTzOHtnnvyTZXrzx3alWa1cPbZZ7e4azNjxgwefvjhyMTis846q8X5O3bs4IsvvmjRJdM0LTLdZu/evZhMphbbGJ1xxhmkpaXFrM39XVWjj6pGH56A/m+kKAoOm4lql586j1+CUpT6ZVCymKIfSuuuc7sqObnlwGlDQwM333wzt956a6tzCwoK2Lt3b081rd+qdfsBSLU33XRw2s2RoCSi0y+DUm+wadOmFp9v3LiRoqIijEZjm+dPnjyZ3bt3M2JE21ngGWecQSAQYOvWrZHu2549e6ipqYlpu/uzpqDUlBE5bfrHde5AXNrUG/XLu2+9wcGDB1m2bBl79uzh+eef549//CO33XZbu+f/6le/4pNPPuGWW25h+/btfPPNN7z++uvccsstAIwaNYp58+Zx8803s2nTJrZu3cqSJUuw2+099SP1eQ0ePfA4bE1/68MfS6YUvbgHpcOHD3PNNdcwYMAA7HY748aNY8uWLfFuVtxde+21uN1upk2bxtKlS7ntttsit/7bMn78eDZs2MDevXs5//zzmTRpEnfeeSd5eXmRc9asWUNeXh6zZs3iiiuu4KabbiI7O7snfpw+T1U1lPpDFFRvJCVYGzk+NCuZuaMHMmFwWvwa18vEtftWXV3Nueeey5w5c1i7di1ZWVl88803pKenx7NZCcFsNrNq1SpWr17d6mulpaVtfs/UqVN555132r1mTk4O//jHP1oc+8lPftKldgpdY91xRh99E6MWJGl3DUz/KZgsZDtsZEt1d4fENSg98MAD5OfnR+poAIYOjd0dLCF6zKGtOMwARhRfI1TugrxJ8W5VrxTX7tsbb7zBWWedxZVXXkl2djaTJk3ir3/9a7vne71e6urqWjyESASOxgOMH5zG+NFn6AeOfwPoZRllVS6+rqhrNVtAtC2uQenbb79l9erVFBUV8fbbb/Pv//7v3HrrrTz11FNtnr9y5UpSU1Mjj766Zff69etl5n5v4q4GVxUYjDDiQv1YbRmEpgW99vlh1u6soNEnm1dEI65BSVVVJk+ezO9//3smTZrETTfdxI033shf/vKXNs9fsWIFtbW1kUdZWVkPt1iINtSV688p2eAcDEYTBHzgOoGiKCRZ9VGSRq+UBUQjrkEpNzeXM888s8Wx0aNHc/DgwTbPt1qtkS26ZatukTAajvLt8QbePaSwp7IRHLn68bojACRb9Noyl0+CUjTiGpTOPfdc9uzZ0+LY3r17GTJkSJxaJEQnNFTi8ascDaaiahqk5OjHG/XJzk2ZknTfohHXoPSLX/yCjRs38vvf/559+/bx3HPP8d///d8sXbo0ns0SomMajuIPqjRaBpBsMUFSaKMAVzXQlCk1SqYUlbgGpalTp/Lqq6/y/PPPM3bsWO677z5WrVrFwoUL49ksIaLnc4GvEX9QxWXOwG4xQtIA/WuuEwAkhzIll2RKUYn73Lfvfve7fPe73413M4ToHE8NGhqNShKqwawHJcuAyNcIBvTsCcmUohX3oCREr+auJhDU8BgdANjNRlCSwWTR78B5ahmc7uA7Zw4kTZYuiYoEJSG6wl2DP6jiNTmxmY1Nq0tanRA4Dp4a0gcMID1Z1lCPVtwn5ArRq3lq0ACbcwADUpoFHlua/uyVWQcd1b+CkqbpKXVPP7S21/huy9NPP82AAQPwer0tji9YsEAmzyYidw3JFhMXTR7FvzVbrx1bqIbOU4uqahw40cjXFXWoavT/F/qr/tV9C/rhw4d7/nXP/6U+xhCFK6+8kltvvZU33niDK6+8EtB3IXnzzTdPuQKAiBNPjf5sP2llC1tq6Ot6pvTKtsMAFMxKIsnSv37tOqp/ZUq9gN1u5+qrr26xcsIzzzxDQUEBs2fPjl/DRGvBAHjr9Y/taS2/Zm3KlAwGBatZ/1Xz+GVS7un0r5BtNOtZSzxetwNuvPFGpk6dyuHDhxk0aBDFxcUsXrxYtn9ONN460DRKa3xs+KySyUMyGDc4lCGFM6XQmJLdbMTrV3H7pVbpdPpXUFKUqLtR8TRp0iQmTJjA008/zUUXXcSuXbt48803490scbJQltSInSqXH7/aLAuyOkLnNICqYjcbqcHfal9A0Vr/Ckq9yJIlS1i1ahWHDx9m7ty5fXaZll7N1wDoQQkgydJsUwdLiv5HUFPB78Jm1r/mkUzptGRMKUFdffXVHDp0iL/+9a9cf/318W6OaItXD0ouJRSUzM3+xhsMYA5tyuBrjAQl6b6dngSlBJWamsoPfvADUlJSWLBgQbybI9oS6r41aHrwsVlO+nWypOjPvgZ9+gmSKUVDum8J7PDhwyxcuBCr1Rrvpoi2+OrR0GjQ9I0BWt3qt6QAleBrZOTAPAYkW8h2yL/l6UhQSkDV1dWsX7+e9evX81//9V/xbo5oj7eBQFDDa9R3K7abT9oo1BLaxdjXQG6undxU2WMvGhKUEtCkSZOorq7mgQceYNSoUfFujmiPtx5V03A40zHYLE3z3sIiQamx59vWi0lQSkDt7esmEoimga8Bq8nIFWePal08CU1lAb4GvIEgFbUeAqrG8KyUHm1qbyNBSYjO8LtADQ1ah4PPycKZkreBek+AV7Ydxm4xMnyWBKVT6fN337QOTIYVrcn7145QOQCWJH1rpbY0675ZTfqvmtevynt6Gn02KJnN+tQOl8sV55b0buH3L/x+ipBQ4eRhl5Hij0v4ZN/x1uc0KwmwmvTApWoa/qAEpVPps903o9FIWloalZWhHSWSkmTuWAdomobL5aKyspK0tDSMxnaygf6q2RSTapcfT6CN+qNwphT0Y8aP0aAQVDU8gSAWU5/NB7qszwYlgJwcfaubcGASHZeWlhZ5H0Uzfj2D9Co20MBmaiNoGy1gMIEaQPG7sZoMuHxBvH4VbD3c3l6kTwclRVHIzc0lOzsbv98f7+b0OmazWTKk9vj0oORGL4a0nlyjBPrcN7Ndz6qaB6W2sioREdegdPfdd3PPPfe0ODZq1Ci+/vrrmL6O0WiUXy4RW6FMya1Y9UzJ3E53LBKUXNjMZsAvayqdRtwzpTFjxvCvf/0r8rnJFPcmCXF6oaDkCk0xsbWVKUHTuJLfxZQhhXgDKlky1eSU4h4BTCaTjFmI3idUpe1SzaCcIiiFVwrwuynKb6eeSbQQ91sA33zzDXl5eQwbNoyFCxdy8ODBds/1er3U1dW1eAgRF6FMyZLkwGEztZ73FmZO0p9lqknU4hqUpk+fTnFxMW+99RarV6+mpKSE888/n/r6+jbPX7lyJampqZGHLHwm4kLTwO8G4LKzRrDk/GFktLevWzgo+d3UefyUHm+kss7TQw3tnRQtgcpLa2pqGDJkCI888gg33HBDq697vd4WWw/V1dWRn59PbW0tTqezJ5sq+jO/Bz56VP945vJTr8F+eBvsfRsyi9jiuIAPvznO6FwH88bm9kxb46yuro7U1NQO/Y7GfUypubS0NEaOHMm+ffva/LrVapW1hUT8hbpumCyn3xSiWaYUHnfyBuTu26nEfUypuYaGBvbv309ubv/4KyJ6qdD4UL1qpvjjEt7YcaT9cyMD3a4W899E++IalJYvX86GDRsoLS3lk08+4fvf/z5Go5Grrroqns0S4tRC40lebFS7/NS5T1GY26wkIDz/rc0pKSIirt23Q4cOcdVVV3HixAmysrI477zz2LhxI1lZWfFslhCn5tczJZ8htDZ3e3feoFmm5MEW+m2TTOnU4hqUXnjhhXi+vBCd42s2741TVHMDmOyhrZY0rJp+k0ammZxaQo0pCdErhAa6PehlAG1Oxg0zGMCkBy8relDyBzUCQcmW2pNQd9+E6BXCQUk5zRSTMHOSPiFX8zBzZGZkbEm0TYKSEB0V6r65QisEnLL7BpFxJcXvYcqQwu5sWZ8gQUmIjgoNdBusyThUU+v93k4WHuwOuLu5YX2DBCUhOiqUKc0Ylc8MRxSTyUNjSvg9HG/w0uAJkOmwkmKVX7+2yEC3EB3RbN5bpFr7dMyhoBRws37PMV79/DCHqmXt+PZIUBKiIwIe0EJ3zqINSqamWqVwVbcs9NY+yR+F6IhQ100zWfnfzYewGA18b2LeqceVmmVKkflvfqlVao8EJSE6IjTIHTTaOdHgA8BkOE2Ho3mmlBya/yaTctsl3TchOiI0nuQ36tmP0aBgNp5m665mmVJkUq4EpXZJUBKiI3zheW9NU0xOu59g80wpsnyJdN/aI0FJiI4IVXP7lCgm44a1lSnJQHe7ZExJiI6ITMYNVXNHM2UknCkFAwxMMTFzZCZpSe0snyskKAnRISfNe7OebooJgMkKigE0lQxLkIwhGd3Zwl5Pum9CdEQoKGnmJBw2U3RV2YqiBybQ1/cWpySZkhAdERroLhqUTdG4odF/n9kOfjeqz8XRWjdev8qQAUmnHyTvhyRTEqIjwpsGRFvNHRaa/xbwuXlhcxmvfn4YfzBhNhJKKBKUhIhW83lvlg4GpdBKAWbVgyGUHUlZQNskKAkRLb9bD0zAW3vreGHzQcqqopxYG8qUlIA3sv6SFFC2TYKSENGKdN1sHGsMUF7rQY12L9dmaypJVfepSVASIlqhQW7MSZEJtVEVT0KLNZWsMin3lBImKN1///0oisLtt98e76YI0bZm6yh5wkEp2vW2JVOKWkIEpc8++4zHH3+c8ePHx7spQrQvvEKAyR65cxZV8SS0zJRMsn33qcQ9KDU0NLBw4UL++te/kp6eHu/mCNG+0BQTf2gTSkUhkvWcVrNMaVSOg5kjM8lLs3VHK3u9uAelpUuXcumllzJ37tzTnuv1eqmrq2vxEKLHhAa6vaEVAqwmY/TFj80ypRHZKUwZkkG2Q4JSW+K+Q+62bdv47LPPojp/5cqV3HPPPd3cKiHaEQpKQaMNh80U/SA3yI4mHdCpTOnbb7/t8guXlZVx22238eyzz2KzRfcXY8WKFdTW1kYeZWVlXW6HEFELdd8y0tJZcv4wrjl7SPTfG86UAj48Xh8VtR4q62UeXFs6FZRGjBjBnDlzeOaZZ/B4OvfGbt26lcrKSiZPnozJZMJkMrFhwwb+8Ic/YDKZCAZb3y61Wq04nc4WDyF6TLhOqaPV3NAUlIADlVU8v/kgH+w9HqOG9S2dCkrbtm1j/PjxLFu2jJycHG6++WY2b97coWtceOGF7Ny5k+3bt0ceZ511FgsXLmT79u0YjbK1sUgwkTql5I5/r8EQWSnAhr62t0wzaVungtLEiRN57LHHOHLkCE8++STl5eWcd955jB07lkceeYRjx46d9hoOh4OxY8e2eCQnJzNgwADGjh3bmWYJ0X1UVd9eCdhx1MsLmw+yo6ymY9cIjStZw0FJVp9sU5fuvplMJq644gpeeuklHnjgAfbt28fy5cvJz8/n2muvpby8PFbtFCK+AqF5b4rCCZ+R8loPjb5Ax64R6sJZtXCmJEGpLV0KSlu2bOFnP/sZubm5PPLIIyxfvpz9+/ezbt06jhw5wuWXX96h661fv55Vq1Z1pUlCdI/QIDcmG95QLOrQ3TdonSkFgmjRzp3rRzpVEvDII4+wZs0a9uzZw/z583n66aeZP38+htD+V0OHDqW4uJjCwsJYtlWI+AlVc2NJxhMaC4q6cDIslClZNC+QhKaBL6hGKryFrlNBafXq1Vx//fUsXryY3NzcNs/Jzs7miSee6FLjhEgYkXlv9siW253NlIxBD0aDQlDV8AYkKJ2sU0Fp3bp1FBQURDKjME3TKCsro6CgAIvFwqJFi2LSSCHizte04qTH1cEVAsKaral09rABGA1gMcZ9UkXC6VRQGj58OOXl5WRnZ7c4XlVVxdChQ9usMRKiV2vefQtnSh3tvjWr6p42UnY0aU+nglJ7g3MNDQ1RV2cL0av4wruY2LGYDKia1ulMSXY0ObUOBaVly5YBoCgKd955J0lJTZWtwWCQTZs2MXHixJg2UIiEEMqUFEsyN5zXgV1MmmuWKdV7/DR6g6REu01TP9Khd+Pzzz8H9Exp586dWCxNu3xaLBYmTJjA8uXLY9tCIRJBZEypE9XcYc0ypQ+/Oc6einpmj8piUoEs2dNch4LS+++/D8B1113HY489JnPPRP/RlXlvYbL6ZFQ6lTeuWbMm1u0QIrGF5r2Vuw1s2HuQgU4bc87IPs03nSSyUoAXq1GCUnuiDkpXXHEFxcXFOJ1OrrjiilOe+8orr3S5YUIkjGAAAl4A6oMWymtrMHXmVn44KGkaNoMfkM0D2hJ1UEpNTY2sspeamtptDRIi4YS7booBt2oGOlHNDWA0gdEMQT92ZP5be6IOSs27bNJ9E/1Ks/EkT6CT1dxhZjsE/c2WL5GgdLJOlZO63W5crqadQQ8cOMCqVat45513YtYwIRJGs/3emoJSJyuxwysFhIKSR7pvrXTqnb388st5+umnAaipqWHatGk8/PDDXH755axevTqmDRQi7iKZUnLTfm9dyZSAVLPK9KEZTMxPi0ED+5ZOrzx5/vnnA/Dyyy+Tk5PDgQMHePrpp/nDH/4Q0wYKEXfN5711dBPKk4UyJYfJzzkjMhk7SMZnT9apoORyuXA4HAC88847XHHFFRgMBs4++2wOHDgQ0wYKEXeReW9JGA0KFpOh8923cK2STDVpV6c3DnjttdcoKyvj7bff5qKLLgKgsrJSCipF39Osmvu74/NYOmcERQMdnbtWaJ1uze+mulHf1SSoykJvzXUqKN15550sX76cwsJCpk+fzowZMwA9a5o0aVJMGyhE3PmaMqUuM4V21w14eGbjAZ7ffJAGbweX1e3jOlXR/cMf/pDzzjuP8vJyJkyYEDl+4YUX8v3vfz9mjRMiIfi7sIvJyczhqm4PVrOBgDcY2tXE3PVr9xGdnp6ck5NDTk5Oi2PTpk3rcoOESDih7ptHsfLq5oPYzUYun5gX/ZbdzZnCY0purCYjjd6g7Gpykk4FpcbGRu6//37effddKisrUdWWb2osdtAVIiFoWqQkwK3YqaitwmIydC4gQctMSSbltqlTQWnJkiVs2LCBn/zkJ+Tm5nb+H0iIRBfwgqqXAbg1fakee2drlKBlppQUDkpSQNlcp4LS2rVrefPNNzn33HO79OKrV69m9erVlJaWAjBmzBjuvPNOLrnkki5dV4iYCRdOmiy4VT2I2C1dCErNMyVZKaBNnbr7lp6eTkZG19cYHjx4MPfffz9bt25ly5YtXHDBBVx++eXs2rWry9cWIiaabdXt9ukZTUwyJTWIzaBfT8aUWupUULrvvvu48847W8x/64zLLruM+fPnU1RUxMiRI/nd735HSkoKGzdubPN8r9dLXV1di4cQ3SqcKZntXZ9iAvoqAQb9+4emGZk+NIPB6fautrJP6VT37eGHH2b//v0MHDiQwsJCzOaWtzO3bdvW4WsGg0FeeuklGhsbI3VPJ1u5ciX33HNPZ5osROf4GvRnawruUFDqUvdNUfSpJr5GhqYaGTo4MwaN7Fs6FZQWLFgQswbs3LmTGTNm4PF4SElJ4dVXX+XMM89s89wVK1ZENi8AqKurIz8/P2ZtEaIVbygoWVJQ0KeYdKn7BvpUE18jBNxdb18f1KmgdNddd8WsAaNGjWL79u3U1tby8ssvs2jRIjZs2NBmYLJarVit1pi9thCn5Wva7+28wkzOK8psd4uxqIUm5fq9LhoafaiaxoAU+X8d1untOWtqavif//kfVqxYQVVVFaB32w4fPtyh61gsFkaMGMGUKVNYuXIlEyZM4LHHHutss4SIrUhQSokc6nIJTGhS7vHqWoo/KWXtlxVdu14f06lM6YsvvmDu3LmkpqZSWlrKjTfeSEZGBq+88goHDx6MrLXUGaqq4vV6O/39QsSUr15/bhaUuiyUKVk0WX2yLZ3KlJYtW8bixYv55ptvWuyIO3/+fD744IOor7NixQo++OADSktL2blzJytWrGD9+vUsXLiwM80SIvaadd/+b+shXvv8cNcn0JrDQUn/4yvFky11KlP67LPPePzxx1sdHzRoEBUV0aeilZWVXHvttZSXl5Oamsr48eN5++23+c53vtOZZgkRW6oamfemmpMpq65A06DL8xdCtUqRoORXUVUNg0FmRkAng5LVam2zRmjv3r1kZWVFfZ0nnniiMy8vRM/wu0BTQVHwGuyEx7e7VKcEkUzJHOq+AfiCKjZDF6/bR3Sq+/a9732Pe++9F79f37tKURQOHjzIr371K37wgx/EtIFCxE2kmtuOO6BHJKvZgLGrGU0oUzIEPJiN+rWkqrtJp4LSww8/TENDA1lZWbjdbmbNmsWIESNwOBz87ne/i3UbhYgPX1ONUqRwsqtZEjSb/6YvXwIyrtRcp7pvqamprFu3jo8//pgdO3bQ0NDA5MmTmTt3bqzbJ0T8NA9KsZj3FmZqWqd7/OBUgqqGrStV4n1Mh4OSqqoUFxfzyiuvUFpaiqIoDB06lJycHDRNk2VMRN/R7M5bJCjFIng0y5SmDxvQ9ev1MR3qvmmaxve+9z2WLFnC4cOHGTduHGPGjOHAgQMsXrxYlsIVfUs4KFlTCGoaFpOBJEunF2ttEs6UggH9IVro0DtcXFzMBx98wLvvvsucOXNafO29995jwYIFPP3001x77bUxbaQQceFtKpycODiNiflpqLHYecRk1SfmahoeTyNu7FhMBpKtMQh4fUCHMqXnn3+e//zP/2wVkAAuuOAC7rjjDp599tmYNU6IuGrWfQuLSS2RokS2WvrsmyMUf1LKjkM1Xb9uH9GhoPTFF18wb968dr9+ySWXsGPHji43SoiEEM6UrJ3c4+1UQl04m6KX1chUkyYdyherqqoYOHBgu18fOHAg1dXVXW6UEHGnac3WUnLw9x1HCKgqs0Zmk5Fs6fr1zTZwgw0vYJM6pWY6lCkFg0FMpvbjmNFoJBCQgTvRB/ga9Q0DFAUsDsqqXZQed3V92ZKwcKZEOFOSOqWwDmVKmqaxePHidtc0ktn9os9oNsgd0JoqrmM2GB0qC7AiKwWcrEPv8KJFi057jtx5E32CNzS30+rAFarmNhqUyF5tXRbKlKyRlQIkKIV1KCitWbOmu9ohRGJpNsjt8upBKclijF1x8MnLl/il+xYmhRFCtCWSKTlx+fRx0pgUToaZkwCwKz4m5qeRJNNMIiQoCdGW5pmSrylTiplQULJpHuackR276/YBMeogC9HHhIOSzUlQ1bCaDTEOSk3bd4uWJFMSoi3NMqUJ2WlMyE+LXTkANFWJ+xrx+IO4fEEcNhNmo+QJ8g4IcTJNa7OaO6YrYIQzpYCHZz4t4alPSjnR4Dv19/QTEpSEOFmLwskY7mLSXGhMCU0jxagXULrlDhwg3TchWosUTiaDwcjr2w+jaTBrZBbpsZhiAmAw6pNyA15SDH7AGFmzqb+TTEmIk3lq9WerE03TOHjCRcnxRmK+fmFoXClF0WuVJFPSxTUorVy5kqlTp+JwOMjOzmbBggXs2bMnnk0Soiko2dPwBlQCoTWUUmK93lFoXMlu0MeSPBKUgDgHpQ0bNrB06VI2btzIunXr8Pv9XHTRRTQ2NsazWaK/89Toz7ZU6j164aTdYsQU6ztjoXGlJEKZknTfgDiPKb311lstPi8uLiY7O5utW7cyc+bMOLVK9HvuGv3ZlkZjaDfcblkVMlzVHZqUK903XUINdNfW6mlzRkZGm1/3er0tViJoa0NMIbos3H2zpdLg1oOSozuCkkUPSulmPxPz08hytL36Rn+TMAPdqqpy++23c+655zJ27Ng2z1m5ciWpqamRR35+fg+3UvR5mtZiTKmhBzKlAZYgc87IZuyg1Ni/Ri+UMEFp6dKlfPnll7zwwgvtnrNixQpqa2sjj7Kysh5soegXvPWgBkAxhO6+6bvixnyQG5pqlfyu2F+7F0uI7tstt9zCP/7xDz744AMGDx7c7nlWq7XdBeaEiIlIOYADDEZmDB/AjOEDYjvFJCx0903zufD4grj9QdKTzP1+78S4ZkqapnHLLbfw6quv8t577zF06NB4NkeIpjtv9rQWh7slUITqlFRfI3/ZsJ+nPimVxd6Ic6a0dOlSnnvuOV5//XUcDgcVFRWAvi243W6PZ9NEf9VskLvbhTIlY8CDxajgC2p4/EFssdgavBeLa6a0evVqamtrmT17Nrm5uZHHiy++GM9mif6sWTmAL6Dy9KelvPb5YQLBbshgzKGVAjSVZKM+oC5lAXHOlLqlny5EVzQrnKzz+DnR4KPBG4h94SSA0QRGMwT9pBj8VMv8NyCB7r4JkRBcJ/TnpAHUufXZ+06bufteLzz/zeABJFMCCUpCNPG7wRe6PZ+UQV1oionT3o1BKVQWkKzI/LcwCUpChLmq9GdrCpiszTKlbhzlCGVKSeiZkku6b4lRpyREQmjWdQOo8+hBKbU7M6XQypY5tgATM9LIS5O7zhKUhAhzhzKlcFBy90D3LZQpDUpSGSS7mgDSfROiSThTsusTwi0mAxaToZsHukPL7foauu81ehnJlIQIC48pJelB6YdT9ClP3Vq6EgpKmrchMtUkI1ZL7vZSkikJAaCq4K7WPw5138K6dS5aqPvmc9fzlw37efrTUlS1f9fvSVASAvSiSTUIBlPPTDEJs+qZkjnoQkFF06RWSYKSENDszlsGKAqflVbx9KelbC+r6d7XNSeDomAAHAb9bl+jL9C9r5ngJCgJAdBwVH9O0e+AnWjwcqLBh7875rw1ZzBECihTjfqqqi6vZEpCiIZK/TlZD0pVjXrWkp7UjXfewkLjSg6DHpQkUxJCQOMx/TklC03TqHbp0z7Sk3rgTliogDK8/1t/r+qWoCREwNd05y1lIC5fEF9ARVG6uZo7LLIppRuQoCRBSQjXcX3DAEsyWJKpatSzJKfN3D1LlpwsVKs00OpjYn4ag/r5VBMpnhQiPJ4UGuQ+3qB3owak9FARo80JQI41QI5MNZFMSYimQe4sAMxGA5kOKwOdtp55faselPDW9szrJTjJlIQ4qRxg7KDUnt2DLVSsqXnq8PqD1HsC/XpjSsmURP+mBqFe37ACR1582hDKlFS/h/9+7yue2XigXy/2JkFJ9G+Nx/TNJ01WSMogqGo9P/fMZAGzDaOi4Azdgav39N9aJQlKon+rO6I/O/NAUdh/rIE/v7+Pt3dV9Gw7QtlSulEPSuHtwvujuAalDz74gMsuu4y8vDwUReG1116LZ3NEfxQOSo5cAI7WeQioGsae3qU2NK6UZghnSv6eff0EEteg1NjYyIQJE/jzn/8cz2aI/qy+XH926uNJ5bX6Wtm5aT105y0slCk5FX3jgv7cfYvr3bdLLrmESy65JJ5NEP1ZwNu0OoAjl6CqUVkXCkqpPVzAGKpVcsiYUu8qCfB6vXi93sjndXV1cWyN6PVqD+mV3LZUsKZwos6DP6hhNRt6ZiJuc6FMKVlrBKT71musXLmS1NTUyCM/Pz/eTRK9WW2Z/pxWAMCRcNct1da9q022JTSm5MDFxPw0zshx9uzrJ5BeFZRWrFhBbW1t5FFWVhbvJonerOag/hwOSjV61ynHGYe5Z/Z0AFI0F3OK0hk3uAeLNxNMr+q+Wa1WrNb+W+kqYijgg7rQIHeannEXZCThD6oMGZDU8+0x2/VaqYAX3DWQktXzbUgQvSooCREzdYdAU/UBZlsaEIfpJc0pip4t1VfgazhOjeogxWYiydL/fkXj+hM3NDSwb9++yOclJSVs376djIwMCgoK4tgy0ec177r19PhRe0JB6dNd+9imGvnOmQPjFyTjKK5BacuWLcyZMyfy+bJlywBYtGgRxcXFcWqV6BeqS/Xn0HhS6fFG0pMtPbOoW3tC+82lo29MGV79sr+Ja1CaPXt29270J0RbvA1N40kZw/AFVP6+4wgBVePaGUMYkBKnccvQYHdqKCjVuPpnWUCvuvsmRExUfas/OwaC1cHBqkYCqkZakjm+u9OG78Cp9QDUSKYkRD9RtV9/HjACgH2VesHisKyUnq9Pai4pE4BkzYVR9VDjUtA0Lb5tigPJlET/ogahqkT/OGM4gaDKt8f17tLwrOQ4Ngww28DmxGoykBKoIaBq1PfD1QIkKIn+peaAXgtkSQJHLt8eb8TrV3HYTOT19Hy3tiRnoSgKWQZ9adzqxv7XhZOgJPqXyq/056wzwGDgq3J9/uToXCcGQwJ0k0LrhJ+Z6mPmyEzSemLfuQQjY0qi/wgG4Nge/ePs0fgCKoeq9aklo3MTZK5ZKCgNT3LDkIw4NyY+JCiJ/qPqW73rZk2B1HwsisKS84dSVuWO71235kKbF9BwVF/BoJ8NcoMEJREPqqovrtZ4DDy1eqAIevVpH82Zk/XZ8848fWVIQxdHG8q368/ZZ0Z+2a0mIyOyU7p23VhKygSjCS3gperYEY6pDoqyHRgToWvZQyQoiZ7jqYOyTagVuwh4G1EAo0HBEE02YEmGQZNh0Fn6XaqOclc31SflTaLRGyDJYky82+0Ggx6Aaw7yr42fc8Q+kgFnW/vVlksSlET3U1Uo20T91++z72gNXr+K32Cl0ZKFx+TEZLVjsSUxNEvPCgACapBDR4+RFKjD7jqCzV2PueRDOPI5FF0EWaM61obD2/TuUMYwgrZ0XvykFIvJwLyxOWTGq4K7Pc48lJoyBhurOQJU1HokKIm+45uj9WjoC5c5bHGY1+X3wK5XoboUq1Gj0pDN4axJ1NoGgdKyO5aSmkFRvl5A2ODy8ereUgAULUiGq4Qi13YGmivIrH0Rx4gZKMMvAIPx9G3wNerBDGDQFL44VEOt20+K1YQzHu/J6TgHA5vIUaoAOFzj7lfrK0lQ6u1UFY7vgRP79HV4DCZ9+sTAcZCSxReHajlYpS9GPyI7hfOLeu42c8Wx49RteoaRyW4wmrGc8R3OnDSC81KsJFmMaBp4Ayr1Hj/13kCLAKFpUJiZRKM3iNsX5IQygqqkQvJrt5J3ZAd5jRsY0lAJY76v1xydysGNEPSDYyCNKUPY+KW+QsD0YRlYTAlYFRPaxCCDWkxBD+W1CRg4u5EEpd6suhT2vg0u/S9qUNU4VO1iUPq3mA5ugpyxjMg4C1/QxtE6D/sqGzhY5eLC0dndvtzqkePV7H3nr1g9Jzg+OIfMc64BRw7NFzBWFLBbjNgtRrJP+v70ZAvfnzQ48rnHH6S81sM3RzPYX5LDWNs2ffmRbU/B2B+2vyha/VE4tAUArXAm7+05hscfJNtpZWxegmYf1hRIzsShVpLWcIjjxhE0egMkW/vHr2v/+Cn7Gk2Dkg/g4Kf6x2Y7nqwxrCszUmts5EzPUSYnHYOKL5lgO8iEMxdwwjiE976u5FC1m7U7K3D5gkwuSO+W5h2pquerdWtI8pwgKcWJ85zrwDGgS9e0mY0MzUxmaGYynpFZ2LwT4cuXwV3DwXdXUz9sPqPHTGlZABnwwldv6Hf1skaxrTGDfZXHMSgK3zlzYGIUS7YnYximxuMUKEc5zggOnHBxZl6C1FJ1swTMXcUpqUH46u9w4BM9IOVNxDPlJl6uHsk+bTCNGWeSc+5CmLJIX5/HUwfbn2OAp4wfTB7M5CF6INqw5xglxxtj3rwj1Y3sXPe/JLmOkJKczOiLb8TSxYB0MpvZqGdGkxfRkJTHkeN11G1+kffXvkjFiWr9JE8tfPEiNB4HSzL7087hw2+OAzBrVBbZjh7e162jMoYBMIQK0LRu+bdKVJIp9SZBP3z5in5rWzHAqEvwZo3h1W2HOVbvJcli5Mqz8kOFgHaYshh2v6GPN335fxjOuJSZRWOwmQw0eAMUxngt6sPVLj5/928MaPgWZ5KVkXMXY07LjelrtGBJIvmsheQEX+fYno0kVWzh29e3cSwtkzyrlySzgt2eBOOuZJA9i8xDXgal25nQGwaNU/PBZGGgzc33h6vkDjm5g9t3KVovXmWtrq6O1NRUamtrcTr7eGob8OndleoDYDTBmCvwpw3l1c8Pc7jajc1s5IdTBre+dawG4es34egufRCn6CIYNLnFkhiqqqEodKlmx+UL8Pab/0dO1Wek2i0UzVmIOXdMV37i6GkarvKvKflsLXXHj0QO19nymHnpNdjT9F9obyCIxWhIvNqk9nz9JpR/AbkT4Iz58W5Np3Tmd1Qypd4g4IWdL0FNGRjNMP5HkJbPO1+Uc7jajcVk4IrJg9quZTEYYfRlYLLB4a36wHjQh1JwNqAPjv9zZzkDki3MGD6g07+wScd3co5hN1V2M0XnfR9TTwUkAEUhKW80Yy4fzYljFew9cIRSl4mqYBJjtBTCw+VWUxTlA4kkZ5welI59BSPmgilBpsJ0MwlKic7vhi/+BnVH9C14xv8IUgcBMLUwnYo6D5eMzWGg8xRjJIoCRd/R/1Mf+BT2v68HuqEzKT3RyL7KBvYBGnBOBwOTqmoYjn8Ne99moNNG9rg5KAVTu/Yzd8GArBxmZOUwI24tiKHUfEjKQHOd4Kut69mijmTBpEGJWVsVQzLQncjc1bDtf/WAZLbBhKvQQjUsANlOG4vPKSQvLYp1gBQFhs3WH6APlO/7F8MHJDFrlH47fXNJFZ/sPxH1uum7jtTyz3+tw7/zVX3QPXcCytBZHfwhRbsUBQpmoKAQKN1ITV0Dm7+tinerup0EpUR1Yj9sexpcJ8DqgIkLqbdk8vLWQxyqdkVO6/BEzSEz9HEl0Ot3djzP5IFmZjcLTGu/rMDtC7Z7CY8/yLpdFez++E0GlL1DRY1bH/cYOa9fzmrvVgPHgD2dQicU1Gxi15E6jtZ54t2qbpUQQenPf/4zhYWF2Gw2pk+fzubNm+PdpPjxufRxny/+pn/sGIg2+Vr2Ntp5ZuNBDlW7eWfXUYJqF+5PDJ4CYxbo41M1B+Gz/2GS6QAXjMrCoCjsqajnqU9LOXCi6Ta0pmlUNfrY+O0JXlz/Oernz5Jft438dDuDx8+CUZd0fRa/aM1ghFHzcNrMjGE/A+q/5p87y3H5+u4yuXEfU3rxxRdZtmwZf/nLX5g+fTqrVq3i4osvZs+ePWRn95/boHhqoXyHnr0EvABog6ZQ4pzKli9rORxajGyg08b8cTldX8oiezQkZ8PuV6HhGOxZy4SkDAYPHsO6SieVfnuLNYbe2H6I44f2kd24h6LG/SRbDAwZnEHahMv0AVnRfdILYcgMhqofU3foI/YHG/i/LSrzxw+O33ZQ3SjuJQHTp09n6tSp/OlPfwJAVVXy8/P5+c9/zh133HHK7+2VJQFqEPwufZJo43F9TaHqUoKhfciMigIpWZSkzWBduY1Gr96NMhsVpgzJYGphOiZjDDMSNajPoC/9sCkYahr12HGmZuh/qQNe9pYepLq+EYfNTLbDSkbBmRhGfieyLZDoZpoG36zDXbqZ3UfqqCeJ2tSRzD//bMwpmWB1oGokXJV6rysJ8Pl8bN26lRUrVkSOGQwG5s6dy6efftrqfK/Xi9frjXxeV1cX3QtVlcC+f7U+3iIea5FjJxq9fHusIXwERdPQAAUNTdMYmpVCViiLqHH52HO0Xv9+rfW1hgxIIsdpAzRqXV6+OXKiVRM0TSOowaDCURSMPQ8yR2Gu9dBYegir2cDYvFQmFqR1z10XgxHyp+pjQkd3wtHdKHVHcGoefYA9ZFiGBUNOOoasIsibDM5uLIoUrSkKjLwIuzOXsbb3KDlcwdDgbsw7DwCgAp+W1qMZzRiMZn2NKkUB9OdMhy2ymF1Q1dhyoLrdl0pPtjAymoXvxv0b2GKfDMQ1KB0/fpxgMMjAgQNbHB84cCBff/11q/NXrlzJPffc0/EXCnj1rCRabi+BxoZ2v6y5g3rdD6B5faie+vav5VfAHwpSAT/+oB7e/AYbbnMqbnM6DZZsauz5KEPzKcjWp2Tkpdr5weTBDEq398yqgyYLDJqiPwJefZKvt06PmgYTpqQMsKXJuFG85YzDmjWaM459jXp8HzQeBXcNXp8fg+oD1Qf+Zn8fwwxWaNCHANA01PpT3MVTLZDkPn1bTl4pNEbiPqbUEStWrGDZsmWRz+vq6sjPzz/Fd4Sk5cOEH590Zyj0cRvH7H6VgkZfy3odRQl9WSHFbgaLCRQFuz/IME8g9N1K5FRN0T9LtobOBeyqQlHACCZbi2ubDAZsFgOWZt0yg0GhIMbTQKJmsoYyIcmGEpLRBDljMeSM1T9Xg9j8Lia6Pfi9bnyBAEFNBVVDC2X3dpMCdj3TVjQoKGz/Dp7NbIBo1iy3dM8+eXENSpmZmRiNRo4ePdri+NGjR8nJyWl1vtVqxWrtxMCeJRkyhkZ9ehKQ1M5KGCezhR5RNQPIjLoVQkTJYESxOrBbHUSzc50BGBTbOdIxFddc3GKxMGXKFN59993IMVVVeffdd5kxo0/U5AohOiju3bdly5axaNEizjrrLKZNm8aqVatobGzkuuuui3fThBBxEPeg9KMf/Yhjx45x5513UlFRwcSJE3nrrbdaDX4LIfqHuNcpdUWvrFMSoh/pzO+o3N8VQiQUCUpCiIQiQUkIkVDiPtDdFeHhsKinmwghelT4d7MjQ9e9OijV1+vTO6Kq6hZCxE19fT2pqdFt2NCr776pqsqRI0dwOBy9ZzH4GAtPtSkrK5M7kJ0g71/XnO790zSN+vp68vLyMEQ5b7JXZ0oGg4HBgwef/sR+wOl0yi9VF8j71zWnev+izZDCZKBbCJFQJCgJIRKKBKVezmq1ctddd3Vu9QQh718Xdcf716sHuoUQfY9kSkKIhCJBSQiRUCQoCSESigQlIURCkaDUC1VVVbFw4UKcTidpaWnccMMNNDS0v/sKwOzZs1EUpcXjpz/9aQ+1OL46ugPzSy+9xBlnnIHNZmPcuHH885//7KGWJqaOvH/FxcWt/p/ZbNGuYh+iiV5n3rx52oQJE7SNGzdqH374oTZixAjtqquuOuX3zJo1S7vxxhu18vLyyKO2traHWhw/L7zwgmaxWLQnn3xS27Vrl3bjjTdqaWlp2tGjR9s8/+OPP9aMRqP24IMPart379b+3//7f5rZbNZ27tzZwy1PDB19/9asWaM5nc4W/88qKio69JoSlHqZ3bt3a4D22WefRY6tXbtWUxRFO3z4cLvfN2vWLO22227rgRYmlmnTpmlLly6NfB4MBrW8vDxt5cqVbZ7/b//2b9qll17a4tj06dO1m2++uVvbmag6+v6tWbNGS01N7dJrSvetl/n0009JS0vjrLPOihybO3cuBoOBTZs2nfJ7n332WTIzMxk7diwrVqzA5XJ1d3PjKrwD89y5cyPHTrUDM+jvb/PzAS6++OJ2z+/LOvP+ATQ0NDBkyBDy8/O5/PLL2bVrV4det1dPyO2PKioqyM7ObnHMZDKRkZFBRUVFu9939dVXM2TIEPLy8vjiiy/41a9+xZ49e3jllVe6u8lx09EdmEF/f9s6/1TvbV/Vmfdv1KhRPPnkk4wfP57a2loeeughzjnnHHbt2hX15HkJSgnijjvu4IEHHjjlOV999VWnr3/TTTdFPh43bhy5ublceOGF7N+/n+HDh3f6ukI0N2PGjBZ7Np5zzjmMHj2axx9/nPvuuy+qa0hQShC//OUvWbx48SnPGTZsGDk5OVRWVrY4HggEqKqqanNX4fZMnz4dgH379vXZoNTRHZgBcnJyOnR+X9aZ9+9kZrOZSZMmsW/fvqhfV8aUEkRWVhZnnHHGKR8Wi4UZM2ZQU1PD1q1bI9/73nvvoapqJNBEY/v27QDk5ubG+kdJGJ3ZgXnGjBktzgdYt25dv9yxORY7WAeDQXbu3Nmx/2ddGiYXcTFv3jxt0qRJ2qZNm7SPPvpIKyoqalEScOjQIW3UqFHapk2bNE3TtH379mn33nuvtmXLFq2kpER7/fXXtWHDhmkzZ86M14/QY1544QXNarVqxcXF2u7du7WbbrpJS0tLi9ym/slPfqLdcccdkfM//vhjzWQyaQ899JD21VdfaXfddVe/LwnoyPt3zz33aG+//ba2f/9+bevWrdqPf/xjzWazabt27Yr6NSUo9UInTpzQrrrqKi0lJUVzOp3addddp9XX10e+XlJSogHa+++/r2maph08eFCbOXOmlpGRoVmtVm3EiBHaf/zHf/SLOiVN07Q//vGPWkFBgWaxWLRp06ZpGzdujHxt1qxZ2qJFi1qc/7e//U0bOXKkZrFYtDFjxmhvvvlmD7c4sXTk/bv99tsj5w4cOFCbP3++tm3btg69nixdIoRIKDKmJIRIKBKUhBAJRYKSECKhSFASQiQUCUpCiIQiQUkIkVAkKAkhEooEJSFEQpGgJHqV4uJi0tLSIp/ffffdTJw4MfL54sWLWbBgQY+3S8SOBCXRpsWLF7e7jvfSpUtRFKXFqgbdEQwKCwtZtWpVi2M/+tGP2Lt3b7vf89hjj1FcXBz5fPbs2dx+++0xbZfoXhKURLvy8/N54YUXcLvdkWMej4fnnnuOgoKCuLTJbre3WuSuudTU1BaZlOh9JCiJdk2ePJn8/PwWq1O+8sorFBQUMGnSpC5du60MZsGCBZHsa/bs2Rw4cIBf/OIXkV0xoHX37WTNM7bFixezYcMGHnvsscg1SkpKGDFiBA899FCL79u+fTuKonRo3R/RPSQoiVO6/vrrWbNmTeTzJ598kuuuu67bX/eVV15h8ODB3HvvvZSXl1NeXt7hazz22GPMmDGDG2+8MXKNgoKCVj8TwJo1a5g5cyYjRoyI1Y8gOkmCkjila665ho8++ogDBw5w4MABPv74Y6655ppuf92MjAyMRiMOh4OcnJxOrfyYmpqKxWIhKSkpcg2j0cjixYvZs2dPZP8yv9/Pc889x/XXXx/rH0N0giyHK04pKyuLSy+9lOLiYjRN49JLLyUzMzPezeqSvLw8Lr30Up588kmmTZvG3//+d7xeL1deeWW8myaQTElE4frrr6e4uJinnnoqZtmEwWDg5KW8/H5/TK4djSVLlkQG8desWcOPfvQjkpKSeuz1RfskKInTmjdvHj6fD7/fz8UXXxyTa2ZlZbUYJwoGg3z55ZctzrFYLASDwS69TnvXmD9/PsnJyaxevZq33npLum4JRLpv4rSMRmNkeyej0djuebW1tZENCcIGDBhAfn5+q3MvuOACli1bxptvvsnw4cN55JFHqKmpaXFOYWEhH3zwAT/+8Y+xWq2d6jYWFhayadMmSktLSUlJISMjA4PBEBlbWrFiBUVFRf1yY4BEJZmSiIrT6cTpdJ7ynPXr1zNp0qQWj3vuuafNc6+//noWLVrEtddey6xZsxg2bBhz5sxpcc69995LaWkpw4cPJysrq1PtXr58OUajkTPPPJOsrCwOHjwY+doNN9yAz+frkbuJInqyRrfotz788EMuvPBCysrKWu0CK+JHgpLod7xeL8eOHWPRokXk5OTw7LPPxrtJohnpvol+5/nnn2fIkCHU1NTw4IMPxrs54iSSKQkhEopkSkKIhCJBSQiRUCQoCSESigQlIURCkaAkhEgoEpSEEAlFgpIQIqFIUBJCJJT/D1eaE6sXeWRzAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from ml_utility_loss.loss_learning.visualization import plot_pred_density_2\n", + "\n", + "_ = plot_pred_density_2(y)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "e79e4b0f", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T13:08:21.454296Z", + "iopub.status.busy": "2024-02-29T13:08:21.453996Z", + "iopub.status.idle": "2024-02-29T13:08:21.801402Z", + "shell.execute_reply": "2024-02-29T13:08:21.800436Z" + }, + "papermill": { + "duration": 0.370999, + "end_time": "2024-02-29T13:08:21.803407", + "exception": false, + "start_time": "2024-02-29T13:08:21.432408", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from ml_utility_loss.loss_learning.visualization import plot_density_3\n", + "\n", + "_ = plot_density_3(y2[\"pred\"], next(iter(y2[\"y\"].values())))" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "745adde1", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T13:08:21.847341Z", + "iopub.status.busy": "2024-02-29T13:08:21.847043Z", + "iopub.status.idle": "2024-02-29T13:08:22.009657Z", + "shell.execute_reply": "2024-02-29T13:08:22.008722Z" + }, + "papermill": { + "duration": 0.186924, + "end_time": "2024-02-29T13:08:22.011719", + "exception": false, + "start_time": "2024-02-29T13:08:21.824795", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from ml_utility_loss.loss_learning.visualization import plot_box_3\n", + "\n", + "_ = plot_box_3(y2[\"pred\"], next(iter(y2[\"y\"].values())))" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "eabe1bab", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T13:08:22.055965Z", + "iopub.status.busy": "2024-02-29T13:08:22.055681Z", + "iopub.status.idle": "2024-02-29T13:08:22.329266Z", + "shell.execute_reply": "2024-02-29T13:08:22.328326Z" + }, + "papermill": { + "duration": 0.298119, + "end_time": "2024-02-29T13:08:22.331388", + "exception": false, + "start_time": "2024-02-29T13:08:22.033269", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#\"\"\"\n", + "from ml_utility_loss.loss_learning.visualization import plot_grad, plot_grad_2, plot_grad_3\n", + "import matplotlib.pyplot as plt\n", + "\n", + "#plot_grad_2(y, model.models)\n", + "for m in model.models:\n", + " ym = y[m]\n", + " fig, ax = plt.subplots()\n", + " plot_grad_3(ym[\"error\"], ym[\"grad\"], name=f\"{m}_grad\", fig=fig, ax=ax)\n", + "#\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "54c0e9f3", + "metadata": { + "papermill": { + "duration": 0.02152, + "end_time": "2024-02-29T13:08:22.374773", + "exception": false, + "start_time": "2024-02-29T13:08:22.353253", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "accelerator": "GPU", + "celltoolbar": "Tags", + "colab": { + "authorship_tag": "ABX9TyOOVfelovKP9fLGU7SvvRie", + "gpuType": "T4", + "mount_file_id": "17POSGAvge8y9DW9WGs2jLkibaRjToayg", + "provenance": [] + }, + "kaggle": { + "accelerator": "gpu", + "dataSources": [], + "dockerImageVersionId": 30648, + "isGpuEnabled": true, + "isInternetEnabled": true, + "language": "python", + "sourceType": "notebook" + }, + "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.13" + }, + "papermill": { + "default_parameters": {}, + "duration": 1590.538902, + "end_time": "2024-02-29T13:08:25.117108", + "environment_variables": {}, + "exception": null, + "input_path": "eval/insurance/lct_gan/2/mlu-eval.ipynb", + "output_path": "eval/insurance/lct_gan/2/mlu-eval.ipynb", + "parameters": { + "dataset": "insurance", + "dataset_name": "insurance", + "debug": false, + "folder": "eval", + "gp": false, + "gp_multiply": false, + "param_index": 2, + "path": "eval/insurance/lct_gan/2", + "path_prefix": "../../../../", + "random_seed": 2, + "single_model": "lct_gan" + }, + "start_time": "2024-02-29T12:41:54.578206", + "version": "2.5.0" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file