{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "982e76f5", "metadata": { "execution": { "iopub.execute_input": "2024-03-01T17:33:51.179506Z", "iopub.status.busy": "2024-03-01T17:33:51.179161Z", "iopub.status.idle": "2024-03-01T17:33:51.213379Z", "shell.execute_reply": "2024-03-01T17:33:51.212464Z" }, "papermill": { "duration": 0.051044, "end_time": "2024-03-01T17:33:51.215789", "exception": false, "start_time": "2024-03-01T17:33:51.164745", "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-03-01T17:33:51.243896Z", "iopub.status.busy": "2024-03-01T17:33:51.243419Z", "iopub.status.idle": "2024-03-01T17:33:51.250437Z", "shell.execute_reply": "2024-03-01T17:33:51.249566Z" }, "papermill": { "duration": 0.02393, "end_time": "2024-03-01T17:33:51.252575", "exception": false, "start_time": "2024-03-01T17:33:51.228645", "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-03-01T17:33:51.277185Z", "iopub.status.busy": "2024-03-01T17:33:51.276860Z", "iopub.status.idle": "2024-03-01T17:33:51.281125Z", "shell.execute_reply": "2024-03-01T17:33:51.280269Z" }, "papermill": { "duration": 0.019169, "end_time": "2024-03-01T17:33:51.283141", "exception": false, "start_time": "2024-03-01T17:33:51.263972", "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-03-01T17:33:51.307819Z", "iopub.status.busy": "2024-03-01T17:33:51.307160Z", "iopub.status.idle": "2024-03-01T17:33:51.311367Z", "shell.execute_reply": "2024-03-01T17:33:51.310516Z" }, "executionInfo": { "elapsed": 678, "status": "ok", "timestamp": 1696841022168, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "ns5hFcVL2yvs", "papermill": { "duration": 0.01875, "end_time": "2024-03-01T17:33:51.313388", "exception": false, "start_time": "2024-03-01T17:33:51.294638", "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-03-01T17:33:51.337183Z", "iopub.status.busy": "2024-03-01T17:33:51.336912Z", "iopub.status.idle": "2024-03-01T17:33:51.342349Z", "shell.execute_reply": "2024-03-01T17:33:51.341458Z" }, "papermill": { "duration": 0.019601, "end_time": "2024-03-01T17:33:51.344277", "exception": false, "start_time": "2024-03-01T17:33:51.324676", "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": "167ff1aa", "metadata": { "execution": { "iopub.execute_input": "2024-03-01T17:33:51.369794Z", "iopub.status.busy": "2024-03-01T17:33:51.369452Z", "iopub.status.idle": "2024-03-01T17:33:51.374498Z", "shell.execute_reply": "2024-03-01T17:33:51.373660Z" }, "papermill": { "duration": 0.020317, "end_time": "2024-03-01T17:33:51.376521", "exception": false, "start_time": "2024-03-01T17:33:51.356204", "status": "completed" }, "tags": [ "injected-parameters" ] }, "outputs": [], "source": [ "# Parameters\n", "dataset = \"contraceptive\"\n", "dataset_name = \"contraceptive\"\n", "single_model = \"lct_gan\"\n", "gp = False\n", "gp_multiply = False\n", "random_seed = 42\n", "debug = False\n", "folder = \"eval\"\n", "path_prefix = \"../../../../\"\n", "path = \"eval/contraceptive/lct_gan/42\"\n", "param_index = 2\n" ] }, { "cell_type": "code", "execution_count": null, "id": "bd7c02d6", "metadata": { "papermill": { "duration": 0.011185, "end_time": "2024-03-01T17:33:51.398967", "exception": false, "start_time": "2024-03-01T17:33:51.387782", "status": "completed" }, "tags": [] }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 7, "id": "5f45b1d0", "metadata": { "execution": { "iopub.execute_input": "2024-03-01T17:33:51.423542Z", "iopub.status.busy": "2024-03-01T17:33:51.422709Z", "iopub.status.idle": "2024-03-01T17:33:51.432194Z", "shell.execute_reply": "2024-03-01T17:33:51.431373Z" }, "executionInfo": { "elapsed": 7, "status": "ok", "timestamp": 1696841022169, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "UdvXYv3c3LXy", "papermill": { "duration": 0.023801, "end_time": "2024-03-01T17:33:51.434089", "exception": false, "start_time": "2024-03-01T17:33:51.410288", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/kaggle/working\n", "/kaggle/working/eval/contraceptive/lct_gan/42\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-03-01T17:33:51.459302Z", "iopub.status.busy": "2024-03-01T17:33:51.458490Z", "iopub.status.idle": "2024-03-01T17:33:53.726321Z", "shell.execute_reply": "2024-03-01T17:33:53.725234Z" }, "papermill": { "duration": 2.282713, "end_time": "2024-03-01T17:33:53.728526", "exception": false, "start_time": "2024-03-01T17:33:51.445813", "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-03-01T17:33:53.754971Z", "iopub.status.busy": "2024-03-01T17:33:53.754479Z", "iopub.status.idle": "2024-03-01T17:33:53.776671Z", "shell.execute_reply": "2024-03-01T17:33:53.775859Z" }, "papermill": { "duration": 0.037805, "end_time": "2024-03-01T17:33:53.778843", "exception": false, "start_time": "2024-03-01T17:33:53.741038", "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-03-01T17:33:53.803521Z", "iopub.status.busy": "2024-03-01T17:33:53.803216Z", "iopub.status.idle": "2024-03-01T17:33:53.813251Z", "shell.execute_reply": "2024-03-01T17:33:53.812339Z" }, "executionInfo": { "elapsed": 6, "status": "ok", "timestamp": 1696841022169, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "Vrl2QkoV3o_8", "papermill": { "duration": 0.024856, "end_time": "2024-03-01T17:33:53.815377", "exception": false, "start_time": "2024-03-01T17:33:53.790521", "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-03-01T17:33:53.841041Z", "iopub.status.busy": "2024-03-01T17:33:53.840728Z", "iopub.status.idle": "2024-03-01T17:33:54.332643Z", "shell.execute_reply": "2024-03-01T17:33:54.331666Z" }, "executionInfo": { "elapsed": 6, "status": "ok", "timestamp": 1696841022169, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "TilUuFk9vqMb", "papermill": { "duration": 0.507699, "end_time": "2024-03-01T17:33:54.335205", "exception": false, "start_time": "2024-03-01T17:33:53.827506", "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-03-01T17:33:54.361276Z", "iopub.status.busy": "2024-03-01T17:33:54.360933Z", "iopub.status.idle": "2024-03-01T17:34:07.532200Z", "shell.execute_reply": "2024-03-01T17:34:07.531383Z" }, "executionInfo": { "elapsed": 3113, "status": "ok", "timestamp": 1696841025277, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "7Abt8nStvr9Z", "papermill": { "duration": 13.187087, "end_time": "2024-03-01T17:34:07.534752", "exception": false, "start_time": "2024-03-01T17:33:54.347665", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2024-03-01 17:33:58.910176: 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-03-01 17:33:58.910280: 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-03-01 17:33:59.040427: 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-03-01T17:34:07.562056Z", "iopub.status.busy": "2024-03-01T17:34:07.561386Z", "iopub.status.idle": "2024-03-01T17:34:07.567813Z", "shell.execute_reply": "2024-03-01T17:34:07.566891Z" }, "papermill": { "duration": 0.022295, "end_time": "2024-03-01T17:34:07.569876", "exception": false, "start_time": "2024-03-01T17:34:07.547581", "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-03-01T17:34:07.595088Z", "iopub.status.busy": "2024-03-01T17:34:07.594396Z", "iopub.status.idle": "2024-03-01T17:34:18.381557Z", "shell.execute_reply": "2024-03-01T17:34:18.380498Z" }, "executionInfo": { "elapsed": 20137, "status": "ok", "timestamp": 1696841045408, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "tbaguWxAvtPi", "papermill": { "duration": 10.802711, "end_time": "2024-03-01T17:34:18.384075", "exception": false, "start_time": "2024-03-01T17:34:07.581364", "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", "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:119: ConvergenceWarning: Number of distinct clusters (4) found smaller than n_clusters (10). Possibly due to duplicate points in X.\n", " .fit(X)\n", "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:119: ConvergenceWarning: Number of distinct clusters (4) 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", "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:119: ConvergenceWarning: Number of distinct clusters (4) found smaller than n_clusters (10). Possibly due to duplicate points in X.\n", " .fit(X)\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.775,\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': 2,\n", " 'epochs': 100,\n", " 'lr_mul': 0.075,\n", " 'n_warmup_steps': 100,\n", " 'Optim': functools.partial(, amsgrad=True),\n", " 'loss_balancer_beta': 0.675,\n", " 'loss_balancer_r': 0.95,\n", " 'fixed_role_model': 'lct_gan',\n", " 'd_model': 256,\n", " 'attn_activation': torch.nn.modules.activation.PReLU,\n", " 'tf_d_inner': 512,\n", " 'tf_n_layers_enc': 3,\n", " 'tf_n_head': 32,\n", " 'tf_activation': ml_utility_loss.activations.LeakyHardtanh,\n", " 'tf_activation_final': ml_utility_loss.activations.LeakyHardtanh,\n", " 'ada_d_hid': 1024,\n", " 'ada_n_layers': 8,\n", " 'ada_activation': torch.nn.modules.activation.Softsign,\n", " 'ada_activation_final': ml_utility_loss.activations.LeakyHardsigmoid,\n", " 'head_d_hid': 256,\n", " 'head_n_layers': 9,\n", " 'head_n_head': 32,\n", " 'head_activation': torch.nn.modules.activation.ReLU6,\n", " 'head_activation_final': ml_utility_loss.activations.LeakyHardsigmoid,\n", " 'models': ['lct_gan'],\n", " 'max_seconds': 3600,\n", " 'tf_lora': False,\n", " 'tf_num_inds': 64,\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-03-01T17:34:19.226672Z", "iopub.status.busy": "2024-03-01T17:34:19.226306Z", "iopub.status.idle": "2024-03-01T17:34:19.310143Z", "shell.execute_reply": "2024-03-01T17:34:19.309075Z" }, "papermill": { "duration": 0.099856, "end_time": "2024-03-01T17:34:19.312320", "exception": false, "start_time": "2024-03-01T17:34:19.212464", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "load_dataset_3_factory 2\n", "Caching in ../../../../contraceptive/_cache/lct_gan/all inf False\n", "Splitting without random!\n", "Split with reverse index!\n", "../../../../ml-utility-loss/datasets_2/contraceptive [80, 20]\n", "Caching in ../../../../contraceptive/_cache4/lct_gan/all inf False\n", "Splitting without random!\n", "Split with reverse index!\n", "../../../../ml-utility-loss/datasets_4/contraceptive [80, 20]\n", "Caching in ../../../../contraceptive/_cache5/lct_gan/all inf False\n", "Splitting without random!\n", "Split with reverse index!\n", "../../../../ml-utility-loss/datasets_5/contraceptive [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-03-01T17:34:19.341974Z", "iopub.status.busy": "2024-03-01T17:34:19.341660Z", "iopub.status.idle": "2024-03-01T17:34:19.821796Z", "shell.execute_reply": "2024-03-01T17:34:19.820808Z" }, "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.497925, "end_time": "2024-03-01T17:34:19.824022", "exception": false, "start_time": "2024-03-01T17:34:19.326097", "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-03-01T17:34:19.856179Z", "iopub.status.busy": "2024-03-01T17:34:19.855358Z", "iopub.status.idle": "2024-03-01T17:34:19.860242Z", "shell.execute_reply": "2024-03-01T17:34:19.859353Z" }, "papermill": { "duration": 0.02323, "end_time": "2024-03-01T17:34:19.862233", "exception": false, "start_time": "2024-03-01T17:34:19.839003", "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-03-01T17:34:19.889324Z", "iopub.status.busy": "2024-03-01T17:34:19.889009Z", "iopub.status.idle": "2024-03-01T17:34:19.896429Z", "shell.execute_reply": "2024-03-01T17:34:19.895570Z" }, "papermill": { "duration": 0.023469, "end_time": "2024-03-01T17:34:19.898358", "exception": false, "start_time": "2024-03-01T17:34:19.874889", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "10264072" ] }, "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-03-01T17:34:19.925652Z", "iopub.status.busy": "2024-03-01T17:34:19.925301Z", "iopub.status.idle": "2024-03-01T17:34:20.022147Z", "shell.execute_reply": "2024-03-01T17:34:20.021100Z" }, "papermill": { "duration": 0.11297, "end_time": "2024-03-01T17:34:20.024254", "exception": false, "start_time": "2024-03-01T17:34:19.911284", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "========================================================================================================================\n", "Layer (type:depth-idx) Output Shape Param #\n", "========================================================================================================================\n", "MLUtilitySingle [2, 1179, 40] --\n", "├─Adapter: 1-1 [2, 1179, 40] --\n", "│ └─Sequential: 2-1 [2, 1179, 256] --\n", "│ │ └─FeedForward: 3-1 [2, 1179, 1024] --\n", "│ │ │ └─Linear: 4-1 [2, 1179, 1024] 41,984\n", "│ │ │ └─Softsign: 4-2 [2, 1179, 1024] --\n", "│ │ └─FeedForward: 3-2 [2, 1179, 1024] --\n", "│ │ │ └─Linear: 4-3 [2, 1179, 1024] 1,049,600\n", "│ │ │ └─Softsign: 4-4 [2, 1179, 1024] --\n", "│ │ └─FeedForward: 3-3 [2, 1179, 1024] --\n", "│ │ │ └─Linear: 4-5 [2, 1179, 1024] 1,049,600\n", "│ │ │ └─Softsign: 4-6 [2, 1179, 1024] --\n", "│ │ └─FeedForward: 3-4 [2, 1179, 1024] --\n", "│ │ │ └─Linear: 4-7 [2, 1179, 1024] 1,049,600\n", "│ │ │ └─Softsign: 4-8 [2, 1179, 1024] --\n", "│ │ └─FeedForward: 3-5 [2, 1179, 1024] --\n", "│ │ │ └─Linear: 4-9 [2, 1179, 1024] 1,049,600\n", "│ │ │ └─Softsign: 4-10 [2, 1179, 1024] --\n", "│ │ └─FeedForward: 3-6 [2, 1179, 1024] --\n", "│ │ │ └─Linear: 4-11 [2, 1179, 1024] 1,049,600\n", "│ │ │ └─Softsign: 4-12 [2, 1179, 1024] --\n", "│ │ └─FeedForward: 3-7 [2, 1179, 1024] --\n", "│ │ │ └─Linear: 4-13 [2, 1179, 1024] 1,049,600\n", "│ │ │ └─Softsign: 4-14 [2, 1179, 1024] --\n", "│ │ └─FeedForward: 3-8 [2, 1179, 256] --\n", "│ │ │ └─Linear: 4-15 [2, 1179, 256] 262,400\n", "│ │ │ └─LeakyHardsigmoid: 4-16 [2, 1179, 256] --\n", "├─Adapter: 1-2 [2, 294, 40] (recursive)\n", "│ └─Sequential: 2-2 [2, 294, 256] (recursive)\n", "│ │ └─FeedForward: 3-9 [2, 294, 1024] (recursive)\n", "│ │ │ └─Linear: 4-17 [2, 294, 1024] (recursive)\n", "│ │ │ └─Softsign: 4-18 [2, 294, 1024] --\n", "│ │ └─FeedForward: 3-10 [2, 294, 1024] (recursive)\n", "│ │ │ └─Linear: 4-19 [2, 294, 1024] (recursive)\n", "│ │ │ └─Softsign: 4-20 [2, 294, 1024] --\n", "│ │ └─FeedForward: 3-11 [2, 294, 1024] (recursive)\n", "│ │ │ └─Linear: 4-21 [2, 294, 1024] (recursive)\n", "│ │ │ └─Softsign: 4-22 [2, 294, 1024] --\n", "│ │ └─FeedForward: 3-12 [2, 294, 1024] (recursive)\n", "│ │ │ └─Linear: 4-23 [2, 294, 1024] (recursive)\n", "│ │ │ └─Softsign: 4-24 [2, 294, 1024] --\n", "│ │ └─FeedForward: 3-13 [2, 294, 1024] (recursive)\n", "│ │ │ └─Linear: 4-25 [2, 294, 1024] (recursive)\n", "│ │ │ └─Softsign: 4-26 [2, 294, 1024] --\n", "│ │ └─FeedForward: 3-14 [2, 294, 1024] (recursive)\n", "│ │ │ └─Linear: 4-27 [2, 294, 1024] (recursive)\n", "│ │ │ └─Softsign: 4-28 [2, 294, 1024] --\n", "│ │ └─FeedForward: 3-15 [2, 294, 1024] (recursive)\n", "│ │ │ └─Linear: 4-29 [2, 294, 1024] (recursive)\n", "│ │ │ └─Softsign: 4-30 [2, 294, 1024] --\n", "│ │ └─FeedForward: 3-16 [2, 294, 256] (recursive)\n", "│ │ │ └─Linear: 4-31 [2, 294, 256] (recursive)\n", "│ │ │ └─LeakyHardsigmoid: 4-32 [2, 294, 256] --\n", "├─TwinEncoder: 1-3 [2, 2048] --\n", "│ └─Encoder: 2-3 [2, 8, 256] --\n", "│ │ └─ModuleList: 3-18 -- (recursive)\n", "│ │ │ └─EncoderLayer: 4-33 [2, 1179, 256] --\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-1 [2, 1179, 256] --\n", "│ │ │ │ │ └─TensorInductionPoint: 6-1 [2, 64, 256] 16,384\n", "│ │ │ │ │ └─MultiHeadAttention: 6-2 [2, 64, 256] --\n", "│ │ │ │ │ │ └─Linear: 7-1 [2, 64, 256] 65,536\n", "│ │ │ │ │ │ └─Linear: 7-2 [2, 1179, 256] 65,536\n", "│ │ │ │ │ │ └─Linear: 7-3 [2, 1179, 256] 65,536\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-4 [2, 32, 64, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-1 [2, 32, 64, 1179] --\n", "│ │ │ │ │ │ └─Linear: 7-5 [2, 64, 256] 65,792\n", "│ │ │ │ │ │ └─PReLU: 7-6 [2, 64, 256] 1\n", "│ │ │ │ │ └─MultiHeadAttention: 6-3 [2, 1179, 256] --\n", "│ │ │ │ │ │ └─Linear: 7-7 [2, 1179, 256] 65,536\n", "│ │ │ │ │ │ └─Linear: 7-8 [2, 64, 256] 65,536\n", "│ │ │ │ │ │ └─Linear: 7-9 [2, 64, 256] 65,536\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-10 [2, 32, 1179, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-2 [2, 32, 1179, 64] --\n", "│ │ │ │ │ │ └─Linear: 7-11 [2, 1179, 256] 65,792\n", "│ │ │ │ │ │ └─PReLU: 7-12 [2, 1179, 256] 1\n", "│ │ │ │ └─DoubleFeedForward: 5-2 [2, 1179, 256] --\n", "│ │ │ │ │ └─Linear: 6-4 [2, 1179, 512] 131,584\n", "│ │ │ │ │ └─LeakyHardtanh: 6-5 [2, 1179, 512] --\n", "│ │ │ │ │ └─Linear: 6-6 [2, 1179, 256] 131,328\n", "│ │ │ └─EncoderLayer: 4-34 [2, 1179, 256] --\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-3 [2, 1179, 256] --\n", "│ │ │ │ │ └─TensorInductionPoint: 6-7 [2, 64, 256] 16,384\n", "│ │ │ │ │ └─MultiHeadAttention: 6-8 [2, 64, 256] --\n", "│ │ │ │ │ │ └─Linear: 7-13 [2, 64, 256] 65,536\n", "│ │ │ │ │ │ └─Linear: 7-14 [2, 1179, 256] 65,536\n", "│ │ │ │ │ │ └─Linear: 7-15 [2, 1179, 256] 65,536\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-16 [2, 32, 64, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-3 [2, 32, 64, 1179] --\n", "│ │ │ │ │ │ └─Linear: 7-17 [2, 64, 256] 65,792\n", "│ │ │ │ │ │ └─PReLU: 7-18 [2, 64, 256] 1\n", "│ │ │ │ │ └─MultiHeadAttention: 6-9 [2, 1179, 256] --\n", "│ │ │ │ │ │ └─Linear: 7-19 [2, 1179, 256] 65,536\n", "│ │ │ │ │ │ └─Linear: 7-20 [2, 64, 256] 65,536\n", "│ │ │ │ │ │ └─Linear: 7-21 [2, 64, 256] 65,536\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-22 [2, 32, 1179, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-4 [2, 32, 1179, 64] --\n", "│ │ │ │ │ │ └─Linear: 7-23 [2, 1179, 256] 65,792\n", "│ │ │ │ │ │ └─PReLU: 7-24 [2, 1179, 256] 1\n", "│ │ │ │ └─DoubleFeedForward: 5-4 [2, 1179, 256] --\n", "│ │ │ │ │ └─Linear: 6-10 [2, 1179, 512] 131,584\n", "│ │ │ │ │ └─LeakyHardtanh: 6-11 [2, 1179, 512] --\n", "│ │ │ │ │ └─Linear: 6-12 [2, 1179, 256] 131,328\n", "│ │ │ └─EncoderLayer: 4-35 [2, 8, 256] --\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-5 [2, 1179, 256] --\n", "│ │ │ │ │ └─TensorInductionPoint: 6-13 [2, 64, 256] 16,384\n", "│ │ │ │ │ └─MultiHeadAttention: 6-14 [2, 64, 256] --\n", "│ │ │ │ │ │ └─Linear: 7-25 [2, 64, 256] 65,536\n", "│ │ │ │ │ │ └─Linear: 7-26 [2, 1179, 256] 65,536\n", "│ │ │ │ │ │ └─Linear: 7-27 [2, 1179, 256] 65,536\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-28 [2, 32, 64, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-5 [2, 32, 64, 1179] --\n", "│ │ │ │ │ │ └─Linear: 7-29 [2, 64, 256] 65,792\n", "│ │ │ │ │ │ └─PReLU: 7-30 [2, 64, 256] 1\n", "│ │ │ │ │ └─MultiHeadAttention: 6-15 [2, 1179, 256] --\n", "│ │ │ │ │ │ └─Linear: 7-31 [2, 1179, 256] 65,536\n", "│ │ │ │ │ │ └─Linear: 7-32 [2, 64, 256] 65,536\n", "│ │ │ │ │ │ └─Linear: 7-33 [2, 64, 256] 65,536\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-34 [2, 32, 1179, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-6 [2, 32, 1179, 64] --\n", "│ │ │ │ │ │ └─Linear: 7-35 [2, 1179, 256] 65,792\n", "│ │ │ │ │ │ └─PReLU: 7-36 [2, 1179, 256] 1\n", "│ │ │ │ └─DoubleFeedForward: 5-6 [2, 1179, 256] --\n", "│ │ │ │ │ └─Linear: 6-16 [2, 1179, 512] 131,584\n", "│ │ │ │ │ └─LeakyHardtanh: 6-17 [2, 1179, 512] --\n", "│ │ │ │ │ └─Linear: 6-18 [2, 1179, 256] 131,328\n", "│ │ │ │ └─PoolingByMultiheadAttention: 5-7 [2, 8, 256] --\n", "│ │ │ │ │ └─TensorInductionPoint: 6-19 [2, 8, 256] 2,048\n", "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-20 [2, 8, 256] --\n", "│ │ │ │ │ │ └─Linear: 7-37 [2, 8, 256] 65,536\n", "│ │ │ │ │ │ └─Linear: 7-38 [2, 1179, 256] 65,536\n", "│ │ │ │ │ │ └─Linear: 7-39 [2, 1179, 256] 65,536\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-40 [2, 32, 8, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-7 [2, 32, 8, 1179] --\n", "│ │ │ │ │ │ └─Linear: 7-41 [2, 8, 256] 65,792\n", "│ │ │ │ │ │ └─PReLU: 7-42 [2, 8, 256] 1\n", "│ │ │ │ └─DoubleFeedForward: 5-8 [2, 8, 256] (recursive)\n", "│ │ │ │ │ └─Linear: 6-21 [2, 8, 512] (recursive)\n", "│ │ │ │ │ └─LeakyHardtanh: 6-22 [2, 8, 512] --\n", "│ │ │ │ │ └─Linear: 6-23 [2, 8, 256] (recursive)\n", "│ └─Encoder: 2-4 [2, 8, 256] (recursive)\n", "│ │ └─ModuleList: 3-18 -- (recursive)\n", "│ │ │ └─EncoderLayer: 4-36 [2, 294, 256] (recursive)\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-9 [2, 294, 256] (recursive)\n", "│ │ │ │ │ └─TensorInductionPoint: 6-24 [2, 64, 256] (recursive)\n", "│ │ │ │ │ └─MultiHeadAttention: 6-25 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-43 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-44 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-45 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-46 [2, 32, 64, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-8 [2, 32, 64, 294] --\n", "│ │ │ │ │ │ └─Linear: 7-47 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─PReLU: 7-48 [2, 64, 256] (recursive)\n", "│ │ │ │ │ └─MultiHeadAttention: 6-26 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-49 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-50 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-51 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-52 [2, 32, 294, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-9 [2, 32, 294, 64] --\n", "│ │ │ │ │ │ └─Linear: 7-53 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─PReLU: 7-54 [2, 294, 256] (recursive)\n", "│ │ │ │ └─DoubleFeedForward: 5-10 [2, 294, 256] (recursive)\n", "│ │ │ │ │ └─Linear: 6-27 [2, 294, 512] (recursive)\n", "│ │ │ │ │ └─LeakyHardtanh: 6-28 [2, 294, 512] --\n", "│ │ │ │ │ └─Linear: 6-29 [2, 294, 256] (recursive)\n", "│ │ │ └─EncoderLayer: 4-37 [2, 294, 256] (recursive)\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-11 [2, 294, 256] (recursive)\n", "│ │ │ │ │ └─TensorInductionPoint: 6-30 [2, 64, 256] (recursive)\n", "│ │ │ │ │ └─MultiHeadAttention: 6-31 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-55 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-56 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-57 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-58 [2, 32, 64, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-10 [2, 32, 64, 294] --\n", "│ │ │ │ │ │ └─Linear: 7-59 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─PReLU: 7-60 [2, 64, 256] (recursive)\n", "│ │ │ │ │ └─MultiHeadAttention: 6-32 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-61 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-62 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-63 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-64 [2, 32, 294, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-11 [2, 32, 294, 64] --\n", "│ │ │ │ │ │ └─Linear: 7-65 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─PReLU: 7-66 [2, 294, 256] (recursive)\n", "│ │ │ │ └─DoubleFeedForward: 5-12 [2, 294, 256] (recursive)\n", "│ │ │ │ │ └─Linear: 6-33 [2, 294, 512] (recursive)\n", "│ │ │ │ │ └─LeakyHardtanh: 6-34 [2, 294, 512] --\n", "│ │ │ │ │ └─Linear: 6-35 [2, 294, 256] (recursive)\n", "│ │ │ └─EncoderLayer: 4-38 [2, 8, 256] (recursive)\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-13 [2, 294, 256] (recursive)\n", "│ │ │ │ │ └─TensorInductionPoint: 6-36 [2, 64, 256] (recursive)\n", "│ │ │ │ │ └─MultiHeadAttention: 6-37 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-67 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-68 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-69 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-70 [2, 32, 64, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-12 [2, 32, 64, 294] --\n", "│ │ │ │ │ │ └─Linear: 7-71 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─PReLU: 7-72 [2, 64, 256] (recursive)\n", "│ │ │ │ │ └─MultiHeadAttention: 6-38 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-73 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-74 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-75 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-76 [2, 32, 294, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-13 [2, 32, 294, 64] --\n", "│ │ │ │ │ │ └─Linear: 7-77 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─PReLU: 7-78 [2, 294, 256] (recursive)\n", "│ │ │ │ └─DoubleFeedForward: 5-14 [2, 294, 256] (recursive)\n", "│ │ │ │ │ └─Linear: 6-39 [2, 294, 512] (recursive)\n", "│ │ │ │ │ └─LeakyHardtanh: 6-40 [2, 294, 512] --\n", "│ │ │ │ │ └─Linear: 6-41 [2, 294, 256] (recursive)\n", "│ │ │ │ └─PoolingByMultiheadAttention: 5-15 [2, 8, 256] (recursive)\n", "│ │ │ │ │ └─TensorInductionPoint: 6-42 [2, 8, 256] (recursive)\n", "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-43 [2, 8, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-79 [2, 8, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-80 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-81 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-82 [2, 32, 8, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-14 [2, 32, 8, 294] --\n", "│ │ │ │ │ │ └─Linear: 7-83 [2, 8, 256] (recursive)\n", "│ │ │ │ │ │ └─PReLU: 7-84 [2, 8, 256] (recursive)\n", "│ │ │ │ └─DoubleFeedForward: 5-16 [2, 8, 256] (recursive)\n", "│ │ │ │ │ └─Linear: 6-44 [2, 8, 512] (recursive)\n", "│ │ │ │ │ └─LeakyHardtanh: 6-45 [2, 8, 512] --\n", "│ │ │ │ │ └─Linear: 6-46 [2, 8, 256] (recursive)\n", "├─Head: 1-4 [2] --\n", "│ └─Sequential: 2-5 [2, 1] --\n", "│ │ └─FeedForward: 3-19 [2, 256] --\n", "│ │ │ └─Linear: 4-39 [2, 256] 524,544\n", "│ │ │ └─ReLU6: 4-40 [2, 256] --\n", "│ │ └─FeedForward: 3-20 [2, 256] --\n", "│ │ │ └─Linear: 4-41 [2, 256] 65,792\n", "│ │ │ └─ReLU6: 4-42 [2, 256] --\n", "│ │ └─FeedForward: 3-21 [2, 256] --\n", "│ │ │ └─Linear: 4-43 [2, 256] 65,792\n", "│ │ │ └─ReLU6: 4-44 [2, 256] --\n", "│ │ └─FeedForward: 3-22 [2, 256] --\n", "│ │ │ └─Linear: 4-45 [2, 256] 65,792\n", "│ │ │ └─ReLU6: 4-46 [2, 256] --\n", "│ │ └─FeedForward: 3-23 [2, 256] --\n", "│ │ │ └─Linear: 4-47 [2, 256] 65,792\n", "│ │ │ └─ReLU6: 4-48 [2, 256] --\n", "│ │ └─FeedForward: 3-24 [2, 256] --\n", "│ │ │ └─Linear: 4-49 [2, 256] 65,792\n", "│ │ │ └─ReLU6: 4-50 [2, 256] --\n", "│ │ └─FeedForward: 3-25 [2, 256] --\n", "│ │ │ └─Linear: 4-51 [2, 256] 65,792\n", "│ │ │ └─ReLU6: 4-52 [2, 256] --\n", "│ │ └─FeedForward: 3-26 [2, 256] --\n", "│ │ │ └─Linear: 4-53 [2, 256] 65,792\n", "│ │ │ └─ReLU6: 4-54 [2, 256] --\n", "│ │ └─FeedForward: 3-27 [2, 1] --\n", "│ │ │ └─Linear: 4-55 [2, 1] 257\n", "│ │ │ └─LeakyHardsigmoid: 4-56 [2, 1] --\n", "========================================================================================================================\n", "Total params: 10,264,072\n", "Trainable params: 10,264,072\n", "Non-trainable params: 0\n", "Total mult-adds (M): 39.93\n", "========================================================================================================================\n", "Input size (MB): 0.47\n", "Forward/backward pass size (MB): 341.77\n", "Params size (MB): 41.06\n", "Estimated Total Size (MB): 383.29\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-03-01T17:34:20.055516Z", "iopub.status.busy": "2024-03-01T17:34:20.054925Z", "iopub.status.idle": "2024-03-01T18:38:46.681581Z", "shell.execute_reply": "2024-03-01T18:38:46.680586Z" }, "papermill": { "duration": 3866.645444, "end_time": "2024-03-01T18:38:46.683970", "exception": false, "start_time": "2024-03-01T17:34:20.038526", "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.01786272754015954, 'avg_role_model_std_loss': 3.636569730948348, 'avg_role_model_mean_pred_loss': 0.001167070859791755, '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.01786272754015954, 'n_size': 320, 'n_batch': 160, 'duration': 162.09109449386597, 'duration_batch': 1.0130693405866622, 'duration_size': 0.5065346702933311, 'avg_pred_std': 0.07982906211551608}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0036570764575117208, 'avg_role_model_std_loss': 8.543643573567897, 'avg_role_model_mean_pred_loss': 1.3811252661610762e-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.0036570764575117208, 'n_size': 80, 'n_batch': 40, 'duration': 38.24689245223999, 'duration_batch': 0.9561723113059998, 'duration_size': 0.4780861556529999, 'avg_pred_std': 0.013961730610299128}\n", "Epoch 1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.005696987385198327, 'avg_role_model_std_loss': 3.198073918344037, 'avg_role_model_mean_pred_loss': 6.659749155254468e-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.005696987385198327, 'n_size': 320, 'n_batch': 160, 'duration': 161.77688694000244, 'duration_batch': 1.0111055433750153, 'duration_size': 0.5055527716875077, 'avg_pred_std': 0.06436048086907249}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.003786977470736019, 'avg_role_model_std_loss': 3.9373093709834395, 'avg_role_model_mean_pred_loss': 1.9986069321897836e-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.003786977470736019, 'n_size': 80, 'n_batch': 40, 'duration': 38.12403869628906, 'duration_batch': 0.9531009674072266, 'duration_size': 0.4765504837036133, 'avg_pred_std': 0.019040833081817254}\n", "Epoch 2\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0032535013802828415, 'avg_role_model_std_loss': 2.8198290220143503, 'avg_role_model_mean_pred_loss': 1.6548445633081822e-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.0032535013802828415, 'n_size': 320, 'n_batch': 160, 'duration': 158.56593680381775, 'duration_batch': 0.9910371050238609, 'duration_size': 0.49551855251193044, 'avg_pred_std': 0.05899094843493913}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.002633672622323502, 'avg_role_model_std_loss': 4.367062080342106, 'avg_role_model_mean_pred_loss': 6.056017390343449e-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.002633672622323502, 'n_size': 80, 'n_batch': 40, 'duration': 36.21775007247925, 'duration_batch': 0.9054437518119812, 'duration_size': 0.4527218759059906, 'avg_pred_std': 0.029313163098959195}\n", "Epoch 3\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0023438148911395728, 'avg_role_model_std_loss': 2.2918122927125295, 'avg_role_model_mean_pred_loss': 7.134696727795209e-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.0023438148911395728, 'n_size': 320, 'n_batch': 160, 'duration': 152.8709909915924, 'duration_batch': 0.9554436936974525, 'duration_size': 0.47772184684872626, 'avg_pred_std': 0.06780749239678699}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.002467950962409304, 'avg_role_model_std_loss': 4.88692410795129, 'avg_role_model_mean_pred_loss': 4.36867752655612e-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.002467950962409304, 'n_size': 80, 'n_batch': 40, 'duration': 35.697052240371704, 'duration_batch': 0.8924263060092926, 'duration_size': 0.4462131530046463, 'avg_pred_std': 0.018721673299660326}\n", "Epoch 4\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.002259014635501444, 'avg_role_model_std_loss': 1.812988119399502, 'avg_role_model_mean_pred_loss': 5.5367047818208335e-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.002259014635501444, 'n_size': 320, 'n_batch': 160, 'duration': 151.4134497642517, 'duration_batch': 0.9463340610265731, 'duration_size': 0.47316703051328657, 'avg_pred_std': 0.06716944240579323}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0023299435670196544, 'avg_role_model_std_loss': 7.427999823173169, 'avg_role_model_mean_pred_loss': 6.818181761379086e-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.0023299435670196544, 'n_size': 80, 'n_batch': 40, 'duration': 36.091819047927856, 'duration_batch': 0.9022954761981964, 'duration_size': 0.4511477380990982, 'avg_pred_std': 0.025550102235138185}\n", "Epoch 5\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.002213509789987711, 'avg_role_model_std_loss': 2.1981050524016665, 'avg_role_model_mean_pred_loss': 6.457744553583708e-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.002213509789987711, 'n_size': 320, 'n_batch': 160, 'duration': 155.00266909599304, 'duration_batch': 0.9687666818499565, 'duration_size': 0.48438334092497826, 'avg_pred_std': 0.06307913716664189}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0025578231319741463, 'avg_role_model_std_loss': 5.699148117736866, 'avg_role_model_mean_pred_loss': 7.032264796913435e-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.0025578231319741463, 'n_size': 80, 'n_batch': 40, 'duration': 35.88962531089783, 'duration_batch': 0.8972406327724457, 'duration_size': 0.44862031638622285, 'avg_pred_std': 0.017301402381235675}\n", "Epoch 6\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.002113006258792893, 'avg_role_model_std_loss': 2.1890728188584476, 'avg_role_model_mean_pred_loss': 6.114715563168734e-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.002113006258792893, 'n_size': 320, 'n_batch': 160, 'duration': 153.502343416214, 'duration_batch': 0.9593896463513374, 'duration_size': 0.4796948231756687, 'avg_pred_std': 0.0661177773316524}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0022539663767020103, 'avg_role_model_std_loss': 8.082782875575992, 'avg_role_model_mean_pred_loss': 6.678637441320801e-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.0022539663767020103, 'n_size': 80, 'n_batch': 40, 'duration': 35.9239776134491, 'duration_batch': 0.8980994403362275, 'duration_size': 0.44904972016811373, 'avg_pred_std': 0.025397659230247883}\n", "Epoch 7\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0018896224307241027, 'avg_role_model_std_loss': 1.3406870565765918, 'avg_role_model_mean_pred_loss': 4.11630951652614e-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.0018896224307241027, 'n_size': 320, 'n_batch': 160, 'duration': 151.49836015701294, 'duration_batch': 0.9468647509813308, 'duration_size': 0.4734323754906654, 'avg_pred_std': 0.07347480687003553}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0025110580976615894, 'avg_role_model_std_loss': 5.483385282401798, 'avg_role_model_mean_pred_loss': 4.007785178927748e-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.0025110580976615894, 'n_size': 80, 'n_batch': 40, 'duration': 33.77740168571472, 'duration_batch': 0.844435042142868, 'duration_size': 0.422217521071434, 'avg_pred_std': 0.01343663605657639}\n", "Epoch 8\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0019506988204057052, 'avg_role_model_std_loss': 1.1689463564448361, 'avg_role_model_mean_pred_loss': 4.559629974733976e-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.0019506988204057052, 'n_size': 320, 'n_batch': 160, 'duration': 144.0004370212555, 'duration_batch': 0.9000027313828468, 'duration_size': 0.4500013656914234, 'avg_pred_std': 0.0659007933063549}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0023398275739964446, 'avg_role_model_std_loss': 4.280078241747558, 'avg_role_model_mean_pred_loss': 9.40580381603908e-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.0023398275739964446, 'n_size': 80, 'n_batch': 40, 'duration': 34.14411234855652, 'duration_batch': 0.8536028087139129, 'duration_size': 0.42680140435695646, 'avg_pred_std': 0.029161113313784882}\n", "Epoch 9\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0016659495725662055, 'avg_role_model_std_loss': 1.259914455004442, 'avg_role_model_mean_pred_loss': 3.6357496224758216e-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.0016659495725662055, 'n_size': 320, 'n_batch': 160, 'duration': 146.88511276245117, 'duration_batch': 0.9180319547653198, 'duration_size': 0.4590159773826599, 'avg_pred_std': 0.06927311308209028}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0020320220184657954, 'avg_role_model_std_loss': 1.9301895227664638, 'avg_role_model_mean_pred_loss': 5.797358790626817e-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.0020320220184657954, 'n_size': 80, 'n_batch': 40, 'duration': 33.82334542274475, 'duration_batch': 0.8455836355686188, 'duration_size': 0.4227918177843094, 'avg_pred_std': 0.031894830953388006}\n", "Epoch 10\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0016075492954826132, 'avg_role_model_std_loss': 1.0092837510064634, 'avg_role_model_mean_pred_loss': 2.735296125088143e-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.0016075492954826132, 'n_size': 320, 'n_batch': 160, 'duration': 143.3337082862854, 'duration_batch': 0.8958356767892838, 'duration_size': 0.4479178383946419, 'avg_pred_std': 0.07756731488425431}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0026302734650016646, 'avg_role_model_std_loss': 3.5820208163912866, 'avg_role_model_mean_pred_loss': 1.3108698285635434e-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.0026302734650016646, 'n_size': 80, 'n_batch': 40, 'duration': 33.34847378730774, 'duration_batch': 0.8337118446826934, 'duration_size': 0.4168559223413467, 'avg_pred_std': 0.026611345619312488}\n", "Epoch 11\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0013905711543884536, 'avg_role_model_std_loss': 1.4293391600536105, 'avg_role_model_mean_pred_loss': 1.9943211839244628e-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.0013905711543884536, 'n_size': 320, 'n_batch': 160, 'duration': 145.80800819396973, 'duration_batch': 0.9113000512123108, 'duration_size': 0.4556500256061554, 'avg_pred_std': 0.07521452093462813}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0022007888529515184, 'avg_role_model_std_loss': 4.483247433313909, 'avg_role_model_mean_pred_loss': 7.529547302986828e-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.0022007888529515184, 'n_size': 80, 'n_batch': 40, 'duration': 34.17486619949341, 'duration_batch': 0.8543716549873352, 'duration_size': 0.4271858274936676, 'avg_pred_std': 0.025888706676232685}\n", "Epoch 12\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0012333092558833413, 'avg_role_model_std_loss': 1.0602984449560355, 'avg_role_model_mean_pred_loss': 1.4978945140242672e-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.0012333092558833413, 'n_size': 320, 'n_batch': 160, 'duration': 144.26001048088074, 'duration_batch': 0.9016250655055046, 'duration_size': 0.4508125327527523, 'avg_pred_std': 0.06890693796813138}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.002605481748287275, 'avg_role_model_std_loss': 5.8101766740395275, 'avg_role_model_mean_pred_loss': 1.2162480100338935e-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.002605481748287275, 'n_size': 80, 'n_batch': 40, 'duration': 34.0310595035553, 'duration_batch': 0.8507764875888825, 'duration_size': 0.42538824379444123, 'avg_pred_std': 0.030725552017582914}\n", "Epoch 13\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0011501418213924809, 'avg_role_model_std_loss': 1.3386667872641667, 'avg_role_model_mean_pred_loss': 1.3185595447717802e-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.0011501418213924809, 'n_size': 320, 'n_batch': 160, 'duration': 144.17591977119446, 'duration_batch': 0.9010994985699654, 'duration_size': 0.4505497492849827, 'avg_pred_std': 0.07558018262188852}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0022788071105424024, 'avg_role_model_std_loss': 2.7987204812981075, 'avg_role_model_mean_pred_loss': 7.67833690556996e-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.0022788071105424024, 'n_size': 80, 'n_batch': 40, 'duration': 34.57782983779907, 'duration_batch': 0.8644457459449768, 'duration_size': 0.4322228729724884, 'avg_pred_std': 0.028933984229661293}\n", "Epoch 14\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0010513833095672, 'avg_role_model_std_loss': 0.6387672975999288, 'avg_role_model_mean_pred_loss': 1.4141241849948554e-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.0010513833095672, 'n_size': 320, 'n_batch': 160, 'duration': 145.27083349227905, 'duration_batch': 0.907942709326744, 'duration_size': 0.453971354663372, 'avg_pred_std': 0.07942418371021631}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0023162082296039445, 'avg_role_model_std_loss': 3.349859969510388, 'avg_role_model_mean_pred_loss': 8.629114276192951e-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.0023162082296039445, 'n_size': 80, 'n_batch': 40, 'duration': 33.332454442977905, 'duration_batch': 0.8333113610744476, 'duration_size': 0.4166556805372238, 'avg_pred_std': 0.03227444588264916}\n", "Epoch 15\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0009490251221507151, 'avg_role_model_std_loss': 0.6831669182588915, 'avg_role_model_mean_pred_loss': 1.0006828890851693e-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.0009490251221507151, 'n_size': 320, 'n_batch': 160, 'duration': 145.07566261291504, 'duration_batch': 0.906722891330719, 'duration_size': 0.4533614456653595, 'avg_pred_std': 0.08901288353954442}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.002519568522711779, 'avg_role_model_std_loss': 3.413597872712374, 'avg_role_model_mean_pred_loss': 1.3267886331692902e-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.002519568522711779, 'n_size': 80, 'n_batch': 40, 'duration': 35.61937355995178, 'duration_batch': 0.8904843389987945, 'duration_size': 0.44524216949939727, 'avg_pred_std': 0.03244233850882665}\n", "Epoch 16\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0008506465366181715, 'avg_role_model_std_loss': 0.6938899818249922, 'avg_role_model_mean_pred_loss': 7.591354541367547e-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.0008506465366181715, 'n_size': 320, 'n_batch': 160, 'duration': 141.91219687461853, 'duration_batch': 0.8869512304663658, 'duration_size': 0.4434756152331829, 'avg_pred_std': 0.07522430039280152}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0022380605670150543, 'avg_role_model_std_loss': 2.3211301649584923, 'avg_role_model_mean_pred_loss': 8.706937260289163e-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.0022380605670150543, 'n_size': 80, 'n_batch': 40, 'duration': 33.153270959854126, 'duration_batch': 0.8288317739963531, 'duration_size': 0.41441588699817655, 'avg_pred_std': 0.033504872786579654}\n", "Epoch 17\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0007984611616791426, 'avg_role_model_std_loss': 0.8550257516943558, 'avg_role_model_mean_pred_loss': 6.954888952128042e-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.0007984611616791426, 'n_size': 320, 'n_batch': 160, 'duration': 141.78189277648926, 'duration_batch': 0.8861368298530579, 'duration_size': 0.44306841492652893, 'avg_pred_std': 0.07633930989904911}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0023599293230745387, 'avg_role_model_std_loss': 2.454739641254777, 'avg_role_model_mean_pred_loss': 1.1268823242671644e-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.0023599293230745387, 'n_size': 80, 'n_batch': 40, 'duration': 33.33975076675415, 'duration_batch': 0.8334937691688538, 'duration_size': 0.4167468845844269, 'avg_pred_std': 0.03295552866329672}\n", "Epoch 18\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0007362112768333872, 'avg_role_model_std_loss': 1.1732242802433412, 'avg_role_model_mean_pred_loss': 4.6208515920671473e-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.0007362112768333872, 'n_size': 320, 'n_batch': 160, 'duration': 142.94105648994446, 'duration_batch': 0.8933816030621529, 'duration_size': 0.44669080153107643, 'avg_pred_std': 0.07887016502173765}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0022324465072415477, 'avg_role_model_std_loss': 2.106721719149411, 'avg_role_model_mean_pred_loss': 9.551615076732606e-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.0022324465072415477, 'n_size': 80, 'n_batch': 40, 'duration': 33.48200488090515, 'duration_batch': 0.8370501220226287, 'duration_size': 0.41852506101131437, 'avg_pred_std': 0.031034307027584872}\n", "Epoch 19\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": [ "Train loss {'avg_role_model_loss': 0.0006516361492984402, 'avg_role_model_std_loss': 0.5988772722470912, 'avg_role_model_mean_pred_loss': 3.690359887095372e-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.0006516361492984402, 'n_size': 320, 'n_batch': 160, 'duration': 142.92735695838928, 'duration_batch': 0.893295980989933, 'duration_size': 0.4466479904949665, 'avg_pred_std': 0.07815303717216011}\n", "Time out: 3692.50643992424/3600\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.00223\n", "\u001b[34m\u001b[1mwandb\u001b[0m: avg_loss_train 0.00074\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.03103\n", "\u001b[34m\u001b[1mwandb\u001b[0m: avg_pred_std_train 0.07887\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.00223\n", "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_loss_train 0.00074\n", "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_mean_pred_loss_test 1e-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 2.10672\n", "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_std_loss_train 1.17322\n", "\u001b[34m\u001b[1mwandb\u001b[0m: duration_batch_test 0.83705\n", "\u001b[34m\u001b[1mwandb\u001b[0m: duration_batch_train 0.89338\n", "\u001b[34m\u001b[1mwandb\u001b[0m: duration_size_test 0.41853\n", "\u001b[34m\u001b[1mwandb\u001b[0m: duration_size_train 0.44669\n", "\u001b[34m\u001b[1mwandb\u001b[0m: duration_test 33.482\n", "\u001b[34m\u001b[1mwandb\u001b[0m: duration_train 142.94106\n", "\u001b[34m\u001b[1mwandb\u001b[0m: n_batch_test 40\n", "\u001b[34m\u001b[1mwandb\u001b[0m: n_batch_train 160\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/contraceptive/lct_gan/42/wandb/offline-run-20240301_173421-7wshd8vd\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-20240301_173421-7wshd8vd/logs\u001b[0m\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/opt/conda/lib/python3.10/site-packages/ml_utility_loss/loss_learning/estimator/process.py:348: UserWarning: cov(): degrees of freedom is <= 0 (Triggered internally at ../aten/src/ATen/native/Correlation.cpp:100.)\n", " corr_mat = torch.corrcoef(stack)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Eval loss {'role_model': 'lct_gan', 'n_size': 399, 'n_batch': 200, 'role_model_metrics': {'avg_loss': 0.0012717791214527097, 'avg_g_mag_loss': nan, 'avg_g_cos_loss': 0.012063155442658336, 'pred_duration': 3.151550769805908, 'grad_duration': 2.571305990219116, 'total_duration': 5.722856760025024, 'pred_std': 0.05481971800327301, 'std_loss': 0.022213952615857124, 'mean_pred_loss': 1.6693775251042098e-06, 'pred_rmse': 0.03566201403737068, 'pred_mae': 0.0282240342348814, 'pred_mape': 0.06742086261510849, 'grad_rmse': 0.0409364178776741, 'grad_mae': 0.031053612008690834, 'grad_mape': 0.5863480567932129}, '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.0012717791214527097, 'avg_g_mag_loss': nan, 'avg_g_cos_loss': 0.012063155442658336, 'avg_pred_duration': 3.151550769805908, 'avg_grad_duration': 2.571305990219116, 'avg_total_duration': 5.722856760025024, 'avg_pred_std': 0.05481971800327301, 'avg_std_loss': 0.022213952615857124, 'avg_mean_pred_loss': 1.6693775251042098e-06}, 'min_metrics': {'avg_loss': 0.0012717791214527097, 'avg_g_mag_loss': nan, 'avg_g_cos_loss': 0.012063155442658336, 'pred_duration': 3.151550769805908, 'grad_duration': 2.571305990219116, 'total_duration': 5.722856760025024, 'pred_std': 0.05481971800327301, 'std_loss': 0.022213952615857124, 'mean_pred_loss': 1.6693775251042098e-06, 'pred_rmse': 0.03566201403737068, 'pred_mae': 0.0282240342348814, 'pred_mape': 0.06742086261510849, 'grad_rmse': 0.0409364178776741, 'grad_mae': 0.031053612008690834, 'grad_mape': 0.5863480567932129}, 'model_metrics': {'lct_gan': {'avg_loss': 0.0012717791214527097, 'avg_g_mag_loss': nan, 'avg_g_cos_loss': 0.012063155442658336, 'pred_duration': 3.151550769805908, 'grad_duration': 2.571305990219116, 'total_duration': 5.722856760025024, 'pred_std': 0.05481971800327301, 'std_loss': 0.022213952615857124, 'mean_pred_loss': 1.6693775251042098e-06, 'pred_rmse': 0.03566201403737068, 'pred_mae': 0.0282240342348814, 'pred_mape': 0.06742086261510849, 'grad_rmse': 0.0409364178776741, 'grad_mae': 0.031053612008690834, 'grad_mape': 0.5863480567932129}}}\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-03-01T18:38:46.723513Z", "iopub.status.busy": "2024-03-01T18:38:46.722723Z", "iopub.status.idle": "2024-03-01T18:38:46.727621Z", "shell.execute_reply": "2024-03-01T18:38:46.726667Z" }, "papermill": { "duration": 0.026904, "end_time": "2024-03-01T18:38:46.729589", "exception": false, "start_time": "2024-03-01T18:38:46.702685", "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-03-01T18:38:46.765328Z", "iopub.status.busy": "2024-03-01T18:38:46.765086Z", "iopub.status.idle": "2024-03-01T18:38:47.049878Z", "shell.execute_reply": "2024-03-01T18:38:47.049045Z" }, "papermill": { "duration": 0.305531, "end_time": "2024-03-01T18:38:47.052346", "exception": false, "start_time": "2024-03-01T18:38:46.746815", "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-03-01T18:38:47.090440Z", "iopub.status.busy": "2024-03-01T18:38:47.089768Z", "iopub.status.idle": "2024-03-01T18:38:47.427766Z", "shell.execute_reply": "2024-03-01T18:38:47.426791Z" }, "papermill": { "duration": 0.35919, "end_time": "2024-03-01T18:38:47.429837", "exception": false, "start_time": "2024-03-01T18:38:47.070647", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "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-03-01T18:38:47.469320Z", "iopub.status.busy": "2024-03-01T18:38:47.468612Z", "iopub.status.idle": "2024-03-01T18:41:40.614258Z", "shell.execute_reply": "2024-03-01T18:41:40.613445Z" }, "papermill": { "duration": 173.16794, "end_time": "2024-03-01T18:41:40.616686", "exception": false, "start_time": "2024-03-01T18:38:47.448746", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/opt/conda/lib/python3.10/site-packages/ml_utility_loss/loss_learning/estimator/process.py:348: UserWarning: cov(): degrees of freedom is <= 0 (Triggered internally at ../aten/src/ATen/native/Correlation.cpp:100.)\n", " corr_mat = torch.corrcoef(stack)\n" ] } ], "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-03-01T18:41:40.657073Z", "iopub.status.busy": "2024-03-01T18:41:40.656674Z", "iopub.status.idle": "2024-03-01T18:41:40.678450Z", "shell.execute_reply": "2024-03-01T18:41:40.677576Z" }, "papermill": { "duration": 0.044614, "end_time": "2024-03-01T18:41:40.680400", "exception": false, "start_time": "2024-03-01T18:41:40.635786", "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.009699NaN0.0012722.5979270.0310540.5863480.0409360.0000023.1333330.0282240.0674210.0356620.054820.0222145.73126
\n", "
" ], "text/plain": [ " avg_g_cos_loss avg_g_mag_loss avg_loss grad_duration grad_mae \\\n", "lct_gan 0.009699 NaN 0.001272 2.597927 0.031054 \n", "\n", " grad_mape grad_rmse mean_pred_loss pred_duration pred_mae \\\n", "lct_gan 0.586348 0.040936 0.000002 3.133333 0.028224 \n", "\n", " pred_mape pred_rmse pred_std std_loss total_duration \n", "lct_gan 0.067421 0.035662 0.05482 0.022214 5.73126 " ] }, "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-03-01T18:41:40.718036Z", "iopub.status.busy": "2024-03-01T18:41:40.717359Z", "iopub.status.idle": "2024-03-01T18:41:41.073579Z", "shell.execute_reply": "2024-03-01T18:41:41.072592Z" }, "papermill": { "duration": 0.377488, "end_time": "2024-03-01T18:41:41.075694", "exception": false, "start_time": "2024-03-01T18:41:40.698206", "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-03-01T18:41:41.115828Z", "iopub.status.busy": "2024-03-01T18:41:41.115419Z", "iopub.status.idle": "2024-03-01T18:44:42.592226Z", "shell.execute_reply": "2024-03-01T18:44:42.591273Z" }, "papermill": { "duration": 181.515105, "end_time": "2024-03-01T18:44:42.610235", "exception": false, "start_time": "2024-03-01T18:41:41.095130", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Caching in ../../../../contraceptive/_cache_test/lct_gan/all inf False\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/opt/conda/lib/python3.10/site-packages/ml_utility_loss/loss_learning/estimator/process.py:348: UserWarning: cov(): degrees of freedom is <= 0 (Triggered internally at ../aten/src/ATen/native/Correlation.cpp:100.)\n", " corr_mat = torch.corrcoef(stack)\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-03-01T18:44:42.649699Z", "iopub.status.busy": "2024-03-01T18:44:42.649382Z", "iopub.status.idle": "2024-03-01T18:44:42.666703Z", "shell.execute_reply": "2024-03-01T18:44:42.666006Z" }, "papermill": { "duration": 0.039835, "end_time": "2024-03-01T18:44:42.668901", "exception": false, "start_time": "2024-03-01T18:44:42.629066", "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-03-01T18:44:42.706365Z", "iopub.status.busy": "2024-03-01T18:44:42.706086Z", "iopub.status.idle": "2024-03-01T18:44:42.711177Z", "shell.execute_reply": "2024-03-01T18:44:42.710319Z" }, "papermill": { "duration": 0.026079, "end_time": "2024-03-01T18:44:42.713216", "exception": false, "start_time": "2024-03-01T18:44:42.687137", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'lct_gan': 0.44455916152562114}\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-03-01T18:44:42.753740Z", "iopub.status.busy": "2024-03-01T18:44:42.753407Z", "iopub.status.idle": "2024-03-01T18:44:43.095735Z", "shell.execute_reply": "2024-03-01T18:44:43.094877Z" }, "papermill": { "duration": 0.365479, "end_time": "2024-03-01T18:44:43.097806", "exception": false, "start_time": "2024-03-01T18:44:42.732327", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "image/png": "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EJIQKFgRQhICBStCSEKgYEUISQgUrAghCYGCFSEkIVCwIkmloqICqampvue///3vMX36dN/z8vLypJ4iOZlRsCIhKS8vB8dx+MUvftFn39q1a8FxHMrLy/2Oj3SQKC4uxpYtW/y23XrrrThz5kzA17z44ouoqKjwPV+wYAHuv//+iJaLDA8KViRkBQUFeOONN2C1Wn3bbDYbdu7cicLCwpiUSalUIisrK+B+nU7nV/MiiYOCFQnZzJkzUVBQgHfeece37Z133kFhYSFmzJgR1rn7q/EsXbrUV1tbsGABampq8Ktf/Qocx4HjOAB9m4G99azhlZeX4/PPP8eLL77oO0dVVRXGjBmDZ5991u91x44dA8dxOHfuXFh/FwkdBSsSllWrVmHbtm2+56+++ipWrlw57O/7zjvvID8/H48++igaGxvR2NgY9DlefPFFXH755VizZo3vHIWFhX3+JgDYtm0brrzySowZMyZSfwIJEgUrEpaf/exn2LdvH2pqalBTU4Mvv/wSP/vZz4b9ffV6PcRiMTQaDXJycgadkbU/Op0OMpkMKpXKdw6xWIzy8nKcPn3at36f0+nEzp07sWrVqkj/GSQINK0xCUtmZiZuuOEGVFRUgDGGG264IeHnTs/Ly8MNN9yAV199FbNnz8b//M//wG6345Zbbol10UY0qlmRsK1atQoVFRXYvn17xGofIpEIvadaczqdETn3UKxevdp38WDbtm249dZboVKpovb+pC8KViRs1113HRwOB5xOJ6699tqInDMzM9OvH8rtduPbb7/1O0Ymk4W9Xl6gcyxevBgpKSnYunUrdu/eTU3AOEDNQBI2sViM77//3vc4EKPR2GctwPT09H4Xgbjqqquwfv16fPjhhygtLcXzzz8Pg8Hgd0xxcTG++OIL3HbbbZDL5SE1P4uLi7F//35UV1dDrVZDr9dDJBL5+q42btyIsWPHDrjwB4kOqlmRiNBqtdBqtQMes3fvXsyYMcPv9sgjj/R77KpVq7BixQrceeedmD9/PkaPHo2FCxf6HfPoo4+iuroapaWlyMzMDKncGzZsgFgsxsSJE5GZmYna2lrfvp///OdwOBxRubpJBkdzsBMSwL/+9S9cffXVqKur67NqMok+ClaE9GK329Ha2ooVK1YgJycHr7/+eqyLREDNQEL62LVrF4qKimAwGPDMM8/EujjEg2pWhJCEQDUrQkhCoGBFCEkIFKwIIQmBghUhJCFQsCKEJAQKVoSQhEDBihCSEChYEUISwv8HZSCgXKDbVAwAAAAASUVORK5CYII=", "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-03-01T18:44:43.137999Z", "iopub.status.busy": "2024-03-01T18:44:43.137731Z", "iopub.status.idle": "2024-03-01T18:44:43.451148Z", "shell.execute_reply": "2024-03-01T18:44:43.450219Z" }, "papermill": { "duration": 0.335822, "end_time": "2024-03-01T18:44:43.453096", "exception": false, "start_time": "2024-03-01T18:44:43.117274", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAASsAAAEqCAYAAABN+HYRAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABBCElEQVR4nO3deZxT5b0/8M/JnkwyyWyZmcw+A7LIvhYpKsqVWxShVqu3Lowotlfaey2XVrj9VasWQatWXF60WmG0iqgtUmvduCiiosg2CgIDDLMx+5Z9zzm/P06SWTNL9mS+79crryTnnJw8k5n55nme8zzfh+E4jgMhhMQ5QawLQAghI0HBihCSEChYEUISAgUrQkhCoGBFCEkIFKwIIQmBghUhJCFQsCKEJAQKVoSQhEDBihCSEGIarA4cOIDly5dDp9OBYRjs2bOnz36O4/DAAw8gNzcXcrkcS5Yswblz52JTWEJITMU0WFksFkyfPh3PP//8oPsff/xxPPPMM/jTn/6EQ4cOISUlBUuXLoXdbo9ySQkhscbEy0RmhmHw9ttvY+XKlQD4WpVOp8P//M//YP369QAAg8GA7OxsVFRU4JZbbhnReVmWRVNTE1QqFRiGiVTxCSFB4DgOJpMJOp0OAsHQdSdRlMo0ajU1NWhpacGSJUv829RqNebPn48vv/wyYLByOBxwOBz+542NjZg8eXLEy0sICV5DQwPy8/OHPCZug1VLSwsAIDs7u8/27Oxs/77BbN68GQ899NCA7Q0NDUhNTQ1vIQkhITEajSgoKIBKpRr22LgNVsHauHEj1q1b53/u+zBSU1MpWBESp0bSRRO3QxdycnIAAK2trX22t7a2+vcNRiqV+gMTBShCkkfcBquSkhLk5ORg3759/m1GoxGHDh3CggULYlgyQkgsxLQZaDabcf78ef/zmpoaVFZWIj09HYWFhbjvvvvw+9//HuPHj0dJSQl++9vfQqfT+a8YEkLGjpgGqyNHjmDx4sX+576+plWrVqGiogK//vWvYbFYcM8990Cv1+P73/8+PvjgA8hksrCWg+M4uN1ueDyesJ6XjJxQKIRIJKLhJSSguBlnFSlGoxFqtRoGg2HQ/iun04nm5mZYrdYYlI70plAokJubC4lEEuuikCgZ7v+zt6S7GjgaLMuipqYGQqEQOp0OEomEvtljgOM4OJ1OtLe3o6amBuPHjx92gCAZe8Z0sHI6nWBZFgUFBVAoFLEuzpgml8shFotRV1cHp9MZ1qb+8fpunGszY2qeGpNy6epwoqKvL4C+xeNEJH4P59vM2F/VjjajHVkqadjPT6KH/ktJUjtc2wUAuDRPjUwlBatERsEqQV155ZW47777Yl2MuNZtcaLFYIdQwGB+SXqsi0NCRMEqye3fvx8Mw0Cv18e6KFFX18Vf4dVp5FBIRDA73Dh0oRMHz3fEuGQkGBSsSNKq9warwnT+4onJ7sLB6k4cb9DD7WFjWTQSBApWScDhcOD+++9HQUEBpFIpxo0bh5deegm1tbX+QbdpaWlgGAbl5eXDns9kMuHWW29FSkoKcnNz8cc//nFAs/Ovf/0r5syZA5VKhZycHPzkJz9BW1ubf7+vRrdv3z7MmTMHCoUCl112GaqqqsL94wfUauCTNOalyQEAOakyqGQiON0sGvW2qJWDhAcFq0E43WzAW/9v5KGOdY3w2FDdcccdeP311/HMM8/g9OnT+POf/wylUomCggL8/e9/BwBUVVWhubkZW7duHfZ869atwxdffIF33nkHe/fuxWeffYZjx471OcblcuGRRx7BN998gz179qC2tnbQQPib3/wGTz75JI4cOQKRSITVq1eH/POOBMdxmF2chsm6VGR5O9YZhkGBt5blq3WRxDGmx1kF8vwn5wPuK8lMwcqZef7nLxyohssz+CSA/DQ5bppT4H++/Ysa2JwDp/T88t8uCbqsZ8+exZtvvom9e/f6ExWWlpb696en8x3LWq0WGo1m2POZTCa8/PLL2LlzJ66++moAwI4dO6DT6foc1zvolJaW4plnnsHcuXNhNpuhVCr9+zZt2oQrrrgCALBhwwZce+21sNvtYZ8y1R/DMJhVmDZge2G6AqeajGjooppVoqGaVYKrrKyEUCj0B4RQXbhwAS6XC/PmzfNvU6vVmDBhQp/jjh49iuXLl6OwsBAqlcr//vX19X2OmzZtmv9xbm4uAPRpLkabr2bVZrLD7qK5oImEalaDWLt4XMB9gn6zce65vCzgsf1n7qxeWBJKsQYll8vDfs7hWCwWLF26FEuXLsVrr72GrKws1NfXY+nSpXA6nX2OFYvF/se+qUwsG/nO7RaDHQIBkKaQQCzs+U5WSkXIUErQaXaiUW9DWZZyiLOQeEI1q0FIRIKAN5FQMOJjxSM8NhRTp04Fy7L49NNPB/9ZvJOCR5pRorS0FGKxGIcPH/ZvMxgMOHv2rP/5mTNn0NnZiS1btmDRokWYOHFiTGtLg9lf1YbXvqpHTYdlwL5ctRwSkQBWB9WsEgkFqwRXXFyMVatWYfXq1dizZw9qamqwf/9+vPnmmwCAoqIiMAyDd999F+3t7TCbzUOeT6VSYdWqVfjVr36FTz75BN999x3uuusuCAQCf82osLAQEokEzz77LC5cuIB33nkHjzzySMR/1tHQ21wAAI1CPGDfovGZ+M8ryjA1Xx3tYpEQULBKAtu2bcONN96Ie++9FxMnTsSaNWtgsfA1iry8PDz00EPYsGEDsrOz8fOf/3zY8z311FNYsGABrrvuOixZsgQLFy7EpEmT/J3iWVlZqKiowFtvvYXJkydjy5YteOKJJyL6M46G3eXxX8hQywcGK5lYCEH/9jyJe2M6n5XdbkdNTQ1KSkoifnUqkVksFuTl5eHJJ5/EXXfdFbH3Cdfvo9Vox85D9UiRCofsUwT4IQ6UFih2KJ8VCcnx48dx5swZzJs3DwaDAQ8//DAAYMWKFTEu2ch0W/lOfo08cBK/o3XdOHFRj+kFGswcZIgDiT8UrMaY+vr6IRd9PXXqFADgiSeeQFVVFSQSCWbPno3PPvsMmZmZ0SpmSAxWvr9KPUh/lY/Lw6Lb6kKLd5Q7iX8UrMYYnU6HysrKIfcXFhbi6NGj0StUmJnsbgCAShb4zzsnlW9mthopWCUKClZjjEgkwrhxgceRJYMJOSpoFGLoNIHHoGlT+Sk43VYXHG4PpCJhtIpHgkTBiiSdgnSFf6R6IAqJCCqZCCa7G21Gx7DHk9ijoQtkzNJ6m4JtJkeMS0JGgoIVSSpuD4vqdjPajHYMNyon25uTvY36rRICBSuSVAw2F96pbMJbRy8OO34qRy1Dpko65FVDEj+oz4okFbODvxKYOsSVQJ+ijBTcnpES6SKRMKGaFUkqvmELyhEEK5JYKFglqHhb3SZeyuOrWamkI2/asSxHua0SAAWrMax/7qlkYHXywUohHdm4qeP13Xjuk/P4/ByteBPvKFgloPLycnz66afYunUrGIYBwzCorq7GXXfdhZKSEsjlckyYMGFAvvXy8nKsXLkSmzZtgk6n82f/PHjwIGbMmAGZTIY5c+Zgz549YBimz0j3kydP4gc/+AGUSiWys7Nx++23o6OjI2B5amtro/Vx9GH1ZltQSEbWDFRIRPCwHDrMNHwh3lHDvjeOAzyu2Ly3UDwwtWgAW7duxdmzZzFlyhT/JOO0tDTk5+fjrbfeQkZGBg4ePIh77rkHubm5+PGPf+x/7b59+5Camoq9e/cC4Ge9L1++HMuWLcPOnTtRV1c3oDmn1+tx1VVX4e6778Yf//hH2Gw23H///fjxj3+Mjz/+eNDyZGVlheFDGb2eYDWymlWGkp/s3GlxUgaGOEfBqjePC/jsydi896L/AUSBswT0plarIZFIoFAokJOT49/+0EMP+R+XlJTgyy+/xJtvvtknWKWkpOAvf/mLP4Pon/70JzAMgxdffBEymQyTJ09GY2Mj1qxZ43/Nc889h5kzZ+LRRx/1b9u+fTsKCgpw9uxZXHLJJYOWJxZmF6WhLEsJrWpkS8WnKSQQChg43SyMdveg+a9IfKBglUSef/55bN++HfX19bDZbHA6nZgxY0afY6ZOneoPVAC/RNe0adP65I/qvVgEAHzzzTf45JNP+qxa41NdXY1LLgl+dZ5wG21OdaGAQVqKBB0mBzrNDgpWcYyCVW9CMV/DidV7h2DXrl1Yv349nnzySSxYsAAqlQp/+MMfcOjQoT7HpaSMflyR2WzG8uXL8dhjjw3Y51uxJpFleoNVh9mJ0ti0XskIxHWw8ng8+N3vfodXX30VLS0t0Ol0KC8vx//7f/8vMn0LDDPiplisSSSSPotAfPHFF7jssstw7733+rdVV1cPe54JEybg1VdfhcPhgFTKN516LxYBALNmzcLf//53FBcXQyQa/E+mf3liwelmcbHbihSpCNmpI880mqGUAjChkzrZ41pcXw187LHHsG3bNjz33HM4ffo0HnvsMTz++ON49tlnY120mCsuLsahQ4dQW1uLjo4OjB8/HkeOHMGHH36Is2fP4re//e2AoDOYn/zkJ2BZFvfccw9Onz6NDz/80J9P3feFsHbtWnR1deE//uM/cPjwYVRXV+PDDz/EnXfe6Q9Q/csTjeW2+jPYXPhHZRPePt44qtfpNDJMyFENmVKGxF5cB6uDBw9ixYoVuPbaa1FcXIwbb7wR11xzDb7++utYFy3m1q9fD6FQiMmTJyMrKwtLly7FDTfcgJtvvhnz589HZ2dnn1pWIKmpqfjnP/+JyspKzJgxA7/5zW/wwAMPAIC/H0un0+GLL76Ax+PBNddcg6lTp+K+++6DRqOBQCAYtDz9FzuNBt/AzpFeCfTJT1Ng2dRcTC/QRKBUJGy4OLZp0yauqKiIq6qq4jiO4yorKzmtVsu9+uqrAV9jt9s5g8HgvzU0NHAAOIPBMOBYm83GnTp1irPZbBH7GRLRq6++yonFYs5qtUb1fUP9fZxpNnJPfVTFvXm4PswlI5FiMBgC/n/2F9d9Vhs2bIDRaMTEiRMhFArh8XiwadMm3HrrrQFfs3nz5j6X8MnwXnnlFZSWliIvLw/ffPONfwxVLFZ7DoVv9Lp8lDUrgF/lxmh3QyoSQCamrKHxKK6bgW+++SZee+017Ny5E8eOHcPLL7+MJ554Ai+//HLA12zcuBEGg8F/a2hoiGKJE1NLSwtuu+02TJo0Cb/85S9x00034YUXXoh1sUbNFmQzEAD++W0ztn9eg7OtpnAXi4RJXNesfvWrX2HDhg245ZZbAPBjhOrq6rB582asWrVq0NdIpVL/VS0yMr/+9a/x61//OtbFCJlvYVO5ePR/1r7xVd3WGM1gIMOK65qV1Wr1d+D6CIXCmFxpIvFvtFNtekvzJuDTW5NvcneyiOua1fLly7Fp0yYUFhbi0ksvxfHjx/HUU09h9erVsS4aiUPT8tXQaeRBDUFIU/Dj67otFKziVVwHq2effRa//e1vce+996KtrQ06nQ4//elP/ZfWw4UbJlc3iY5Qfw9FGSkoCjLzp8ZbszLY3GBZDgIBTWiON3EdrFQqFZ5++mk8/fTTETm/WMz/gVqt1oS78pWMrFYrgJ7fSzQppSKIhQxcHg5GuwsaRWLMZBhL4jpYRZpQKIRGo0FbWxsAQKFQUIqQGOA4DlarFW1tbdBoNBAKR9/nxLIcajstkEuEyFbJRl0zYhgGKpkYXRYnjDY3Bas4NKaDFQB/ShNfwCKxo9Fogk4xY3V58I/KJjAM8F9XjQ/qHJN1qXC6WcrfHqfG/G+FYRjk5uZCq9XC5aLL1rEiFouDqlH59AxbEAbd3zS3OD3o9yeRN+aDlY9QKAzpn4XElj9YBTFsgSSGuB5nRchIWV3eqTYhTJVhWb5zvc1EKzTHIwpWJCnYRrlQxGBajHa89FkN3qlsClexSBhRsCJJwRbC6HWfVO+UG4vDA5alsXfxhoIVSQq+qTahZExIkQghFDBgOQ4m72KpJH5QBztJChNzVUhLkUCnGXk64/74sVYi6K0uGG0uWjwizlCwIkkhP02B/DRFyOdRycTQW13+ZehJ/KBmICG9KL3LzlsoWMUdClYkKdR0WNBssMETYse4Uso3/ajPKv5QM5AkPA/LYY93RZufXVEW0sDQgnQ5gHTkpdHE9nhDwYokPF86Y4YBZOLQGguhpJkhkUXNQJLw/AtFiIWUNSOJUbAiCc/u5NNchzIg1IfjOBhsLjTpbZSUMc5QsCIJzz8vMISpNj4sB+z4ogZvHG7wNy9JfKBgRRJeKAtF9CcUMP7z0Fir+ELBiiS83rmswiFFytfQLA6qWcUTuhpIEl5pVgrkEiGylOFZL1IpFaENDpjtVLOKJxSsSMLLVcuRqw4wLorjgPYqwNgIKLWA9lJAMHSDIsXb90XNwPhCwYokL9YDnNoDtJ/t2dZyAph6EyAMPElZ4Z1yY3NRsIon1GdFEl59pxVNehtcnn4rdZ/fxwcqgQjImQqIJEB3HVD9yZDn8yXwoz6r+ELBiiS8d0804Y3DDTD17mPqrgUaj/KPL/0hMOk6/h4Amo4BxuaA58tVyzCvJB0Tc1SRKzQZNQpWJKF5WA4OV79BoRzXU3vSzQQyx/GP00uB7Mn8/vqDAc+ZnSrDwnGZGJ9NwSqeULAiCc031UbAMJCKvH/OHWcBUwvfL1WyqO8LCi/zHnMOsHZFsaQkVBSsSELzjTKXSwQ98wIbvubv8+cCkn6TkpVZQHoJX7tq/W7Qc3IcB73ViSZ96ClnSPhQsCIJrWe9QO+FbVMLYLgIMAIgb9bgL8q+lL9vO8UHrUG88mUd3jjcAIuTrgjGCwpWJKFZ+49e93WqZ00ApAH6nDIvAYQivhloahmwm2F6ptxY6Ypg3KBgRRJan3mBbgdfWwKAvNmBXySSAull/OPOc4Me4kvgZ6WaVdygYEUSWkG6HFdOyOKHGbRXAR43oMgA1PlDvzDDF6yqB93tr1k5qWYVL2gEO0loWpUMWpV3+a1Kb4d59qV82tCh+GpWphbAYQakyj67fQNDKVjFD6pZkeTgMAH6Ov5x9uThj5cqAVUO/7i7ZsBuBTUD407cB6vGxkbcdtttyMjIgFwux9SpU3HkyJFYF4vEiYvd/FQbZ/NJ/sqeOg+Qp43sxWlF/L2+fsAuX7CyUc0qbsR1M7C7uxsLFy7E4sWL8f777yMrKwvnzp1DWtoI/xhJ0tt7qhV6qwvl0m8hAXqGJYyEpgioPzRosNJp5Jhfkg5tavArPJPwiutg9dhjj6GgoAA7duzwbyspKYlhiUi8sTo9kLpNkHHtgEQEZE0c+YvV+Xzflk0P2A2ATO3fNWTaGRITcd0MfOeddzBnzhzcdNNN0Gq1mDlzJl588cUhX+NwOGA0GvvcSHJye1g43SzSbLUQCxk++PQfsT4UkbSn30rfEJlCkrCJ62B14cIFbNu2DePHj8eHH36I//zP/8R//dd/4eWXXw74ms2bN0OtVvtvBQUFUSwxiSbfVJsMWx2EAgbInDD6k6i9fx/9moIsy6Hb4qRVbuJIXAcrlmUxa9YsPProo5g5cybuuecerFmzBn/6058Cvmbjxo0wGAz+W0MDfWMmK5vTA5HHhnR3CxgwQOb40Z/ENx7L1NRns4fjUHGwFm8cboCzf54sEhNxHaxyc3MxeXLfy9CTJk1Cff3ADlEfqVSK1NTUPjeSnKxOD9Js9RALGECVDcg1oz9Jqo6/t3QAbqd/s1go4JuW6FmXkMRWUMHqwoUL4S7HoBYuXIiqqqo+286ePYuioqKovD+JbzaXB+m2GoiFAn6+XzCkKkCWyg97MPVNyCcT+9Ib0/CFeBBUsBo3bhwWL16MV199FXa7Pdxl8vvlL3+Jr776Co8++ijOnz+PnTt34oUXXsDatWsj9p4kcWSnCDBDqYdWJQ0+WAGAKpe/N/ZtCvrmB1Kwig9BBatjx45h2rRpWLduHXJycvDTn/4UX3/9dbjLhrlz5+Ltt9/G66+/jilTpuCRRx7B008/jVtvvTXs70UST7qjCTqVGJlZ2UBKVvAnSs3j7/v1W8lENDA0ngQVrGbMmIGtW7eiqakJ27dvR3NzM77//e9jypQpeOqpp9De3h62Al533XU4ceIE7HY7Tp8+jTVr1oTt3CTBdXm7I9LLhp8LOJRUqlklgpA62EUiEW644Qa89dZbeOyxx3D+/HmsX78eBQUFuOOOO9DcHDgpPyEh4TgYGqtgsrvgSA2xD1OVyyfrc5gBe8+4PF+OLAcFq7gQUrA6cuQI7r33XuTm5uKpp57C+vXrUV1djb1796KpqQkrVqwIVzkJ6cvaifqmZnzbbEEjQmgCAnyu9pRM/nGvTvaiDAXml6ajIF0R2vlJWAQ13eapp57Cjh07UFVVhWXLluGVV17BsmXLIPCudFtSUoKKigoUFxeHs6yE9Oi6AJeHhUmqQ5k8DMFElQuY2/iUMVn84NLSLCVKs5TDvJBES1DBatu2bVi9ejXKy8uRm5s76DFarRYvvfRSSIUjJBCusxouDwu9Mt/ftxQSVTbQDMDcGvq5SEQEFaz27t2LwsJCf03Kh+M4NDQ0oLCwEBKJBKtWrQpLIQnpw+OCp7seLAfo5QU96wWGQpnN3/cKVh6Wg9HmgotlexL8kZgJqs+qrKwMHR0dA7Z3dXVRVgQSefp6uF0uOERKeGTp/KDQUKVo+SuKDjN/A9BpcaDiYC32HG8M/fwkZEH9lgNN7DSbzZDJ6BuIRFhXDVweFgZZfs8SXKESSfjc7YC/duW7GmhzsjSZOQ6M6je9bt06APxSRQ888AAUip6OTY/Hg0OHDmHGjBlhLSAhA+hrvcEqLzxNQB+llp8jaG4FMsr8021YjoPDzfqfk9gYVbA6fvw4AL5mdeLECUgkEv8+iUSC6dOnY/369eEtISG9OS2AuR0KiQjTy6ZBogiwNmAwlDlA6yn/WoK+ycwuDwe7y0PBKsZGFaw++eQTAMCdd96JrVu3UkYDEn3evFMyTTaml+WF99yqgZ3sMrEQLo8bNpcHmvC+GxmloBr8vdMMExJVviR5acXhP7fviqBND7jsgFgGuUQIk90Nu4vSxMTaiIPVDTfcgIqKCqSmpuKGG24Y8tjdu3eHXDBCBtXNL7fVLsqBU29DRookfM0zsZzPw2438LWrtKJenew05SbWRhys1Go1GO9kUbVaPczRhESAwwRYOwGGwYE2GerPN2DZ1FxMyAljv5Uqu0+wuiRbhRy1DJlKyfCvJRE14mDVu+lHzUASE74moFILs1MMwBneq4EAP96q/Sxg4TOHTMmjL+Z4EdQ4K5vNBqvV6n9eV1eHp59+Gh999FHYCkbIAN4mIDRF/mXdwx6slFr+3twW3vOSkAUVrFasWIFXXnkFAKDX6zFv3jw8+eSTWLFiBbZt2xbWAhLi561ZuVMLYHf5glWYl770JfGzdAAsC5eHRZfFiS6Lc+jXkYgLOlPookWLAAB/+9vfkJOTg7q6Orzyyit45plnwlpAQgDwU2Bs3QDDwCLnJ88LBQxk4jCveSJPA4QigHUDtm5Ut5vx8sFa7DtNE5xjLajftNVqhUrFd2p+9NFHuOGGGyAQCPC9730PdXV1YS0gIQAAo3d+niIDFg9fm0qRivwXfcKGYfh+KwCwtPmvBtrdNHQh1oJeMGLPnj1oaGjAhx9+iGuuuQYA0NbWRgNFSWQYvOs/qgtgcbgBAEpphEaU9+q38gcrGroQc0EFqwceeADr169HcXEx5s+fjwULFgDga1kzZ84MawEJAQAYvDUrdR6yVFIsnqjF9AJNZN7LX7Nqh9QXrFwemswcY0H1Tt544434/ve/j+bmZkyfPt2//eqrr8YPf/jDsBWOEACAx9UzBUadD41cghmKCI57Uno72XvVrNwsB5eHg0QU5mYnGbGgL6Xk5OQgJyenz7Z58+aFXCBCBjA1A6wHkKQAMk3k3893RdBugJhzQCRg4GY52FweSERxvYh5UgsqWFksFmzZsgX79u1DW1sbWLZv52O0VmwmY4S/CZgPMAwudlvBMAwylRJIRRHotxLL+VWa7UYwlg7IxEKYHW5+lRu5OPzvR0YkqGB1991349NPP8Xtt9+O3Nzc8F+RIaQ3w0X+Xp0PAPjkTBs6zE78aFY+CjMitPJMipZflsvShmn5xfBwHGThHoBKRiWoYPX+++/jX//6FxYuXBju8hDSF8cBxr7Byuzgr8ylROpqIMD3W3WeB8ztmD9hduTeh4xYUA3wtLQ0pKenh7sshAxk7eTTtQhFgDIbLg/rH72eIg3z6PXeeo21IvEhqGD1yCOP4IEHHugzP5CQiPA1AVU6QCCE1VurEgkYSCPZ2e2fdtMOh8uNLosTRrsrcu9HhhXUV9OTTz6J6upqZGdno7i4GGJx307HY8eOhaVwhPT0V/FZQX0BQyWLwOj13hTpgEAIuJ04frYOXzZ5MKNQg8UTtJF7TzKkoILVypUrw1wMQgLwTbNJ5fureoJVhK/KCYT8ajfmNijdXQDUNIo9xoIKVg8++GC4y0HIQE4LYO3iH3trViY7P9UmNRpDCJRawNyGFJc3WLkpWMVS0D2Uer0ef/vb31BdXY1f/epXSE9Px7Fjx5CdnY28vDAn8idjk298VUomP/YJQGlWCmRiIdIjOYLdx9vJrnB2AiiBzUmTmWMpqGD17bffYsmSJVCr1aitrcWaNWuQnp6O3bt3o76+3p/ripCQ9BuyAABalSx6S7l7p93InJ0AAJuLalaxFNTllHXr1qG8vBznzp3rswLzsmXLcODAgbAVrr8tW7aAYRjcd999EXsPEkd8neupMaqpe2tWEqcRAtbtHzJBYiOoYHX48GH89Kc/HbA9Ly8PLS0tIRcq0Hv++c9/xrRp0yJyfhJnPG7/YqO+mhXHcTjTYkSj3gaWjUIGBKkSkCggFgJyVxecbhaeaLwvGVRQwUoqlcJoNA7YfvbsWWRlZYVcqP7MZjNuvfVWvPjii0hLSwv7+UkcMrd4Jy8r+Oyd4Jth759owVtHGhC1kJGihVDAYGa6C/NL08FSmpiYCSpYXX/99Xj44YfhcvGXkRmGQX19Pe6//3786Ec/CmsBAWDt2rW49tprsWTJkrCfm8Sp3k1A73gqo82XdE8EoSBK81GVWjBgMDfLjcvKMiEWUtaFWAnqk3/yySdhNpuRlZUFm82GK664AuPGjYNKpcKmTZvCWsBdu3bh2LFj2Lx584iOdzgcMBqNfW4kARkGdq53W/lFG9TRzHxAq93EjaCuBqrVauzduxdffPEFvvnmG5jNZsyaNSvsNZ+Ghgb893//N/bu3dunI38omzdvxkMPPRTWcpAo47iewaC9gpXeytfkNdEYtuDj7WR3GVtgMjsgl4ggp+wLMTHqYMWyLCoqKrB7927U1taCYRiUlJQgJycHHMeFdQrE0aNH0dbWhlmzZvm3eTweHDhwAM899xwcDgeEwr5/OBs3bsS6dev8z41GIwoKCsJWJhIFtm7AaeVHkSt7EjzqvTWrNEUUa1aKDIARoLqpA/us3+HyqWWYmk8Ln8bCqIIVx3G4/vrr8d5772H69OmYOnUqOI7D6dOnUV5ejt27d2PPnj1hK9zVV1+NEydO9Nl25513YuLEibj//vsHBCqA7/yXSqVhKwOJAf/k5Rw+24JXdyxqVkIRoEiHSGiEwtUJm6s4eu9N+hhVsKqoqMCBAwewb98+LF68uM++jz/+GCtXrsQrr7yCO+64IyyFU6lUmDJlSp9tKSkpyMjIGLCdJJFBmoAcx0Fv42tWmmjWrABAqYVYUIcUZxeNtYqhUXWwv/766/jf//3fAYEKAK666ips2LABr732WtgKR8Yo/5XA/D6bfzAlF1dOyIIm2qmFldkQCQVQuLpoFHsMjapm9e233+Lxxx8PuP8HP/hBxFdk3r9/f0TPT2LMZeOXbgf8k5cBfnhMSWYKgJTolyklCyIBA4WrEyYKVjEzqppVV1cXsrOzA+7Pzs5Gd3d3yIUiY5ivVqVI51eziQdKLURCBnKXAQ6HPdalGbNGFaw8Hg9EosCVMaFQCLfbHXKhyBimr+PvNYV9Np9rNeFMi9G/GnNUSZQQSlMAcIClM/rvTwAEcTWwvLw84NU2h8MRlkKRMUxfz9/3C1aHa7vRarTjumm5GJ+tim6ZGAZSTQ5y9AaoNfQ3HiujClarVq0a9phwXQkkY5DL1jNSvFewYlkOnWY+SGQqYzMsRa7JRUnmRUBFwSpWRhWsduzYEalyEALoG/jR64oMQNpTe+owO+BmOUhEguhOtenNt6Q8rXYTMzQrk4yYh+XARTLrQIAmYJOB79TOVcsgiNYE5v68y4BZuprgovTGMRHBhddIMvn2oh6fVrVDLhHixtn5kRlFrq/l79OK+mxu1tsAADqNPPzvOVKKTJxoMsLh8qBkahdyIpAKiQyNalZkWHqrE5+caYeb5VCYrkBqJFaWsRsBczufDqZXzYrjODT6gpU6hsFKKIJHxi/s69Q3x64cYxgFKzKs4w16sBwHnUaGf5ucHZmmWNcF/l6V22d8ld7qgsnuhljIQKeJUu71ADyKTP7e1BrTcoxV1AwkQ2JZDudaTQCAucXpkVtYtKuav88o67M5LUWCey4vRYfZAVGsE9+laAGcBmtqj205xiiqWZEhtZrssDg8kIoFKMpIgccbvPZXtYWvs531AF01/OP0sgG7U6QiFGXEwWj2FErEF0sUrMiQLnbz/UX5aQp/KuGPTrXieL0e7eYwjTnS1wMeF9/8U/Xkr3J52MhefRwlgYqfasbYOvkFLUhUUbAiQ7K7PBAKGOSn8Z3bQgGDPO9VuYYuW3jepL2Kv88Y58+3DgAffdeKt45cRJsxPubjiRWpcAukcLs9gJWm3UQb9VmRIS0an4XvlWagdwWnIF2Omg4LGvU2zC4KcbUh1gO0n+Efayf5NzcbbDjXZgLHIXL9ZKOUrZZDlp0PjbsFMLcCqsCT+kn4UbAiw+q/okuOdwhBWGo83bX8NBuJAtDw46usTjc+ONkCjgMm5aYiSxUfmV91Gjl048cBF/U0kj0GqBlIRi1LKQXDACa7G+ZQsyC0fuc96URAIIDd5cHfjzVCb3VBJRPhyglxNviSVruJGQpWJKCvLnTi1a/qcLLR0Ge7RCRARgo/gj2k2pXT2tMEzJkKp5vFnuON6DA5kCIV4kez8iETx89KMhzHwSrNhNXpBmdqAeKo838soGBFAmox2NFucgy6ZLo2lR+g2WF2Bv8Gzd/wfVaqHCBVhwNn29FssEMmFuKGWflIS4niwhAj4PJweOGIEZWNJrBOO78KD4ka6rMiAbWb+KEJg/UZfa8kA5eVZUApDfJPyOMCLh7mH+fxS619rywDnRYHLr8kK2apYIYiFjIQCEWwitPhYt0Qmlv5jKYkKqhmRQZld3n8/VEZyoE1HLVCDJVMHPyVusZjgNMCyNRANr9SkVIqwo/nFCA3lnMAh8AwDORiIcySLHg8HGCiOYLRRMGKDMpg49foS5EKIRWFud/IbgTqPucfF10Go5P174qXYQqByMQCWCSZcLEsQHMEo4qCFRlUt3f1Y408cL/RsfpuvPNN0+g62VkWqHofcDuBVB3alROw/fMa/OvbZrCD9I3FG5lYCIskC24PB5ipkz2aKFiRQen9qx8HTgdT12lBdZsZrcYRTrthWeDch3yGBYEImLAM3zYawXEABy52ifVGQS4RwirWwMUxgMsO2PWxLtKYQR3sZFBioQAZSklPf5W5jZ8WY2njB3ECmNDhBtcNOOtyAVkpINPwfVCifrUxjuNHfFd/DHR7V6+ZtBxOWQbOtPCpYablaaLzg4VIJhKCY/hOdsDMNwXlIY7iJyNCwYoManZRGj+VxtoFfPsm0Fk94JgsmwMGkxmy2jOA81jPDkkKINcAIjnAugFbF99PBfA1qknXAdqJqG42wulmoZaLUZAen53q/RVmKCAUMkgx5gPmM3xTUDsx1sUaEyhYkcC6LgDf7QHcDoAR8LmmNEXexRw4CLu70eSohgkWTFZJwdj1fNPIaeFvvQmEQOYlQMnl/sv9tR38MRNyVHHfse5zSbYKl2SrgMYi4OwZwNQS6yKNGRSsyAAcxwHdtWBO/J2vGanzgInXDRhTpMpg0dCQCY4DFk4tRYpUxDcR7QZ+wKTbwQcpaSo/8FPUM3aKZTnUdVkBAMWZcZCrarRUufy9byR7ggTbREbBigzQ2t6GC+9vR7rEjYlTZgOX/pAPOv2IhQJo5GJ0W13oNDv5YCWW87deeakG02ZywOb0QCISICc1tumKR4NlOdjdHrgEGqgZQU9wlmtiXbSkR8GK9MVxYE/+A4zbBosyF5i8ctBA5ZOhlMLscMPiHN2EZo1CjH+bnA2H2+NP6pcIWk127Pq6ASqZCHcrs/gOdlMzBasooGBF+mr+Bh59AzyMGKay5YBw6D+Rf5ucDYlQMOphBzKxEFPy1KGUNCYUYv7zsDk94LQ6MKZWwNjYJxcXiQwaZ0V6uOzAhf2wuzy4qJ4NpSZz2JfIxMKEGB8VLgopX8t0sxycKTp+o6ExhiUaOyhYkR4XDwMuG/SMGi2qSyOzkCmARr0Nx+q7obeGkLEhRsRCASQi/t/GKvNmCjW3Uk72KKBgRXguO3DxMDhwOK+YAY4RDjl6vbe9p1rx1y9r0W0ZWfA51WTEp1XtqGzQh1Dg2EmR8LUrM6PkLyawHj5gkYiK62C1efNmzJ07FyqVClqtFitXrkRVVVWsi5WcGo8Cbgdc0nS0SIr5hZHlIwtWHWYHOszOEa12w3Ec6jr58VXF8bC8VhAU3rQ4NjcLqPP5jUZqCkZaXAerTz/9FGvXrsVXX32FvXv3wuVy4ZprroHFYhn+xWTkWA/QxI9Ad+R9D6VaJfLTFCNeVNSXe6pjBMGqy+KEye6GSMAgLy0xRq33lyLhg5XF4QZSvf1WFKwiLq6vBn7wwQd9nldUVECr1eLo0aO4/PLLY1SqJNRxDnCYAYkCqoKpWFE0upQwmd75gyPJGlrbyQ8EzUuTD1iIIlEUZyqgkAr5IM3k8RuNTbEt1BgQ18GqP4OBzwWenh44O6PD4YDD0fMNbzQaI16uhOetVSF3xpBjqgLx16xMw9esfE3AuFhhOUiX6tS41PfEncuPXrcb+ZssNZZFS2oJ89XGsizuu+8+LFy4EFOmTAl43ObNm6FWq/23goKCKJYyAVk6+UwIDAPoZsDlYYd/TT++YGWwueBwewIe5/KwaPSu8FycoQiuvPFGJAFSvCvwUFMwohImWK1duxYnT57Erl27hjxu48aNMBgM/ltDQ0OUSpigWk/w9xnjAJkabxxuwLb91bjYbR3xKeQSoT8Xe+cQTcFOsxMcAJVMhPQ4WwxiNDiOg9Xp7rn6qSnk7/X1sSvUGJAQzcCf//znePfdd3HgwAHk5+cPeaxUKoVUGn+LDcQljgPaTvOPtZPBcRwMNhecbtbfiTxSWSopZGLBoCvh+OSoZfjZFWUw2l0Jk2VhMG0mB3Yequen3Cwq5YPVxSMUrCIsroMVx3H4xS9+gbfffhv79+9HSUlJrIuUXEwtgE3PT6nJGAeL0wOnm4WAYZA6wmELPtdP141oJLtEJIjLlWtGQ+EdZ2VxeMBxHBh1Ad+MtnTwFyqkyhiXMDnFdTNw7dq1ePXVV7Fz506oVCq0tLSgpaUFNpst1kVLDm2n+PuM8YBI4m/WpMpFo55cPFyg4pIoV7nCW+tkOQ52FwtIFD39VgbqdoiUuA5W27Ztg8FgwJVXXonc3Fz/7Y033oh10RIfx/WshuydhOtb0WakI9cH42G5QZuC3140DLq6cyISChjIfaPYvcuVQVPE31NTMGLivhlIIsTYyF9qF0mA9DIAvVa0CXJO4Acnm3Gu1YzrputQ0i+hXk2HBe0mB+yuwFcLE4lSKoLNya+tmKWSevutDlOwiqC4rlmRCPJ1rGde4k8D0+1d0SYtyGDFMAzcLDfgSqLTzaLBmxW0fxBLVCoZ/5mZ7b6aVb9+KxJ2FKzGIpbtCVZZPXmYctUyFGcqBl0ufiSKvGOnfKPUfeq7LHCzHNRycUIPWejNF6xMdj7AQywHlFr+cXdNjEqV3OK6GUgixNDAL+gglgHpPVdY5xanY25x4NkBwylKTwHD8CPZTXYXVDK+7+t0swkAME6rTOghC70VpivAMAxyNb3mN6aX8plDuy4AOVNjV7gkRTWrscjfBJwQ1PSaQOQSIXLVfD71c218U8jm9KDGu4rNZF3yTEUZp1Vh8QRt32Zteil/33WBr72SsKJgNdawbK+rgD3r3dldnrB0fk/I4QPSyUYDOI5DZYMeHpZDdqos4cdXDSs1n1/Bx2Xn87KTsKJgNdboa/kVWSQKQFPs33yq2Yht+6vxwcnQ1sGblKuCRCRAp9mJ6nYLyrQpGKdVYm5xcq1a7Jty02a091y1Fgh6mtVdAxeFJaGhPquxxt+xPpH/5/LypRj2dRwHSyoSYkFZBgCgNDMFAgGD5dN1IZ0zHnlYDn/+9AIA4D+vLINM7G1Op5cCbWf4FaxLKI1ROFGwGktYD9DuzbSa1XfJ825L6ANCfWYVJlctajAioQByiRA2pwcmu7tXsCrjhzCYWihlTJhRM3As6arhV0mWKgF139Q5vgGhwY6xGosGDF8A+M821ZuQr+NsDEqVvChYjSW+uYBZk/o0AV0eFibv4EYKViPnG5phtPdb2cZXa/VdyCBhQcFqrPC4er7ptf2bgHytSi4R+ue8keH5FtQYsKRY1iX8veEijWYPIwpWY0VnNR+wZKk9zRQv36o0ST+0IMx8/Xu+CeB+MjWQmstPFu+g1ZjChYLVWOFrAmon8R3AvaQpJJhRoEFZVnLM24sWtb9m5Rq409cUbD0VxRIlN7oaOBa47HzNCgC0lw7YrdPIodMk5rJYsZShlGJGoQbpg/XzZV8KXNjPNwWtXYAi+GlMhEc1q7Gg4yzAugFFRs9kWxIypVSExRO0mF6gGbhTquqZftNyIqrlSlYUrMYCXxMwe/KAJqDLw6LFYIfTTXPZws43mbnlBM0VDAMKVsnOYeaX2gIA7eQBu1uNdrz+dT3++lVdlAuWHHzBvssyyKo+GeP5zBYOE6WNCQMKVsmu/QzAsYAqZ9B+kzaT70ogja8KxpfVnXj963p8c1E/cKdQBGR7a1eNR6NarmREwSqZcRzQXMk/DpBfqdVg53enyqJUqOSS4Q3yAVejzpvFN707q/kFZUnQKFglM1MzYG4HBCL+6tQgWo18sMqmYBWULO/YtE6Lc/A1AxTp/AKyANB4JIolSz4UrJJZ8zf8fdYEPu1uP3aXx593nYJVcNJSJGAYPsmgxRkgH1j+HP6+5Vsa0R4CClbJyu3suQqYO33QQ9qMfNNFLRfTNJsgiYUC/3zKTnOApqCmiB/R7nEDDV9FsXTJhYJVsmr5lg9YinR+mahBXNTzCzv4UhGT4PimKbUH6rdiGKB4Ef+48Th/dZCMGgWrZMSy/Bp2AJA/d8DYKp+JOam4/JKspMqNHgs5aj5YNXkvVgwqvRRQ5/GDc+sORqlkyYWm2ySjznOATc+P8RlilZX0FEnSLI0VS8UZKeDGA/lpisAHMQxQcgVQuRNoOs43zVU50StkEqCaVbLhOKD2c/6xbhYgDD3zJxlahlKKOcXpyBmuOZ1WxE8k5zjg3Ef8PRkxClbJpv0MYG7jl4XPnxvwsJONBnzXZEia5dwTRtlV/BeIoRFoOhbr0iQUClbJhPUANQf4xwXz+RVsBsFxHL660ImPvmtFo94WxQImL4fbg6oWE47Vdw99oCwVKL2Sf3z+Y34cHBkRClbJpOFrPh2JRDFkrarN5IDJ7oZEJEBh+hD9LGTE9FYX3jvRjC+rO+Fhh2ne5c3mO9xZN3D6H/xVWzIsClbJwtoF1Hn7qsqu4hfbDOBkowEAUJKZArGQ/gTCQauSIkUqhNPNor7LOvTBDANMvJb/UjG3A6f+QVkZRoD+UpOBxw2c2sPfpxUB2VMCHup0szjTwo/zmZqnjlIBkx/DMBifrQLQ82UwJKkSmHIjPxWq8zxw9n0KWMOgYJXoOI7/Qze18lNqJl4XcFwVAFQ26OF0s0hTiJGfRtlBw8kX/C+0W/ouzxWIOg+YfD3/+2r+tucLhwyKglUiY1n+EnjLSYARAJOWD7mopsXhxpG6LgDA98oywAwR1MjoZSqlyE+Tg+U4fHWha2QvypoATF4JCIT8ArTHX+Gb9GSAhAhWzz//PIqLiyGTyTB//nx8/fXXsS5S7DnMwMm/A43ey98TlwEZZUO+hGEAnVoObaoUE7xNFhJeC8dlAgC+azKgYbi+Kx/tRGDaj/masakVOPISUPMZdbz3E/fB6o033sC6devw4IMP4tixY5g+fTqWLl2Ktra2WBctNtwOoP4QcPhFvq9DIAImrxhypLqPQiLCihk63DAzn2pVEaLTyHGpLhU5qTKoFaMYkJtWDMxZzfc5etz8wN6vngeqvcMbaAApGG7QJDzxY/78+Zg7dy6ee+45AADLsigoKMAvfvELbNiwYdjXG41GqNVqGAwGpKYm0Bw4jgM8TsBpAewGwNIO6Ov5JeBZb7+GUstfVRpk2obd5YHe6kJdpwUXu224YVYeBagocXlYCBgGQgH/eeutThhtbmhTpZCKBEP/HjiOH9h74VPA1mvMlkzN93Epc/iFP6QqvpNeJOObkAlqNP+fcT030Ol04ujRo9i4caN/m0AgwJIlS/Dll18O+hqHwwGHo2f2u9FoHNmb1R0EWr8buL1PLOdC39Zn+xDbPC606C3+5Hj8bg4cALs4Da3q6bhs1hXQqvi1/iob9Dh0oRMcAA/LDVgAorrdgnFa5cCfj4Rd/+EglQ16HK/XAwBEAgYysRBCAQOGARgAt8wrhEzMB5xDNV0426YAuKVI9dQh3XgKKlsj1BILSuyGwdchFAj5UfECMd93yTAAmH73XtH8wpKogOk3h+10cR2sOjo64PF4kJ2d3Wd7dnY2zpw5M+hrNm/ejIceemj0b+YwA5aOYIoZMS4PC5NLAJdQAaskHRZxJrrlhbCK0wGGwffQ843q9rCw9kv+JpcIkauWoSxLieIMGvwZK0IBg1S5GEabC26Wg9kR+Iqf2eH2p0jugA4XVDoIUty4NEWPkgIAphbArufTzDi9fWKsh79hiKwPsSALb59bXAerYGzcuBHr1q3zPzcajSgoKBj+hXmzgczx/b55vI9D2dZn+yi2CUVIdYlR5OrZxTAMGN9jMH0yJkzWpaI4MwUMAAHDIEUqgkQU912SY8Ki8VlYND4LTjcLm8sDh8sDD8eB5fipT71rYjML0zBeO/Dih0wiAFT9JkqzHr6rwOMEPC7+Bs5bDQ90H0WC8IaXuA5WmZmZEAqFaG1t7bO9tbUVOTmDp9eQSqWQSgOP3g4oJYO/xRG1DBjpsE2FRASFJK5/nWOeRCTgv0DkgTveR5W2RyAEBPJBU1Yno7j+6pVIJJg9ezb27dvn38ayLPbt24cFCxbEsGSEkGiL+6/idevWYdWqVZgzZw7mzZuHp59+GhaLBXfeeWesi0YIiaK4D1Y333wz2tvb8cADD6ClpQUzZszABx98MKDTnRCS3OJ+nFWoEnacFSFjwGj+P+O6z4oQQnwoWBFCEgIFK0JIQoj7DvZQ+brkRjzthhASNb7/y5F0nSd9sDKZ+KyYIxrFTgiJCZPJBLV66CHQSX81kGVZNDU1QaVSxTTrgG/aT0NDA12V7Ic+m8CS/bPhOA4mkwk6nQ4CwdC9UklfsxIIBMjPz491MfxSU1OT8o8uHOizCSyZP5vhalQ+1MFOCEkIFKwIIQmBglWUSKVSPPjgg8FlhEhy9NkERp9Nj6TvYCeEJAeqWRFCEgIFK0JIQqBgRQhJCBSswmg0i7G++OKLWLRoEdLS0pCWloYlS5Yk9eKtwS5Uu2vXLjAMg5UrV0a2gDE02s9Gr9dj7dq1yM3NhVQqxSWXXIL33nsvSqWNIY6Exa5duziJRMJt376d++6777g1a9ZwGo2Ga21tHfT4n/zkJ9zzzz/PHT9+nDt9+jRXXl7OqdVq7uLFi1EueeSN9rPxqamp4fLy8rhFixZxK1asiE5ho2y0n43D4eDmzJnDLVu2jPv888+5mpoabv/+/VxlZWWUSx59FKzCZN68edzatWv9zz0eD6fT6bjNmzeP6PVut5tTqVTcyy+/HKkixkwwn43b7eYuu+wy7i9/+Qu3atWqpA1Wo/1stm3bxpWWlnJOpzNaRYwb1AwMA99irEuWLPFvG24x1v6sVitcLhfS09MjVcyYCPazefjhh6HVanHXXXdFo5gxEcxn884772DBggVYu3YtsrOzMWXKFDz66KPweDyDHp9Mkn5uYDQEsxhrf/fffz90Ol2fP9xkEMxn8/nnn+Oll15CZWVlFEoYO8F8NhcuXMDHH3+MW2+9Fe+99x7Onz+Pe++9Fy6XCw8++GA0ih0zFKziwJYtW7Br1y7s378fMpls+BckMZPJhNtvvx0vvvgiMjMzY12cuMOyLLRaLV544QUIhULMnj0bjY2N+MMf/kDBigwvmMVYfZ544gls2bIF//d//4dp06ZFspgxMdrPprq6GrW1tVi+fLl/G8uyAACRSISqqiqUlZVFttBREszfTW5uLsRiMYRCoX/bpEmT0NLSAqfTCYlkhAukJiDqswqDYBdjffzxx/HII4/ggw8+wJw5c6JR1Kgb7WczceJEnDhxApWVlf7b9ddfj8WLF6OysjKpkigG83ezcOFCnD9/3h/AAeDs2bPIzc1N6kAFgIYuhMuuXbs4qVTKVVRUcKdOneLuueceTqPRcC0tLRzHcdztt9/ObdiwwX/8li1bOIlEwv3tb3/jmpub/TeTyRSrHyFiRvvZ9JfMVwNH+9nU19dzKpWK+/nPf85VVVVx7777LqfVarnf//73sfoRooaCVRg9++yzXGFhISeRSLh58+ZxX331lX/fFVdcwa1atcr/vKioiAMw4Pbggw9Gv+BRMJrPpr9kDlYcN/rP5uDBg9z8+fM5qVTKlZaWcps2beLcbneUSx19lHWBEJIQqM+KEJIQKFgRQhICBStCSEKgYEUISQgUrAghCYGCFSEkIVCwIoQkBApWhJCEQMGKJJWKigpoNBr/89/97neYMWOG/3l5eXlSp0hOZhSsSFDKy8vBMAx+9rOfDdi3du1aMAyD8vLyPseHO0gUFxfj6aef7rPt5ptvxtmzZwO+ZuvWraioqPA/v/LKK3HfffeFtVwkMihYkaAVFBRg165dsNls/m12ux07d+5EYWFhTMokl8uh1WoD7ler1X1qXiRxULAiQZs1axYKCgqwe/du/7bdu3ejsLAQM2fODOncg9V4Vq5c6a+tXXnllairq8Mvf/lLMAwDhmEADGwG9te7hldeXo5PP/0UW7du9Z+jpqYG48aNwxNPPNHndZWVlWAYBufPnw/p5yLBo2BFQrJ69Wrs2LHD/3z79u248847I/6+u3fvRn5+Ph5++GE0Nzejubl51OfYunUrFixYgDVr1vjPUVhYOOBnAoAdO3bg8ssvx7hx48L1I5BRomBFQnLbbbfh888/R11dHerq6vDFF1/gtttui/j7pqenQygUQqVSIScnZ9iMrINRq9WQSCRQKBT+cwiFQpSXl6Oqqsq/fp/L5cLOnTuxevXqcP8YZBQorTEJSVZWFq699lpUVFSA4zhce+21CZ87XafT4dprr8X27dsxb948/POf/4TD4cBNN90U66KNaVSzIiFbvXo1Kioq8PLLL4et9iEQCNA/1ZrL5QrLuUfi7rvv9l882LFjB26++WYoFIqovT8ZiIIVCdm///u/w+l0wuVyYenSpWE5Z1ZWVp9+KI/Hg5MnT/Y5RiKRhLxeXqBzLFu2DCkpKdi2bRs++OADagLGAWoGkpAJhUKcPn3a/zgQg8EwYC3AjIyMQReBuOqqq7Bu3Tr861//QllZGZ566ino9fo+xxQXF+PAgQO45ZZbIJVKg2p+FhcX49ChQ6itrYVSqUR6ejoEAoG/72rjxo0YP378kAt/kOigmhUJi9TUVKSmpg55zP79+zFz5sw+t4ceemjQY1evXo1Vq1bhjjvuwBVXXIHS0lIsXry4zzEPP/wwamtrUVZWhqysrKDKvX79egiFQkyePBlZWVmor6/377vrrrvgdDqjcnWTDI9ysBMSwGeffYarr74aDQ0NA1ZNJtFHwYqQfhwOB9rb27Fq1Srk5OTgtddei3WRCKgZSMgAr7/+OoqKiqDX6/H444/HujjEi2pWhJCEQDUrQkhCoGBFCEkIFKwIIQmBghUhJCFQsCKEJAQKVoSQhEDBihCSEChYEUISAgUrQkhC+P/QFkiR4uyrXwAAAABJRU5ErkJggg==", "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-03-01T18:44:43.494982Z", "iopub.status.busy": "2024-03-01T18:44:43.494702Z", "iopub.status.idle": "2024-03-01T18:44:43.641829Z", "shell.execute_reply": "2024-03-01T18:44:43.640819Z" }, "papermill": { "duration": 0.17118, "end_time": "2024-03-01T18:44:43.644132", "exception": false, "start_time": "2024-03-01T18:44:43.472952", "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-03-01T18:44:43.686225Z", "iopub.status.busy": "2024-03-01T18:44:43.685941Z", "iopub.status.idle": "2024-03-01T18:44:43.969377Z", "shell.execute_reply": "2024-03-01T18:44:43.968491Z" }, "papermill": { "duration": 0.307354, "end_time": "2024-03-01T18:44:43.971646", "exception": false, "start_time": "2024-03-01T18:44:43.664292", "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.020682, "end_time": "2024-03-01T18:44:44.013129", "exception": false, "start_time": "2024-03-01T18:44:43.992447", "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": 4257.086008, "end_time": "2024-03-01T18:44:46.757977", "environment_variables": {}, "exception": null, "input_path": "eval/contraceptive/lct_gan/42/mlu-eval.ipynb", "output_path": "eval/contraceptive/lct_gan/42/mlu-eval.ipynb", "parameters": { "dataset": "contraceptive", "dataset_name": "contraceptive", "debug": false, "folder": "eval", "gp": false, "gp_multiply": false, "param_index": 2, "path": "eval/contraceptive/lct_gan/42", "path_prefix": "../../../../", "random_seed": 42, "single_model": "lct_gan" }, "start_time": "2024-03-01T17:33:49.671969", "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 }