diff --git "a/contraceptive/tab_ddpm_concat/mlu-eval.ipynb" "b/contraceptive/tab_ddpm_concat/mlu-eval.ipynb" new file mode 100644--- /dev/null +++ "b/contraceptive/tab_ddpm_concat/mlu-eval.ipynb" @@ -0,0 +1,2479 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "982e76f5", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:24:17.299772Z", + "iopub.status.busy": "2024-02-29T20:24:17.299436Z", + "iopub.status.idle": "2024-02-29T20:24:17.332143Z", + "shell.execute_reply": "2024-02-29T20:24:17.331451Z" + }, + "papermill": { + "duration": 0.047487, + "end_time": "2024-02-29T20:24:17.334124", + "exception": false, + "start_time": "2024-02-29T20:24:17.286637", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import joblib\n", + "\n", + "#joblib.parallel_backend(\"threading\")" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "675f0b41", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:24:17.359785Z", + "iopub.status.busy": "2024-02-29T20:24:17.359451Z", + "iopub.status.idle": "2024-02-29T20:24:17.366321Z", + "shell.execute_reply": "2024-02-29T20:24:17.365528Z" + }, + "papermill": { + "duration": 0.02161, + "end_time": "2024-02-29T20:24:17.368190", + "exception": false, + "start_time": "2024-02-29T20:24:17.346580", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'\\n%cd /kaggle/working\\n#!git clone https://github.com/R-N/ml-utility-loss\\n%cd ml-utility-loss\\n!git pull\\n#!pip install .\\n!pip install . --no-deps --force-reinstall --upgrade\\n#'" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\"\"\"\n", + "%cd /kaggle/working\n", + "#!git clone https://github.com/R-N/ml-utility-loss\n", + "%cd ml-utility-loss\n", + "!git pull\n", + "#!pip install .\n", + "!pip install . --no-deps --force-reinstall --upgrade\n", + "#\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "5ae30f5c", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:24:17.392128Z", + "iopub.status.busy": "2024-02-29T20:24:17.391590Z", + "iopub.status.idle": "2024-02-29T20:24:17.395659Z", + "shell.execute_reply": "2024-02-29T20:24:17.394854Z" + }, + "papermill": { + "duration": 0.018308, + "end_time": "2024-02-29T20:24:17.397516", + "exception": false, + "start_time": "2024-02-29T20:24:17.379208", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.rcParams['figure.figsize'] = [3,3]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "9f42c810", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:24:17.421170Z", + "iopub.status.busy": "2024-02-29T20:24:17.420894Z", + "iopub.status.idle": "2024-02-29T20:24:17.424803Z", + "shell.execute_reply": "2024-02-29T20:24:17.424006Z" + }, + "executionInfo": { + "elapsed": 678, + "status": "ok", + "timestamp": 1696841022168, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "ns5hFcVL2yvs", + "papermill": { + "duration": 0.018081, + "end_time": "2024-02-29T20:24:17.426726", + "exception": false, + "start_time": "2024-02-29T20:24:17.408645", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "datasets = [\n", + " \"insurance\",\n", + " \"treatment\",\n", + " \"contraceptive\"\n", + "]\n", + "\n", + "study_dir = \"./\"" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "85d0c8ce", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:24:17.450615Z", + "iopub.status.busy": "2024-02-29T20:24:17.449717Z", + "iopub.status.idle": "2024-02-29T20:24:17.455310Z", + "shell.execute_reply": "2024-02-29T20:24:17.454632Z" + }, + "papermill": { + "duration": 0.019442, + "end_time": "2024-02-29T20:24:17.457111", + "exception": false, + "start_time": "2024-02-29T20:24:17.437669", + "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": "4a39259d", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:24:17.482190Z", + "iopub.status.busy": "2024-02-29T20:24:17.481582Z", + "iopub.status.idle": "2024-02-29T20:24:17.486940Z", + "shell.execute_reply": "2024-02-29T20:24:17.486107Z" + }, + "papermill": { + "duration": 0.019901, + "end_time": "2024-02-29T20:24:17.488758", + "exception": false, + "start_time": "2024-02-29T20:24:17.468857", + "status": "completed" + }, + "tags": [ + "injected-parameters" + ] + }, + "outputs": [], + "source": [ + "# Parameters\n", + "dataset = \"contraceptive\"\n", + "dataset_name = \"contraceptive\"\n", + "single_model = \"tab_ddpm_concat\"\n", + "gp = False\n", + "gp_multiply = False\n", + "random_seed = 3\n", + "debug = False\n", + "folder = \"eval\"\n", + "path_prefix = \"../../../../\"\n", + "path = \"eval/contraceptive/tab_ddpm_concat/3\"\n", + "param_index = 1\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bd7c02d6", + "metadata": { + "papermill": { + "duration": 0.010913, + "end_time": "2024-02-29T20:24:17.510570", + "exception": false, + "start_time": "2024-02-29T20:24:17.499657", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "5f45b1d0", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:24:17.533681Z", + "iopub.status.busy": "2024-02-29T20:24:17.533442Z", + "iopub.status.idle": "2024-02-29T20:24:17.542009Z", + "shell.execute_reply": "2024-02-29T20:24:17.541229Z" + }, + "executionInfo": { + "elapsed": 7, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "UdvXYv3c3LXy", + "papermill": { + "duration": 0.022345, + "end_time": "2024-02-29T20:24:17.543896", + "exception": false, + "start_time": "2024-02-29T20:24:17.521551", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/kaggle/working\n", + "/kaggle/working/eval/contraceptive/tab_ddpm_concat/3\n" + ] + } + ], + "source": [ + "from pathlib import Path\n", + "import os\n", + "\n", + "%cd /kaggle/working/\n", + "\n", + "if path is None:\n", + " path = os.path.join(folder, dataset_name, single_model, random_seed)\n", + "Path(path).mkdir(parents=True, exist_ok=True)\n", + "\n", + "%cd {path}" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "f85bf540", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:24:17.569033Z", + "iopub.status.busy": "2024-02-29T20:24:17.568743Z", + "iopub.status.idle": "2024-02-29T20:24:19.735944Z", + "shell.execute_reply": "2024-02-29T20:24:19.735006Z" + }, + "papermill": { + "duration": 2.182796, + "end_time": "2024-02-29T20:24:19.738044", + "exception": false, + "start_time": "2024-02-29T20:24:17.555248", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Set seed to \n" + ] + } + ], + "source": [ + "from ml_utility_loss.util import seed\n", + "if single_model:\n", + " model_name=f\"{model_name}_{single_model}\"\n", + "if random_seed is not None:\n", + " seed(random_seed)\n", + " print(\"Set seed to\", seed)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "8489feae", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:24:19.764864Z", + "iopub.status.busy": "2024-02-29T20:24:19.764385Z", + "iopub.status.idle": "2024-02-29T20:24:19.775482Z", + "shell.execute_reply": "2024-02-29T20:24:19.774579Z" + }, + "papermill": { + "duration": 0.026856, + "end_time": "2024-02-29T20:24:19.777545", + "exception": false, + "start_time": "2024-02-29T20:24:19.750689", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import json\n", + "import os\n", + "\n", + "df = pd.read_csv(os.path.join(dataset_dir, f\"{dataset_name}.csv\"))\n", + "with open(os.path.join(dataset_dir, f\"{dataset_name}.json\")) as f:\n", + " info = json.load(f)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "debcc684", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:24:19.801415Z", + "iopub.status.busy": "2024-02-29T20:24:19.801150Z", + "iopub.status.idle": "2024-02-29T20:24:19.808219Z", + "shell.execute_reply": "2024-02-29T20:24:19.807337Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "Vrl2QkoV3o_8", + "papermill": { + "duration": 0.021364, + "end_time": "2024-02-29T20:24:19.810227", + "exception": false, + "start_time": "2024-02-29T20:24:19.788863", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "task = info[\"task\"]\n", + "target = info[\"target\"]\n", + "cat_features = info[\"cat_features\"]\n", + "mixed_features = info[\"mixed_features\"]\n", + "longtail_features = info[\"longtail_features\"]\n", + "integer_features = info[\"integer_features\"]\n", + "\n", + "test = df.sample(frac=0.2, random_state=42)\n", + "train = df[~df.index.isin(test.index)]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "7538184a", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:24:19.833931Z", + "iopub.status.busy": "2024-02-29T20:24:19.833610Z", + "iopub.status.idle": "2024-02-29T20:24:19.936285Z", + "shell.execute_reply": "2024-02-29T20:24:19.935372Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "TilUuFk9vqMb", + "papermill": { + "duration": 0.117078, + "end_time": "2024-02-29T20:24:19.938537", + "exception": false, + "start_time": "2024-02-29T20:24:19.821459", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import ml_utility_loss.synthesizers.tab_ddpm.params as TAB_DDPM_PARAMS\n", + "import ml_utility_loss.synthesizers.lct_gan.params as LCT_GAN_PARAMS\n", + "import ml_utility_loss.synthesizers.realtabformer.params as RTF_PARAMS\n", + "from ml_utility_loss.synthesizers.realtabformer.params.default import GPT2_PARAMS, REALTABFORMER_PARAMS\n", + "from ml_utility_loss.util import filter_dict_2, filter_dict\n", + "\n", + "tab_ddpm_params = getattr(TAB_DDPM_PARAMS, dataset_name).BEST\n", + "lct_gan_params = getattr(LCT_GAN_PARAMS, dataset_name).BEST\n", + "lct_ae_params = filter_dict_2(lct_gan_params, LCT_GAN_PARAMS.default.AE_PARAMS)\n", + "rtf_params = getattr(RTF_PARAMS, dataset_name).BEST\n", + "rtf_params = filter_dict(rtf_params, REALTABFORMER_PARAMS)\n", + "\n", + "lct_ae_embedding_size=lct_gan_params[\"embedding_size\"]\n", + "tab_ddpm_normalization=\"quantile\"\n", + "tab_ddpm_cat_encoding=tab_ddpm_params[\"cat_encoding\"]\n", + "#tab_ddpm_cat_encoding=\"one-hot\"\n", + "tab_ddpm_y_policy=\"default\"\n", + "tab_ddpm_is_y_cond=True" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "cca61838", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:24:19.965113Z", + "iopub.status.busy": "2024-02-29T20:24:19.964662Z", + "iopub.status.idle": "2024-02-29T20:24:24.575496Z", + "shell.execute_reply": "2024-02-29T20:24:24.574680Z" + }, + "executionInfo": { + "elapsed": 3113, + "status": "ok", + "timestamp": 1696841025277, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "7Abt8nStvr9Z", + "papermill": { + "duration": 4.626471, + "end_time": "2024-02-29T20:24:24.577879", + "exception": false, + "start_time": "2024-02-29T20:24:19.951408", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-02-29 20:24:22.201582: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:9261] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", + "2024-02-29 20:24:22.201642: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:607] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", + "2024-02-29 20:24:22.203391: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1515] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n" + ] + } + ], + "source": [ + "from ml_utility_loss.loss_learning.estimator.pipeline import load_lct_ae\n", + "\n", + "lct_ae = load_lct_ae(\n", + " dataset_name=dataset_name,\n", + " model_dir=os.path.join(path_prefix, \"ml-utility-loss/models\"),\n", + " model_name=\"lct_ae\",\n", + " df_name=\"df\",\n", + ")\n", + "lct_ae = None" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "6f83b7b6", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:24:24.603940Z", + "iopub.status.busy": "2024-02-29T20:24:24.603370Z", + "iopub.status.idle": "2024-02-29T20:24:24.609312Z", + "shell.execute_reply": "2024-02-29T20:24:24.608472Z" + }, + "papermill": { + "duration": 0.021509, + "end_time": "2024-02-29T20:24:24.611262", + "exception": false, + "start_time": "2024-02-29T20:24:24.589753", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "from ml_utility_loss.loss_learning.estimator.pipeline import load_rtf_embed\n", + "\n", + "rtf_embed = load_rtf_embed(\n", + " dataset_name=dataset_name,\n", + " model_dir=os.path.join(path_prefix, \"ml-utility-loss/models\"),\n", + " model_name=\"realtabformer\",\n", + " df_name=\"df\",\n", + " ckpt_type=\"best-disc-model\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "0026de74", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:24:24.637565Z", + "iopub.status.busy": "2024-02-29T20:24:24.636890Z", + "iopub.status.idle": "2024-02-29T20:24:33.501995Z", + "shell.execute_reply": "2024-02-29T20:24:33.500904Z" + }, + "executionInfo": { + "elapsed": 20137, + "status": "ok", + "timestamp": 1696841045408, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "tbaguWxAvtPi", + "papermill": { + "duration": 8.880952, + "end_time": "2024-02-29T20:24:33.504445", + "exception": false, + "start_time": "2024-02-29T20:24:24.623493", + "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': 'none',\n", + " 'patience': 10,\n", + " 'inds_init_mode': 'fixnorm',\n", + " 'grad_clip': 0.74,\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': 4,\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': 'tab_ddpm_concat',\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': torch.nn.modules.activation.Tanh,\n", + " 'tf_activation_final': ml_utility_loss.activations.LeakyHardtanh,\n", + " 'ada_d_hid': 1024,\n", + " 'ada_n_layers': 9,\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.Softsign,\n", + " 'head_activation_final': ml_utility_loss.activations.LeakyHardsigmoid,\n", + " 'models': ['tab_ddpm_concat'],\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': 1.0, 'multiply': True}}}" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import ml_utility_loss.loss_learning.estimator.params2 as PARAMS\n", + "from ml_utility_loss.tuning import map_parameters\n", + "from ml_utility_loss.loss_learning.estimator.params.default import update_param_space, update_param_space_2\n", + "import wandb\n", + "\n", + "#\"\"\"\n", + "param_space = {\n", + " **getattr(PARAMS, dataset_name).PARAM_SPACE,\n", + "}\n", + "params = {\n", + " **getattr(PARAMS, dataset_name).BESTS[param_index],\n", + "}\n", + "if gp:\n", + " params[\"gradient_penalty_mode\"] = \"ALL\"\n", + " params[\"mse_mag\"] = True\n", + " if gp_multiply:\n", + " params[\"mse_mag_multiply\"] = True\n", + " params[\"mse_mag_target\"] = 1.0\n", + " else:\n", + " params[\"mse_mag_multiply\"] = False\n", + " params[\"mse_mag_target\"] = 0.1\n", + "else:\n", + " params[\"gradient_penalty_mode\"] = \"NONE\"\n", + " params[\"mse_mag\"] = False\n", + "params[\"single_model\"] = False\n", + "if models:\n", + " params[\"models\"] = models\n", + "if single_model:\n", + " params[\"fixed_role_model\"] = single_model\n", + " params[\"single_model\"] = True\n", + " params[\"models\"] = [single_model]\n", + "if params[\"fixed_role_model\"] == \"realtabformer\" and dataset_name == \"treatment\":\n", + " params[\"batch_size\"] = 2\n", + "params[\"max_seconds\"] = 3600\n", + "params[\"patience\"] = 10\n", + "params[\"epochs\"] = 100\n", + "if debug:\n", + " params[\"epochs\"] = 2\n", + "with open(\"params.json\", \"w\") as f:\n", + " json.dump(params, f)\n", + "params = map_parameters(params, param_space=param_space)\n", + "params" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "a48bd9e9", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:24:34.043923Z", + "iopub.status.busy": "2024-02-29T20:24:34.043553Z", + "iopub.status.idle": "2024-02-29T20:24:34.126797Z", + "shell.execute_reply": "2024-02-29T20:24:34.125613Z" + }, + "papermill": { + "duration": 0.100884, + "end_time": "2024-02-29T20:24:34.129493", + "exception": false, + "start_time": "2024-02-29T20:24:34.028609", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "load_dataset_3_factory 2\n", + "Caching in ../../../../contraceptive/_cache/tab_ddpm_concat/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/tab_ddpm_concat/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/tab_ddpm_concat/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-02-29T20:24:34.164150Z", + "iopub.status.busy": "2024-02-29T20:24:34.163804Z", + "iopub.status.idle": "2024-02-29T20:24:34.623226Z", + "shell.execute_reply": "2024-02-29T20:24:34.622278Z" + }, + "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.479089, + "end_time": "2024-02-29T20:24:34.625391", + "exception": false, + "start_time": "2024-02-29T20:24:34.146302", + "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", + "['tab_ddpm_concat'] 1\n" + ] + } + ], + "source": [ + "from ml_utility_loss.loss_learning.estimator.model.pipeline import remove_non_model_params\n", + "from ml_utility_loss.loss_learning.estimator.pipeline import create_model\n", + "from ml_utility_loss.util import filter_dict, clear_memory\n", + "\n", + "clear_memory()\n", + "\n", + "params2 = remove_non_model_params(params)\n", + "adapters = filter_dict(preprocessor.adapter_sizes, params[\"models\"])\n", + "\n", + "model = create_model(\n", + " adapters=adapters,\n", + " #Body=\"twin_encoder\",\n", + " **params2,\n", + ")\n", + "#cf.apply_weight_standardization(model, n_last_layers_ignore=0)\n", + "print(model.models, len(model.adapters))" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "938f94fc", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:24:34.661052Z", + "iopub.status.busy": "2024-02-29T20:24:34.660649Z", + "iopub.status.idle": "2024-02-29T20:24:34.665126Z", + "shell.execute_reply": "2024-02-29T20:24:34.664272Z" + }, + "papermill": { + "duration": 0.025637, + "end_time": "2024-02-29T20:24:34.667047", + "exception": false, + "start_time": "2024-02-29T20:24:34.641410", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "study_name=f\"{model_name}_{dataset_name}\"" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "12fb613e", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:24:34.693128Z", + "iopub.status.busy": "2024-02-29T20:24:34.692884Z", + "iopub.status.idle": "2024-02-29T20:24:34.699532Z", + "shell.execute_reply": "2024-02-29T20:24:34.698756Z" + }, + "papermill": { + "duration": 0.02194, + "end_time": "2024-02-29T20:24:34.701376", + "exception": false, + "start_time": "2024-02-29T20:24:34.679436", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "11282952" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def count_parameters(model):\n", + " return sum(p.numel() for p in model.parameters() if p.requires_grad)\n", + "\n", + "count_parameters(model)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "bd386e57", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:24:34.727471Z", + "iopub.status.busy": "2024-02-29T20:24:34.727228Z", + "iopub.status.idle": "2024-02-29T20:24:34.804688Z", + "shell.execute_reply": "2024-02-29T20:24:34.803872Z" + }, + "papermill": { + "duration": 0.092848, + "end_time": "2024-02-29T20:24:34.806652", + "exception": false, + "start_time": "2024-02-29T20:24:34.713804", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "========================================================================================================================\n", + "Layer (type:depth-idx) Output Shape Param #\n", + "========================================================================================================================\n", + "MLUtilitySingle [2, 1179, 10] --\n", + "├─Adapter: 1-1 [2, 1179, 10] --\n", + "│ └─Sequential: 2-1 [2, 1179, 256] --\n", + "│ │ └─FeedForward: 3-1 [2, 1179, 1024] --\n", + "│ │ │ └─Linear: 4-1 [2, 1179, 1024] 11,264\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, 1024] --\n", + "│ │ │ └─Linear: 4-15 [2, 1179, 1024] 1,049,600\n", + "│ │ │ └─Softsign: 4-16 [2, 1179, 1024] --\n", + "│ │ └─FeedForward: 3-9 [2, 1179, 256] --\n", + "│ │ │ └─Linear: 4-17 [2, 1179, 256] 262,400\n", + "│ │ │ └─LeakyHardsigmoid: 4-18 [2, 1179, 256] --\n", + "├─Adapter: 1-2 [2, 294, 10] (recursive)\n", + "│ └─Sequential: 2-2 [2, 294, 256] (recursive)\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, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-31 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Softsign: 4-32 [2, 294, 1024] --\n", + "│ │ └─FeedForward: 3-17 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-33 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Softsign: 4-34 [2, 294, 1024] --\n", + "│ │ └─FeedForward: 3-18 [2, 294, 256] (recursive)\n", + "│ │ │ └─Linear: 4-35 [2, 294, 256] (recursive)\n", + "│ │ │ └─LeakyHardsigmoid: 4-36 [2, 294, 256] --\n", + "├─TwinEncoder: 1-3 [2, 2048] --\n", + "│ └─Encoder: 2-3 [2, 8, 256] --\n", + "│ │ └─ModuleList: 3-20 -- (recursive)\n", + "│ │ │ └─EncoderLayer: 4-37 [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", + "│ │ │ │ │ └─Tanh: 6-5 [2, 1179, 512] --\n", + "│ │ │ │ │ └─Linear: 6-6 [2, 1179, 256] 131,328\n", + "│ │ │ └─EncoderLayer: 4-38 [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", + "│ │ │ │ │ └─Tanh: 6-11 [2, 1179, 512] --\n", + "│ │ │ │ │ └─Linear: 6-12 [2, 1179, 256] 131,328\n", + "│ │ │ └─EncoderLayer: 4-39 [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", + "│ └─Encoder: 2-4 [2, 8, 256] (recursive)\n", + "│ │ └─ModuleList: 3-20 -- (recursive)\n", + "│ │ │ └─EncoderLayer: 4-40 [2, 294, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-8 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-21 [2, 64, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-22 [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-23 [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-9 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-24 [2, 294, 512] (recursive)\n", + "│ │ │ │ │ └─Tanh: 6-25 [2, 294, 512] --\n", + "│ │ │ │ │ └─Linear: 6-26 [2, 294, 256] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-41 [2, 294, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-10 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-27 [2, 64, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-28 [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-29 [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-11 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-30 [2, 294, 512] (recursive)\n", + "│ │ │ │ │ └─Tanh: 6-31 [2, 294, 512] --\n", + "│ │ │ │ │ └─Linear: 6-32 [2, 294, 256] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-42 [2, 8, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-12 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-33 [2, 64, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-34 [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-35 [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-13 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-36 [2, 294, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardtanh: 6-37 [2, 294, 512] --\n", + "│ │ │ │ │ └─Linear: 6-38 [2, 294, 256] (recursive)\n", + "│ │ │ │ └─PoolingByMultiheadAttention: 5-14 [2, 8, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-39 [2, 8, 256] (recursive)\n", + "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-40 [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", + "├─Head: 1-4 [2] --\n", + "│ └─Sequential: 2-5 [2, 1] --\n", + "│ │ └─FeedForward: 3-21 [2, 256] --\n", + "│ │ │ └─Linear: 4-43 [2, 256] 524,544\n", + "│ │ │ └─Softsign: 4-44 [2, 256] --\n", + "│ │ └─FeedForward: 3-22 [2, 256] --\n", + "│ │ │ └─Linear: 4-45 [2, 256] 65,792\n", + "│ │ │ └─Softsign: 4-46 [2, 256] --\n", + "│ │ └─FeedForward: 3-23 [2, 256] --\n", + "│ │ │ └─Linear: 4-47 [2, 256] 65,792\n", + "│ │ │ └─Softsign: 4-48 [2, 256] --\n", + "│ │ └─FeedForward: 3-24 [2, 256] --\n", + "│ │ │ └─Linear: 4-49 [2, 256] 65,792\n", + "│ │ │ └─Softsign: 4-50 [2, 256] --\n", + "│ │ └─FeedForward: 3-25 [2, 256] --\n", + "│ │ │ └─Linear: 4-51 [2, 256] 65,792\n", + "│ │ │ └─Softsign: 4-52 [2, 256] --\n", + "│ │ └─FeedForward: 3-26 [2, 256] --\n", + "│ │ │ └─Linear: 4-53 [2, 256] 65,792\n", + "│ │ │ └─Softsign: 4-54 [2, 256] --\n", + "│ │ └─FeedForward: 3-27 [2, 256] --\n", + "│ │ │ └─Linear: 4-55 [2, 256] 65,792\n", + "│ │ │ └─Softsign: 4-56 [2, 256] --\n", + "│ │ └─FeedForward: 3-28 [2, 256] --\n", + "│ │ │ └─Linear: 4-57 [2, 256] 65,792\n", + "│ │ │ └─Softsign: 4-58 [2, 256] --\n", + "│ │ └─FeedForward: 3-29 [2, 1] --\n", + "│ │ │ └─Linear: 4-59 [2, 1] 257\n", + "│ │ │ └─LeakyHardsigmoid: 4-60 [2, 1] --\n", + "========================================================================================================================\n", + "Total params: 11,282,952\n", + "Trainable params: 11,282,952\n", + "Non-trainable params: 0\n", + "Total mult-adds (M): 42.96\n", + "========================================================================================================================\n", + "Input size (MB): 0.12\n", + "Forward/backward pass size (MB): 365.70\n", + "Params size (MB): 45.13\n", + "Estimated Total Size (MB): 410.95\n", + "========================================================================================================================" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from torchinfo import summary\n", + "\n", + "role_model = params[\"fixed_role_model\"]\n", + "s = train_set[0][role_model]\n", + "summary(model[role_model], input_size=((2, *s[0].shape), (2, *s[1].shape)), depth=9) # 8 max" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "0f42c4d1", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:24:34.837133Z", + "iopub.status.busy": "2024-02-29T20:24:34.836862Z", + "iopub.status.idle": "2024-02-29T20:51:23.802107Z", + "shell.execute_reply": "2024-02-29T20:51:23.801127Z" + }, + "papermill": { + "duration": 1609.000137, + "end_time": "2024-02-29T20:51:23.820977", + "exception": false, + "start_time": "2024-02-29T20:24:34.820840", + "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.017509687443816802, 'avg_role_model_std_loss': 0.25492126335856824, 'avg_role_model_mean_pred_loss': 0.000845979718699752, '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.017509687443816802, 'n_size': 320, 'n_batch': 80, 'duration': 74.85561537742615, 'duration_batch': 0.9356951922178268, 'duration_size': 0.2339237980544567, 'avg_pred_std': 0.12247967834118753}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.03225579813006334, 'avg_role_model_std_loss': 0.3893812867692759, 'avg_role_model_mean_pred_loss': 0.0018670448790572892, '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.03225579813006334, 'n_size': 80, 'n_batch': 20, 'duration': 16.974793434143066, 'duration_batch': 0.8487396717071534, 'duration_size': 0.21218491792678834, 'avg_pred_std': 0.11351076629944146}\n", + "Epoch 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.015060588270716834, 'avg_role_model_std_loss': 0.5294836329319879, 'avg_role_model_mean_pred_loss': 0.0005396637374993886, '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.015060588270716834, 'n_size': 320, 'n_batch': 80, 'duration': 74.75039911270142, 'duration_batch': 0.9343799889087677, 'duration_size': 0.23359499722719193, 'avg_pred_std': 0.10789964701980352}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.017869547638110817, 'avg_role_model_std_loss': 3.109420410258463, 'avg_role_model_mean_pred_loss': 0.0007849385737095816, '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.017869547638110817, 'n_size': 80, 'n_batch': 20, 'duration': 17.005717754364014, 'duration_batch': 0.8502858877182007, 'duration_size': 0.21257147192955017, 'avg_pred_std': 0.032646807050332426}\n", + "Epoch 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.007901813013450009, 'avg_role_model_std_loss': 0.43976500204076957, 'avg_role_model_mean_pred_loss': 0.00010274562480983643, '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.007901813013450009, 'n_size': 320, 'n_batch': 80, 'duration': 74.73881554603577, 'duration_batch': 0.9342351943254471, 'duration_size': 0.23355879858136178, 'avg_pred_std': 0.09000834664329886}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.006841135048307479, 'avg_role_model_std_loss': 1.7945492254511919, 'avg_role_model_mean_pred_loss': 8.046349178982836e-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.006841135048307479, 'n_size': 80, 'n_batch': 20, 'duration': 16.90992760658264, 'duration_batch': 0.8454963803291321, 'duration_size': 0.21137409508228303, 'avg_pred_std': 0.052934233518317345}\n", + "Epoch 3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.005526901292250841, 'avg_role_model_std_loss': 0.4796540130246029, 'avg_role_model_mean_pred_loss': 5.3269670587949184e-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.005526901292250841, 'n_size': 320, 'n_batch': 80, 'duration': 74.69570064544678, 'duration_batch': 0.9336962580680848, 'duration_size': 0.2334240645170212, 'avg_pred_std': 0.09062463160371408}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.004396481180447154, 'avg_role_model_std_loss': 1.441257982449315, 'avg_role_model_mean_pred_loss': 1.9934287330158895e-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.004396481180447154, 'n_size': 80, 'n_batch': 20, 'duration': 16.831034421920776, 'duration_batch': 0.8415517210960388, 'duration_size': 0.2103879302740097, 'avg_pred_std': 0.034367192443460225}\n", + "Epoch 4\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.003952335390204098, 'avg_role_model_std_loss': 0.6800493642964284, 'avg_role_model_mean_pred_loss': 3.501202619586863e-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.003952335390204098, 'n_size': 320, 'n_batch': 80, 'duration': 74.82494044303894, 'duration_batch': 0.9353117555379867, 'duration_size': 0.23382793888449668, 'avg_pred_std': 0.08449668972752988}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0030278531834483148, 'avg_role_model_std_loss': 1.419872753619893, 'avg_role_model_mean_pred_loss': 1.2108854497228094e-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.0030278531834483148, 'n_size': 80, 'n_batch': 20, 'duration': 16.83168315887451, 'duration_batch': 0.8415841579437255, 'duration_size': 0.21039603948593139, 'avg_pred_std': 0.04602950892876834}\n", + "Epoch 5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.003957326662930427, 'avg_role_model_std_loss': 0.3222652507973578, 'avg_role_model_mean_pred_loss': 1.749390277871613e-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.003957326662930427, 'n_size': 320, 'n_batch': 80, 'duration': 74.4447557926178, 'duration_batch': 0.9305594474077225, 'duration_size': 0.2326398618519306, 'avg_pred_std': 0.09507375009125099}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.003036417685507331, 'avg_role_model_std_loss': 1.8372398112704105, 'avg_role_model_mean_pred_loss': 1.3633386806094494e-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.003036417685507331, 'n_size': 80, 'n_batch': 20, 'duration': 16.73884344100952, 'duration_batch': 0.836942172050476, 'duration_size': 0.209235543012619, 'avg_pred_std': 0.03600916846189648}\n", + "Epoch 6\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0028476251969550503, 'avg_role_model_std_loss': 0.2714852012659293, 'avg_role_model_mean_pred_loss': 1.3130850977921548e-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.0028476251969550503, 'n_size': 320, 'n_batch': 80, 'duration': 75.16001582145691, 'duration_batch': 0.9395001977682114, 'duration_size': 0.23487504944205284, 'avg_pred_std': 0.09719131344463676}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0032441405899589883, 'avg_role_model_std_loss': 2.57110884013091, 'avg_role_model_mean_pred_loss': 1.2244734485200582e-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.0032441405899589883, 'n_size': 80, 'n_batch': 20, 'duration': 16.80543065071106, 'duration_batch': 0.840271532535553, 'duration_size': 0.21006788313388824, 'avg_pred_std': 0.034793011099100116}\n", + "Epoch 7\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.002179265605263936, 'avg_role_model_std_loss': 0.2912421387520652, 'avg_role_model_mean_pred_loss': 5.355932938649715e-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.002179265605263936, 'n_size': 320, 'n_batch': 80, 'duration': 75.13848423957825, 'duration_batch': 0.9392310529947281, 'duration_size': 0.23480776324868202, 'avg_pred_std': 0.09003764551598578}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.002960549862473272, 'avg_role_model_std_loss': 1.5272669666737784, 'avg_role_model_mean_pred_loss': 1.1626163023858993e-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.002960549862473272, 'n_size': 80, 'n_batch': 20, 'duration': 16.840531826019287, 'duration_batch': 0.8420265913009644, 'duration_size': 0.2105066478252411, 'avg_pred_std': 0.048068627482280135}\n", + "Epoch 8\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0019942367394833126, 'avg_role_model_std_loss': 0.8764173788223844, 'avg_role_model_mean_pred_loss': 5.071989225379896e-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.0019942367394833126, 'n_size': 320, 'n_batch': 80, 'duration': 74.68324661254883, 'duration_batch': 0.9335405826568604, 'duration_size': 0.2333851456642151, 'avg_pred_std': 0.0842734721081797}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.003437347624276299, 'avg_role_model_std_loss': 1.6128702243404405, 'avg_role_model_mean_pred_loss': 2.132158708016774e-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.003437347624276299, 'n_size': 80, 'n_batch': 20, 'duration': 16.703343152999878, 'duration_batch': 0.8351671576499939, 'duration_size': 0.20879178941249849, 'avg_pred_std': 0.04150933439377695}\n", + "Epoch 9\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.001910439515268081, 'avg_role_model_std_loss': 0.5296208621499737, 'avg_role_model_mean_pred_loss': 3.807974610924676e-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.001910439515268081, 'n_size': 320, 'n_batch': 80, 'duration': 74.98403477668762, 'duration_batch': 0.9373004347085953, 'duration_size': 0.2343251086771488, 'avg_pred_std': 0.0939617162453942}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0029005830438109115, 'avg_role_model_std_loss': 1.4297594713909347, 'avg_role_model_mean_pred_loss': 9.182002216068242e-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.0029005830438109115, 'n_size': 80, 'n_batch': 20, 'duration': 16.704230070114136, 'duration_batch': 0.8352115035057068, 'duration_size': 0.2088028758764267, 'avg_pred_std': 0.040789688983932135}\n", + "Epoch 10\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.002364715466683265, 'avg_role_model_std_loss': 0.23049106563653615, 'avg_role_model_mean_pred_loss': 1.08880691394031e-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.002364715466683265, 'n_size': 320, 'n_batch': 80, 'duration': 74.73340845108032, 'duration_batch': 0.934167605638504, 'duration_size': 0.233541901409626, 'avg_pred_std': 0.09482922677416354}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0025556790380505843, 'avg_role_model_std_loss': 1.4470476474137044, 'avg_role_model_mean_pred_loss': 9.480406802708785e-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.0025556790380505843, 'n_size': 80, 'n_batch': 20, 'duration': 16.752872228622437, 'duration_batch': 0.8376436114311219, 'duration_size': 0.20941090285778047, 'avg_pred_std': 0.04689050167798996}\n", + "Epoch 11\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.001990120611480961, 'avg_role_model_std_loss': 0.20637534558109127, 'avg_role_model_mean_pred_loss': 5.3637341571725695e-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.001990120611480961, 'n_size': 320, 'n_batch': 80, 'duration': 74.96153736114502, 'duration_batch': 0.9370192170143128, 'duration_size': 0.2342548042535782, 'avg_pred_std': 0.09388396987924352}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0026564171042991803, 'avg_role_model_std_loss': 1.8061061197324306, 'avg_role_model_mean_pred_loss': 1.1139397728709977e-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.0026564171042991803, 'n_size': 80, 'n_batch': 20, 'duration': 16.754515647888184, 'duration_batch': 0.8377257823944092, 'duration_size': 0.2094314455986023, 'avg_pred_std': 0.046416288684122266}\n", + "Epoch 12\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0018798561781295576, 'avg_role_model_std_loss': 0.3383319207922398, 'avg_role_model_mean_pred_loss': 4.4709591399128e-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.0018798561781295576, 'n_size': 320, 'n_batch': 80, 'duration': 74.77418828010559, 'duration_batch': 0.9346773535013199, 'duration_size': 0.23366933837532997, 'avg_pred_std': 0.0905981837247964}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0026210575761069776, 'avg_role_model_std_loss': 2.1850536189552257, 'avg_role_model_mean_pred_loss': 5.391822381461964e-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.0026210575761069776, 'n_size': 80, 'n_batch': 20, 'duration': 16.748401641845703, 'duration_batch': 0.8374200820922851, 'duration_size': 0.20935502052307128, 'avg_pred_std': 0.03947516868356615}\n", + "Epoch 13\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0018263132704305462, 'avg_role_model_std_loss': 0.4754561664466223, 'avg_role_model_mean_pred_loss': 3.583063472956116e-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.0018263132704305462, 'n_size': 320, 'n_batch': 80, 'duration': 74.7354383468628, 'duration_batch': 0.9341929793357849, 'duration_size': 0.23354824483394623, 'avg_pred_std': 0.0871307724271901}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.002742944849887863, 'avg_role_model_std_loss': 2.296998679006356, 'avg_role_model_mean_pred_loss': 8.635369825379935e-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.002742944849887863, 'n_size': 80, 'n_batch': 20, 'duration': 16.92655324935913, 'duration_batch': 0.8463276624679565, 'duration_size': 0.21158191561698914, 'avg_pred_std': 0.04202657011337578}\n", + "Epoch 14\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0017013913855407736, 'avg_role_model_std_loss': 0.2523655897014123, 'avg_role_model_mean_pred_loss': 2.6748898654643803e-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.0017013913855407736, 'n_size': 320, 'n_batch': 80, 'duration': 75.46495079994202, 'duration_batch': 0.9433118849992752, 'duration_size': 0.2358279712498188, 'avg_pred_std': 0.09202192013035529}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.00283771293470636, 'avg_role_model_std_loss': 1.8566916088265089, 'avg_role_model_mean_pred_loss': 1.0541326899016213e-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.00283771293470636, 'n_size': 80, 'n_batch': 20, 'duration': 17.10892963409424, 'duration_batch': 0.8554464817047119, 'duration_size': 0.21386162042617798, 'avg_pred_std': 0.05005494304932654}\n", + "Epoch 15\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0015473646866666969, 'avg_role_model_std_loss': 0.26786694799376515, 'avg_role_model_mean_pred_loss': 3.7729344502605496e-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.0015473646866666969, 'n_size': 320, 'n_batch': 80, 'duration': 74.63104557991028, 'duration_batch': 0.9328880697488785, 'duration_size': 0.23322201743721963, 'avg_pred_std': 0.09204029910615645}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: - 0.000 MB of 0.000 MB uploaded\r" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.00325308749161195, 'avg_role_model_std_loss': 1.8810293299167824, 'avg_role_model_mean_pred_loss': 1.5295879933319156e-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.00325308749161195, 'n_size': 80, 'n_batch': 20, 'duration': 16.859638690948486, 'duration_batch': 0.8429819345474243, 'duration_size': 0.21074548363685608, 'avg_pred_std': 0.04019828836899251}\n", + "Stopped False\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: \n", + "\u001b[34m\u001b[1mwandb\u001b[0m: Run history:\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_loss_test █▅▂▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_loss_train █▇▄▃▂▂▂▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_embed_loss_test ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_embed_loss_train ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_cos_loss_test ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_cos_loss_train ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_mag_loss_test ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_mag_loss_train ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_pred_std_test █▁▃▁▂▁▁▂▂▂▂▂▂▂▃▂\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_pred_std_train █▅▂▂▁▃▃▂▁▃▃▃▂▂▂▂\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_cos_loss_test ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_cos_loss_train ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_mag_loss_test ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_mag_loss_train ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_loss_test █▅▂▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_loss_train █▇▄▃▂▂▂▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_mean_pred_loss_test █▄▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_mean_pred_loss_train █▅▂▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_std_loss_test ▁█▅▄▄▅▇▄▄▄▄▅▆▆▅▅\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_std_loss_train ▂▄▃▄▆▂▂▂█▄▁▁▂▄▁▂\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_batch_test ▆▆▅▃▃▂▃▃▁▁▂▂▂▅█▄\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_batch_train ▄▃▃▃▄▁▆▆▃▅▃▅▃▃█▂\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_size_test ▆▆▅▃▃▂▃▃▁▁▂▂▂▅█▄\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_size_train ▄▃▃▃▄▁▆▆▃▅▃▅▃▃█▂\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_test ▆▆▅▃▃▂▃▃▁▁▂▂▂▅█▄\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_train ▄▃▃▃▄▁▆▆▃▅▃▅▃▃█▂\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: n_batch_test ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: n_batch_train ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: n_size_test ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: n_size_train ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: \n", + "\u001b[34m\u001b[1mwandb\u001b[0m: Run summary:\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_loss_test 0.00325\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_loss_train 0.00155\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.0402\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_pred_std_train 0.09204\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.00325\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_loss_train 0.00155\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_mean_pred_loss_test 2e-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 1.88103\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_std_loss_train 0.26787\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_batch_test 0.84298\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_batch_train 0.93289\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_size_test 0.21075\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_size_train 0.23322\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_test 16.85964\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_train 74.63105\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: n_batch_test 20\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: n_batch_train 80\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/tab_ddpm_concat/3/wandb/offline-run-20240229_202436-6gs8ggtf\u001b[0m\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: Find logs at: \u001b[35m\u001b[1m./wandb/offline-run-20240229_202436-6gs8ggtf/logs\u001b[0m\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval loss {'role_model': 'tab_ddpm_concat', 'n_size': 399, 'n_batch': 100, 'role_model_metrics': {'avg_loss': 0.0026090041735591157, 'avg_g_mag_loss': 0.027198189083769916, 'avg_g_cos_loss': 0.003037689876903717, 'pred_duration': 1.3711330890655518, 'grad_duration': 3.8808236122131348, 'total_duration': 5.2519567012786865, 'pred_std': 0.06657693535089493, 'std_loss': 7.981087151165411e-07, 'mean_pred_loss': 1.2404520930431318e-05, 'pred_rmse': 0.05107840895652771, 'pred_mae': 0.03967232629656792, 'pred_mape': 0.0928136557340622, 'grad_rmse': 0.09042102098464966, 'grad_mae': 0.06953004002571106, 'grad_mape': 0.876955509185791}, '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.0026090041735591157, 'avg_g_mag_loss': 0.027198189083769916, 'avg_g_cos_loss': 0.003037689876903717, 'avg_pred_duration': 1.3711330890655518, 'avg_grad_duration': 3.8808236122131348, 'avg_total_duration': 5.2519567012786865, 'avg_pred_std': 0.06657693535089493, 'avg_std_loss': 7.981087151165411e-07, 'avg_mean_pred_loss': 1.2404520930431318e-05}, 'min_metrics': {'avg_loss': 0.0026090041735591157, 'avg_g_mag_loss': 0.027198189083769916, 'avg_g_cos_loss': 0.003037689876903717, 'pred_duration': 1.3711330890655518, 'grad_duration': 3.8808236122131348, 'total_duration': 5.2519567012786865, 'pred_std': 0.06657693535089493, 'std_loss': 7.981087151165411e-07, 'mean_pred_loss': 1.2404520930431318e-05, 'pred_rmse': 0.05107840895652771, 'pred_mae': 0.03967232629656792, 'pred_mape': 0.0928136557340622, 'grad_rmse': 0.09042102098464966, 'grad_mae': 0.06953004002571106, 'grad_mape': 0.876955509185791}, 'model_metrics': {'tab_ddpm_concat': {'avg_loss': 0.0026090041735591157, 'avg_g_mag_loss': 0.027198189083769916, 'avg_g_cos_loss': 0.003037689876903717, 'pred_duration': 1.3711330890655518, 'grad_duration': 3.8808236122131348, 'total_duration': 5.2519567012786865, 'pred_std': 0.06657693535089493, 'std_loss': 7.981087151165411e-07, 'mean_pred_loss': 1.2404520930431318e-05, 'pred_rmse': 0.05107840895652771, 'pred_mae': 0.03967232629656792, 'pred_mape': 0.0928136557340622, 'grad_rmse': 0.09042102098464966, 'grad_mae': 0.06953004002571106, 'grad_mape': 0.876955509185791}}}\n" + ] + } + ], + "source": [ + "import torch\n", + "from ml_utility_loss.loss_learning.estimator.pipeline import train, train_2\n", + "from ml_utility_loss.loss_learning.estimator.process_simple import train_epoch, eval as _eval\n", + "from ml_utility_loss.params import GradientPenaltyMode\n", + "from ml_utility_loss.util import clear_memory\n", + "import time\n", + "#torch.autograd.set_detect_anomaly(True)\n", + "\n", + "clear_memory()\n", + "\n", + "opt = params[\"Optim\"](model.parameters())\n", + "loss = train_2(\n", + " [train_set, val_set, test_set],\n", + " preprocessor=preprocessor,\n", + " whole_model=model,\n", + " optim=opt,\n", + " log_dir=\"logs\",\n", + " checkpoint_dir=\"checkpoints\",\n", + " verbose=True,\n", + " allow_same_prediction=False,\n", + " wandb=wandb,\n", + " study_name=study_name,\n", + " **params\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "9b514a07", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:51:23.858964Z", + "iopub.status.busy": "2024-02-29T20:51:23.858098Z", + "iopub.status.idle": "2024-02-29T20:51:23.862294Z", + "shell.execute_reply": "2024-02-29T20:51:23.861566Z" + }, + "papermill": { + "duration": 0.025401, + "end_time": "2024-02-29T20:51:23.864119", + "exception": false, + "start_time": "2024-02-29T20:51:23.838718", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "model = loss[\"whole_model\"]\n", + "opt = loss[\"optim\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "331a49e1", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:51:23.898742Z", + "iopub.status.busy": "2024-02-29T20:51:23.898458Z", + "iopub.status.idle": "2024-02-29T20:51:24.204643Z", + "shell.execute_reply": "2024-02-29T20:51:24.203859Z" + }, + "papermill": { + "duration": 0.326548, + "end_time": "2024-02-29T20:51:24.207482", + "exception": false, + "start_time": "2024-02-29T20:51:23.880934", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import torch\n", + "from copy import deepcopy\n", + "\n", + "torch.save(deepcopy(model.state_dict()), \"model.pt\")\n", + "torch.save(deepcopy(opt.state_dict()), \"optim.pt\")" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "123b4b17", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:51:24.244534Z", + "iopub.status.busy": "2024-02-29T20:51:24.244231Z", + "iopub.status.idle": "2024-02-29T20:51:24.514752Z", + "shell.execute_reply": "2024-02-29T20:51:24.513854Z" + }, + "papermill": { + "duration": 0.291584, + "end_time": "2024-02-29T20:51:24.516959", + "exception": false, + "start_time": "2024-02-29T20:51:24.225375", + "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-02-29T20:51:24.555532Z", + "iopub.status.busy": "2024-02-29T20:51:24.554714Z", + "iopub.status.idle": "2024-02-29T20:52:56.127454Z", + "shell.execute_reply": "2024-02-29T20:52:56.126441Z" + }, + "papermill": { + "duration": 91.594797, + "end_time": "2024-02-29T20:52:56.130022", + "exception": false, + "start_time": "2024-02-29T20:51:24.535225", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "\n", + "from ml_utility_loss.loss_learning.estimator.pipeline import eval\n", + "#eval_loss = loss[\"eval_loss\"]\n", + "\n", + "batch_size = params[\"batch_size_low\"] if \"batch_size_low\" in params else params[\"batch_size\"]\n", + "\n", + "eval_loss = eval(\n", + " test_set, model,\n", + " batch_size=batch_size,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "187137f6", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:52:56.169853Z", + "iopub.status.busy": "2024-02-29T20:52:56.169020Z", + "iopub.status.idle": "2024-02-29T20:52:56.189468Z", + "shell.execute_reply": "2024-02-29T20:52:56.188631Z" + }, + "papermill": { + "duration": 0.042595, + "end_time": "2024-02-29T20:52:56.191313", + "exception": false, + "start_time": "2024-02-29T20:52:56.148718", + "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
tab_ddpm_concat0.0046860.0163790.0026093.8580920.069530.8769560.0904210.0000121.3648460.0396720.0928140.0510780.0665777.981087e-075.222938
\n", + "
" + ], + "text/plain": [ + " avg_g_cos_loss avg_g_mag_loss avg_loss grad_duration \\\n", + "tab_ddpm_concat 0.004686 0.016379 0.002609 3.858092 \n", + "\n", + " grad_mae grad_mape grad_rmse mean_pred_loss \\\n", + "tab_ddpm_concat 0.06953 0.876956 0.090421 0.000012 \n", + "\n", + " pred_duration pred_mae pred_mape pred_rmse pred_std \\\n", + "tab_ddpm_concat 1.364846 0.039672 0.092814 0.051078 0.066577 \n", + "\n", + " std_loss total_duration \n", + "tab_ddpm_concat 7.981087e-07 5.222938 " + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "metrics = pd.DataFrame(eval_loss[\"model_metrics\"]).T\n", + "metrics.to_csv(\"eval.csv\")\n", + "metrics" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "123d305b", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:52:56.227345Z", + "iopub.status.busy": "2024-02-29T20:52:56.227067Z", + "iopub.status.idle": "2024-02-29T20:52:56.620316Z", + "shell.execute_reply": "2024-02-29T20:52:56.619376Z" + }, + "papermill": { + "duration": 0.413742, + "end_time": "2024-02-29T20:52:56.622445", + "exception": false, + "start_time": "2024-02-29T20:52:56.208703", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "from ml_utility_loss.util import clear_memory\n", + "clear_memory()" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "a3eecc2a", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:52:56.661150Z", + "iopub.status.busy": "2024-02-29T20:52:56.660832Z", + "iopub.status.idle": "2024-02-29T20:54:33.509851Z", + "shell.execute_reply": "2024-02-29T20:54:33.508865Z" + }, + "papermill": { + "duration": 96.871564, + "end_time": "2024-02-29T20:54:33.512526", + "exception": false, + "start_time": "2024-02-29T20:52:56.640962", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../contraceptive/_cache_test/tab_ddpm_concat/all inf False\n" + ] + } + ], + "source": [ + "#\"\"\"\n", + "from ml_utility_loss.loss_learning.estimator.process import pred, pred_2\n", + "from ml_utility_loss.util import stack_samples\n", + "\n", + "#samples = test_set[list(range(len(test_set)))]\n", + "#y = {m: pred(model[m], s) for m, s in samples.items()}\n", + "y = pred_2(model, test_set, batch_size=batch_size)\n", + "#\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "6ab51db8", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:54:33.551579Z", + "iopub.status.busy": "2024-02-29T20:54:33.550692Z", + "iopub.status.idle": "2024-02-29T20:54:33.567817Z", + "shell.execute_reply": "2024-02-29T20:54:33.567105Z" + }, + "papermill": { + "duration": 0.038334, + "end_time": "2024-02-29T20:54:33.569869", + "exception": false, + "start_time": "2024-02-29T20:54:33.531535", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import os\n", + "import pandas as pd\n", + "from ml_utility_loss.util import transpose_dict\n", + "\n", + "os.makedirs(\"pred\", exist_ok=True)\n", + "y2 = transpose_dict(y)\n", + "for k, v in y2.items():\n", + " df = pd.DataFrame(v)\n", + " df.to_csv(f\"pred/{k}.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "d81a30f1", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:54:33.606611Z", + "iopub.status.busy": "2024-02-29T20:54:33.606318Z", + "iopub.status.idle": "2024-02-29T20:54:33.611340Z", + "shell.execute_reply": "2024-02-29T20:54:33.610539Z" + }, + "papermill": { + "duration": 0.025713, + "end_time": "2024-02-29T20:54:33.613336", + "exception": false, + "start_time": "2024-02-29T20:54:33.587623", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'tab_ddpm_concat': 0.4453968018069303}\n" + ] + } + ], + "source": [ + "print({k: sum(v[\"pred\"])/len(v[\"pred\"]) for k, v in y.items()})" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "3b3ff322", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:54:33.651935Z", + "iopub.status.busy": "2024-02-29T20:54:33.651124Z", + "iopub.status.idle": "2024-02-29T20:54:34.000147Z", + "shell.execute_reply": "2024-02-29T20:54:33.999197Z" + }, + "papermill": { + "duration": 0.37059, + "end_time": "2024-02-29T20:54:34.002126", + "exception": false, + "start_time": "2024-02-29T20:54:33.631536", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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1Vdf7VBCeO+997o8xv79+xFCdDjW3r17AfVKS0+MGDGCcDjMgQMHOpQI9uzZ02G/zMxMrFYr+/bt63SM7+4b0dW+e/fuxWazdSpRDJRISe/rr79m9OjRXe4zYsQIQP0c5513Xofn9uzZE32+t++7adMm6uvruy0V9eb3PVR6rsuqWYwlJSUBdOjQGPlP2/4/vtvtZv369V0eo6Kigpdffjn6uLGxkWeeeYbJkyeTk5PTozjmz58PwO9///sO2x988MEOj/V6PfPmzeOVV16htLQ0un337t1s2rSpy2P/61//4vPPP48+Lisr429/+xtz587tt1LFicydOxe73c7atWtpbW3t8FzkPE+dOpWsrCz+8Ic/4PP5os+/8cYb7N69mwULFvT6fS+55BKEENx5552dnou8b29+30lJSUOi86ssEcVYpBH3//2//8dPfvITjEYj55xzDiaTiYULF3LDDTfg8Xh4/PHHycrKorKystMxxo4dy7XXXsvWrVvJzs7mqaee4ujRo90mrq5MnjyZyy67jMceewy3281ZZ53Fu+++y/79+zvte+edd/Lmm28ya9YsbrzxRoLBIA8//DATJkzgq6++6rT/xIkTmTdvHitXrsRsNvPYY49FjxMrDoeDBx54gOXLlzNt2jQuv/xyUlNT+fLLL2lpaeHpp5/GaDRy7733cs011zB79mwuu+wyjh49ykMPPURhYSG/+MUvev2+5557LldddRW///3v2bdvHxdeeCHhcJgPPviAc889l5tuuom5c+f2+Pc9ZcoU1q1bxy9/+UtGjx5NVlZWp9LboKDdBbuh6+677xbDhg0TOp0uein/1VdfFZMmTRIWi0UUFhaKe++9Vzz11FOdLvWPGDFCLFiwQGzatElMmjRJmM1mMX78ePGXv/yl13F4vV6xcuVKkZ6eLpKSksTChQtFWVlZp8v3Qgjx/vvviylTpgiTySRGjhwp/vCHP0QvwbcHiBUrVohnn31WjBkzRpjNZlFcXCzee++9DvtFXltTU9Nh+5IlS0RSUlKnWGfPni0mTJjQ68/46quvirPOOktYrVbhcDjE9OnTxQsvvNBhnz//+c+iuLhYmM1mkZaWJq644gpx5MiRHsXV1TkIBoPit7/9rRg/frwwmUwiMzNTzJ8/X2zfvr1DXD35fVdVVYkFCxYIu90ugEF7KV8RQq5rJvUf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xLghq2Y9EFmR9oILLohuO96KtF1paWkhEAiQltbDNWESQF/Py1133UVWVhbXXnttLMLURF/OzauvvsrMmTNZsWIF2dnZTJw4kV//+teEQqFYha2ZhB70Giu9XZG2K7feeit5eXkdvpiJri/n5cMPP+TJJ59kx44dMYhQO305NwcPHuSf//wnV1xxBa+//jr79+/nxhtvJBAIsGbNmliErRmZiGLgnnvuYePGjWzevBmLZeiuad/U1MRVV13F448/TkZGhtbhxJ1wOExWVhZ/+tOf0Ov1TJkyhfLycn7729/KRCT1fkXa9n73u99xzz338M477zBp0qSBDDPmenteDhw4wOHDh1m4cGF0Wzisrp9uMBjYs2cPo0aNGtigY6Qv35nc3FyMRiN6vT667ZRTTqGqqgq/34/JZOrydYOBbCPqgb6uSPub3/yGu+++mzfffJOpU6fGItSY6u15GT9+PDt37mTHjh3R2w9/+EPOPfdcduzYMahm2uzLd+bss89m//790eQMsHfvXnJzcwd1EgLk5fue2rhxozCbzWLDhg3im2++Eddff71ISUkRVVVVQgghrrrqKnHbbbdF97/nnnuEyWQSL774oqisrIzempqatPoIA6K35+W7BvNVs96em9LSUmG328VNN90k9uzZI/7xj3+IrKws8ctf/lKrjxAzMhH1wsMPPywKCgqEyWQS06dPF5988kn0udmzZ4slS5ZEH48YMUIAnW5r1qyJfeADrDfn5bsGcyISovfn5uOPPxYzZswQZrNZjBw5UvzqV78SwWAwxlHHnpwGRJIkzck2IkmSNCcTkSRJmpOJSJIkzclEJEmS5mQikiRJczIRSZKkOZmIJEnSnExEkiRpTiYiKaFs2LCBlJSU6OM77riDyZMnRx8vXbp0UE89O1jJRCR1aenSpSiKwk9/+tNOz61YsQJFUVi6dGmH/fs7ARQWFvLggw922PbjH/+YvXv3dvuahx56iA0bNkQfz5kzh5tvvrlf45L6n0xEUrfy8/PZuHEjXq83uq21tZXnn3+egoICTWKyWq1kZWV1+7zT6exQYpISg0xEUrfOOOMM8vPzeemll6LbXnrpJQoKCiguLj6pY3dVUlm8eHG0lDVnzhxKSkr4xS9+gaIoKIoCdK6afVf7ktnSpUt5//33eeihh6LHOHToEKNHj+Z3v/tdh9ft2LEDRVHYv3//SX0uqW9kIpKOa9myZaxfvz76+KmnnuKaa64Z8Pd96aWXGD58OHfddReVlZVUVlb2+hgPPfQQM2fO5Lrrroseo6CgoNNnAli/fj3nnHMOo0eP7q+PIPWCTETScV155ZV8+OGHlJSUUFJSwkcffcSVV1454O+blpaGXq/HbreTk5Nzwpkwu+J0OjGZTNhstugx9Ho9S5cuZc+ePdE1xgKBAM8//zzLli3r748h9ZCcKlY6rszMTBYsWMCGDRsQQrBgwYKEn286Ly+PBQsW8NRTTzF9+nT+/ve/4/P5uPTSS7UObciSJSLphJYtW8aGDRt4+umn+63UoNPp+O5UWIFAoF+O3RPLly+PNsSvX7+eH//4x9hstpi9v9SRTETSCV144YX4/X4CgQDz5s3rl2NmZmZ2aPcJhUJ8/fXXHfYxmUwnvaZXd8e46KKLSEpKYt26dbz55puyWqYxWTWTTkiv17N79+7oz91xu92d1itLT0/vclL88847j1WrVvHaa68xatQo7r//flwuV4d9CgsL2bJlCz/5yU8wm819qhIWFhby6aefcvjwYZKTk0lLS0On00XbilavXs2YMWOOuwiCNPBkiUjqEYfDgcPhOO4+mzdvpri4uMPtzjvv7HLfZcuWsWTJEq6++mpmz57NyJEjOffcczvsc9ddd3H48GFGjRpFZmZmn+K+5ZZb0Ov1nHrqqWRmZlJaWhp97tprr8Xv98fkKqB0fHLOamnI+uCDDzj//PMpKyvrtCKrFFsyEUlDjs/no6amhiVLlpCTk8Nzzz2ndUhDnqyaSUPOCy+8wIgRI3C5XPzmN7/ROhwJWSKSJCkOyBKRJEmak4lIkiTNyUQkSZLmZCKSJElzMhFJkqQ5mYgkSdKcTESSJGlOJiJJkjT3/wFq1JH+ZxxDjQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from ml_utility_loss.loss_learning.visualization import plot_pred_density_2\n", + "\n", + "_ = plot_pred_density_2(y)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "e79e4b0f", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:54:34.039667Z", + "iopub.status.busy": "2024-02-29T20:54:34.039338Z", + "iopub.status.idle": "2024-02-29T20:54:34.354702Z", + "shell.execute_reply": "2024-02-29T20:54:34.353779Z" + }, + "papermill": { + "duration": 0.336297, + "end_time": "2024-02-29T20:54:34.356751", + "exception": false, + "start_time": "2024-02-29T20:54:34.020454", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from ml_utility_loss.loss_learning.visualization import plot_density_3\n", + "\n", + "_ = plot_density_3(y2[\"pred\"], next(iter(y2[\"y\"].values())))" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "745adde1", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:54:34.396579Z", + "iopub.status.busy": "2024-02-29T20:54:34.396284Z", + "iopub.status.idle": "2024-02-29T20:54:34.614556Z", + "shell.execute_reply": "2024-02-29T20:54:34.613626Z" + }, + "papermill": { + "duration": 0.240522, + "end_time": "2024-02-29T20:54:34.616564", + "exception": false, + "start_time": "2024-02-29T20:54:34.376042", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAATgAAAEmCAYAAAD2o4yBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAyXUlEQVR4nO3de1wTV/4//lcIEMIdRG6WOxa0CiisiKsftUVAV4tLL2gvXGrpFut+6qZql1ZhUbd8ar2g/VjZn1tEbbfa9mPdbmtRN0rXC3jBqoiIgly0XAQVwkUjJOf7hz+mjQkYMJgweT8fjzxwZs6cnGHCy5k5kzMCxhgDIYTwkIm+G0AIIYOFAo4QwlsUcIQQ3qKAI4TwFgUcIYS3KOAIIbxFAUcI4S0KOEIIb5nquwGGSKlUoq6uDjY2NhAIBPpuDiHkVxhjaGtrg7u7O0xM+j5Go4DToK6uDh4eHvpuBiGkD9euXcMTTzzRZxkKOA1sbGwA3P8F2tra6rk1g6erqwsHDhxAVFQUzMzM9N0c8oiMZX/KZDJ4eHhwf6d9oYDToOe01NbWlvcBZ2lpCVtbW17/QRgLY9uf2lw+ok4GQghvUcARQniLAo4QwlsUcIQQ3qKAI4TwFgUcIYS36DYRQoaozs5OXLp0iZtuvyPH8ZJKODidhrVYpFI2MDAQlpaWj7uJekcBR8gQdenSJYSGhqrNX6OhbHFxMcaPHz/4jTIwFHCEDFGBgYEoLi7mpsvrWyD5qgTrXxiLADd7tbLGiAKOkCHK0tJS5ajMpOYmREfuYNSYYIR4DdNjywwHdTIQQniLAo4QwlsUcIQQ3qKAI4TwFgUcIYS3KOAIIbxFAUcI4S0KOEIIb1HAEUJ4iwKOEMJbFHCEEN6igCOE8BZ92d6IaDt+mLGOHUb4hwLOiGg7fpixjh1G+IcCzohoO36YsY4dRvhH79fgNm/eDG9vb1hYWCA8PBwnT57stWxeXh4EAoHKy8LCQqVMUlKSWpmYmJjB3owhoWf8sJ7XqDHBELn6Y9SYYJX5dHpK+EKvR3C7d++GRCJBTk4OwsPDkZ2djejoaJSXl8PZ2VnjOra2tigvL+emBQKBWpmYmBhs27aNmxaJRGplCCH8p9cjuPXr1yMlJQXJyckYPXo0cnJyYGlpidzc3F7XEQgEcHV15V4uLi5qZUQikUoZBweHwdwMQoiB0tsR3L1791BcXIy0tDRunomJCSIjI1FYWNjreu3t7fDy8oJSqcT48ePxwQcf4KmnnlIpU1BQAGdnZzg4OODpp5/G6tWrMWxY70M4y+VyyOVyblomkwEAurq60NXVNdBNNHjd3d3cTz5vp7Ewlv3Zn23TW8A1NzdDoVCoHYG5uLio3MrwawEBAcjNzUVQUBBaW1uxdu1aTJo0CaWlpXjiiScA3D89jYuLg4+PDyorK/Hee+9h5syZKCwshFAo1FhvVlYWMjMz1eYfOHCA19ejrrUDgCmKiorw8wV9t4Y8KmPZn52dnVqXHVK9qBEREYiIiOCmJ02ahFGjRuFvf/sbVq1aBQCYN28et3zs2LEICgqCn58fCgoK8Mwzz2isNy0tDRKJhJuWyWTw8PBAVFQUbG1tB2lr9O9c7S2g5DQmTpyIYE9HfTeHPCJj2Z89Z1ja0FvAOTk5QSgUorGxUWV+Y2MjXF1dtarDzMwM48aNQ0VFRa9lfH194eTkhIqKil4DTiQSaeyIMDMzg5mZmVZtGYpMTU25n3zeTmNhLPuzP9umt04Gc3NzhIaGQiqVcvOUSiWkUqnKUVpfFAoFSkpK4Obm1muZ69ev4+bNm32WIYTwk157USUSCbZu3Yrt27ejrKwMqamp6OjoQHJyMgAgISFBpRNi5cqVOHDgAK5evYozZ87glVdeQU1NDV5//XUA9zsgli5diqKiIlRXV0MqlSI2Nhb+/v6Ijo7WyzYSQvRHr9fg4uPj0dTUhPT0dDQ0NCAkJAT5+flcx0NtbS1MTH7J4Nu3byMlJQUNDQ1wcHBAaGgojh8/jtGjRwMAhEIhzp8/j+3bt6OlpQXu7u6IiorCqlWr6F44QoyQgDHG9N0IQyOTyWBnZ4fW1lZedzKcrbmJuVuKsDd1Ij0JnQeMZX/25+9T71/VIoSQwUIBRwjhLQo4QghvUcARQniLAo4QwlsUcIQQ3qKAI4TwFgUcIYS3KOAIIbxFAUcI4S0KOEIIb1HAEUJ4iwKOEMJbFHCEEN6igCOE8BYFHCGEtyjgCCG8RQFHCOEtCjhCCG9RwBFCeIsCjhDCWxRwhBDeooAjhPAWBRwhhLf0HnCbN2+Gt7c3LCwsEB4ejpMnT/ZaNi8vDwKBQOVlYWGhUoYxhvT0dLi5uUEsFiMyMhJXrlwZ7M0ghBggvQbc7t27IZFIkJGRgTNnziA4OBjR0dG4ceNGr+vY2tqivr6ee9XU1KgsX7NmDTZt2oScnBycOHECVlZWiI6Oxt27dwd7cwghBkavAbd+/XqkpKQgOTkZo0ePRk5ODiwtLZGbm9vrOgKBAK6urtzLxcWFW8YYQ3Z2NpYvX47Y2FgEBQVhx44dqKurw969ex/DFhFCDImpvt743r17KC4uRlpaGjfPxMQEkZGRKCws7HW99vZ2eHl5QalUYvz48fjggw/w1FNPAQCqqqrQ0NCAyMhIrrydnR3Cw8NRWFiIefPmaaxTLpdDLpdz0zKZDADQ1dWFrq6uR9pOQ9bd3c395PN2Ggtj2Z/92Ta9BVxzczMUCoXKERgAuLi44NKlSxrXCQgIQG5uLoKCgtDa2oq1a9di0qRJKC0txRNPPIGGhgaujgfr7FmmSVZWFjIzM9XmHzhwAJaWlv3dtCHjWjsAmKKoqAg/X9B3a8ijMpb92dnZqXVZvQXcQERERCAiIoKbnjRpEkaNGoW//e1vWLVq1YDrTUtLg0Qi4aZlMhk8PDwQFRUFW1vbR2qzITtXewsoOY2JEyci2NNR380hj8hY9mfPGZY29BZwTk5OEAqFaGxsVJnf2NgIV1dXreowMzPDuHHjUFFRAQDceo2NjXBzc1OpMyQkpNd6RCIRRCKRxvrNzMy0astQZGpqyv3k83YaC2PZn/3ZNr0FnLm5OUJDQyGVSjF37lwAgFKphFQqxaJFi7SqQ6FQoKSkBLNmzQIA+Pj4wNXVFVKplAs0mUyGEydOIDU1dTA2w6BVNXegQ97d6/LKpg7uZ88fhyZWIlP4OFnpvH2EDDa9nqJKJBIkJiYiLCwMEyZMQHZ2Njo6OpCcnAwASEhIwIgRI5CVlQUAWLlyJSZOnAh/f3+0tLTgo48+Qk1NDV5//XUA93tYFy9ejNWrV2PkyJHw8fHBihUr4O7uzoWosahq7sD0tQValX3n65KHljm8ZBqFHBly9Bpw8fHxaGpqQnp6OhoaGhASEoL8/Hyuk6C2thYmJr/cyXL79m2kpKSgoaEBDg4OCA0NxfHjxzF69GiuzLJly9DR0YE33ngDLS0tmDx5MvLz89VuCOa7niO37PgQ+Dtbay5zR47vCgoxe1oErMTqp+gAUHGjHYt3n+3zSJAQQ6X3ToZFixb1ekpaUFCgMr1hwwZs2LChz/oEAgFWrlyJlStX6qqJQ5q/szXGjLDTuKyrqwsNw4HxXg68vmZDjJfev6pFCCGDhQKOEMJbFHCEEN7S+zU4Qoj2+rr1h277UUcBR8gQoe2tP3Tbzy8o4AgZIh526w/d9qOOAo6QIaa3W3/oth911MlACOEtCjhCCG9RwBFCeKvfAXf16tXBaAchhOhcvwPO398f06dPx2effUYPciGEGLR+B9yZM2cQFBQEiUQCV1dX/OEPf+jzUX+EEKIv/Q64kJAQbNy4EXV1dcjNzUV9fT0mT56MMWPGYP369WhqahqMdhJCSL8NuJPB1NQUcXFx+Oqrr/Dhhx+ioqICS5YsgYeHBxISElBfX6/LdhJCSL8NOOBOnz6NhQsXws3NDevXr8eSJUtQWVmJgwcPoq6uDrGxsbpsJyGE9Fu/v8mwfv16bNu2DeXl5Zg1axZ27NiBWbNmcSPv+vj4IC8vD97e3rpuKyGE9Eu/A27Lli147bXXkJSUpPLkql9zdnbGp59++siNI4SQR9HvgDt48CA8PT1VnpUAAIwxXLt2DZ6enjA3N0diYqLOGkkIIQPR72twfn5+aG5uVpt/69Yt+Pj46KRRhBCiC/0OOMaYxvnt7e1G9+QqQohh0/oUVSKRALj/1Kr09HRYWlpyyxQKBU6cONHn0+PJ4yVX3IWJxc+okpXDxELzYwO7u7tR112HsltlvY4AWyVrh4nFz5Ar7gLQ/HQuQgyV1gH3008/Abh/BFdSUgJzc3Numbm5OYKDg7FkyRLdt5AMSF1HDax8PsZ7WnzJ5JP8T/pcbuUD1HWEIBQuOmodIY+H1gF3+PBhAEBycjI2btwIW1tbnTRg8+bN+Oijj9DQ0IDg4GB8/PHHmDBhwkPX27VrF+bPn4/Y2Fjs3buXm5+UlITt27erlI2OjkZ+fr5O2jtUuFt5oaPqj9gYHwK/Xh783N3djWNHj+G3k3/b6xFc5Y12vL37LNynew1mcwkZFP3uRd22bZvO3nz37t2QSCTIyclBeHg4srOzER0djfLycjg7O/e6XnV1NZYsWYIpU6ZoXB4TE6PSTpFI8/DNfCYSWkB5dwR8bAMweljvD36uMq3CKMdRvY4Aq7zbCuXdJoiEdH2VDD1aBVxcXBzy8vJga2uLuLi4Psvu2bNH6zdfv349UlJSkJycDADIycnB999/j9zcXPz5z3/WuI5CocDLL7+MzMxMHDlyBC0tLWplRCIRXF1dtW4HIYSftAo4Ozs7CAQC7t+6cO/ePRQXFyMtLY2bZ2JigsjISBQWFva63sqVK+Hs7IwFCxbgyJEjGssUFBTA2dkZDg4OePrpp7F69WoMGzas1zrlcjnkcjk3LZPJANw/wunq6urvphmE7u5u7mdv29Azv69t1KYe8ng8bF8Yy/7sT7u1Crhfn+7p6hS1ubkZCoUCLi6qF65dXFxw6dIljescPXoUn376Kc6ePdtrvTExMYiLi4OPjw8qKyvx3nvvYebMmSgsLIRQKNS4TlZWFjIzM9XmHzhwQKW3eCi51g4Apjh69ChqNF+C4xw8eFAn9ZDBdbXtHkwsbuObI1+iUNx7ue0/bO91WcMdwMRCiMNHDqHGxrzXcoass7NT67JD5qlabW1tePXVV7F161Y4OTn1Wm7evHncv8eOHYugoCD4+fmhoKAAzzzzjMZ10tLSuNtggPtHcB4eHoiKitJZZ8rjVlonw9qSIkyePBlPuWvehq6uLhw8eBAzZszo9RqcNvWQx+P78tOwUqzEHgWA9oHXY+UD+IT8f5gVEKaztj1OPWdY2tAq4MaNG8edoj7MmTNntCrn5OQEoVCIxsZGlfmNjY0ar59VVlaiuroac+bM4eYplUoA94duKi8vh5+fn9p6vr6+cHJyQkVFRa8BJxKJNHZEmJmZDdnHr/X0ipqamj50G/razv7UQwaXh61vnz3j/ekV95juO2T3Z3/arVXAzZ07d6Bt6ZW5uTlCQ0MhlUq5+pVKJaRSKRYtWqRWPjAwECUlqk/sXr58Odra2rBx40Z4eHhofJ/r16/j5s2bvQ4MQMhQ8bCeceoVV6dVwGVkZAzKm0skEiQmJiIsLAwTJkxAdnY2Ojo6uF7VhIQEjBgxAllZWbCwsMCYMWNU1re3twcAbn57ezsyMzPx3HPPwdXVFZWVlVi2bBn8/f0RHR09KNtACDFcer0GFx8fj6amJqSnp6OhoQEhISHIz8/nOh5qa2vVRi3pi1AoxPnz57F9+3a0tLTA3d0dUVFRWLVqlVHeC0eIsdMq4BwdHXH58mU4OTnBwcGhz+txt27d6lcDFi1apPGUFLh/u0df8vLyVKbFYjH279/fr/cnhPCXVgG3YcMG2NjYcP/WtsOBEEL0SauA+/XglUlJSYPVFkII0al+jwcnFApx48YNtfk3b97s9UZaQgjRB50NeCmXy1WGUCKEEH3Tuhd106ZNAO4PePn3v/8d1ta/3GioUCjwn//8B4GBgbpvISGEDJDWAbdhwwYA94/gcnJyVE5Hzc3N4e3tjZycHN23kBBCBkjrgKuqqgIATJ8+HXv27IGDg8OgNYoQQnSh3zf69ozsSwghhq7fAffaa6/1uTw3N3fAjSGEEF3qd8Ddvn1bZbqrqwsXLlxAS0sLnn76aZ01jBBCHlW/A+6bb75Rm6dUKpGamqpxuCJCCNGXft8Hp7ESExNIJBKup5UQQgyBTgIOuD8gZc9474QQYgj6fYr666G9gfv3xdXX1+P7779X+c4qIYToW78DrucJ9z1MTEwwfPhwrFu37qE9rOTxudOlAABc+Lm11zIdd+Q43QS41tyGlVjzeHkVNx5h8H9C9Izug+Opyv8/mP68p+QhJU2xs+LUQ+uzEg2Z5xMRwqFPLU9FPXX/wT1+ztYQm2ke5aW8vhXvfF2Cdc+PRYBb78+7tRKZwsfJalDaSchgooDjKUcrc8yb4NlnmZ5OIb/hVhgzQjcP9CbEkOisF5UQQgwNBRwhhLd0FnDXr1/HG2+8oavqCCHkkeks4G7evIlPP/1UV9URQsgjo1NUQghvUcARQnhL7wG3efNmeHt7w8LCAuHh4Th58qRW6+3atQsCgQBz585Vmc8YQ3p6Otzc3CAWixEZGYkrV64MQssJIYZO6/vg4uLi+lze0tLS7zffvXs3JBIJcnJyEB4ejuzsbERHR6O8vBzOzs69rlddXY0lS5ZgypQpasvWrFmDTZs2Yfv27fDx8cGKFSsQHR2NixcvwsLCot9tJIQMXVofwdnZ2fX58vLyQkJCQr/efP369UhJSUFycjJGjx6NnJwcWFpa9jkqsEKhwMsvv4zMzEz4+vqqLGOMITs7G8uXL0dsbCyCgoKwY8cO1NXVYe/evf1qGyFk6NP6CG7btm06feN79+6huLgYaWlp3DwTExNERkaisLCw1/VWrlwJZ2dnLFiwAEeOHFFZVlVVhYaGBkRGRnLz7OzsEB4ejsLCQsybN09jnXK5HHK5nJuWyWQA7o9W3NXVNaDtGwp6vsnQ3d3N6+3ki4ftr555fe1LPuzz/rRbb1/Vam5uhkKhgIuLi8p8FxcXXLp0SeM6R48exaeffoqzZ89qXN7Q0MDV8WCdPcs0ycrKQmZmptr8AwcOwNLSsq/NGNKutQOAKYqKivDzBX23hjxMz/46evQoaqx7L3fw4MFHrsOQdXZ2al1W64DTdiikwXroTFtbG1599VVs3boVTk5OOq07LS1NZZw7mUwGDw8PREVFwdbWVqfvZUjO1d4CSk5j4sSJCPZ01HdzyEOU1smwtqQIkydPxlPu6p/Lrq4uHDx4EDNmzICZmdmA6hgKes6wtKF1wOXl5cHLywvjxo0DY2xADfs1JycnCIVCNDY2qsxvbGyEq6urWvnKykpUV1djzpw53DylUgkAMDU1RXl5ObdeY2Mj3NzcVOoMCQnptS0ikQgikfp4aGZmZr1+UPjA1NSU+8nn7eQLbfdXX59bPuzz/rRb64BLTU3FF198gaqqKiQnJ+OVV16Bo+PA/9c3NzdHaGgopFIpd6uHUqmEVCrFokWL1MoHBgaipER1bLPly5ejra0NGzduhIeHB8zMzODq6gqpVMoFmkwmw4kTJ5CamjrgthJChiate1E3b96M+vp6LFu2DP/617/g4eGBF198Efv37x/wEZ1EIsHWrVuxfft2lJWVITU1FR0dHUhOTgYAJCQkcJ0QFhYWGDNmjMrL3t4eNjY2GDNmDMzNzSEQCLB48WKsXr0a3377LUpKSpCQkAB3d3e1++UIIfzXr04GkUiE+fPnY/78+aipqUFeXh4WLlyI7u5ulJaWwtq6f1ct4+Pj0dTUhPT0dDQ0NCAkJAT5+flcJ0FtbS1MTPp3L/KyZcvQ0dGBN954Ay0tLZg8eTLy8/PpHjhCjNCAe1FNTEwgEAjAGINCoRhwAxYtWqTxlBQACgoK+lw3Ly9PbZ5AIMDKlSuxcuXKAbeJEMIP/Qo4uVyOPXv2IDc3F0ePHsXs2bPxv//7v4iJien3kRYhpH8e9iAheoiQOq0DbuHChdi1axc8PDzw2muv4YsvvtD57RqEkN5p9yAheojQr2m9lTk5OfD09ISvry9+/PFH/PjjjxrL7dmzR2eNI4T84mEPEqKHCKnTOuASEhIgEAgGsy2EkD487EFC9BAhdf260ZcQQoYS6hkghPAWBRwhhLco4AghvEUBRwjhLQo4QghvUcARQniLAo4QwlsUcIQQ3qKAI4TwFgUcIYS3KOAIIbxFAUcI4S0KOEIIb1HAEUJ4iwKOEMJbFHCEEN6igCOE8BYFHCGEtyjgCCG8pfeA27x5M7y9vWFhYYHw8HCcPHmy17J79uxBWFgY7O3tYWVlhZCQEOzcuVOlTFJSEgQCgcorJiZmsDeDEGKA9PpwxN27d0MikSAnJwfh4eHIzs5GdHQ0ysvL4ezsrFbe0dER77//PgIDA2Fubo7vvvsOycnJcHZ2RnR0NFcuJiYG27Zt46ZFIs0PwSWE8Jtej+DWr1+PlJQUJCcnY/To0cjJyYGlpSVyc3M1lp82bRp+//vfY9SoUfDz88Pbb7+NoKAgHD16VKWcSCSCq6sr93JwcHgcm0MIMTB6O4K7d+8eiouLkZaWxs0zMTFBZGQkCgsLH7o+YwyHDh1CeXk5PvzwQ5VlBQUFcHZ2hoODA55++mmsXr0aw4YN67UuuVwOuVzOTctkMgBAV1cXurq6+rtpQ0bPczS7u7t5vZ3Gwlj2Z3+2TW8B19zcDIVCARcXF5X5Li4uuHTpUq/rtba2YsSIEZDL5RAKhfjkk08wY8YMbnlMTAzi4uLg4+ODyspKvPfee5g5cyYKCwshFKo/DRwAsrKykJmZqTb/wIEDsLS0HOAWGr5r7QBgiqKiIvx8Qd+tIY/KWPZnZ2en1mX1eg1uIGxsbHD27Fm0t7dDKpVCIpHA19cX06ZNAwDMmzePKzt27FgEBQXBz88PBQUFeOaZZzTWmZaWBolEwk3LZDJ4eHggKioKtra2g7o9+nSu9hZQchoTJ05EsKejvptDHpGx7M+eMyxt6C3gnJycIBQK0djYqDK/sbERrq6uva5nYmICf39/AEBISAjKysqQlZXFBdyDfH194eTkhIqKil4DTiQSaeyIMDMzg5mZmZZbNPSYmppyP/m8ncbCWPZnf7ZNb50M5ubmCA0NhVQq5eYplUpIpVJERERoXY9SqVS5fvag69ev4+bNm3Bzc3uk9hJChh69nqJKJBIkJiYiLCwMEyZMQHZ2Njo6OpCcnAwASEhIwIgRI5CVlQXg/rWysLAw+Pn5QS6XY9++fdi5cye2bNkCAGhvb0dmZiaee+45uLq6orKyEsuWLYO/v7/KbSSEEOOg14CLj49HU1MT0tPT0dDQgJCQEOTn53MdD7W1tTAx+eUgs6OjAwsXLsT169chFosRGBiIzz77DPHx8QAAoVCI8+fPY/v27WhpaYG7uzuioqKwatUquheOECMkYIwxfTfC0MhkMtjZ2aG1tZXXnQxna25i7pYi7E2diBCv3m+jIUODsezP/vx96v2rWoQQMlgo4AghvEUBRwjhLQo4QghvUcARQniLAo4QwlsUcIQQ3qKAI4TwFgUcIYS3KOAIIbxFAUcI4S0KOEIIb1HAEUJ4iwKOEMJbFHCEEN6igCOE8BYFHCGEtyjgCCG8RQFnpBQKBU4XHkXHxR9xuvAoFAqFvptEiM5RwBmhPXv2wN/fHynz56L5Xx8hZf5c+Pv7Y8+ePfpuGiE6RQFnRDo7O7F27Vo8//zzqK+vV1lWX1+P559/HmvXrkVnZ6eeWkiIblHAGZHS0lIsXboUjDG1h2XL5XIwxrB06VKUlpbqqYWE6JZen4tKHq+mpibu37/97W/h6jYCV6prMdLbEw31P+PYsWNq5QgZyijgjEhPgLm7u6OoqIjrWDh/ughCoRBubm6or6/HsWPHMGvWLH02lRCd0Psp6ubNm+Ht7Q0LCwuEh4fj5MmTvZbds2cPwsLCYG9vDysrK4SEhGDnzp0qZRhjSE9Ph5ubG8RiMSIjI3HlypXB3owhoba2FgBQV1cHJycn5OTkYNu2bcjJyYGTkxN3Xa6nHCFDnV4Dbvfu3ZBIJMjIyMCZM2cQHByM6Oho3LhxQ2N5R0dHvP/++ygsLMT58+eRnJyM5ORk7N+/nyuzZs0abNq0CTk5OThx4gSsrKwQHR2Nu3fvPq7NMlju7u4AADMzM1RVVcHPzw8lJSXw8/NDVVUVzMzMVMoRMuQxPZowYQJ76623uGmFQsHc3d1ZVlaW1nWMGzeOLV++nDHGmFKpZK6uruyjjz7ilre0tDCRSMS++OILretsbW1lAFhra6vW6wwFb775JgPAADALCwvu3w9Ov/nmm/puKhmAn6qbmde737Gfqpv13ZRB1Z+/T71dg7t37x6Ki4uRlpbGzTMxMUFkZCQKCwsfuj5jDIcOHUJ5eTk+/PBDAEBVVRUaGhoQGRnJlbOzs0N4eDgKCwsxb948jXXJ5XKVXkWZTAYA6OrqQldX14C2z9A9eET74DRft5vPuru7uZ983n/92Ta9BVxzczMUCgVcXFxU5ru4uODSpUu9rtfa2ooRI0ZALpdDKBTik08+wYwZMwAADQ0NXB0P1tmzTJOsrCxkZmaqzT9w4AAsLS213iZDp+1p+t27d7Fv375Bbg3RtWvtAGCKoqIi/HxB360ZPP25T3PI9aLa2Njg7NmzaG9vh1QqhUQiga+vL6ZNmzbgOtPS0iCRSLhpmUwGDw8PREVFwdbWVgetNgxCoRB5eXkPLffcc88hOjp68BtEdOpc7S2g5DQmTpyIYE9HfTdn0PScYWlDbwHn5OQEoVCIxsZGlfmNjY1wdXXtdT0TExP4+/sDAEJCQlBWVoasrCxMmzaNW6+xsRFubm4qdYaEhPRap0gkgkgkUptvZmbGXXjnA21O/XvKzZ49e5BbQ3TN1NSU+8mnz+2D+rNteutFNTc3R2hoKKRSKTdPqVRCKpUiIiJC63qUSiV3/czHxweurq4qdcpkMpw4caJfdfJVTU2NTssRYuj0eooqkUiQmJiIsLAwTJgwAdnZ2ejo6EBycjIAICEhASNGjEBWVhaA+9fKwsLC4OfnB7lcjn379mHnzp3YsmULAEAgEGDx4sVYvXo1Ro4cCR8fH6xYsQLu7u6YO3euvjbTYCiVSgD3j4KHDx+ucvTs4uKCpqYmKJVKrhwhQ51eAy4+Ph5NTU1IT09HQ0MDQkJCkJ+fz3US1NbWwsTkl4PMjo4OLFy4ENevX4dYLEZgYCA+++wzxMfHc2WWLVuGjo4OvPHGG2hpacHkyZORn58PCwuLx759hqbnK1hKpVLjpYEHyxEy1AkYY0zfjTA0MpkMdnZ2aG1t5VUnQ2xsLL799tuHlnv22Wfxz3/+8zG0iOjS2ZqbmLulCHtTJyLEa5i+mzNo+vP3qfevapHHx8nJSaflCDF0FHBG5KefftJpOUIMHQWcEfn55591Wo4QQ0cBZ0R6vsqjq3KEGLoh900GMnC/7kl2cnLCtGnTcOvWLTg6OqKgoADNzc1q5QgZyijgjIi9vT3q6uoA3P8u8Ndff91rOWL4Ojs7Vb63XV7fAnlDBcouiKG8aa9SNjAwkFffq9YWBZwR+e1vf4uLFy9qVY4YvkuXLiE0NFRt/kvb1csWFxdj/Pjxj6FVhoUCzohMmTIFW7du1aocMXyBgYEoLi7mptvvyPH94UL8bnoErMUitbLGiALOiHh4eOi0HNEvS0tLlaOyrq4u3G6+gYgJYbz+sn1/UMAZkSlTpsDb2xtCoRDV1dUqT7M3NTWFl5cXlEolHcER3qCAMyJCoRDr1q3D888/j1mzZsHHxweXL1/Gk08+iaqqKuzbtw9ff/01hEKhvptKiE5QwBmZuLg4fP3113jnnXfw/fffA7g/crGPjw++/vprxMXF6bmFhOgOBZwRiouLQ2xsLA4fPowffvgBM2fOxPTp0+nIjfAOBZyREgqFmDp1Kjo6OjB16lQKN8JL9FUtQghvUcARQniLAo4Qwlt0DU6DnkGO+/N4sqGoq6sLnZ2dkMlkdGMoDxjL/uz5u9RmMHIKOA3a2toA0B39hBiytrY22NnZ9VmGnsmggVKpRF1dHWxsbCAQCPTdnEHT84Dra9eu8erZE8bKWPYnYwxtbW1wd3dXeSiVJnQEp4GJiQmeeOIJfTfjsbG1teX1H4SxMYb9+bAjtx7UyUAI4S0KOEIIb1HAGTGRSISMjAyIRKKHFyYGj/anOupkIITwFh3BEUJ4iwKOEMJbFHCEEN6igNOBpKQkzJ07V6d1Tps2DYsXL+6zjLe3N7Kzs3X6voTwCQXcA7QJFjK0/OUvf0FISIi+m6GRoX3eDK09j4oCjpAh7t69e/pugsGigPuVpKQk/Pjjj9i4cSMEAgEEAgEqKyuxYMEC+Pj4QCwWIyAgABs3btS4fmZmJoYPHw5bW1u8+eabWn/wOjo6kJCQAGtra7i5uWHdunVqZW7cuIE5c+ZALBbDx8cHn3/+uVoZgUCALVu2YObMmRCLxfD19VV5en11dTUEAgG+/PJLTJkyBWKxGL/5zW9w+fJlnDp1CmFhYbC2tsbMmTPR1NSk5W8NyM3NxVNPPQWRSAQ3NzcsWrSIW1ZbW4vY2FhYW1vD1tYWL774IhobG7nlPUdXO3fuhLe3N+zs7DBv3jxuwAPg/neD16xZA39/f4hEInh6euKvf/0rt/zdd9/Fk08+CUtLS/j6+mLFihXo6uoCAOTl5SEzMxPnzp3j9mleXp7W2zaYBvp567kk8te//hXu7u4ICAgAABw/fhwhISGwsLBAWFgY9u7dC4FAgLNnz3LrXrhwATNnzoS1tTVcXFzw6quvorm5udf2VFdXP65fx+BghNPS0sIiIiJYSkoKq6+vZ/X19ezu3bssPT2dnTp1il29epV99tlnzNLSku3evZtbLzExkVlbW7P4+Hh24cIF9t1337Hhw4ez9957T6v3TU1NZZ6enuzf//43O3/+PJs9ezazsbFhb7/9Nldm5syZLDg4mBUWFrLTp0+zSZMmMbFYzDZs2MCVAcCGDRvGtm7dysrLy9ny5cuZUChkFy9eZIwxVlVVxQCwwMBAlp+fzy5evMgmTpzIQkND2bRp09jRo0fZmTNnmL+/P3vzzTe1avsnn3zCLCwsWHZ2NisvL2cnT57k2qRQKFhISAibPHkyO336NCsqKmKhoaFs6tSp3PoZGRnM2tqaxcXFsZKSEvaf//yHubq6qvzuli1bxhwcHFheXh6rqKhgR44cYVu3buWWr1q1ih07doxVVVWxb7/9lrm4uLAPP/yQMcZYZ2cne+edd9hTTz3F7dPOzk6ttm2wPern7dVXX2UXLlxgFy5cYK2trczR0ZG98sorrLS0lO3bt489+eSTDAD76aefGGOM3b59mw0fPpylpaWxsrIydubMGTZjxgw2ffr0XtvT3d2tj1+NzlDAPWDq1KkqwaLJW2+9xZ577jluOjExkTk6OrKOjg5u3pYtW5i1tTVTKBR91tXW1sbMzc3Zl19+yc27efMmE4vFXDvKy8sZAHby5EmuTFlZGQOgFnAPBlN4eDhLTU1ljP0ScH//+9+55V988QUDwKRSKTcvKyuLBQQE9NnuHu7u7uz999/XuOzAgQNMKBSy2tpabl5paanKtmRkZDBLS0smk8m4MkuXLmXh4eGMMcZkMhkTiUQqgfYwH330EQsNDeWmMzIyWHBwsNbrP04D/by5uLgwuVzOzduyZQsbNmwYu3PnDjdv69atKgG3atUqFhUVpVL3tWvXGABWXl6udXuGEhpNRAubN29Gbm4uamtrcefOHdy7d0/tonVwcDAsLS256YiICLS3t+PatWvw8vLqte7Kykrcu3cP4eHh3DxHR0futAMAysrKYGpqitDQUG5eYGAg7O3t1eqLiIhQm/71KQoABAUFcf92cXEBAIwdO1Zl3o0bN3ptc48bN26grq4OzzzzjMblZWVl8PDwUBlXb/To0bC3t0dZWRl+85vfALjfG2xjY8OVcXNz496/rKwMcrm81/cAgN27d2PTpk2orKxEe3s7uru7h/RoGtp83saOHQtzc3Nuury8HEFBQbCwsODmTZgwQWWdc+fO4fDhw7C2tlZ7z8rKSjz55JO63RADQNfgHmLXrl1YsmQJFixYgAMHDuDs2bNITk4e0hd2fz3aa894dw/OUyqVD61HLBbrvD0Pvv/D3qOwsBAvv/wyZs2ahe+++w4//fQT3n///SG7f7T9vFlZWfW77vb2dsyZMwdnz55VeV25cgX/9V//patNMCgUcA8wNzeHQqHgpo8dO4ZJkyZh4cKFGDduHPz9/VFZWam23rlz53Dnzh1uuqioCNbW1g8dFdjPzw9mZmY4ceIEN+/27du4fPkyNx0YGIju7m4UFxdz88rLy9HS0qJWX1FRkdr0qFGj+mzDQNnY2MDb2xtSqVTj8lGjRuHatWu4du0aN+/ixYtoaWnB6NGjtXqPkSNHQiwW9/oex48fh5eXF95//32EhYVh5MiRqKmpUSnz4D41JAP9vD0oICAAJSUlkMvl3LxTp06plBk/fjxKS0vh7e0Nf39/lVdPYBry72ogKOAe4O3tjRMnTqC6uhrNzc0YOXIkTp8+jf379+Py5ctYsWKF2gcHuN9Vv2DBAly8eBH79u1DRkYGFi1a9NARR62trbFgwQIsXboUhw4dwoULF5CUlKSyXkBAAGJiYvCHP/wBJ06cQHFxMV5//XWNRzdfffUVcnNzcfnyZWRkZODkyZMqvZq69pe//AXr1q3Dpk2bcOXKFZw5cwYff/wxACAyMhJjx47Fyy+/jDNnzuDkyZNISEjA1KlTERYWplX9FhYWePfdd7Fs2TLs2LEDlZWVKCoqwqeffgrgfgDW1tZi165dqKysxKZNm/DNN9+o1OHt7Y2qqiqcPXsWzc3NKiGgbwP9vD3opZdeglKpxBtvvIGysjLs378fa9euBfDLUfpbb72FW7duYf78+Th16hQqKyuxf/9+JCcnc6H2YHu0OZI3aPq+CGhoysvL2cSJE5lYLGYA2KVLl1hSUhKzs7Nj9vb2LDU1lf35z39WuWidmJjIYmNjWXp6Ohs2bBiztrZmKSkp7O7du1q9Z1tbG3vllVeYpaUlc3FxYWvWrFG72FtfX89+97vfMZFIxDw9PdmOHTuYl5eXWifD5s2b2YwZM5hIJGLe3t4qvW89nQw9F50ZY+zw4cMMALt9+zY3b9u2bczOzk7r31lOTg4LCAhgZmZmzM3Njf3xj3/kltXU1LBnn32WWVlZMRsbG/bCCy+whoYGbrmmDoANGzYwLy8vblqhULDVq1czLy8vZmZmxjw9PdkHH3zALV+6dCn3e4+Pj2cbNmxQaf/du3fZc889x+zt7RkAtm3bNq23bbA9yuftQceOHWNBQUHM3NychYaGsn/84x9cnT0uX77Mfv/73zN7e3smFotZYGAgW7x4MVMqlRrbU1VVNci/gcFFwyXxiEAgwDfffKPzr42Roenzzz9HcnIyWltbdXa9dKihXlRCeGLHjh3w9fXFiBEjcO7cObz77rt48cUXjTbcAAq4QVdbW9vnBfWLFy/C09PzMbaofzTdUtDjhx9+wJQpUx5ja0hfGhoakJ6ejoaGBri5ueGFF15Q+caHMaJT1EHW3d3d59ddvL29YWpquP/PVFRU9LpsxIgRRn10QAwfBRwhhLfoNhFCCG9RwBFCeIsCjhDCWxRwhBDeooAjepWUlMQNrmhmZgYXFxfMmDEDubm5/fqaUF5ensbRVQbbYDyPg+gOBRzRu5iYGNTX16O6uho//PADpk+fjrfffhuzZ89Gd3e3vptHhjJ9fk+MkN6+VymVShkAbqDLdevWsTFjxjBLS0v2xBNPsNTUVNbW1sYY++X7tL9+ZWRkMMYY27FjBwsNDWXW1tbMxcWFzZ8/nzU2NnLvc+vWLfbSSy8xJycnZmFhwfz9/Vlubi63vLa2lr3wwgvMzs6OOTg4sGeffZb7fmZGRoba+x4+fHhQfk9kYOgIjhikp59+GsHBwdizZw8AwMTEBJs2bUJpaSm2b9+OQ4cOYdmyZQCASZMmITs7G7a2tqivr0d9fT2WLFkCAOjq6sKqVatw7tw57N27F9XV1UhKSuLeZ8WKFbh48SJ++OEHlJWVYcuWLXBycuLWjY6Oho2NDY4cOYJjx47B2toaMTExuHfvHpYsWYIXX3yROwKtr6/HpEmTHu8vivRN3wlLjFtvR3CMMRYfH89GjRqlcdlXX33Fhg0bxk1rOwLKqVOnGADu6G/OnDksOTlZY9mdO3eygIAAbqQNxhiTy+VMLBaz/fv3P7T9RP/oCI4YLMYYN5bZv//9bzzzzDMYMWIEbGxs8Oqrr+LmzZvo7Ozss47i4mLMmTMHnp6esLGxwdSpUwHc/44wAKSmpmLXrl0ICQnBsmXLcPz4cW7dc+fOoaKiAjY2NrC2toa1tTUcHR1x9+5drQahJPpHAUcMVllZGXx8fFBdXY3Zs2cjKCgI//d//4fi4mJs3rwZQN/PBO3o6EB0dDRsbW3x+eef49SpU9xgmD3rzZw5EzU1NfjTn/7EPV+i5/S2vb0doaGhakN8X758GS+99NIgbz3RBcP9ljcxaocOHUJJSQn+9Kc/obi4GEqlEuvWreNGOv7yyy9VymsaavvSpUu4efMm/ud//ocbOv706dNq7zV8+HAkJiYiMTERU6ZMwdKlS7F27VqMHz8eu3fvhrOzc68PseHbEN98Q0dwRO/kcjkaGhrw888/48yZM/jggw8QGxuL2bNnIyEhAf7+/ujq6sLHH3+Mq1evYufOncjJyVGpw9vbG+3t7ZBKpWhubkZnZyc8PT1hbm7Orfftt99i1apVKuulp6fjn//8JyoqKlBaWorvvvuOe4bFyy+/DCcnJ8TGxuLIkSOoqqpCQUEB/vu//xvXr1/n3vf8+fMoLy9Hc3Mz98BpYiD0fRGQGLfExETuFgtTU1M2fPhwFhkZyXJzc1WeKbt+/Xrm5ubGxGIxi46OZjt27FAbav3NN99kw4YNU7lN5B//+Afz9vZmIpGIRUREsG+//VbtWaGjRo1iYrGYOTo6stjYWHb16lWuzvr6epaQkMCcnJyYSCRivr6+LCUlhbW2tjLGGLtx4wabMWMGs7a2pttEDBANl0QI4S06RSWE8BYFHCGEtyjgCCG8RQFHCOEtCjhCCG9RwBFCeIsCjhDCWxRwhBDeooAjhPAWBRwhhLco4AghvEUBRwjhrf8H6xGjdUi3daIAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from ml_utility_loss.loss_learning.visualization import plot_box_3\n", + "\n", + "_ = plot_box_3(y2[\"pred\"], next(iter(y2[\"y\"].values())))" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "eabe1bab", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T20:54:34.659357Z", + "iopub.status.busy": "2024-02-29T20:54:34.659046Z", + "iopub.status.idle": "2024-02-29T20:54:34.932127Z", + "shell.execute_reply": "2024-02-29T20:54:34.931215Z" + }, + "papermill": { + "duration": 0.29791, + "end_time": "2024-02-29T20:54:34.934235", + "exception": false, + "start_time": "2024-02-29T20:54:34.636325", + "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.020681, + "end_time": "2024-02-29T20:54:34.975237", + "exception": false, + "start_time": "2024-02-29T20:54:34.954556", + "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": 1821.816751, + "end_time": "2024-02-29T20:54:37.716390", + "environment_variables": {}, + "exception": null, + "input_path": "eval/contraceptive/tab_ddpm_concat/3/mlu-eval.ipynb", + "output_path": "eval/contraceptive/tab_ddpm_concat/3/mlu-eval.ipynb", + "parameters": { + "dataset": "contraceptive", + "dataset_name": "contraceptive", + "debug": false, + "folder": "eval", + "gp": false, + "gp_multiply": false, + "param_index": 1, + "path": "eval/contraceptive/tab_ddpm_concat/3", + "path_prefix": "../../../../", + "random_seed": 3, + "single_model": "tab_ddpm_concat" + }, + "start_time": "2024-02-29T20:24:15.899639", + "version": "2.5.0" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file