diff --git "a/insurance/tvae/mlu-eval.ipynb" "b/insurance/tvae/mlu-eval.ipynb" new file mode 100644--- /dev/null +++ "b/insurance/tvae/mlu-eval.ipynb" @@ -0,0 +1,2350 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "982e76f5", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:10:15.832582Z", + "iopub.status.busy": "2024-03-22T21:10:15.832310Z", + "iopub.status.idle": "2024-03-22T21:10:15.864039Z", + "shell.execute_reply": "2024-03-22T21:10:15.863191Z" + }, + "papermill": { + "duration": 0.045887, + "end_time": "2024-03-22T21:10:15.865957", + "exception": false, + "start_time": "2024-03-22T21:10:15.820070", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import joblib\n", + "\n", + "#joblib.parallel_backend(\"threading\")" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "675f0b41", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:10:15.890459Z", + "iopub.status.busy": "2024-03-22T21:10:15.890140Z", + "iopub.status.idle": "2024-03-22T21:10:15.896569Z", + "shell.execute_reply": "2024-03-22T21:10:15.895747Z" + }, + "papermill": { + "duration": 0.020964, + "end_time": "2024-03-22T21:10:15.898544", + "exception": false, + "start_time": "2024-03-22T21:10:15.877580", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'\\n%cd /kaggle/working\\n#!git clone https://github.com/R-N/ml-utility-loss --depth=1 --single-branch --branch=main\\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 --depth=1 --single-branch --branch=main\n", + "%cd ml-utility-loss\n", + "!git pull\n", + "#!pip install .\n", + "!pip install . --no-deps --force-reinstall --upgrade\n", + "#\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "5ae30f5c", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:10:15.921400Z", + "iopub.status.busy": "2024-03-22T21:10:15.921136Z", + "iopub.status.idle": "2024-03-22T21:10:15.925068Z", + "shell.execute_reply": "2024-03-22T21:10:15.924234Z" + }, + "papermill": { + "duration": 0.017692, + "end_time": "2024-03-22T21:10:15.927063", + "exception": false, + "start_time": "2024-03-22T21:10:15.909371", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.rcParams['figure.figsize'] = [3,3]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "9f42c810", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:10:15.949835Z", + "iopub.status.busy": "2024-03-22T21:10:15.949596Z", + "iopub.status.idle": "2024-03-22T21:10:15.953396Z", + "shell.execute_reply": "2024-03-22T21:10:15.952525Z" + }, + "executionInfo": { + "elapsed": 678, + "status": "ok", + "timestamp": 1696841022168, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "ns5hFcVL2yvs", + "papermill": { + "duration": 0.017386, + "end_time": "2024-03-22T21:10:15.955228", + "exception": false, + "start_time": "2024-03-22T21:10:15.937842", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "datasets = [\n", + " \"insurance\",\n", + " \"treatment\",\n", + " \"contraceptive\"\n", + "]\n", + "\n", + "study_dir = \"./\"" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "85d0c8ce", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:10:15.978266Z", + "iopub.status.busy": "2024-03-22T21:10:15.978022Z", + "iopub.status.idle": "2024-03-22T21:10:15.983576Z", + "shell.execute_reply": "2024-03-22T21:10:15.982717Z" + }, + "papermill": { + "duration": 0.019282, + "end_time": "2024-03-22T21:10:15.985371", + "exception": false, + "start_time": "2024-03-22T21:10:15.966089", + "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\n", + "allow_same_prediction = True\n", + "log_wandb = False" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "f9755450", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:10:16.010429Z", + "iopub.status.busy": "2024-03-22T21:10:16.009783Z", + "iopub.status.idle": "2024-03-22T21:10:16.014775Z", + "shell.execute_reply": "2024-03-22T21:10:16.013957Z" + }, + "papermill": { + "duration": 0.019757, + "end_time": "2024-03-22T21:10:16.016754", + "exception": false, + "start_time": "2024-03-22T21:10:15.996997", + "status": "completed" + }, + "tags": [ + "injected-parameters" + ] + }, + "outputs": [], + "source": [ + "# Parameters\n", + "dataset = \"insurance\"\n", + "dataset_name = \"insurance\"\n", + "single_model = \"tvae\"\n", + "gp = True\n", + "gp_multiply = True\n", + "random_seed = 2\n", + "debug = False\n", + "folder = \"eval\"\n", + "path_prefix = \"../../../../\"\n", + "path = \"eval/insurance/tvae/2\"\n", + "param_index = 0\n", + "allow_same_prediction = True\n", + "log_wandb = False\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bd7c02d6", + "metadata": { + "papermill": { + "duration": 0.01075, + "end_time": "2024-03-22T21:10:16.039486", + "exception": false, + "start_time": "2024-03-22T21:10:16.028736", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "5f45b1d0", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:10:16.062440Z", + "iopub.status.busy": "2024-03-22T21:10:16.062197Z", + "iopub.status.idle": "2024-03-22T21:10:16.071048Z", + "shell.execute_reply": "2024-03-22T21:10:16.070279Z" + }, + "executionInfo": { + "elapsed": 7, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "UdvXYv3c3LXy", + "papermill": { + "duration": 0.02251, + "end_time": "2024-03-22T21:10:16.072890", + "exception": false, + "start_time": "2024-03-22T21:10:16.050380", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/kaggle/working\n", + "/kaggle/working/eval/insurance/tvae/2\n" + ] + } + ], + "source": [ + "from pathlib import Path\n", + "import os\n", + "\n", + "%cd /kaggle/working/\n", + "\n", + "if path is None:\n", + " path = os.path.join(folder, dataset_name, single_model, random_seed)\n", + "Path(path).mkdir(parents=True, exist_ok=True)\n", + "\n", + "%cd {path}" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "f85bf540", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:10:16.096624Z", + "iopub.status.busy": "2024-03-22T21:10:16.096378Z", + "iopub.status.idle": "2024-03-22T21:10:18.041844Z", + "shell.execute_reply": "2024-03-22T21:10:18.040779Z" + }, + "papermill": { + "duration": 1.959483, + "end_time": "2024-03-22T21:10:18.044052", + "exception": false, + "start_time": "2024-03-22T21:10:16.084569", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Set seed to \n" + ] + } + ], + "source": [ + "from ml_utility_loss.util import seed\n", + "if single_model:\n", + " model_name=f\"{model_name}_{single_model}\"\n", + "if random_seed is not None:\n", + " seed(random_seed)\n", + " print(\"Set seed to\", seed)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "8489feae", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:10:18.075401Z", + "iopub.status.busy": "2024-03-22T21:10:18.074949Z", + "iopub.status.idle": "2024-03-22T21:10:18.088157Z", + "shell.execute_reply": "2024-03-22T21:10:18.087265Z" + }, + "papermill": { + "duration": 0.033106, + "end_time": "2024-03-22T21:10:18.090200", + "exception": false, + "start_time": "2024-03-22T21:10:18.057094", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import json\n", + "import os\n", + "\n", + "df = pd.read_csv(os.path.join(dataset_dir, f\"{dataset_name}.csv\"))\n", + "with open(os.path.join(dataset_dir, f\"{dataset_name}.json\")) as f:\n", + " info = json.load(f)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "debcc684", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:10:18.114579Z", + "iopub.status.busy": "2024-03-22T21:10:18.114289Z", + "iopub.status.idle": "2024-03-22T21:10:18.121731Z", + "shell.execute_reply": "2024-03-22T21:10:18.120914Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "Vrl2QkoV3o_8", + "papermill": { + "duration": 0.02171, + "end_time": "2024-03-22T21:10:18.123701", + "exception": false, + "start_time": "2024-03-22T21:10:18.101991", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "task = info[\"task\"]\n", + "target = info[\"target\"]\n", + "cat_features = info[\"cat_features\"]\n", + "mixed_features = info[\"mixed_features\"]\n", + "longtail_features = info[\"longtail_features\"]\n", + "integer_features = info[\"integer_features\"]\n", + "\n", + "test = df.sample(frac=0.2, random_state=42)\n", + "train = df[~df.index.isin(test.index)]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "7538184a", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:10:18.154002Z", + "iopub.status.busy": "2024-03-22T21:10:18.153706Z", + "iopub.status.idle": "2024-03-22T21:10:18.249740Z", + "shell.execute_reply": "2024-03-22T21:10:18.248699Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "TilUuFk9vqMb", + "papermill": { + "duration": 0.11742, + "end_time": "2024-03-22T21:10:18.252569", + "exception": false, + "start_time": "2024-03-22T21:10:18.135149", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import ml_utility_loss.synthesizers.tab_ddpm.params as TAB_DDPM_PARAMS\n", + "import ml_utility_loss.synthesizers.lct_gan.params as LCT_GAN_PARAMS\n", + "import ml_utility_loss.synthesizers.realtabformer.params as RTF_PARAMS\n", + "from ml_utility_loss.synthesizers.realtabformer.params.default import GPT2_PARAMS, REALTABFORMER_PARAMS\n", + "from ml_utility_loss.util import filter_dict_2, filter_dict\n", + "\n", + "tab_ddpm_params = getattr(TAB_DDPM_PARAMS, dataset_name).BEST\n", + "lct_gan_params = getattr(LCT_GAN_PARAMS, dataset_name).BEST\n", + "lct_ae_params = filter_dict_2(lct_gan_params, LCT_GAN_PARAMS.default.AE_PARAMS)\n", + "rtf_params = getattr(RTF_PARAMS, dataset_name).BEST\n", + "rtf_params = filter_dict(rtf_params, REALTABFORMER_PARAMS)\n", + "\n", + "lct_ae_embedding_size=lct_gan_params[\"embedding_size\"]\n", + "tab_ddpm_normalization=\"quantile\"\n", + "tab_ddpm_cat_encoding=tab_ddpm_params[\"cat_encoding\"]\n", + "#tab_ddpm_cat_encoding=\"one-hot\"\n", + "tab_ddpm_y_policy=\"default\"\n", + "tab_ddpm_is_y_cond=True" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "cca61838", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:10:18.283575Z", + "iopub.status.busy": "2024-03-22T21:10:18.283205Z", + "iopub.status.idle": "2024-03-22T21:10:22.825266Z", + "shell.execute_reply": "2024-03-22T21:10:22.824451Z" + }, + "executionInfo": { + "elapsed": 3113, + "status": "ok", + "timestamp": 1696841025277, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "7Abt8nStvr9Z", + "papermill": { + "duration": 4.558, + "end_time": "2024-03-22T21:10:22.827618", + "exception": false, + "start_time": "2024-03-22T21:10:18.269618", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-03-22 21:10:20.494705: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:9261] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", + "2024-03-22 21:10:20.494767: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:607] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", + "2024-03-22 21:10:20.496499: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1515] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n" + ] + } + ], + "source": [ + "from ml_utility_loss.loss_learning.estimator.pipeline import load_lct_ae\n", + "\n", + "lct_ae = load_lct_ae(\n", + " dataset_name=dataset_name,\n", + " model_dir=os.path.join(path_prefix, \"ml-utility-loss/models\"),\n", + " model_name=\"lct_ae\",\n", + " df_name=\"df\",\n", + ")\n", + "lct_ae = None" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "6f83b7b6", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:10:22.852459Z", + "iopub.status.busy": "2024-03-22T21:10:22.851926Z", + "iopub.status.idle": "2024-03-22T21:10:22.858466Z", + "shell.execute_reply": "2024-03-22T21:10:22.857786Z" + }, + "papermill": { + "duration": 0.02084, + "end_time": "2024-03-22T21:10:22.860310", + "exception": false, + "start_time": "2024-03-22T21:10:22.839470", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "from ml_utility_loss.loss_learning.estimator.pipeline import load_rtf_embed\n", + "\n", + "rtf_embed = load_rtf_embed(\n", + " dataset_name=dataset_name,\n", + " model_dir=os.path.join(path_prefix, \"ml-utility-loss/models\"),\n", + " model_name=\"realtabformer\",\n", + " df_name=\"df\",\n", + " ckpt_type=\"best-disc-model\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "0026de74", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:10:22.885949Z", + "iopub.status.busy": "2024-03-22T21:10:22.885609Z", + "iopub.status.idle": "2024-03-22T21:10:30.941034Z", + "shell.execute_reply": "2024-03-22T21:10:30.939890Z" + }, + "executionInfo": { + "elapsed": 20137, + "status": "ok", + "timestamp": 1696841045408, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "tbaguWxAvtPi", + "papermill": { + "duration": 8.070949, + "end_time": "2024-03-22T21:10:30.943402", + "exception": false, + "start_time": "2024-03-22T21:10:22.872453", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", + " warnings.warn(\n", + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:119: ConvergenceWarning: Number of distinct clusters (6) found smaller than n_clusters (10). Possibly due to duplicate points in X.\n", + " .fit(X)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/sklearn/preprocessing/_encoders.py:868: FutureWarning: `sparse` was renamed to `sparse_output` in version 1.2 and will be removed in 1.4. `sparse_output` is ignored unless you leave `sparse` to its default value.\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "from ml_utility_loss.loss_learning.estimator.preprocessing import DataPreprocessor\n", + "\n", + "preprocessor = DataPreprocessor(\n", + " task,\n", + " target=target,\n", + " cat_features=cat_features,\n", + " mixed_features=mixed_features,\n", + " longtail_features=longtail_features,\n", + " integer_features=integer_features,\n", + " lct_ae_embedding_size=lct_ae_embedding_size,\n", + " lct_ae_params=lct_ae_params,\n", + " lct_ae=lct_ae,\n", + " tab_ddpm_normalization=tab_ddpm_normalization,\n", + " tab_ddpm_cat_encoding=tab_ddpm_cat_encoding,\n", + " tab_ddpm_y_policy=tab_ddpm_y_policy,\n", + " tab_ddpm_is_y_cond=tab_ddpm_is_y_cond,\n", + " realtabformer_embedding=rtf_embed,\n", + " realtabformer_params=rtf_params,\n", + ")\n", + "preprocessor.fit(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "a9c9b110", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2024-03-22T21:10:30.970225Z", + "iopub.status.busy": "2024-03-22T21:10:30.969883Z", + "iopub.status.idle": "2024-03-22T21:10:30.976588Z", + "shell.execute_reply": "2024-03-22T21:10:30.975784Z" + }, + "executionInfo": { + "elapsed": 13, + "status": "ok", + "timestamp": 1696841045411, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "OxUH_GBEv2qK", + "outputId": "76464c90-3baf-4bdc-a955-6f4fddc16b9c", + "papermill": { + "duration": 0.022337, + "end_time": "2024-03-22T21:10:30.978455", + "exception": false, + "start_time": "2024-03-22T21:10:30.956118", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'tvae': 36,\n", + " 'realtabformer': (19, 551, Embedding(551, 800), True),\n", + " 'lct_gan': 29,\n", + " 'tab_ddpm_concat': 12}" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "preprocessor.adapter_sizes" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "3cb9ed90", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:10:31.002771Z", + "iopub.status.busy": "2024-03-22T21:10:31.002497Z", + "iopub.status.idle": "2024-03-22T21:10:31.006952Z", + "shell.execute_reply": "2024-03-22T21:10:31.006137Z" + }, + "papermill": { + "duration": 0.018837, + "end_time": "2024-03-22T21:10:31.008840", + "exception": false, + "start_time": "2024-03-22T21:10:30.990003", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "from ml_utility_loss.loss_learning.estimator.pipeline import load_dataset_3_factory\n", + "\n", + "datasetsn = load_dataset_3_factory(\n", + " dataset_dir=os.path.join(path_prefix, \"ml-utility-loss/\"),\n", + " dataset_name=dataset_name,\n", + " preprocessor=preprocessor,\n", + " cache_dir=path_prefix,\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "ad1eb833", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:10:31.033115Z", + "iopub.status.busy": "2024-03-22T21:10:31.032802Z", + "iopub.status.idle": "2024-03-22T21:10:31.509372Z", + "shell.execute_reply": "2024-03-22T21:10:31.508461Z" + }, + "papermill": { + "duration": 0.490925, + "end_time": "2024-03-22T21:10:31.511295", + "exception": false, + "start_time": "2024-03-22T21:10:31.020370", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../insurance/_cache_aug_test/tvae/all inf False\n", + "../../../../ml-utility-loss/aug_test/insurance [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Caching in ../../../../insurance/_cache_bs_test/tvae/all inf False\n", + "../../../../ml-utility-loss/bs_test/insurance [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Caching in ../../../../insurance/_cache_synth_test/tvae/all inf False\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "../../../../ml-utility-loss/synthetics/insurance [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "1050\n" + ] + } + ], + "source": [ + "from ml_utility_loss.loss_learning.estimator.pipeline import load_dataset_4\n", + "\n", + "test_set = load_dataset_4(\n", + " dataset_dir=os.path.join(path_prefix, \"ml-utility-loss/\"),\n", + " dataset_name=dataset_name,\n", + " preprocessor=preprocessor,\n", + " model=single_model,\n", + " cache_dir=path_prefix,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "14ff8b40", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:10:31.538862Z", + "iopub.status.busy": "2024-03-22T21:10:31.538167Z", + "iopub.status.idle": "2024-03-22T21:10:31.860807Z", + "shell.execute_reply": "2024-03-22T21:10:31.859916Z" + }, + "executionInfo": { + "elapsed": 588, + "status": "ok", + "timestamp": 1696841049215, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "NgahtU1q9uLO", + "papermill": { + "duration": 0.338706, + "end_time": "2024-03-22T21:10:31.862904", + "exception": false, + "start_time": "2024-03-22T21:10:31.524198", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'Body': 'twin_encoder',\n", + " 'loss_balancer_meta': True,\n", + " 'loss_balancer_log': False,\n", + " 'loss_balancer_lbtw': False,\n", + " 'pma_skip_small': False,\n", + " 'isab_skip_small': False,\n", + " 'layer_norm': False,\n", + " 'pma_layer_norm': False,\n", + " 'attn_residual': True,\n", + " 'tf_n_layers_dec': False,\n", + " 'tf_isab_rank': 0,\n", + " 'tf_layer_norm': False,\n", + " 'tf_pma_start': -1,\n", + " 'head_n_seeds': 0,\n", + " 'tf_pma_low': 16,\n", + " 'dropout': 0,\n", + " 'combine_mode': 'diff_left',\n", + " 'tf_isab_mode': 'separate',\n", + " 'grad_loss_fn': torch.Tensor>,\n", + " 'single_model': True,\n", + " 'bias': True,\n", + " 'bias_final': True,\n", + " 'pma_ffn_mode': 'shared',\n", + " 'patience': 10,\n", + " 'inds_init_mode': 'fixnorm',\n", + " 'grad_clip': 0.7,\n", + " 'head_final_mul': 'identity',\n", + " 'gradient_penalty_mode': {'gradient_penalty': True,\n", + " 'forward_once': 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", + " 'bias_lr_mul': 1.0,\n", + " 'bias_weight_decay': 0.05,\n", + " 'loss_balancer_beta': 0.79,\n", + " 'loss_balancer_r': 0.95,\n", + " 'dataset_size': 2048,\n", + " 'batch_size': 8,\n", + " 'epochs': 100,\n", + " 'n_warmup_steps': 100,\n", + " 'Optim': torch_optimizer.diffgrad.DiffGrad,\n", + " 'fixed_role_model': 'tvae',\n", + " 'd_model': 256,\n", + " 'attn_activation': torch.nn.modules.activation.LeakyReLU,\n", + " 'tf_d_inner': 512,\n", + " 'tf_n_layers_enc': 4,\n", + " 'tf_n_head': 64,\n", + " 'tf_activation': ml_utility_loss.activations.LeakyHardsigmoid,\n", + " 'tf_activation_final': ml_utility_loss.activations.LeakyHardsigmoid,\n", + " 'ada_d_hid': 1024,\n", + " 'ada_n_layers': 7,\n", + " 'ada_activation': torch.nn.modules.activation.ReLU,\n", + " 'ada_activation_final': torch.nn.modules.activation.Softsign,\n", + " 'head_d_hid': 128,\n", + " 'head_n_layers': 9,\n", + " 'head_n_head': 64,\n", + " 'head_activation': torch.nn.modules.activation.PReLU,\n", + " 'head_activation_final': torch.nn.modules.activation.Softsign,\n", + " 'models': ['tvae'],\n", + " 'max_seconds': 3600,\n", + " 'tf_lora': False,\n", + " 'tf_num_inds': 32,\n", + " 'ada_n_seeds': 0,\n", + " 'gradient_penalty_kwargs': {'mag_loss': True,\n", + " 'mse_mag': True,\n", + " 'mag_corr': False,\n", + " 'seq_mag': False,\n", + " 'cos_loss': False,\n", + " 'mag_corr_kwargs': {'only_sign': False},\n", + " 'cos_loss_kwargs': {'only_sign': True, 'cos_matrix': False},\n", + " 'mse_mag_kwargs': {'target': 0.1, 'multiply': True, 'forgive_over': 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-03-22T21:10:31.890343Z", + "iopub.status.busy": "2024-03-22T21:10:31.890059Z", + "iopub.status.idle": "2024-03-22T21:10:31.993523Z", + "shell.execute_reply": "2024-03-22T21:10:31.992637Z" + }, + "papermill": { + "duration": 0.119468, + "end_time": "2024-03-22T21:10:31.995534", + "exception": false, + "start_time": "2024-03-22T21:10:31.876066", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../insurance/_cache_aug_train/tvae/all inf False\n", + "split df ratio is 0\n", + "../../../../ml-utility-loss/aug_train/insurance [400, 0]\n", + "Caching in ../../../../insurance/_cache_aug_val/tvae/all inf False\n", + "split df ratio is 1\n", + "../../../../ml-utility-loss/aug_val/insurance [0, 200]\n", + "Caching in ../../../../insurance/_cache_bs_train/tvae/all inf False\n", + "split df ratio is 0\n", + "../../../../ml-utility-loss/bs_train/insurance [100, 0]\n", + "Caching in ../../../../insurance/_cache_bs_val/tvae/all inf False\n", + "split df ratio is 1\n", + "../../../../ml-utility-loss/bs_val/insurance [0, 50]\n", + "Caching in ../../../../insurance/_cache_synth/tvae/all inf False\n", + "Splitting without random!\n", + "Split with reverse index!\n", + "../../../../ml-utility-loss/synthetics/insurance [400, 200]\n", + "[900, 450]\n", + "[900, 450]\n" + ] + } + ], + "source": [ + "train_set, val_set = datasetsn(model=params[\"fixed_role_model\"], synth_data=params[\"synth_data\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "2fcb1418", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "execution": { + "iopub.execute_input": "2024-03-22T21:10:32.023805Z", + "iopub.status.busy": "2024-03-22T21:10:32.023522Z", + "iopub.status.idle": "2024-03-22T21:10:32.441608Z", + "shell.execute_reply": "2024-03-22T21:10:32.440687Z" + }, + "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.43467, + "end_time": "2024-03-22T21:10:32.443626", + "exception": false, + "start_time": "2024-03-22T21:10:32.008956", + "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", + "['tvae'] 1\n" + ] + } + ], + "source": [ + "from ml_utility_loss.loss_learning.estimator.model.pipeline import remove_non_model_params\n", + "from ml_utility_loss.loss_learning.estimator.pipeline import create_model\n", + "from ml_utility_loss.util import filter_dict, clear_memory\n", + "\n", + "clear_memory()\n", + "\n", + "params2 = remove_non_model_params(params)\n", + "adapters = filter_dict(preprocessor.adapter_sizes, params[\"models\"])\n", + "\n", + "model = create_model(\n", + " adapters=adapters,\n", + " #Body=\"twin_encoder\",\n", + " **params2,\n", + ")\n", + "#cf.apply_weight_standardization(model, n_last_layers_ignore=0)\n", + "print(model.models, len(model.adapters))" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "938f94fc", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:10:32.472096Z", + "iopub.status.busy": "2024-03-22T21:10:32.471754Z", + "iopub.status.idle": "2024-03-22T21:10:32.475764Z", + "shell.execute_reply": "2024-03-22T21:10:32.474946Z" + }, + "papermill": { + "duration": 0.020448, + "end_time": "2024-03-22T21:10:32.477589", + "exception": false, + "start_time": "2024-03-22T21:10:32.457141", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "study_name=f\"{model_name}_{dataset_name}\"" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "12fb613e", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:10:32.503675Z", + "iopub.status.busy": "2024-03-22T21:10:32.503407Z", + "iopub.status.idle": "2024-03-22T21:10:32.510124Z", + "shell.execute_reply": "2024-03-22T21:10:32.509290Z" + }, + "papermill": { + "duration": 0.021921, + "end_time": "2024-03-22T21:10:32.512042", + "exception": false, + "start_time": "2024-03-22T21:10:32.490121", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "9638537" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def count_parameters(model):\n", + " return sum(p.numel() for p in model.parameters() if p.requires_grad)\n", + "\n", + "count_parameters(model)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "bd386e57", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:10:32.538436Z", + "iopub.status.busy": "2024-03-22T21:10:32.538171Z", + "iopub.status.idle": "2024-03-22T21:10:32.629566Z", + "shell.execute_reply": "2024-03-22T21:10:32.628706Z" + }, + "papermill": { + "duration": 0.107145, + "end_time": "2024-03-22T21:10:32.631711", + "exception": false, + "start_time": "2024-03-22T21:10:32.524566", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "========================================================================================================================\n", + "Layer (type:depth-idx) Output Shape Param #\n", + "========================================================================================================================\n", + "MLUtilitySingle [2, 1071, 36] --\n", + "├─Adapter: 1-1 [2, 1071, 36] --\n", + "│ └─Sequential: 2-1 [2, 1071, 256] --\n", + "│ │ └─FeedForward: 3-1 [2, 1071, 1024] --\n", + "│ │ │ └─Linear: 4-1 [2, 1071, 1024] 37,888\n", + "│ │ │ └─ReLU: 4-2 [2, 1071, 1024] --\n", + "│ │ └─FeedForward: 3-2 [2, 1071, 1024] --\n", + "│ │ │ └─Linear: 4-3 [2, 1071, 1024] 1,049,600\n", + "│ │ │ └─ReLU: 4-4 [2, 1071, 1024] --\n", + "│ │ └─FeedForward: 3-3 [2, 1071, 1024] --\n", + "│ │ │ └─Linear: 4-5 [2, 1071, 1024] 1,049,600\n", + "│ │ │ └─ReLU: 4-6 [2, 1071, 1024] --\n", + "│ │ └─FeedForward: 3-4 [2, 1071, 1024] --\n", + "│ │ │ └─Linear: 4-7 [2, 1071, 1024] 1,049,600\n", + "│ │ │ └─ReLU: 4-8 [2, 1071, 1024] --\n", + "│ │ └─FeedForward: 3-5 [2, 1071, 1024] --\n", + "│ │ │ └─Linear: 4-9 [2, 1071, 1024] 1,049,600\n", + "│ │ │ └─ReLU: 4-10 [2, 1071, 1024] --\n", + "│ │ └─FeedForward: 3-6 [2, 1071, 1024] --\n", + "│ │ │ └─Linear: 4-11 [2, 1071, 1024] 1,049,600\n", + "│ │ │ └─ReLU: 4-12 [2, 1071, 1024] --\n", + "│ │ └─FeedForward: 3-7 [2, 1071, 256] --\n", + "│ │ │ └─Linear: 4-13 [2, 1071, 256] 262,400\n", + "│ │ │ └─Softsign: 4-14 [2, 1071, 256] --\n", + "├─Adapter: 1-2 [2, 267, 36] (recursive)\n", + "│ └─Sequential: 2-2 [2, 267, 256] (recursive)\n", + "│ │ └─FeedForward: 3-8 [2, 267, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-15 [2, 267, 1024] (recursive)\n", + "│ │ │ └─ReLU: 4-16 [2, 267, 1024] --\n", + "│ │ └─FeedForward: 3-9 [2, 267, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-17 [2, 267, 1024] (recursive)\n", + "│ │ │ └─ReLU: 4-18 [2, 267, 1024] --\n", + "│ │ └─FeedForward: 3-10 [2, 267, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-19 [2, 267, 1024] (recursive)\n", + "│ │ │ └─ReLU: 4-20 [2, 267, 1024] --\n", + "│ │ └─FeedForward: 3-11 [2, 267, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-21 [2, 267, 1024] (recursive)\n", + "│ │ │ └─ReLU: 4-22 [2, 267, 1024] --\n", + "│ │ └─FeedForward: 3-12 [2, 267, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-23 [2, 267, 1024] (recursive)\n", + "│ │ │ └─ReLU: 4-24 [2, 267, 1024] --\n", + "│ │ └─FeedForward: 3-13 [2, 267, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-25 [2, 267, 1024] (recursive)\n", + "│ │ │ └─ReLU: 4-26 [2, 267, 1024] --\n", + "│ │ └─FeedForward: 3-14 [2, 267, 256] (recursive)\n", + "│ │ │ └─Linear: 4-27 [2, 267, 256] (recursive)\n", + "│ │ │ └─Softsign: 4-28 [2, 267, 256] --\n", + "├─TwinEncoder: 1-3 [2, 4096] --\n", + "│ └─Encoder: 2-3 [2, 16, 256] --\n", + "│ │ └─ModuleList: 3-16 -- (recursive)\n", + "│ │ │ └─EncoderLayer: 4-29 [2, 1071, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-1 [2, 1071, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-1 [2, 32, 256] 8,192\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-2 [2, 32, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-1 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-2 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-3 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-4 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-1 [2, 64, 32, 1071] --\n", + "│ │ │ │ │ │ └─Linear: 7-5 [2, 32, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-6 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-3 [2, 1071, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-7 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-8 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-9 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-10 [2, 64, 1071, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-2 [2, 64, 1071, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-11 [2, 1071, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-12 [2, 1071, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-2 [2, 1071, 256] --\n", + "│ │ │ │ │ └─Linear: 6-4 [2, 1071, 512] 131,584\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-5 [2, 1071, 512] --\n", + "│ │ │ │ │ └─Linear: 6-6 [2, 1071, 256] 131,328\n", + "│ │ │ └─EncoderLayer: 4-30 [2, 1071, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-3 [2, 1071, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-7 [2, 32, 256] 8,192\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-8 [2, 32, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-13 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-14 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-15 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-16 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-3 [2, 64, 32, 1071] --\n", + "│ │ │ │ │ │ └─Linear: 7-17 [2, 32, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-18 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-9 [2, 1071, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-19 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-20 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-21 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-22 [2, 64, 1071, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-4 [2, 64, 1071, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-23 [2, 1071, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-24 [2, 1071, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-4 [2, 1071, 256] --\n", + "│ │ │ │ │ └─Linear: 6-10 [2, 1071, 512] 131,584\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-11 [2, 1071, 512] --\n", + "│ │ │ │ │ └─Linear: 6-12 [2, 1071, 256] 131,328\n", + "│ │ │ └─EncoderLayer: 4-31 [2, 1071, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-5 [2, 1071, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-13 [2, 32, 256] 8,192\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-14 [2, 32, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-25 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-26 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-27 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-28 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-5 [2, 64, 32, 1071] --\n", + "│ │ │ │ │ │ └─Linear: 7-29 [2, 32, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-30 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-15 [2, 1071, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-31 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-32 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-33 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-34 [2, 64, 1071, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-6 [2, 64, 1071, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-35 [2, 1071, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-36 [2, 1071, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-6 [2, 1071, 256] --\n", + "│ │ │ │ │ └─Linear: 6-16 [2, 1071, 512] 131,584\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-17 [2, 1071, 512] --\n", + "│ │ │ │ │ └─Linear: 6-18 [2, 1071, 256] 131,328\n", + "│ │ │ └─EncoderLayer: 4-32 [2, 16, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-7 [2, 1071, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-19 [2, 32, 256] 8,192\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-20 [2, 32, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-37 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-38 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-39 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-40 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-7 [2, 64, 32, 1071] --\n", + "│ │ │ │ │ │ └─Linear: 7-41 [2, 32, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-42 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-21 [2, 1071, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-43 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-44 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-45 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-46 [2, 64, 1071, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-8 [2, 64, 1071, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-47 [2, 1071, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-48 [2, 1071, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-8 [2, 1071, 256] --\n", + "│ │ │ │ │ └─Linear: 6-22 [2, 1071, 512] 131,584\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-23 [2, 1071, 512] --\n", + "│ │ │ │ │ └─Linear: 6-24 [2, 1071, 256] 131,328\n", + "│ │ │ │ └─PoolingByMultiheadAttention: 5-9 [2, 16, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-25 [2, 16, 256] 4,096\n", + "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-26 [2, 16, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-49 [2, 16, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-50 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-51 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-52 [2, 64, 16, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-9 [2, 64, 16, 1071] --\n", + "│ │ │ │ │ │ └─Linear: 7-53 [2, 16, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-54 [2, 16, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-10 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-27 [2, 16, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-28 [2, 16, 512] --\n", + "│ │ │ │ │ └─Linear: 6-29 [2, 16, 256] (recursive)\n", + "│ └─Encoder: 2-4 [2, 16, 256] (recursive)\n", + "│ │ └─ModuleList: 3-16 -- (recursive)\n", + "│ │ │ └─EncoderLayer: 4-33 [2, 267, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-11 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-30 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-31 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-55 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-56 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-57 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-58 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-10 [2, 64, 32, 267] --\n", + "│ │ │ │ │ │ └─Linear: 7-59 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-60 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-32 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-61 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-62 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-63 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-64 [2, 64, 267, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-11 [2, 64, 267, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-65 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-66 [2, 267, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-12 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-33 [2, 267, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-34 [2, 267, 512] --\n", + "│ │ │ │ │ └─Linear: 6-35 [2, 267, 256] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-34 [2, 267, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-13 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-36 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-37 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-67 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-68 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-69 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-70 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-12 [2, 64, 32, 267] --\n", + "│ │ │ │ │ │ └─Linear: 7-71 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-72 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-38 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-73 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-74 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-75 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-76 [2, 64, 267, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-13 [2, 64, 267, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-77 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-78 [2, 267, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-14 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-39 [2, 267, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-40 [2, 267, 512] --\n", + "│ │ │ │ │ └─Linear: 6-41 [2, 267, 256] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-35 [2, 267, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-15 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-42 [2, 32, 256] (recursive)\n", + "│ │ │ │ ��� └─MultiHeadAttention: 6-43 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-79 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-80 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-81 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-82 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-14 [2, 64, 32, 267] --\n", + "│ │ │ │ │ │ └─Linear: 7-83 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-84 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-44 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-85 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-86 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-87 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-88 [2, 64, 267, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-15 [2, 64, 267, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-89 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-90 [2, 267, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-16 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-45 [2, 267, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-46 [2, 267, 512] --\n", + "│ │ │ │ │ └─Linear: 6-47 [2, 267, 256] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-36 [2, 16, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-17 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-48 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-49 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-91 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-92 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-93 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-94 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-16 [2, 64, 32, 267] --\n", + "│ │ │ │ │ │ └─Linear: 7-95 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-96 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-50 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-97 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-98 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-99 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-100 [2, 64, 267, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-17 [2, 64, 267, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-101 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-102 [2, 267, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-18 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-51 [2, 267, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-52 [2, 267, 512] --\n", + "│ │ │ │ │ └─Linear: 6-53 [2, 267, 256] (recursive)\n", + "│ │ │ │ └─PoolingByMultiheadAttention: 5-19 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-54 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-55 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-103 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-104 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-105 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-106 [2, 64, 16, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-18 [2, 64, 16, 267] --\n", + "│ │ │ │ │ │ └─Linear: 7-107 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-108 [2, 16, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-20 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-56 [2, 16, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-57 [2, 16, 512] --\n", + "│ │ │ │ │ └─Linear: 6-58 [2, 16, 256] (recursive)\n", + "├─Head: 1-4 [2] --\n", + "│ └─Sequential: 2-5 [2, 1] --\n", + "│ │ └─FeedForward: 3-17 [2, 128] --\n", + "│ │ │ └─Linear: 4-37 [2, 128] 524,416\n", + "│ │ │ └─PReLU: 4-38 [2, 128] 1\n", + "│ │ └─FeedForward: 3-18 [2, 128] --\n", + "│ │ │ └─Linear: 4-39 [2, 128] 16,512\n", + "│ │ │ └─PReLU: 4-40 [2, 128] 1\n", + "│ │ └─FeedForward: 3-19 [2, 128] --\n", + "│ │ │ └─Linear: 4-41 [2, 128] 16,512\n", + "│ │ │ └─PReLU: 4-42 [2, 128] 1\n", + "│ │ └─FeedForward: 3-20 [2, 128] --\n", + "│ │ │ └─Linear: 4-43 [2, 128] 16,512\n", + "│ │ │ └─PReLU: 4-44 [2, 128] 1\n", + "│ │ └─FeedForward: 3-21 [2, 128] --\n", + "│ │ │ └─Linear: 4-45 [2, 128] 16,512\n", + "│ │ │ └─PReLU: 4-46 [2, 128] 1\n", + "│ │ └─FeedForward: 3-22 [2, 128] --\n", + "│ │ │ └─Linear: 4-47 [2, 128] 16,512\n", + "│ │ │ └─PReLU: 4-48 [2, 128] 1\n", + "│ │ └─FeedForward: 3-23 [2, 128] --\n", + "│ │ │ └─Linear: 4-49 [2, 128] 16,512\n", + "│ │ │ └─PReLU: 4-50 [2, 128] 1\n", + "│ │ └─FeedForward: 3-24 [2, 128] --\n", + "│ │ │ └─Linear: 4-51 [2, 128] 16,512\n", + "│ │ │ └─PReLU: 4-52 [2, 128] 1\n", + "│ │ └─FeedForward: 3-25 [2, 1] --\n", + "│ │ │ └─Linear: 4-53 [2, 1] 129\n", + "│ │ │ └─Softsign: 4-54 [2, 1] --\n", + "========================================================================================================================\n", + "Total params: 9,638,537\n", + "Trainable params: 9,638,537\n", + "Non-trainable params: 0\n", + "Total mult-adds (M): 38.18\n", + "========================================================================================================================\n", + "Input size (MB): 0.39\n", + "Forward/backward pass size (MB): 307.49\n", + "Params size (MB): 38.55\n", + "Estimated Total Size (MB): 346.43\n", + "========================================================================================================================" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from torchinfo import summary\n", + "\n", + "role_model = params[\"fixed_role_model\"]\n", + "s = train_set[0][role_model]\n", + "summary(model[role_model], input_size=((2, *s[0].shape), (2, *s[1].shape)), depth=9) # 8 max" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "0f42c4d1", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:10:32.661713Z", + "iopub.status.busy": "2024-03-22T21:10:32.661417Z", + "iopub.status.idle": "2024-03-22T21:50:16.858505Z", + "shell.execute_reply": "2024-03-22T21:50:16.857483Z" + }, + "papermill": { + "duration": 2384.230615, + "end_time": "2024-03-22T21:50:16.876809", + "exception": false, + "start_time": "2024-03-22T21:10:32.646194", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3 datasets [900, 450, 1050]\n", + "Creating model of type \n", + "[*] Embedding False True\n", + "g_loss_mul 0.1\n", + "Epoch 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.03318693633812169, 'avg_role_model_std_loss': 0.5761553976163866, 'avg_role_model_mean_pred_loss': 0.009452911170182633, 'avg_role_model_g_mag_loss': 0.5073339222537147, '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.03357576689010279, 'n_size': 900, 'n_batch': 113, 'duration': 140.07320928573608, 'duration_batch': 1.2395859228826203, 'duration_size': 0.1556368992063734, 'avg_pred_std': 0.1377185063222341}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.011029714790444511, 'avg_role_model_std_loss': 0.10201651341138354, 'avg_role_model_mean_pred_loss': 0.0008927303574836721, '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.011029714790444511, 'n_size': 450, 'n_batch': 57, 'duration': 44.65146517753601, 'duration_batch': 0.7833590382023862, 'duration_size': 0.09922547817230225, 'avg_pred_std': 0.09806239102934405}\n", + "Epoch 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.008319700596491909, 'avg_role_model_std_loss': 1.3899801381037156, 'avg_role_model_mean_pred_loss': 0.00032640089475284936, 'avg_role_model_g_mag_loss': 0.08519980923169189, '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.008420131139250265, 'n_size': 900, 'n_batch': 113, 'duration': 141.50769209861755, 'duration_batch': 1.252280461049713, 'duration_size': 0.15723076899846394, 'avg_pred_std': 0.08328526641810889}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0042552733277746784, 'avg_role_model_std_loss': 0.797521198754859, 'avg_role_model_mean_pred_loss': 4.676108655203848e-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.0042552733277746784, 'n_size': 450, 'n_batch': 57, 'duration': 44.46026659011841, 'duration_batch': 0.7800046770196212, 'duration_size': 0.09880059242248534, 'avg_pred_std': 0.05082482615845245}\n", + "Epoch 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0030213647201243372, 'avg_role_model_std_loss': 0.4467241249097572, 'avg_role_model_mean_pred_loss': 2.9881127188979347e-05, 'avg_role_model_g_mag_loss': 0.03057058709777064, '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.003060984404421308, 'n_size': 900, 'n_batch': 113, 'duration': 141.14445447921753, 'duration_batch': 1.249065968842633, 'duration_size': 0.15682717164357504, 'avg_pred_std': 0.09463177754881635}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.004963098757434637, 'avg_role_model_std_loss': 0.23140327160492807, 'avg_role_model_mean_pred_loss': 0.0003732240848752491, '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.004963098757434637, 'n_size': 450, 'n_batch': 57, 'duration': 44.70943355560303, 'duration_batch': 0.7843760272912812, 'duration_size': 0.09935429679022895, 'avg_pred_std': 0.07549247669317481}\n", + "Epoch 3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0017553741914970386, 'avg_role_model_std_loss': 0.2178003895808945, 'avg_role_model_mean_pred_loss': 4.943996762005542e-06, 'avg_role_model_g_mag_loss': 0.02547209452009863, '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.001773931053143719, 'n_size': 900, 'n_batch': 113, 'duration': 141.30070185661316, 'duration_batch': 1.2504486889965767, 'duration_size': 0.15700077984068128, 'avg_pred_std': 0.09433466191939284}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.002269126343291848, 'avg_role_model_std_loss': 0.25996375590649135, 'avg_role_model_mean_pred_loss': 0.000101374774749564, '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.002269126343291848, 'n_size': 450, 'n_batch': 57, 'duration': 44.660250663757324, 'duration_batch': 0.7835131695396022, 'duration_size': 0.09924500147501628, 'avg_pred_std': 0.06720550957119517}\n", + "Epoch 4\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0011990225297955073, 'avg_role_model_std_loss': 0.19844268139087864, 'avg_role_model_mean_pred_loss': 6.492888718708172e-06, 'avg_role_model_g_mag_loss': 0.02050420185758008, '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.0012119675411183077, 'n_size': 900, 'n_batch': 113, 'duration': 141.14717173576355, 'duration_batch': 1.2490900153607394, 'duration_size': 0.15683019081751506, 'avg_pred_std': 0.09565485499601449}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0021288806346031683, 'avg_role_model_std_loss': 0.3498717648343612, 'avg_role_model_mean_pred_loss': 6.43633937075372e-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.0021288806346031683, 'n_size': 450, 'n_batch': 57, 'duration': 44.87625551223755, 'duration_batch': 0.7873027282848692, 'duration_size': 0.09972501224941678, 'avg_pred_std': 0.06606765008090358}\n", + "Epoch 5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0010727717719338317, 'avg_role_model_std_loss': 0.1799432011435814, 'avg_role_model_mean_pred_loss': 1.986284879775273e-06, 'avg_role_model_g_mag_loss': 0.019064169105970197, '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.0010836002508100744, 'n_size': 900, 'n_batch': 113, 'duration': 144.71740865707397, 'duration_batch': 1.2806850323634864, 'duration_size': 0.1607971207300822, 'avg_pred_std': 0.0960029606352997}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0025687832964791193, 'avg_role_model_std_loss': 0.24147355027886128, 'avg_role_model_mean_pred_loss': 0.00013711076116941693, '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.0025687832964791193, 'n_size': 450, 'n_batch': 57, 'duration': 44.92388701438904, 'duration_batch': 0.7881383686734919, 'duration_size': 0.09983086003197564, 'avg_pred_std': 0.06918113802053165}\n", + "Epoch 6\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0008831181887621319, 'avg_role_model_std_loss': 0.1315059885362297, 'avg_role_model_mean_pred_loss': 1.4708352961886883e-06, 'avg_role_model_g_mag_loss': 0.01531516697154277, '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.0008934507078892138, 'n_size': 900, 'n_batch': 113, 'duration': 141.82023167610168, 'duration_batch': 1.255046298018599, 'duration_size': 0.15757803519566854, 'avg_pred_std': 0.09242146539674924}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0017530873860091055, 'avg_role_model_std_loss': 0.304231248577451, 'avg_role_model_mean_pred_loss': 7.560512728054956e-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.0017530873860091055, 'n_size': 450, 'n_batch': 57, 'duration': 44.82837462425232, 'duration_batch': 0.7864627127061811, 'duration_size': 0.09961861027611627, 'avg_pred_std': 0.06672564117858808}\n", + "Epoch 7\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0005385009764318562, 'avg_role_model_std_loss': 0.07839578661780303, 'avg_role_model_mean_pred_loss': 7.117195005359047e-07, 'avg_role_model_g_mag_loss': 0.012112246143321197, '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.0005440399935145655, 'n_size': 900, 'n_batch': 113, 'duration': 141.7691547870636, 'duration_batch': 1.2545942901510052, 'duration_size': 0.15752128309673732, 'avg_pred_std': 0.09718591164368971}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0023827175304500592, 'avg_role_model_std_loss': 2.154619756286098, 'avg_role_model_mean_pred_loss': 0.00013736589136319527, '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.0023827175304500592, 'n_size': 450, 'n_batch': 57, 'duration': 46.83988165855408, 'duration_batch': 0.8217523097991943, 'duration_size': 0.10408862590789796, 'avg_pred_std': 0.06465611442723584}\n", + "Epoch 8\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0004240491726927252, 'avg_role_model_std_loss': 0.046745863687660795, 'avg_role_model_mean_pred_loss': 1.4920491366082138e-07, 'avg_role_model_g_mag_loss': 0.010413902575771013, '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.0004284947737728039, 'n_size': 900, 'n_batch': 113, 'duration': 147.48687982559204, 'duration_batch': 1.3051936267751507, 'duration_size': 0.1638743109173245, 'avg_pred_std': 0.0963774272529161}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0019166796955202396, 'avg_role_model_std_loss': 0.40897835704338553, 'avg_role_model_mean_pred_loss': 4.469346806295368e-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.0019166796955202396, 'n_size': 450, 'n_batch': 57, 'duration': 45.08631491661072, 'duration_batch': 0.7909879809931705, 'duration_size': 0.1001918109258016, 'avg_pred_std': 0.0743747265813382}\n", + "Epoch 9\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0005618307212070148, 'avg_role_model_std_loss': 0.06497306443851963, 'avg_role_model_mean_pred_loss': 5.931063866807492e-07, 'avg_role_model_g_mag_loss': 0.012489941705846124, '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.0005679361823422369, 'n_size': 900, 'n_batch': 113, 'duration': 142.84351229667664, 'duration_batch': 1.2641018787316516, 'duration_size': 0.15871501366297405, 'avg_pred_std': 0.09641832253376467}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0017379091629603257, 'avg_role_model_std_loss': 0.4798262932258854, 'avg_role_model_mean_pred_loss': 2.2975261447157275e-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.0017379091629603257, 'n_size': 450, 'n_batch': 57, 'duration': 46.893903970718384, 'duration_batch': 0.822700069661726, 'duration_size': 0.10420867549048529, 'avg_pred_std': 0.06686989114856706}\n", + "Epoch 10\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.00031843584507846066, 'avg_role_model_std_loss': 0.034923846742066104, 'avg_role_model_mean_pred_loss': 2.1399565589458585e-07, 'avg_role_model_g_mag_loss': 0.009167301410602199, '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.00032186484126011945, 'n_size': 900, 'n_batch': 113, 'duration': 144.4654381275177, 'duration_batch': 1.2784552046682982, 'duration_size': 0.16051715347501966, 'avg_pred_std': 0.10122920503526663}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0017598816551940722, 'avg_role_model_std_loss': 0.5481770304940762, 'avg_role_model_mean_pred_loss': 4.9227021056914934e-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.0017598816551940722, 'n_size': 450, 'n_batch': 57, 'duration': 45.89448928833008, 'duration_batch': 0.8051664787426329, 'duration_size': 0.10198775397406684, 'avg_pred_std': 0.0716182768922871}\n", + "Epoch 11\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0002415686168306921, 'avg_role_model_std_loss': 0.022000115441331264, 'avg_role_model_mean_pred_loss': 3.5452563263274956e-08, 'avg_role_model_g_mag_loss': 0.007707212487649586, '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.00024431025462238017, 'n_size': 900, 'n_batch': 113, 'duration': 141.62232375144958, 'duration_batch': 1.253294900455306, 'duration_size': 0.15735813750161065, 'avg_pred_std': 0.09990070720689487}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.001438923770741288, 'avg_role_model_std_loss': 0.40616633773342614, 'avg_role_model_mean_pred_loss': 1.6548902490660263e-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.001438923770741288, 'n_size': 450, 'n_batch': 57, 'duration': 44.89892363548279, 'duration_batch': 0.7877004146575928, 'duration_size': 0.09977538585662842, 'avg_pred_std': 0.07267187253098216}\n", + "Stopped False\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval loss {'role_model': 'tvae', 'n_size': 1050, 'n_batch': 132, 'role_model_metrics': {'avg_loss': 0.0004335116477921561, 'avg_g_mag_loss': 0.01439704919715214, 'avg_g_cos_loss': 0.004639643085016966, 'pred_duration': 2.322702407836914, 'grad_duration': 6.45476222038269, 'total_duration': 8.777464628219604, 'pred_std': 0.14727535843849182, 'std_loss': 2.352470396260742e-08, 'mean_pred_loss': 1.2653148928620794e-07, 'pred_rmse': 0.020820941776037216, 'pred_mae': 0.01267878245562315, 'pred_mape': 0.9071698188781738, 'grad_rmse': 0.008567946963012218, 'grad_mae': 0.004596114624291658, 'grad_mape': 0.3815285265445709}, '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.0004335116477921561, 'avg_g_mag_loss': 0.01439704919715214, 'avg_g_cos_loss': 0.004639643085016966, 'avg_pred_duration': 2.322702407836914, 'avg_grad_duration': 6.45476222038269, 'avg_total_duration': 8.777464628219604, 'avg_pred_std': 0.14727535843849182, 'avg_std_loss': 2.352470396260742e-08, 'avg_mean_pred_loss': 1.2653148928620794e-07}, 'min_metrics': {'avg_loss': 0.0004335116477921561, 'avg_g_mag_loss': 0.01439704919715214, 'avg_g_cos_loss': 0.004639643085016966, 'pred_duration': 2.322702407836914, 'grad_duration': 6.45476222038269, 'total_duration': 8.777464628219604, 'pred_std': 0.14727535843849182, 'std_loss': 2.352470396260742e-08, 'mean_pred_loss': 1.2653148928620794e-07, 'pred_rmse': 0.020820941776037216, 'pred_mae': 0.01267878245562315, 'pred_mape': 0.9071698188781738, 'grad_rmse': 0.008567946963012218, 'grad_mae': 0.004596114624291658, 'grad_mape': 0.3815285265445709}, 'model_metrics': {'tvae': {'avg_loss': 0.0004335116477921561, 'avg_g_mag_loss': 0.01439704919715214, 'avg_g_cos_loss': 0.004639643085016966, 'pred_duration': 2.322702407836914, 'grad_duration': 6.45476222038269, 'total_duration': 8.777464628219604, 'pred_std': 0.14727535843849182, 'std_loss': 2.352470396260742e-08, 'mean_pred_loss': 1.2653148928620794e-07, 'pred_rmse': 0.020820941776037216, 'pred_mae': 0.01267878245562315, 'pred_mape': 0.9071698188781738, 'grad_rmse': 0.008567946963012218, 'grad_mae': 0.004596114624291658, 'grad_mape': 0.3815285265445709}}}\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", + "del model\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=allow_same_prediction,\n", + " wandb=wandb if log_wandb else None,\n", + " study_name=study_name,\n", + " **params\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "9b514a07", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:50:16.910779Z", + "iopub.status.busy": "2024-03-22T21:50:16.910443Z", + "iopub.status.idle": "2024-03-22T21:50:16.914868Z", + "shell.execute_reply": "2024-03-22T21:50:16.914003Z" + }, + "papermill": { + "duration": 0.023507, + "end_time": "2024-03-22T21:50:16.916813", + "exception": false, + "start_time": "2024-03-22T21:50:16.893306", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "model = loss[\"whole_model\"]\n", + "opt = loss[\"optim\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "331a49e1", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:50:16.949358Z", + "iopub.status.busy": "2024-03-22T21:50:16.948812Z", + "iopub.status.idle": "2024-03-22T21:50:17.027456Z", + "shell.execute_reply": "2024-03-22T21:50:17.026679Z" + }, + "papermill": { + "duration": 0.097375, + "end_time": "2024-03-22T21:50:17.029677", + "exception": false, + "start_time": "2024-03-22T21:50:16.932302", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import torch\n", + "from copy import deepcopy\n", + "\n", + "torch.save(deepcopy(model.state_dict()), \"model.pt\")\n", + "#torch.save(deepcopy(opt.state_dict()), \"optim.pt\")" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "123b4b17", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:50:17.063805Z", + "iopub.status.busy": "2024-03-22T21:50:17.063515Z", + "iopub.status.idle": "2024-03-22T21:50:17.349423Z", + "shell.execute_reply": "2024-03-22T21:50:17.348532Z" + }, + "papermill": { + "duration": 0.305267, + "end_time": "2024-03-22T21:50:17.351502", + "exception": false, + "start_time": "2024-03-22T21:50:17.046235", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "history = loss[\"history\"]\n", + "history.to_csv(\"history.csv\")\n", + "history[[\"avg_loss_train\", \"avg_loss_test\"]].plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "2586ba0a", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:50:17.386909Z", + "iopub.status.busy": "2024-03-22T21:50:17.386632Z", + "iopub.status.idle": "2024-03-22T21:52:21.290770Z", + "shell.execute_reply": "2024-03-22T21:52:21.289942Z" + }, + "papermill": { + "duration": 123.924454, + "end_time": "2024-03-22T21:52:21.293166", + "exception": false, + "start_time": "2024-03-22T21:50:17.368712", + "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-03-22T21:52:21.330010Z", + "iopub.status.busy": "2024-03-22T21:52:21.329650Z", + "iopub.status.idle": "2024-03-22T21:52:21.350473Z", + "shell.execute_reply": "2024-03-22T21:52:21.349615Z" + }, + "papermill": { + "duration": 0.041919, + "end_time": "2024-03-22T21:52:21.352348", + "exception": false, + "start_time": "2024-03-22T21:52:21.310429", + "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
tvae0.0059720.0042820.0004346.4984890.0045960.3815290.0085681.265315e-072.3294350.0126790.907170.0208210.1472752.352470e-088.827924
\n", + "
" + ], + "text/plain": [ + " avg_g_cos_loss avg_g_mag_loss avg_loss grad_duration grad_mae \\\n", + "tvae 0.005972 0.004282 0.000434 6.498489 0.004596 \n", + "\n", + " grad_mape grad_rmse mean_pred_loss pred_duration pred_mae \\\n", + "tvae 0.381529 0.008568 1.265315e-07 2.329435 0.012679 \n", + "\n", + " pred_mape pred_rmse pred_std std_loss total_duration \n", + "tvae 0.90717 0.020821 0.147275 2.352470e-08 8.827924 " + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "metrics = pd.DataFrame(eval_loss[\"model_metrics\"]).T\n", + "metrics.to_csv(\"eval.csv\")\n", + "metrics" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "123d305b", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:52:21.385859Z", + "iopub.status.busy": "2024-03-22T21:52:21.385567Z", + "iopub.status.idle": "2024-03-22T21:52:21.761468Z", + "shell.execute_reply": "2024-03-22T21:52:21.760449Z" + }, + "papermill": { + "duration": 0.395721, + "end_time": "2024-03-22T21:52:21.764104", + "exception": false, + "start_time": "2024-03-22T21:52:21.368383", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "from ml_utility_loss.util import clear_memory\n", + "clear_memory()" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "a3eecc2a", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:52:21.799759Z", + "iopub.status.busy": "2024-03-22T21:52:21.799434Z", + "iopub.status.idle": "2024-03-22T21:54:37.075871Z", + "shell.execute_reply": "2024-03-22T21:54:37.075091Z" + }, + "papermill": { + "duration": 135.297049, + "end_time": "2024-03-22T21:54:37.078379", + "exception": false, + "start_time": "2024-03-22T21:52:21.781330", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../insurance/_cache_aug_test/tvae/all inf False\n", + "Caching in ../../../../insurance/_cache_bs_test/tvae/all inf False\n", + "Caching in ../../../../insurance/_cache_synth_test/tvae/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-03-22T21:54:37.114646Z", + "iopub.status.busy": "2024-03-22T21:54:37.114322Z", + "iopub.status.idle": "2024-03-22T21:54:37.141219Z", + "shell.execute_reply": "2024-03-22T21:54:37.140476Z" + }, + "papermill": { + "duration": 0.047164, + "end_time": "2024-03-22T21:54:37.143160", + "exception": false, + "start_time": "2024-03-22T21:54:37.095996", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import os\n", + "import pandas as pd\n", + "from ml_utility_loss.util import transpose_dict\n", + "\n", + "os.makedirs(\"pred\", exist_ok=True)\n", + "y2 = transpose_dict(y)\n", + "for k, v in y2.items():\n", + " df = pd.DataFrame(v)\n", + " df.to_csv(f\"pred/{k}.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "d81a30f1", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:54:37.176920Z", + "iopub.status.busy": "2024-03-22T21:54:37.176646Z", + "iopub.status.idle": "2024-03-22T21:54:37.182095Z", + "shell.execute_reply": "2024-03-22T21:54:37.181299Z" + }, + "papermill": { + "duration": 0.024429, + "end_time": "2024-03-22T21:54:37.184016", + "exception": false, + "start_time": "2024-03-22T21:54:37.159587", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'tvae': 0.042389741490617215}\n" + ] + } + ], + "source": [ + "print({k: sum(v[\"pred\"])/len(v[\"pred\"]) for k, v in y.items()})" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "3b3ff322", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:54:37.219070Z", + "iopub.status.busy": "2024-03-22T21:54:37.218743Z", + "iopub.status.idle": "2024-03-22T21:54:37.650044Z", + "shell.execute_reply": "2024-03-22T21:54:37.649128Z" + }, + "papermill": { + "duration": 0.451484, + "end_time": "2024-03-22T21:54:37.652371", + "exception": false, + "start_time": "2024-03-22T21:54:37.200887", + "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_pred_density_2\n", + "\n", + "_ = plot_pred_density_2(y)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "e79e4b0f", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:54:37.687630Z", + "iopub.status.busy": "2024-03-22T21:54:37.687344Z", + "iopub.status.idle": "2024-03-22T21:54:38.041620Z", + "shell.execute_reply": "2024-03-22T21:54:38.040668Z" + }, + "papermill": { + "duration": 0.374366, + "end_time": "2024-03-22T21:54:38.043763", + "exception": false, + "start_time": "2024-03-22T21:54:37.669397", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAASIAAAEmCAYAAADGL52gAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA6EklEQVR4nO3deXzU9Z348dd37skxk4OcJJBwKnJroXiiUg+sYt1Vq7SCWnUrbktZqtL9lRa3NtoKlbYu7XYXKFsoVUt1eyi1aLGiUkRArnKEKwIh5M5k7vl+f39MMpB7MpnkO0nez8djHiQzn/nOe0Lmnc/9UTRN0xBCCB0Z9A5ACCEkEQkhdCeJSAihO0lEQgjdSSISQuhOEpEQQneSiIQQupNEJITQnUnvAHpCVVXOnDlDamoqiqLoHY4QohVN02hoaCA/Px+DoeN6T79ORGfOnKGwsFDvMIQQXSgrK6OgoKDDx/t1IkpNTQXCb9LhcOgcjRCitfr6egoLCyOf1Y7060TU3BxzOBySiIRIYF11nUhntRBCd5KIhBC6k0QkhNBdv+4jioamaQSDQUKhkN6hDGhGoxGTySTTKERMBnQi8vv9nD17FrfbrXcog0JSUhJ5eXlYLBa9QxH9zIBNRKqqcvz4cYxGI/n5+VgsFvlr3Us0TcPv93P+/HmOHz/O6NGjO528JkRrAzYR+f1+VFWlsLCQpKQkvcMZ8Ox2O2azmZMnT+L3+7HZbHqHpIt/lNez/3Q9143NYkiKVe9w+o0B/2dL/jL3ncH+s1ZVjS0HKzhV7eZvR87rHU6/Mrh/c4SIo0qXD39QBaC8zoecSxE9SURCxMl5ly/ytTcQotEvI7XRkkQkRJy4vMHI10VDkgiGVB2j6V8GbGd1fzZz5kwmT57Miy++qHcoohumFWcwsSANVdNItspHqzt0rxGdPn2aL33pS2RmZmK325kwYQIfffSR3mEJ0W2KomC3GCUJxUDXRFRTU8NVV12F2WzmjTfe4MCBAyxfvpz09PRefV1/UO3w1ro63VnZQBRlu2v+/Pls3bqVlStXoigKiqJQUFDAqlWrWpTbtWsXBoOBkydPArBixQomTJhAcnIyhYWFPP7447hcrhbPee+997jmmmuw2+0UFhbyta99jcbGxm7HKKIjndXR0zV1P//88xQWFrJmzZrIfcXFxb3+ui+9c7TDx4qHJHPnlKGR7//r3VICofZ/oQrS7dx9xYWN2VZvO46nVQflNz43pluxrVy5ksOHDzN+/HieeeYZAJYvX86GDRv46le/Gim3fv16rrrqKoYPHw6Eh85//OMfU1xczLFjx3j88cd58skn+c///E8ASktLueWWW/je977H6tWrOX/+PE888QRPPPFEi5+/iN2b+85i19zk1n3CdlcW2QWjuGV8rt5h9Qu61oj+7//+jyuuuIK7776b7OxspkyZwi9+8Qs9Q9Kd0+nEYrGQlJREbm4uubm5zJ07l23btnHq1CkgPGt848aNzJ07N/K8hQsXcv3111NUVMQNN9zA9773PV5++eXI4yUlJcydO5eFCxcyevRorrzySn784x+zbt06vF5vn7/PgSYQUjl4toG6/X8htXIXReWb8QUCeofVb+haIzp27BirVq1i0aJFfOtb32LHjh187Wtfw2KxMG/evDblfT4fPt+FIdL6+vqYXnfB9aM6fMzQahXIo9eO7LBs6xUjD13VO7W5yZMnc+mll7Jhwwaefvpptm7dSkVFBXfffXekzF/+8hdKSkr4xz/+QX19PcFgEK/Xi9vtJikpiT179vDJJ5+wfv36yHM0TYsshbn00kt7JfbBwhMIgaaR4fsUW4oRc8iF1lgJyFbG0dC1RqSqKlOnTuX73/8+U6ZM4dFHH+WRRx7hZz/7WbvlS0pKcDqdkVus+1VbTIYObyajIeqy5ijKxsvcuXPZsGEDABs2bOCWW24hMzMTgBMnTvD5z3+eiRMn8tvf/padO3fy0ksvAeGlLgAul4vHHnuM3bt3R2579uzhyJEjjBzZcbIV0fH6Q1hCjdg134XfIZfMro6WrokoLy+PcePGtbjv0ksvjTRBWluyZAl1dXWRW1lZWV+E2ecsFkubbUvuv/9+9u3bx86dO3n11VdbNMt27tyJqqosX76cz372s4wZM4YzZ860eP7UqVM5cOAAo0aNanOT1fI95wmEsIZcmIwKpqZqtcFbpXNU/Yeuieiqq67i0KFDLe47fPhwpAO2NavVGtmfeiDvU11UVMT27ds5ceIElZWVqKpKUVERV155JQ8//DChUIg77rgjUn7UqFEEAgF+8pOfcOzYMf73f/+3Ta3yqaee4v333+eJJ55g9+7dHDlyhNdff50nnniir9/egOQJhLAEXZiNF2rViq9BRs6ipGsi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7abi4mJyc3PZsmVLJPHU19ezfft2vvrVr/bKazaL9n3NmDGD2tpadu7cyeWXXw7A22+/jaqqkeQSjd27dwO0SLh95eJThu+8807gwinDTzzxRLvPmTFjBlu2bGHhwoWR+956662EOpU4lvfVWigUYu/evcyePbsXI21F167yQeDkyZParl27tGXLlmkpKSnarl27tF27dmkNDQ2RMmPHjtU2bdoU+f65557T0tLStNdff1375JNPtDlz5iTk8P2UKVO07du3a++99542evToFsP3n376qTZ27Fht+/btmqZp2tGjR7VnnnlG++ijj7Tjx49rr7/+ujZixAjt2muv1estaBs3btSsVqu2du1a7cCBA9qjjz6qpaWlRYauv/zlL2tPP/10pPy2bds0k8mkvfDCC9rBgwe173znOwk7fN+d97Vs2TJt8+bNWmlpqbZz507ti1/8omaz2bT9+/f3WcySiHrZvHnzNKDN7Z133omUAbQ1a9ZEvldVVfv2t7+t5eTkaFarVbvxxhu1Q4cO9X3wnaiqqtLuu+8+LSUlRXM4HNqDDz7YIrkeP368xfs8deqUdu2112oZGRma1WrVRo0apX3zm9/UdR6RpmnaT37yE23YsGGaxWLRpk2bpn344YeRx6677jpt3rx5Lcq//PLL2pgxYzSLxaJddtll2h//+Mc+jjg63XlfCxcujJTNycnRZs+erX388cd9Gq9sAyKE0J2MmgkhdCeJSAihO0lEQgjdSSISQuhOEpEQQneSiIQQupNEJITQnSQi0a+sXbu2xU6X3/3ud1uswZs/f35kaYPoPyQRiXbNnz+/w61cFyxYgKIoLRbI9kYCKCoq4sUXX2xx37333svhw4c7fM7KlStZu3Zt5PuZM2e2WBsmEpMkItGhwsJCNm7ciMfjidzn9XrZsGEDw4YN0yUmu93eZi+kizmdzqj3BheJQxKR6NDUqVMpLCxssXHZpk2bGDZsGFOmTOnRtdurqdx5552RWtbMmTM5efIk3/jGNyJ7IUHbpllrF9fM5s+fz9atW1m5cmXkGsePH2fUqFG88MILLZ63e/duFEXp060vxAWSiESnHnroIdasWRP5fvXq1Tz44IO9/rqbNm2ioKCAZ555hrNnz3L27NluX2PlypXMmDGDRx55JHKNYcOGtXlPAGvWrOHaa69l1KhR8XoLohskEYlOfelLX+K9997j5MmTnDx5km3btvGlL32p1183IyMDo9FIamoqubm5MW0+5nQ6sVgsJCUlRa5hNBqZP38+hw4dihyxEwgE2LBhAw899FC834aIkmyMJjqVlZXFbbfdxtq1a9E0jdtuu40hQ4boHVaP5Ofnc9ttt7F69WqmTZvG73//e3w+H3fffbfeoQ1aUiMSXXrooYdYu3Ytv/zlL+NWazAYDLTegSYQCMTl2tH4yle+EumIX7NmDffeey9JSUl99vqiJUlEoku33HILfr+fQCDAzTffHJdrZmVltej3CYVC7Nu3r0UZi8VCKBTq0et0dI3Zs2eTnJzMqlWrePPNN6VZpjNpmokuGY1GDh48GPm6I3V1dZF9qJtlZmZSWFjYpuwNN9zAokWL+OMf/8jIkSNZsWIFtbW1LcoUFRXx7rvv8sUvfhGr1RpTk7CoqIjt27dz4sQJUlJSyMjIwGAwRPqKlixZwujRoxNq3+nBSGpEIioOhwOHw9Fpmb/+9a9MmTKlxW3ZsmXtln3ooYeYN28eDzzwANdddx0jRozg+uuvb1HmmWee4cSJE4wcOTLmwwoWL16M0Whk3LhxZGVlcerUqchjDz/8MH6/v09GAUXnZKtYMWj97W9/48Ybb6SsrKzNgYSib0kiEoOOz+fj/PnzzJs3j9zcXNavX693SIOeNM3EoPPrX/+a4cOHU1tbyw9+8AO9wxFIjUgIkQCkRiSE0J0kIiGE7iQRCSF0J4lICKE7SURCCN1JIhJC6E4SkRBCd5KIhBC6k0QkhNDd/wdS+FLce/7raQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from ml_utility_loss.loss_learning.visualization import plot_density_3\n", + "\n", + "_ = plot_density_3(y2[\"pred\"], next(iter(y2[\"y\"].values())))" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "745adde1", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:54:38.081795Z", + "iopub.status.busy": "2024-03-22T21:54:38.081474Z", + "iopub.status.idle": "2024-03-22T21:54:38.300460Z", + "shell.execute_reply": "2024-03-22T21:54:38.299522Z" + }, + "papermill": { + "duration": 0.24051, + "end_time": "2024-03-22T21:54:38.302646", + "exception": false, + "start_time": "2024-03-22T21:54:38.062136", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from ml_utility_loss.loss_learning.visualization import plot_box_3\n", + "\n", + "_ = plot_box_3(y2[\"pred\"], next(iter(y2[\"y\"].values())))" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "eabe1bab", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:54:38.340848Z", + "iopub.status.busy": "2024-03-22T21:54:38.340537Z", + "iopub.status.idle": "2024-03-22T21:54:38.594405Z", + "shell.execute_reply": "2024-03-22T21:54:38.593496Z" + }, + "papermill": { + "duration": 0.275425, + "end_time": "2024-03-22T21:54:38.596747", + "exception": false, + "start_time": "2024-03-22T21:54:38.321322", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAATgAAAEmCAYAAAD2o4yBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABfZklEQVR4nO2dd3xTVf/H35lddEGhLVAos+whAoIiIFVQlKGPIvKgIAKKiIqAgMpwgQiIA0Hwh+BAxfEIKkOsbBC0lL1nGW2hLXS3Wff3R5o0aZM2SUeacN6vV14k9557cxLaT7/nfJdMkiQJgUAg8ELk7p6AQCAQVBZC4AQCgdciBE4gEHgtQuAEAoHXIgROIBB4LULgBAKB1yIETiAQeC1C4AQCgdeidPcEqiMGg4GrV68SGBiITCZz93QEAkExJEkiKyuLunXrIpfbt9OEwNng6tWrREVFuXsaAoGgDC5dukT9+vXtnhcCZ4PAwEDA+OUFBQW5eTYCgaA4mZmZREVFmX9X7SEEzgamZWlQUJAQOIGgGlPWFpJwMggEAq9FCJxAIPBahMAJBAKvRezBCTwevV6PVqt19zQEFYhCoUCpVJY7TEsInMCjyc7O5vLly4i6rd6Hv78/kZGRqNVql+8hBE7gsej1ei5fvoy/vz+1a9cWQdlegiRJaDQarl+/zvnz52nWrFmpwbylIQTuFkaSJGatO4paKee1/q3cPR2n0Wq1SJJE7dq18fPzc/d0BBWIn58fKpWKixcvotFo8PX1dek+wslwC3MhLZdVey6yfMd58rV6d0/HZYTl5p24arVZ3aMC5iHwUA5dvml+rtUb3DcRgaCSEAJXHiQJjv4P8m66eyYucehyhvm5Vi826QXehxC48rBpOvwwAv54zd0zcQlhwQncxYgRIxg0aFClv48QuPLQaiAgg4Sv4Uycu2fjFDq9gSNXMs2vNTohcFVFr169eOmll9w9jVsCIXDlocEd0HWs8fmvL0JBlnvn4wRnrmeTZ+FY0AgLTuAknhBcLQSuvPSZASENIeMS/Dnb3bNxmEOXMqxee8MSVZIkcjU6tzwcDTQeMWIE27Zt48MPP0QmkyGTyahfvz5LliyxGpeQkIBcLufixYsALFy4kLZt2xIQEEBUVBTjxo0jOzvb6pqdO3fSo0cP/Pz8iIqKYsKECeTk5Dg0r6SkJPr374+fnx+NGjVi9erVREdHs2jRIvMYmUzGkiVLGDBgAAEBAbzzzjvo9XpGjRpFo0aN8PPzIyYmhg8//NDq3nq9nokTJxISEkKtWrWYMmVKlQVmizi48qIOgAEfwZcD4Z/l0HowRN/p7lmVyaErN61ea3We72TI0+ppNWOTW9772Jt98VeX/ev04YcfcurUKdq0acObb74JwIIFC1i9ejXPPfecedw333zDnXfeScOGDQFjyMRHH31Eo0aNOHfuHOPGjWPKlCl8+umnAJw9e5Z+/frx9ttvs2LFCq5fv8748eMZP348X3zxRZnzevLJJ0lNTWXr1q2oVComTpzItWvXSoybNWsWc+fOZdGiRSiVSgwGA/Xr1+eHH36gVq1a7N69mzFjxhAZGcljjz1m/nwrV65kxYoVtGzZkgULFvC///2Pe+65p+wvtpwIgasIGveC256C/atg3Xh4dheo/d09q1Kx9KCCWKJWFcHBwajVavz9/YmIiABg2LBhLFiwgMTERBo0aIDBYOC7777j9ddfN19nuWcXHR3N22+/zbPPPmsWuDlz5jBs2DDzuGbNmvHRRx/Rs2dPlixZUmqg7IkTJ/jzzz/5559/uP322wH4/PPPadasWYmxTzzxBCNHjrQ6Nnt20cqlUaNG7NmzhzVr1pgFbtGiRUybNo2HH34YgKVLl7JpU9X8IRICV1Hc9xac3gzp52DLO9D3HXfPyC4FOj3Hk4wOBn+1glyN3iucDH4qBcfe7Ou293aVDh060LJlS1avXs3UqVPZtm0b165d49FHHzWP+fPPP5kzZw4nTpwgMzMTnU5Hfn4+ubm5+Pv7c/DgQQ4dOsQ333xjvkaSJAwGA+fPn6dly5Z23//kyZMolUpuu+0287GmTZsSGhpaYqxJAC1ZvHgxK1asIDExkby8PDQaDR06dAAgIyODpKQkunbtah6vVCq5/fbbq2SZKvbgKgrfYHhokfH535/CpX/cOp3SOJGUhVYvEeqvokFNo6XpDXtwMpkMf7XSLY/yZlMMGzaM1atXA7B69Wr69etHrVq1ALhw4QIPPvgg7dq146effiI+Pp7FixcDoNFoAGPRgbFjx3LgwAHz4+DBg5w+fZomTZqUa26WBAQEWL3+7rvvmDRpEqNGjeKPP/7gwIEDjBw50jwvdyMEriJp3hfaPQ6SAdY+D7oCd8/IJqb4t3b1Q/BRGn8EvEHgPAW1Wo1eb50a98QTT3DkyBHi4+P58ccfGTZsmPlcfHw8BoOBBQsWcMcdd9C8eXOuXr1qdf1tt93GsWPHaNq0aYlHWdU4YmJi0Ol0JCQkmI+dOXOGGzdulPlZdu3aRffu3Rk3bhwdO3akadOmnD171nw+ODiYyMhI9u7daz6m0+mIj48v894VgRC4iqbfHAioA6knYds8d8/GJqb9t3b1g1EphMBVNdHR0ezdu5cLFy6QmpqKwWAgOjqa7t27M2rUKPR6PQMGDDCPb9q0KVqtlo8//phz587x1VdfsXTpUqt7vvrqq+zevZvx48dz4MABTp8+zdq1axk/fnyZ82nRogWxsbGMGTOGffv2kZCQwJgxY/Dz8yvTMm3WrBn//vsvmzZt4tSpU7zxxhv884/16uXFF19k7ty5/PLLL5w4cYJx48Zx8+ZNx7+wciAErqLxrwn9Fxif7/wAkg66dz42KBK4ELPAaUSqVpUxadIkFAoFrVq1onbt2iQmJgLGZerBgwcZPHiwVXWU9u3bs3DhQt577z3atGnDN998w5w5c6zu2a5dO7Zt28apU6fo0aMHHTt2ZMaMGdStW9ehOX355ZeEh4dz9913M3jwYEaPHk1gYGCZVTzGjh3Lww8/zJAhQ+jatStpaWmMGzfOaswrr7zC8OHDeeqpp+jWrRuBgYEMHjzYoXmVF5kkKgWWIDMzk+DgYDIyMlzvqrXmKTj2C0S0hdFbQKGq0Dm6Sq5GR5uZmzBIsG96Hyb/eIhtp64z/9H2/KeT/f6S1ZH8/HzOnz9Po0aNXC6nI7DN5cuXiYqK4s8//6RPnz5umUNp/7+O/o4KC66yeOB98AuF5MOwa5G7Z2PmyJVMDBJEBPlSJ8hXLFEFAPz111+sW7eO8+fPs3v3bh5//HGio6O5++673T21ciEErrKoUQfuL9yD2zYPrh1373wKKXIwBAOgVhr3WITAeS87duygRo0adh9gTLuaPn06rVu3ZvDgwdSuXdsc9OvJiDi4yqTto3DkJzi10ehVHbUZ5K7HS1UEBy0cDEDRHpwXxMEJbHP77bdz4MCBUsf07duXvn3dE0NYmQiBq0xkMnjwA1i8G67EG+Pjur/g1ikdtggRAQuBExac1+Ln50fTpk3dPQ23IJaolU1Q3aKshr/ehrSzpY+vRDJytVxIywUsl6iFe3BekIsqEBRHCFxV0HG4MV9Vlw/rXgCDe6wlU4J9w1r+hPgbgz/Vwskg8GKEwFUFMhk89BGoAuDiLvj3/9wyDcv4NxMqhXAyCLwXIXBVRWhDiJ1lfL55Jty4WOVTOHjpJgDt6gWbj4k9OIE3IwSunBgrNji4f9X5GWjQDbQ5xgrAVRxjffiKtQcVivbghBdV4I0IgSsHccdTePDjnfyccMWxC+RyGPAJKH3h3BZjL4cq4lpWPkkZ+chl0MaGBSeWqJ6DrUq7v/zyi9vmU50RAlcOTqZkcfRqJku3nXXcigtrCr0Lu3Bteg0ykypvghaYSpQ3rVODAJ+i6KAiJ4PwonoqSUlJ3H///e6eRrVECFw5+O8dDQn0UXLmWjZ/HEtx/MJuz0O9TlCQAb+9XCVL1UPF4t9MmJwMYg/Oc4mIiMDHx8etc5AkCZ1O59Y52EIIXDkI8lUxvJuxZv6SrWccr1AqV8DAxSBXwakNxmyHSqZ4BoMJtdKYWeEVe3CSBJoc9zyc/COVlZXFsGHDCAgIIDIykg8++MDldoKWS9QLFy4gk8n4+eef6d27N/7+/rRv3549e/ZYXVNWg5qvvvqK22+/ncDAQCIiInjiiSesejRs3boVmUzGhg0b6NSpEz4+PuzcudPpuVc2IpOhnDx9VyP+b+d5Dl7OYPfZNO5sGubYhXVaQs9XYcvbsH4yNOoJNWpXyhwlSbJwMIRYnfOqMBFtLrzrWHmgCmf6VWMDIgeZOHEiu3btYt26dYSHhzNjxgz2799vLvVdXl577TXmz59Ps2bNeO211xg6dChnzpxBqVQ61KBGq9Xy1ltvERMTw7Vr15g4cSIjRoxg/fr1Vu8zdepU5s+fT+PGjW2WOHc3QuDKSVgNHx7vHMWqPRf5dOsZxwUO4K6X4NhaSDkMGybDoysrZY6Xb+SRnqNBpZDRMjLQ6pxaVPStcrKysli1ahWrV682lyL64osvHK7d5giTJk2if//+gLEpTOvWrTlz5gwtWrRwqEHN008/bb5X48aN+eijj+jcuTPZ2dnmBH2AN998k3vvvbfC5l3RCIGrAEbf3Zhv9iay60waBy/dpH1UiGMXKlQw8BNYfg8c/R+0fhhaDSj7OicxBfi2iAjCR2md7G/2onpDqpbK32hJueu9HeTcuXNotVq6dOliPhYcHExMTEyFTaddu3bm55GRkQBcu3aNFi1aONSgJj4+nlmzZnHw4EFu3LiBoTD7JjExkVatWpmvs9WEpjohBK4CqB/qz4AOdfl5/xU+3XqGz4Y78Z9et4PRktuxAH5/BaLvMlYFrkCKl0iyxORFLfAGC04mc2qZ6M1YljkylR03iZSpQc2ECRNKXNegQQNycnLM1UW++eYbc9Xhvn37lmgmU7wJTXVDOBkqiOd6GjsXbTqawumULOcuvnsKhMVAzjXYNL3C53awFIFTmZPtvUDgPITGjRujUqmsehdkZGRw6tSpKnn/shrUnDhxgrS0NObOnUuPHj1o0aKFzSbQnoAQuAqiWXgg97UKB2DJNicrhqh8jV5VZHDwW2N/1QrCYJA4csXYA7W4gwG8zMngIQQGBvLUU08xefJktmzZwtGjRxk1ahRyubzc7QcdoawGNQ0aNECtVpub3Kxbt4633nqr0udVGQiBq0DG9TbW3Fp34CqXb+Q6d3FUZ2N8HBjTuPIzK2RO51JzyC7Q4auS06xOjRLnRTUR97Bw4UK6devGgw8+SGxsLHfeeSctW7askt4SZTWoqV27NitXruSHH36gVatWzJ07l/nz51f6vCoDsQdXgXSICqF7k1rsPpvG8u3nmD2wjXM36P0anPgdbpyHzTOKGkmXA9P+W5u6wSgVJf+eFXlRvcDJ4EEEBgZabfLn5OQwe/ZsxowZU+a1Fy5csHptGX8ZHR1dIh4zJCSkxLHOnTvzxx9/2H2PoUOHMnToULvv06tXryrpTF9ehAVXwYzrZbTivvvnEqnZTjZ+VvsbvaoA8V/AuW3lno+tEkmWmLyoBWIPrkpJSEjg22+/5ezZs+zfv9/c6HngwIFunpl3IQSugrmzaS3a1Q+mQGfgi13nnb9B9F1w+yjj83UvGKPky0FpDgYQyfbuZP78+bRv357Y2FhycnLYsWMHx48fL7NBjMBxxBK1gpHJZIzr1YRnv97Pl3su8mzPJgT6OtmZ6N7ZcPoPuHkR4t6C++e6NBet3sCxqyYHg22BE3tw7qFjx47Ex8eXOJ6Xl1dmgxiB4wiBqwTuaxVBk9oBnL2ew9d/J/JcrybO3cAn0Lj/9vUjsHcptB4EDe5weh6nUrIo0BkI9FUSXct2vJLIZKhe3MoNYioDty9RFy9eTHR0NL6+vnTt2pV9+/bZHXv06FEeeeQRoqOjkclkVjWxTMyaNQuZTGb1aNGiRSV+gpLI5TKeK9yL+7+d58nX6p2/SdNY6PBfQIK140Gb7/QtDlkk2MvltsMPisJEnCjcWc3whM1ugfNUxP+rWwXu+++/Z+LEicycOZP9+/fTvn17+vbtazeoMDc3l8aNGzN37lwiIiLs3rd169YkJSWZH+6ocjCwQ13qhfiRml3AD/GXXbtJ37ehRgSknYZtzi9T7ZVIssQU6AugdVMzHFdRKAoroRSLrhd4B7m5xlCr8jSfdusSdeHChYwePZqRI0cCsHTpUn7//XdWrFjB1KlTS4zv3LkznTt3BrB53oRSqSxVAKsClULO6B6NmPXrMZZtP8vQzlE2wzRKxS/U2Ff1u6Gw6yNoOQDq3ebw5QcLi1xa9mAojtpiTlq9hI8HbVoolUr8/f25fv06KpUKudztCxJBBSBJErm5uVy7do2QkBDzHzJXcNuPs0ajIT4+nmnTppmPyeVyYmNjS9SucpbTp09Tt25dfH196datG3PmzKFBgwZ2xxcUFFBQUBTSkZlZMUG2Qzo34OO/znApPY/fDiUxqGM952/S4gFo84ixZtza8TBmKyjVZV6Wr9VzsjBlrF0pyf8qS4HTGcC9dROdQiaTERkZyfnz57l4seqb+Agql5CQkHIbKm4TuNTUVPR6PeHh4VbHw8PDOXHihMv37dq1KytXriQmJoakpCRmz55Njx49OHLkCIGBgTavmTNnDrNnz3b5Pe3hp1Yw8s5o5v9xiiVbzzKgfV27e2Glcv88OLcVrh2FnQuhl33r1cSxpEz0BomwGmrqBtuPjlfIZSjkMvQGySMdDWq1mmbNmollqpehUqnKZbmZ8KAFiWNY1qZv164dXbt2pWHDhqxZs4ZRo0bZvGbatGlMnDjR/DozM5OoqKgKmc/wbtEs3XaOkylZ/HXiGrGtwsu+qDgBYfDA+/Dj07D9fWjxIESUniVxyNQisH5ImfmNKoVR4Kp7sO/iLWeIrhVA/3aRVsflcnmVpDgJPA+3bVqEhYWhUChISbHuZZCSklKh+2chISE0b96cM2fO2B3j4+NDUFCQ1aOiCPZTMewO4/J4sTNlzYvT+mGjsBl0sPZ50Jde//6QnRLltvCEYN9L6bm8v+kkM9YecfdUBB6E2wROrVbTqVMn4uLizMcMBgNxcXF069atwt4nOzubs2fPmov+uYNRdzVCrZSTkHiTv8+lu3YTmQz6LwDfYEg6AHs+KXV4WRkMlnhCZ61cjTHUJiu/+jU2EVRf3Op2mjhxIsuXL2fVqlUcP36c5557jpycHLNX9cknn7RyQmg0Gg4cOMCBAwfQaDRcuXKFAwcOWFlnkyZNYtu2bVy4cIHdu3czePBgFApFicThqqROoC+PdqoPwKdb7VuSZRIYAf0Kw0W2vAupp20Oy8rXci7VmOJVWoiICU8I9jXNTaM3eGy8nqDqcavADRkyhPnz5zNjxgw6dOjAgQMH2Lhxo9nxkJiYSFJSUd/Qq1ev0rFjRzp27EhSUhLz58+nY8eOPPPMM+Yxly9fZujQocTExPDYY49Rq1Yt/v77b2rXrpyGLo4y9u4myGWw43QqhwuXjy7RfqgxCFhfYFyqGkoGER++koEkQb0QP8JqlO0W9YSEe72FqFXneQqqF253Mpi6+dhi69atVq9tlYIpznfffVdRU6tQGtTyZ0D7uvxy4CpLtp3h02GdXLuRTAYPLoJP74BLe2HfcrjjWashh53YfwPPKHqpswhCLtDp8VOX38Mm8H5EZGQVYkrf2nAkmbPXs12/UUgU3Pum8XncbEi3rlpSVomk4niCk0FnsT+Yr62+8xRUL4TAVSExEYHEtqyDJMFnzpY1L06nkRDdw9gLdN0LVo2HnXEwAPh4wB6czmqJ6kJur+CWRAhcFWOy4v6XcIWkjDzXbySXw4CPQOkHF3ZA/EoA0rILuHzDeN82paRoWWKy4DTVuHWgpcAJC07gKELgqphODUPp2qgmWr3E8u0uFMS0pGZj6DPD+PyPNyDjMocKO9g3Dgsg2M+xJGWzwFVnC05vvQcnEDiCEDg3YGpO8+2+RNJzypli1HUs1O8Cmiz47WUOmzMYHLPewDNaBwoLTuAK5RK47OxsMjMzrR6Csrm7WRit6waRp9WzcveF8t1MrjC2HFT4wOk/8D/xI+C4gwE8o6qvpZNBWHACR3Fa4M6fP0///v0JCAggODiY0NBQQkNDCQkJITQ0tDLm6HUYy5obrbhVuy+QXVDO6PzazaHXqwA8mrqY2tx0yoJTKz0rTERYcAJHcToO7r///S+SJLFixQrCw8OrpFGtN9KvTQSNwwI4l5rDt3sTGX134/LdsPsEtId/IfjaId5Wf0HryCEOX+oJgb7CghO4gtMCd/DgQeLj44mJiamM+dwyKOQyxvZszKs/HWb5jnM82b0hPspyBK8qVOxr9xZdNj9MX/k/cOZXaD3YoUtVHpCLKiw4gSs4vUTt3Lkzly5dqoy53HIM7lifiCBfrmUV8FP8lXLfb1d2BJ/qC/tq/j4JctIcus4TclFFHJzAFZy24D7//HOeffZZrly5Qps2bUrUS2/Xrl2FTc7bUSvljL67MW/9dozPtp/lsdvrO1/W3ILDVzL4WzeIp0IOEZJ9BjZOhUeWlz0PD3MyCAtO4ChOC9z169c5e/asueIHGDfNJUlCJpOh14u/rs4wtEsUn/x1motpuaw/ksyA9nVduo8kSRy6nIEWJal9PiBk3UA4vAbaPAwx95d6rSkXVVOd9+CEBSdwAafNhaeffpqOHTuyZ88ezp07x/nz563+FTiHv1rJiO6NAFiy9azLBTEvpuWSkadFrZDToO1d0P0F44nfXoa8m6Ve62mBvsKCEziK0xbcxYsXWbdunWhOW4E81b0hy7af5XhSJltPXqd3izpO38OUf9qybpBxT63XNDj+G6SfhT9eh4H2C2SKPTiBt+K0BXfPPfdw8ODBypjLLUuIv5onuhrLmrtaENNUQaS9Kf5N5WcMAEYGCV/B2b/sXmv2olbnXFTLMBFhwQkcxGkL7qGHHuLll1/m8OHDtG3btoSTYcCAARU2uVuJZ3o0ZtXui/xz4Qb/XEinc3RNp64/bKtEUsNu0GUM7PsM1r0I43aDT8nOYpXtZNhx+jpv/3acuY+0pWMD14LBi9eDEwgcwWmBe/ZZY3HFN998s8Q54WRwnfAgXx7pVI9v913i0y1n+GJkF4ev1Rskjly1U+Syzww4tQFuJsKfs6H//BLXm5wMBZUkcL8dTOJkShYbjySXQ+CEF1XgPE4vUQ0Gg92HELfyYSprvuXkdY5ddTyv98y1bHI1evzVCprUrmF90qcGDPjY+Pyf5XBxd4nr1YUBxpWVbH8zz1hQIK0chQVENRGBKzglcFqtFqVSyZEjonVbZRAdFsADbY3dv5Y4URDT5GBoUy8Yha3G0o17wW1PGZ+vfR40uVanK7tkeUaeFqBclVOEBSdwBacETqVS0aBBA2GpVSLP9WoCwO+HrnKhsDNWWRwqFLj2pSXY3/cWBNaF9HOw9V2rU0Ve1MpxMmTkGYsJlM+CE15UgfM4vUR97bXXmD59OunpLvb3FJRK67rB9IqpjUGCz7Y7Fldo08FQHN9geGiR8fmexXD5X/Opooq+lWMZZRZacGnZBS7fQ1hwAldwWuA++eQTtm/fTt26dYmJieG2226zegjKz/OFBTF/ir9MSmZ+qWM1OgPHk7IAB4pcNu8L7YaAZDAuVXVGwansQN8KWaKKPTiBCzjtRR00aFAlTENgSefomnSODuWfCzf4fMc5Xuvfyu7YE8mZaPQGQvxVNKjpX/bN+801xsRdPwHb34d7Xq/UQF+d3mCud5er0ZOv1eOrcr5qil5YcAIXcFrgZs6cWRnzEBRjXK+mjFz5D9/sTeT53k0J8VfbHHewcHnatl6wY7X5/GtC/wWw5knYsRBaDkClMOa/VobAZeZbF/NMy9FQL8TP6ftoRSaDwAVcLl0RHx/P119/zddff01CQkJFzkkA9IqpTcvIIHI1elbtvmh33KHCHgztnShRTquBxoekh7XP4yMzCkZFOBkupeda7eWZlqcm0rNdW6aKXFSBKzgtcNeuXeOee+6hc+fOTJgwgQkTJtCpUyf69OnD9evXK2OOtyQymczsUV25+zy5GttlzQ852cXezAPzwS8Ukg9R96ixpFJ5nQw/xV+mx7wtvPnbUfOx4gKXmuOao8EqF1UrLDiBYzgtcC+88AJZWVkcPXqU9PR00tPTOXLkCJmZmUyYMKEy5njL8kCbCBrW8udGrpZv95UsMpqr0XH6msnBEOLczWvUgfvnARCe8CFNZZfL5WS4cjOPmeuMwnY6Jdt8vFIsuGpc1klQvXBa4DZu3Minn35Ky5YtzcdatWrF4sWL2bBhQ4VO7lZHqZAz9m6jFff5jnMlLKyjVzMxSFAn0IeIYF/n36Dto9CsL3KDhvdVy9DrtGVfYwNJknj1x0NmZ0K+hYVVQuBc9KRaWnAancHlslKCWwuXUrWKJ9iDMQjYYBB/WSuaRzrVo06gD0kZ+fySYF3W/KC5B2qIazeXyeDBDzCoA+koP8Pj+t9dus3XexPZeSbV/DqvFIFzNdhXV2x/sDo3yBFUH1wql/Tiiy9y9epV87ErV67w8ssv06dPnwqdnAB8lAqe6WEsiLl021mrcIkSJZJcIbgemXfPAmCC7DtIczxFDCAxLZc5648D8FBhNWJLgcssYcG5tgdn+blBlEwSOIZLgb6ZmZlER0fTpEkTmjRpQqNGjcjMzOTjjz+ujDne8jzRtSHBfirOpeaw6Wiy+bgpRatdVEi57q9v/1926lvjK9MirRsPDlriBoPEpB8PkqvRc0fjmowtbH2YpynpRQ30MUYkpbm4B6ctNqd8ESoicACnBS4qKor9+/fz+++/89JLL/HSSy+xfv169u/fT/369Stjjrc8NXyUPNWtIWAsiClJEhm5Wi6kGZPm29YrhwUHqFQKpupGkyP5ILu4G+JXOHTdF7svsO98OgFqBe//pz0BhSJmtQeXaxS4RrUDANeXqMKC8y6SM/KZ/MNBjlzJqNT3cTrQF4whDPfeey/33ntvRc9HYIcRdzZi+Y7zHLmSyY7TqcgLg3qjavpRM8B2ELCjqBVyLkt1eE/3OG+qVsHmmdDsPghpYPeas9ezmbfxBADT+7ckqqY/yRnGtDJbe3CNwwI4dDnDZSdD8Rg9YcF5Nmv+vcQP8ZfRGSQ+GNKh0t7HJYGLi4sjLi6Oa9eulXAsrFjh2F9/gXPUDFAztEsDVuw6z6dbz9CjWW2gHA4GC0y5qF/p72VGoxMoL++FX1+E//5sdEQUQ6c38MqagxToDPRoFsYTXYxC6FeYgqU3SGj1BlQKuVngGoUZ69S57EUtFsIiLDjPxlQpp6xc6/Li9BJ19uzZ3HfffcTFxZGamsqNGzesHoLKY/TdjVApZPx9Lp01/xrj4srlYChEIZehkMuQkJNx7weg9DXmqx74xub4ZTvOceDSTQJ9lLz3SDtzipivuujHyWTFmQWucImaXaCzWsI6SvElqrDgPJsLaUaBSy1HhRlHcNqCW7p0KStXrmT48OGVMR9BKUQG+zG4Yz3W/HuZi4X7bxVhwYGx6KXeIJEX1Ah6T4fNM2DjdGjSB4IizeNOJmexaPNpAGY81Iq6FnmlaoUcuQwMEuRr9AT5qswCVz/UD6Vchs4gkZ6jsbrOEYo7GYQF59kkpht/fq9nVa7AOW3BaTQaunfvXhlzETjA2J5NzKtGmcxYxbciMHfW0ktwx/NQ9zYoyDD2VS0MqtXqDUxccwCN3kCfFnX4Tydrp5JMJjMvU00WnClMJMRPZd4rdGWZqi/cgzMVLHbFChRUD7ILdKQWetNv5GorteG40wL3zDPPsHr16sqYi8ABmtSuwf1tIszPa/i4tI1aAqvOWgqlseWgXGVsWHPkJwAWbznD0auZBPupmPNwW5vVS/zURQKnN0hkFWY3BFsInCueVFM1EdPnzRUC57FcTLOuVJ3mYmykIzj925Gfn8+yZcv4888/adeuXYmshoULF1bY5AS2eeW+GM5ey+G/haEjFYGpJpz5r2l4K+g5Bba8AxumcNzvNj75y9iz9c2BrakTZDs1zFTrLU+jtwryDfJTUauGyYJz/gdabyFwmfk6JnybQE6BjqFd7Ht6BdWTxDTrniCpWRoig50voeUITgvcoUOH6NChA0CJ5jMO1SMTlJsmtWuw6eW7K/SeNqv63vUyHFsHKYdJ+X4COsNz3N8mggGFGQu2sFyimvbfAtQKVAo5tQJ8ANeCfU216gIsLNZpPx8WAueBXEy3Frjr2flAxWy1FMdpgduyZUtlzEPgZsydtSz3QxQqGPgJhmX30Eu7g//438G0QZNL/UNmWqLmWwhcsJ/Ryi/PEtVkwQVU0JJc4D6KL1Er09HgcsFLgXdh5WSwIEHXkKW6/gC8rV5JLXnpnb6KlqgGs8AFFQpcLZOTwQULzpRsX1F7jgL3YYoA8CncFjE5HCjItneJywiBEwBFP2wai5aQ+Vo9r/xwkA91D5OsboBv/nXY9Fqp9/G1sUQ1W3A1yuNkMC1Rne/nIKhemASufWEO9fWsAtDrYNVD8OPTkJNWYe8lBE4AWLYOLLLg5m86ybnrOQQHBhLw6FJABgdXw+nNdu/jpzLex5bAmS04J50MBoNkilQRS1QPp0Cn52pGHgCdo0OBQoH7ezFc3Q+n/wS9693XiuN2gVu8eDHR0dH4+vrStWtX9u3bZ3fs0aNHeeSRR4iOjkYmk7Fo0aJy31NgRKWw7qy173w6/7frPABzH2lLYLM74Y5xxsG/vgj5mTbvY3Iy5GtsCFyNQieDkxacZZCvWKJ6Npdv5CFJ4K9W0CIiCADlzTPw1zvGAf3etQosLy9OC9z27dvR6Ur2B9DpdGzfvt2pe33//fdMnDiRmTNnsn//ftq3b0/fvn25du2azfG5ubk0btyYuXPnEhERUSH3FBhRWbQOzNXomPzjQSQJHu1Un3tahBsH3fM6hDaCzCvwp+3uapZxcJl2nAzO7sFZpmnZs+B0egMfxZ0m/qJoSF6dMYWINKjpT+1AH2QYGJX2AegLoMk90GFYhb6f0wLXu3dvm13tMzIy6N27t1P3WrhwIaNHj2bkyJG0atWKpUuX4u/vbzdhv3Pnzrz//vs8/vjj+Pj4VMg9BUYsA33nbjjBxbRc6gb78sZDFj1Z1f4woLDm378r4HzJP2il7cGZlqhZBTqnWv9ZOj7sWXC7z6axcPMp5m444fB9BVWPKQc1ulYAtQN9GK7YTDvDMVDXgIc+tFncoTw4LXCSJNkME0hLSyMgIMDh+2g0GuLj44mNjS2ajFxObGwse/bscXZalXbPWwW10vh/uvXkdb7cY2xT+N5/2hHkW6w8faMecPvTxufrXgCNtVfVvES1FDh/4z2CfFUoCnOtbuQ43v/ByoJT23YymEo15WpEhkN1xuRgaFjLnzr6ZF5VfgeA9p5ZpZbnchWHNzQefvhhwBjMO2LECCsLSq/Xc+jQIadyVFNTU9Hr9YSHh1sdDw8P58QJ1/4Ku3rPgoICCgqKNr4zM23vL3kzpj24DUeMFYOHdW1gLslUgtjZcOoPuHEB/nob+s0xn7IpcIUWnFwuo2aAmutZBaRmFzjcKMdUKkkuK1oCF8e0r1es6IigmmFKsm9Q048amyYgkxWw19CCus2GElUJ7+ewBRccHExwcDCSJBEYGGh+HRwcTEREBGPGjOHrr7+uhClWPnPmzLH6PFFRlfFVV29MAgfGIprTH2hpf7BvkHE5AfD3Ekjcaz5l3oOzcDKY4uDA0pPq+D6cqaOWUiE3L4GLY/LMim5b1RvTErXrjd+Rnd9GPmqmaMdw3QmL3hkctuC++OILAKKjo5k0aZJTy1FbhIWFoVAoSElJsTqekpJi14FQWfecNm0aEydONL/OzMy85UTOUuAsy4/bpVmscUP4wDew9nl4dieofEvdgwNcqihiCvJVymXmeL3imNK/hL5VX/QGicvpeUSQRuMEo9W/OuBJLuZHVFo2g9N7cDNnziy3uAGo1Wo6depEXFyc+ZjBYCAuLo5u3bpV6T19fHwICgqyetxqRNfyB+CZuxpxR+Najl3U9x2oEQ5pp2Hbe4BlLqqhVIFzJlTEFCailMvwsWPBFS1RhcJVV5Iz89Ho9cxV/x9yTRbUu509tR8DKq/wpdMCl5KSwvDhw6lbty5KpRKFQmH1cIaJEyeyfPlyVq1axfHjx3nuuefIyclh5MiRADz55JNMmzbNPF6j0XDgwAEOHDiARqPhypUrHDhwgDNnzjh8T4Ftnr6rEb+9cBev9S9laVocv1B48APj810fwtUE8xI1p0BHVn5RqSQTrgT76i2WqHYtuML7CYGrvlxMzWGQfBe95AdAoYaBiwkLMv5hrSwLzumoyREjRpCYmMgbb7xBZGRkuSqIDBkyhOvXrzNjxgySk5Pp0KEDGzduNDsJEhMTkcuLfqCvXr1Kx44dza/nz5/P/Pnz6dmzJ1u3bnXongLbqBRy14pntugPbR4x1oxbOx7/u78HrGvtWwlcDecripiCj5Vymf09OLFErfakJCUyU/Wl8UXPV6FOC2oHngKqkcDt3LmTHTt2mEsmlZfx48czfvx4m+dMomUiOjraoU3k0u4pqATunwfntkLKEZqcWg504Vqm8QfWv7BUkglXlqgmC05VzIIzVUCRJIlUsUSt9rRMeItQWTZX/ZpT984XAagdaPyDdy2rgI/jThMe7MuA9nXt/iFzFpf6ogpPlcCKgDCjyAH1Di8mRpZoritnab2Ba15UU6CvopgFpyy07nM0enOhThEmUk05+gst0v9CKynY1+5NYykuoHZhAYYz17JZsPkUU348VKGxvk4L3KJFi5g6dSoXLlyouFkIPJ82j0BMf+QGLfNUy1BgDLgtLnCueFGL9uCsvajKwqBhy9QvYcFVQ3LTYf0kAJboHyIw+jbzKZMFd76wjWBYDTU+yoqrGOP0EnXIkCHk5ubSpEkT/P39S5Qst5XGJbgFkMmg/wL0F3bSvuAczyjW85n+IasYOLDcg3N8z0VnsQenthS4wiVqqoXDQuibNRqdweo7cwsbp0LOdc5I9flEN5j1hR57gNo1rIO9HQ3+dhSnBc5eBQ+BgKBIcnq9SdCmF5mo/JHNhk4E+1k7d0xL1Mx8ncO/fOZAX7kcGUXrF2Xh3p6w4Gwz+9ej/PDvZTa82IOomv42x2TkaZm59ggDO9ajd0ydip/EyY1w6HskmZxJBWPQylTUDy2aS1ig2mp4RFDF9mZwWuCeeuqpCp2AwMvo8ATb1v8fPRWHeE+1jDW+y6xOB/sZ81H1BokbuRrC7TSvsURnioNTyMxtA6FoiWrZlUkIHFy9mUdksC97zqaRXaDj6NUMuwK360wqvxy4SnJmfsULXH5h20kgpfUzHPi3KXWDfa32Uf3VSgLUCnIKc4gjK9iCc8l2PXv2LK+//jpDhw41lyHasGEDR48erdDJCTwPP7WSadpnyJZ86Sw/RZ+sdVbn5XIZoYXJ946GimgtMhksw5LkMpPAWVpw5Zq+x7N6byLd5/7F7F+PmeMQC0rpO2oKwckuKFkCrdz88QZkXYWaTfi74VgAGtQqKbSmfTio+CWq0wK3bds22rZty969e/n555/JzjbWUT948CAzZ9quESa4dVAp5FyT12aubigAfa58akzKt8DUXctRR4PeYolqacGZKpNYCuWt7uGfu+E4ACt3XzCLliNNsnMLKrgKy9ktsH+V8fnATzh/0yik0bVKZkFZCpzbLbipU6fy9ttvs3nzZtTqovXzPffcw99//12hkxN4Jn4qBd/o+/C3oSUqQ76xrJKF8BTFwjnmaDAH+ipkVntwJoFLFxacGcuPXyRw9i04039LhVpwBdnw6wTj886joWH3oioiNiy4sBoWFpwDWxbO4LTAHT58mMGDB5c4XqdOHVJTUytkUgLPxletQELOq9rR6BS+xsKYpr/mWDSfcXCJapmqJbP4iTVZc5Z5jGIPrgjT9+ZIcdEKraMX9ybcTITgBhBrXNWZqog0rFm6Bef2JWpISAhJSUkljickJFCvXr0KmZTAszEl3F+UIjjfrrBKy6bXIeMK4Hywr2U1EbmsdAtO6FtJSrXgCm2+HI2uYpb3F3fDvs+Mzwd8CD6BQFGp8oa29uBqVCOBe/zxx3n11VdJTk5GJpNhMBjYtWsXkyZN4sknn6zQyQk8Ez8LL1lmu1FQvzNosuC3l0CSnE7XKgoTsVyggqIwk8F6iSoUrjil7cGZvi5JMpa4KhfaPFhbmCLZcbixxwKQla81/1/bFLhCCy7YT4W/umKbCjktcO+++y4tWrQgKiqK7OxsWrVqxd1330337t15/fXXK3RyAs/E16LqbnCALwxcbKwecfoPOLTGHOzraEUR6zARSwvO6FSwdjJUxCfwYGx8/tK8qJbfV055HQ1b3oX0sxAYCfe9bT5sKlNeM0BNYPES+BRZbfVCKjYGDlyIg1Or1Sxfvpw33niDI0eOkJ2dTceOHWnWrFmFT07gmZh6o0JhqlZgDPSaatyb2TCFyD6/Ao7vwRUtUeVWeYpymYzsAp057xWEBWeLUi04i+e5Gh1gu5lTmVyJhz2fGJ8/uAj8QsynTA4GW9YbwJ1Nw3i2ZxPubhbm2nuXgsv2YIMGDWjQoOKbRAg8H8slqjkXtfsEOPoLJB+i4+F3gCcd34OzKHhpiVwmKyGSt7rA2fr0pXtRi65w2YLTFcAvz4NkgLaPQUw/q9PmRjN2go1VCjlT72/h2nuXgUMCN3HiRN566y0CAgKsSnvbYuHChRUyMYHnYip66a9WFKViKVTGpery3tRK3Mj98hh259zl0P3Mgb4KmdmxAEbxNO3tKOUydAbplg8TsUVpXlTLrytH42KoyI4FcP04+IdBv7klTl8s9KA2sBEDV9k4JHAJCQlotVrzc3uUp/ilwHswpeIUryRCZDu4ayJsn8ebqi+4L68lWr3Bql6cLUzhDgq5HJVCzt3Na7P91HVC/FXmpP2wGj4kZ+bf8oG+tijNgrMkx5VYuOTDRoED6D8fAkqWuzdZcNF2lqiViUMCt2XLFpvPBQJb+NkTOIC7JyEd/5Xa148zQ/UVN3IHUyew9NAAUzURU4HLnoUCB0Ue1LBANcmZ+RgkOHs9mzX/XmJMj8Zmh8atTKlxcBZ/D5yOhdNr4ZdxYNBBy4eg1SCbw8rag6tM3FxHReCNmASueKkkAJQ+yAYuRo+cwYpdFBxdX+b9LKuJFMe0RDXFUhkkif8s2c1n284xcc1BVz+Cx2LLgi1wIA4OXMhm2P0RJB8C3xB4YIHNrvQFOj1XM/IAaGAjyLeycciCMzV9doSff/7Z5ckIvAO7S1QT9Tvxo3ogQzT/o862qdD+HiuvW3F0FgUvLZGkIk+sKd1HkuBGrnE7ZfdZkVkDkF/aHpylBeeMwF0/CVuN+217Y6bgc9OHDoElh11Kz0OSIECtIKyGuuSASsYhC86yKXJQUBBxcXH8+++/5vPx8fHExcURHOxC0xKB1xFSWC0krJTl4a81R3DOEIFPXgpsfqPU+1lmMhTHFEtnme5jQquXGP3lv2TmV05TYU+hdAuuiBxHl6gGvTGgV6/hYs27GLK3Ia+sOWBzaGJ6kYPBHXv0DllwpqbPAK+++iqPPfYYS5cuNbcJ1Ov1jBs37pbsJyooycO31ScjT8t/OtW3OyY4MIhXtWP4wedN2P8ltB5sjnwvjr0wEShaotoT083HUli85QzT7neiHaKX4bAF56gXde9ncHkfelUgw5IfB2SFlppUQsQupJYeIlLZOL0Ht2LFCiZNmmTVA1WhUDBx4kRWrFhRoZMTeCY1A9S8cl8MDUsJC6gZoOYfqQUJEY8aD6x70ViFwgY6i2T74piWqLVKWf5UVku66oLBIjbGdhycY5aZQ3Fw6eeMAdvAAtl/uWyoCYBGb7AZ12h2MIR5iMDpdDpOnDhR4viJEycwGBxzRwsEpnzUtWGjjVUnMhIhbrbNsSYvqikGztJGSCtliWrC4MXBcV/sOk/HtzZz7Gqm3TGlpmphGehbhgVnMMC6CaDL46T/bXyaeRf1QvzMe63JFr1wTVwspYpIVeC0wI0cOZJRo0axcOFCdu7cyc6dO1mwYAHPPPOM6B4vcBiTxZWcp4QBHxkP7ltmrEZRDNMenKq4k4GiMBHLihTqYpae3nv1jdm/HiMjT8uUn+x7jB1JtgcHwkTiv4ALO9Ap/HjmxnAUcjkfDe1I/VBjDmmKTYFzX4gIuJCqNX/+fCIiIliwYIG5bFJkZCSTJ0/mlVdeqfAJCrwTq6q+TXrDbU8a9+LWjofndoHKD43OwOlrWVy+YQwzKB4mkpWvNWc5WO7B+akVaPJurfxUTSlWWoHOYHN/DGwXyLTJzUuweQYA72mHcEkKZ/J9zenUMJSIIF+OXs0kJdN6K0BvkLh0w8METi6XM2XKFKZMmUJmptEsFs4FgbOUqOp739tw+k9IP8vZNa/xUvrDnEzOskqkr+Fj/eNqst4C1ApzehgYU8Qy8oo8p968RDVhEjhbWi5Jxj0ym/1GLS6w62SQJPj1RdBkc1TRis/zY+nepBbP9mwCQHhhNZDkDGsLLikjD61eQqWQERlc8ZVCHKFcgb5BQUFC3AQuYVqimmvC+QYjPWjMY44+tQL51Xg0egOBvkruaFyT53s34YF2kVb3KHIw+FiVUUoq9oumv4UEzh720rWswkTsORkOfgtn49DJ1LyQ+zShAb58MKSDeU/UVGa8+BLVtDyNCvW3yiGuSlyqJvLjjz+yZs0aEhMT0WisPSf79++vkIkJvBuTBXczV4tOb0ACXj9cjzv0dzJYsYvlwSspePov6tcOsRs/ZSpVXjNATWm/P7eAvpktXUungVopR6s3IEmmdK2SgddlholkJRsbNwPvax7hnFSXFY+2s2r3aBK44k4Gd++/gQsW3EcffcTIkSMJDw8nISGBLl26UKtWLc6dO8f9999fGXMUeCGh/mpzZs+lG3k8vfIfvv/3Em/pniRPXZM6+eeIOvJpqcGhJu9gWA21lQVXnFthD86WpzTIV4lv4bK0tGBfE9nFLThJgt8mQn4Gx2jM5/oHGHlnNPe0sG7mbW+JavaguqGKiAmnBe7TTz9l2bJlfPzxx6jVaqZMmcLmzZuZMGECGRkZlTFHgReikMsI9TdacS98u58dp1PxUyl4/8ne+A38wDho50JIOlTmvWoGqG2lQZq5VZeoNXyU+BQWH7XnSZVK24M7+jOc/B0dSl4uGENMZKjNum1lLVEbuCnIF1wQuMTERLp37w6An58fWVlZAAwfPpxvv/22Ymcn8GpMy9QjV4zOqvmPtqdPy3BoPQhaDjBWqVj7vLFqhQXFxaxmgA8ymcyuyN0KFpylM8ZEoK+qyIKzs0dnXdFXX+SQyUmF9ZMB+Fg7kEuqRnz8REebjorwIKMH+0au1kpILxYG+Ua7KcgXXBC4iIgI0tPTAWNVX1Mv1PPnz4taXAKnMAmcCau9mgfmg1+osVrF7o9KvY8pidveMrX48TyN3uuyGyQJtpy4ZuVMqOGjxLdMC876da5p3IYpkJvGCUMUn+oHMntAa5rUrmHzHsF+KnwKC5teKwwVkSSpqNClm4J8wQWBu+eee1i3bh1gDPp9+eWXuffeexkyZIjNfqkCgT1qFRM4U5I+AIHh0O894/Otc43VK+xgEkp7jobix+987y86v/MnSYVlfLyFkSv/sXod6Ks0W1yOWHBQWFHkxO9w5Cd0yJmkHcv97RuUmlcsk8nMjWNMjobUbA25Gj0yGUTVdE+ICLjgRV22bJk5Jev555+nVq1a7N69mwEDBjB27NgKn6DAeymeP2rakzPT7jE48hOc3mRcqj69CeQll0imopZGh0TJVURxC84UP7fnbBoP32b/F9fTqeHriAVn/X3lZaYh/TYRGbBM9yAZoa15Z3CbMiuBhAf5cjEt1yxwpioidYP9bMffVRFOWXA6nY63336b5ORk87HHH3+cjz76iBdeeAG1uurrPQk8l5oBRdkHKoUMf3WxXwSZDB78AHyC4PI/sHepzfvUKsOCs/fL6e2+h0AfJT6FtfkcLVsetH0Wsuxkzhoi+cTwCB8Pvc1mq7/imB0NhZ5UUxURdzoYwEmBUyqVzJs3D53OxeYUAoEFlkvUYD+1bSEKrgf3vWV8HvcWpJ0tMcS0tLW/B2f7/T01w2H94SQe/nQXlwvToOwR6Fu0N1Zq2fJC7pYfJPTUGgzImKwdy+PdmtMhKsShORVfol50Y5lyS5zeg+vTpw/btm2rjLkIbjEsnQxW+2/Fue0paNQTdHnGahaStTVisjDsLaLsCZ/eQ51i477Zz/7Em7z2vyOljjMuUUu34ExfQQ1ymaP6HICdNR9hv9ScOkGO97MILxYqklgNYuDAhT24+++/n6lTp3L48GE6depEQID1BxgwYECFTU7g3VjuwYXYK28OxqXqgI/g025wcScxfj8CbcynAgtzVO0J2Y7T1xn86S7e/087mtYpqqvt6fFxx5Psl0gCk5OhjD24wj3LV5XfUU+WRo5/fdbXeQauptv9g2GL4rFwF6pBFgO4IHDjxo0DbPc/lclk6PUuNo8V3HLUstiDK9WCAwiNhthZsGEKnU8voi5zuUoYNdRK5KY6cXZ+I3M0ehISbzJ+dQIbX7rbfNzTw5qulRHqYgwTKcOLKsEd8mMMV/4JwD9tZ1OQafR6lpYdUpyIYOP/ZZGTwQP34AAMBoPdhxA3gTPULLYHVyadR0PUHaj0puWURKBv0d9oeRkJ3Vn51nvHnm7BlUWQr6pML6pCn8dc5XIAvtH14VxgJ7PwO9NCwdT6MSWzgMx8rdlT7W4LTrQNFLiNUAurrUwLDkAuh4GL0cl96Kk4xH8U261aE5ZlcRQvmOnNhTDBuAdXVhzc7eeWEC1P4apUkzm6oeRqdGbvsjNNYkx7cBqdgYOXbgJGJ5IjHtjKxOElal5eHnFxcTz44IMATJs2jYKCIhNZoVDw1ltv4etbehNfgcCEUiEnxF/FzVytldiVSlhTDjR5lttPf8gbyq+YrOphPlW8km9x1Err856+RC2LwLLi4C79Q/vL3wAwXfsM2fiTo9GbIwmd2YNTK+XUClCTlqNh3/nCTCc3W2/ghAW3atUqPvvsM/PrTz75hN27d5OQkEBCQgJff/01S5YsqZRJCrwXU6hIcPEg31I42mA4Bw2NCZbl8lz2YrMr0JRYbg9V8VLmXr5EreFjUU2keJiINh/WPo8MiZ/0Pdhq6AAY+zKYcnedLeFmsuL2njMKXLSbPajghMB98803jBkzxurY6tWr2bJlC1u2bOH9999nzZo1FT5BgXdjip+qXUoP1eJIciVTtGPQSAo65u0xZjtgu62gJcUFzpP0be+5NNb8e8mpawJ9VWbRL1Euafs8SD1JrqoWb2qHmw/nFOjNySDO9jE1/V8eKFyiutvBAE4I3JkzZ2jbtq35ta+vL3KLGvldunTh2LFjFTs7gdcztV9LXo5tTu8WtZ267qTUgE90hbnPG6ZATmqZFlnxJawnVRkZsuxvpvx4yCwejmDpRbXqjXr1AOxcBMDW5lPJoCiJ3rgHVz4LzlTZxN0OBnBC4G7evGm153b9+nWio6PNrw0Gg9V5Z1i8eDHR0dH4+vrStWtX9u3bV+r4H374gRYtWuDr60vbtm1Zv3691fkRI0YUls8pevTr18+luQkql7b1g3kxtplT+Yomy2KJfgDX/JtCbhpsmGJuQGOiTrFWgsX34CwzGb7++yJrD1xxdvpVzvlU271jbaGQyyzi4AotOJ3GmNcr6aH1YM7V6g0UiX+ORl9UYcRZCy7Iev/d3UG+4ITA1a9fnyNH7EdOHzp0iPr1nU9c/v7775k4cSIzZ85k//79tG/fnr59+3Lt2jWb43fv3s3QoUMZNWoUCQkJDBo0iEGDBpWYW79+/UhKSjI/RK0670OLkm0tZ4FMAUd+ort2j9X54kuk4gJnymS4cjOP1385wovfHcBgkNhzNo2buSWbGFcH5m4o2ZO4NIri4AotuF2LIOUI+NWE+983i1mAj3FcefbgTLFwJjzKgnvggQeYMWMG+fklex/m5eUxe/Zs+vfv7/QEFi5cyOjRoxk5ciStWrVi6dKl+Pv7s2LFCpvjP/zwQ/r168fkyZNp2bIlb731FrfddhuffPKJ1TgfHx8iIiLMj9DQUKfnJqj+aOq0gztfBGCKfhlBFFk4xQ2Q4mEiJgsuK7+ooOaafy8xdPnf9Fu0o5JmXD6Kt+YrC5NlnK81wLXjsG2e8cQD70ONom2BgMJskJwCnYUX1TmFs+zTEKBWlCiH5Q4cFrjp06eTnp5OTEwM77//PmvXrmXt2rXMmzePmJgYbty4wfTp0516c41GQ3x8PLGxsUUTksuJjY1lz549Nq/Zs2eP1XiAvn37lhi/detW6tSpQ0xMDM899xxpaWl251FQUEBmZqbVQ+AZBPqqoOerENac2tzkDeXX5nPFf0HVxZbBekli15lUKzGb+vNhwHaXdk+iU0PjH3STk0Gr1cAv48CghZgHoM0jQFFxKVNLxlyN3hw+4+oeHBiXp846KSoDhwUuPDyc3bt307JlS6ZOncrgwYMZPHgw06ZNo1WrVuzcuZPw8PCyb2RBamoqer2+xHXh4eFWJZksSU5OLnN8v379+PLLL4mLi+O9995j27Zt3H///XYzLebMmUNwcLD5ERUV5dTnELiPQF8lqHxhwCcYJBmPKrfTU17Y5b0sC06CYZ/vraKZVi3DujYAMIeJ9M/5Ba7uB59g6L/QbN6ak+0tLTizF9W594ywEjj3L0/ByVzURo0asXHjRtLT0zlz5gwATZs2pWbNmpUyOVd5/PHHzc/btm1Lu3btaNKkCVu3bqVPnz4lxk+bNo2JEyeaX2dmZgqR8xCCTKlaDbqyytCPkYoNvKv6nL4F7yHD+ufy5/1X6GhR/sdTyiW5EpBsyurwVclpJEtiRIExoJe+70BQUX9ZU7K9eYlq4UV11gIL8VehVsrR6AzVIsgXXEzVqlmzJl26dKFLly7lErewsDAUCgUpKSlWx1NSUoiIiLB5TUREhFPjARo3bkxYWJhZlIvj4+NjbmItmll7FkEWqUDztI9y0VCHerI0piq/tWmBvLH2qPl5doFn1DV0RYdNn91HIeM91TJ80EDj3tDxv1bjiltw+VoDusI3dHaBKZPJzFZcdQjyBTfnoqrVajp16kRcXJz5mMFgIC4ujm7dutm8plu3blbjATZv3mx3PMDly5dJS0sjMjLS7hiBZ2KZ65iHL1N1owH4rzKOVgWltxzMzPcMgdMZHKvGa4nJ+qpz4iu6yE+Sg6+x5FQx1Tdpp8mLCsZlKjhXTcTE7Q1DUchl3N6wejj13J5sP3HiRJYvX86qVas4fvw4zz33HDk5OYwcORKAJ598kmnTppnHv/jii2zcuJEFCxZw4sQJZs2axb///sv48eMByM7OZvLkyfz9999cuHCBuLg4Bg4cSNOmTenbt69bPqOgYsmzyKu0rCYSEx7IHkNrvtYZtyHG3vwAP+w7C5zdRHcXLuib0fq6cZGaf78LwPv6JyCkQcmBpjQ3pcKcCWKybF3xEbz/aHv+fS2WZuGBZQ+uAtwucEOGDGH+/PnMmDGDDh06cODAATZu3Gh2JCQmJpKUlGQe3717d1avXs2yZcto3749P/74I7/88gtt2hgLICoUCg4dOsSAAQNo3rw5o0aNolOnTuzYsQMfH8fTgQTVF8uwDss+Dsue7MSjneozVzeUK1ItwvVJvKL8we59PGQLziULTg7w6wTk2lz2GlqwSntPqXuOMlnRd5md77oFp5DLCK0G4SEmnC54WRmMHz/ebIEVZ+vWrSWOPfroozz66KM2x/v5+bFp06aKnJ6gmpGZV7S0tNwIb1grgPcfbc8P8Zd5TTuKlep5PK3YyHp9V/ZLzUvcR2ejWXJ1xBULLuriT3BuK5LSjyk5Y5CQU6Az4FessY9l5ZAAHyWZ+bpyWXDVDbdbcAKBs1hacPbYaujAdv97kcsk5qmWEaIuGSK04YjtUKTqhrMWXDjptDw0FwBDr+lclIwOOFuNZySLxHqzBWcWOM9XOCFwAo+jeGVee6wOGcs1KYSm8qu8IP+5ZFtCD8G55jgS76j+D5UuG+p1QtH9efPemq3GM5JFH1mTJ9Vc8NLlGVcfhMAJPA5HBS5HEcTrWqOz6inW0kZ+vjKnVWk4U7duoHwXsYoEDHIVDFwMcoVFZy09BTo93+5LNLcctAzq9Vdb71i5sgdX3RACJ/A4gh2s/iuTyfjD0Jlf9XegxMDbLEGF46Eh8RfTXZ1iheKowIWRwSzVlwCcazUe6rQEsOiNauDrvxOZ9vNh7l24HcAq79QyVATEHpxA4BZmD2jNPS3q8NWoLjbPm36h29cPBmCmdgRZ8mCac5FnFescfp9v913i7d+OmePC3IWjAjdb9QWhsmyOGhqS2PIZ83FLCy4h8QZgHWpjoqQF5+qMqw9C4AQeR90QP1aM6EyPZraLZCbMuJf412MJLSyDnk4Qmxq8DMALyv/RXOZYZdwf4y/z+c7zLPrzVMVM3EUcEbh+8n30V+xDKymYrB0LiiIr17I3qmUJqYxcrdUS1ZSuVYTnK5wQOIHX4a9WUquGj9USK7PJQPap70At0zNP9RkKHG9xeeaa40UmK4OyBC6ELN5SfQHAEv1DHJOirTygPha9US3Ltp9MyTI7GWQYSxxZIiw4gaAaY/n72TAsgFW1JpAp+dNBfo5RivV2ryuOzk0RwfM3nWTh5lNlelHfUH1FbVkGpwz1zGXcLT+7ZWcty9LlJ5MzLfovgH8xC06EiQgE1RjrIGB/Cnzr8JbOmGz+ivJHGsuuumtqZXIjR8MnW87wUdxpbubaj/vrLU/gEcVO9JKMKdqxaDAuTS09oOYlqs5AvqZI4E4kZxU5GWQyavgIC04g8BhuWJQdrx/qj59ayQ/6nmzXt8VHpmWuajkyyg6idYclY2k12mvaHEgu76r+D4D/0z/AAamp+ZzllM1ly7V6K+fCyeSsoi72lHQyeIEBJwRO4L0kpuean/uqFPirFICMadpnyJZ86SI/yXDFZvdNsBQsraepP9muijJN+Q2RsnTOG8JZqPtPseuLbmAqepmvM5CeUyT6J1OyLBrMYCNMxPMVTgicwGspvrQz5WFeoTZzdUMBeFX5HfVlthscVTVavYHrWcaeC5YClZRRsiJKd/kRnlBuAeBV7RjysS4kYSlNRb1R9Val2LPydVb3tqytV/wenooQOIHX8sp9zakZoObNga0BrBLNv9H3Ya+hBQGyAuYqlwPuLy0y+NNddH7nT04mZ3E82X5fEH/yC+cMq3T3sk9qWWKMzIYFV6AzkJxh3bTG9D4yZNzesKZVWXeRySAQVGNa1w0m/vVYnuwWDVC4RDUiIWeKdgx5kpq7FEcZothq9z5V9Wt+5IpRbNYeuMK764/bHTdZ+T0N5Ne5LIUxT/e4zTGW2mSy4LLydaTlGAXuzqa1ALiQmmMeH+yvomfzothCIXACQTXH0pIpXiroohTBfJ2x7NZryq+JwHbntQtpOQz7/G+2nbpeeRMthr2WfbfLTvCU4g8ApmmfIQc/m+Os9uAKhf3SjVwkydh8p1tjo8AVT6y3DJ72An0TAie4dSgucABf6O8nwdCUIFke76hWYGupejEtl11n0nhqxT6SMvKqYKa2xcUHDe+pliOXSXyv68UOQzuHrvctDBNJTDM6XeoE+tIiIsjm+PqhfiWOeTJC4AS3DLbKJRmQM1k7hgJJSR9FAgPlu0q9R7c5f7H2wJXKmiJgfzfwZeVPNJEnkSKF8I5uWKn3kFstUY2f+2KacTkaHuRDTIR1SXGTxVg3xK/EMU9GCJzgliEy2PZy7oxUnw91DwMwS/UlYWSUep+Z646Wer4iyMiz9gC3k51ltOI3AF7TjiKTsrpWlQz0NTXZCavhQ/1QP3P9Nyiy1upafEe2CmR6GkLgBLcMXRvVZNZDrWyeW6Z/kCOGaEJl2cwuzOu0h6IS1m4nLLymf59L42JaUQyfCh3zVMtQyCR+0XfnT0OnMu9nacH5qqwt11B/NTKZjObhNUpcF+RXJHopmfYb9ngKQuAEtwwymYx7WoTbPKdDyRTtGLSSgv6Kfdwvt9/xvjICYBdvOWt+npB40+rc88pfaCG/RKoUxGztkw7dT2YjVcuEqSlMjMU+nGm0TCZDUaiO7eqHODj76osQOMEthVRKvNsxKZol+ocAeFP1BSFk2RynrIQkTXt3bCFL5HnFWgBmaEdwA8eakpdmwdUMMAb0trDch7MQxL3T+/Dr+LtoGen5DdCFwAkEFnyiG8wpQz1qyzKZofrK5hhFBQtcvlZv0zurQM/7qqWoZHo26juz3tDV4XvKbOzBmTDVybN0NFh+orAaPrQtLBbq6QiBE9xSBPuVLHee8Ma95urAGlRM0Y5FL8l4WLGT3vKEEuMreoXaZ8E2/rlwo8TxMYrfaSu/wE0pgDe0I3Am5NhWsr0Jk8BZWnDeEBJiCyFwgluKEH81X4zozOdP3k7LyCBG3dWI0AC1lcVzQGrK5/oHAHhX9X8Ekmt1j4q04CRJ4srNktZbE9kVXlL+BMCb2uFcJ9Sp+5YqcIV7cCH+asKDjDms3hASYotq0fhZIKhKereoA0BsqyKHQ3ELZqHuUe6Vx9NYnsw05TdM1402n6tIL+qecyWzJ+QYmKdaho9MyxZ9e3429CjXe1guUVtFBtHOYvkZExFESuZ1YcEJBLcSBah5VTsGgCeUW7hTfth8Ti6XYaigKr//2liajlBsopP8NFmSH9O1z2Bamvqq5NzfJoLRPRqVeV/LMucxEYG0qx9M/3aRfD/2Dquy5b1japvHeCNC4AQCbO9u/SO1YJXuXgDmKj/HH2Nc2Jlr2TSevp5nVv3r8vtl5Gk5mZxFaLEWiA1kKUxWfg/Au7onSKKW+dw3z9zBkv92oldMnTLvb1kw01elYN34u1j8xG0EFiuJNPLORhyceR99W0e4/FmqM0LgBAKwu38/T/c4l6UwouTXzcJj4s/jKWw6mkxqdoHti0vhjnfj6Ltou1VArwwDc5XL8ZNp2KVvzbf6e6ynWDhHR6p8ONMs2pbjxVsQAicQYF80cvBjqta4/zZSuYnOshNW58d+Fc/tb/+JVl926XNLTKXDd5xONR8bqthCd8UxciUfpuqKlqbF5+iIk0Ond399u+qAEDiBgNIDMHYa2vKdrhcA76mW4YOmxJisfNeaQ5uEri6pTFOuBuB93WNckkpmXJjmaCijyxY4Z8F5M0LgBAIHeFc3jGQplMbyZF4uDN+oCIx9IyRjOIosj38NzVml72tzrMmCc0S8KjoY2VMRAicQUHZ+aSYBTNeOAmC04jfayc5anS9Pc+hH5DvopThIgaTiVe1oDHZ+LVVKxwTugbYRdG1U0+X5eBNC4AQCHIvk/8twG//T34lCJvG+6jPUFJU0euyzPSTbaA5TnLTsAuZsKCpHXpsbzFB9CcAHukc4K9Wzed3ADnWJCTeGcpQmcJPua86nwzohFxYcIAROIACs9+Aa1PS3O+5N7XBSpSBi5Jd5XrnW6twdc+LKfJ9XfjjIZ9vOFb6SeFv1BcGyXA4ZGrFc39/udR8+3tFsZepsCFz867H89UpPnu/dtMS5WxkhcAIB1hbcj891o72dZPMbBDFDOwKAcYq1tJRdtDr/5Z4Ldt/jZq6GrSeL+jr0l++lr+JfNJKCydqx6ClZcdhRatXwoXHtGl7Ry7QiEQInEACNwoqKP9YJ9GXt+Lv4c+LdNseuN3Rlg74zKpme91WfoaTIgzpjrf1qv29YnKtJJrNVKwH4VD+Qk1IDh+fas3lt2tSzqOUmNM0uIhdVIABqBqjZMqmXVd+GpnUCiQkP5GRK8bpwMmZoR9JNfow28guMUfzOp/qBZb7Hrwevmp/PVH1JmCyTE4YoFusGlXpdSLFsB7VSzm8v9KBAp+fH+Mv0aFrbzpUCYcEJBIU0CgsgPMjX6pi9mLPrhJir676o/JkmstIb0WQXFFl598r/ZaBiN3pJxmTtWLRl2Bn3tbJdhdhHqWBY14Y0qGV/z/BWRwicQFAKpQXV/s9wF3/pO+Aj0zJPtQw5xmwGW97Ua4X9DYLI5m3VCsDYB+Kw1LjMOXhrKaOqQAicQFAKpUecyZiuHUWm5Ecn+WlGKDYBRm/qqWLLWtPm/+vKbwiX3eSsIZJFukcqZ9ICM0LgBIJSGF8YdtGjWRh3Nq1V4nwytZijewKAycrvaSBLAeCF1UWVgL/dl0jv+VvpIT/EY8ptGCQZU7RjKEDt0BxaRHpnKaOqQAicQFAKD99Wn22Te7FyZBe+fNp2T4Rv9fewS98aP5mG95TLkWEgLaeowsi0nw8TQB5zVJ8DsFLfl3gpxu57PtS+LgBt6gUxpV8M/72jYQV+olsL4UUVCMqgYa2ymyxP1T3DJvlUuimO8YThL77JjiUrX2uuv/aq8jvqy1JJNNTmfd1jdu/Uv20kHw/tyPxH2+GjdD0uTmBEWHACQQVwSQpnnm4IANOUq6lLKnvOpnE9q4CusuM8qdwMwFTdaPLwtXufj4Z2BBDiVkFUC4FbvHgx0dHR+Pr60rVrV/bt21fq+B9++IEWLVrg6+tL27ZtWb9+vdV5SZKYMWMGkZGR+Pn5ERsby+nTpyvzIwhuESwDbIuzSn8f/xiaU0OWz7uq/2Pn6ev0eOd33lMtA2C17h52G9rYvf74m/1EFZAKxu0C9/333zNx4kRmzpzJ/v37ad++PX379uXatWs2x+/evZuhQ4cyatQoEhISGDRoEIMGDeLIkSPmMfPmzeOjjz5i6dKl7N27l4CAAPr27Ut+ftnJ0AJBaXz1dFeah9egbrAvUTX9+OX5O83nJOS8qh1DgaSil+IgOfu+5hXlD0TLU7gq1TQ7IyxpERFIoI+SRUM64KcWVltFI5MkB6rnVSJdu3alc+fOfPLJJwAYDAaioqJ44YUXmDp1aonxQ4YMIScnh99++8187I477qBDhw4sXboUSZKoW7cur7zyCpMmTQIgIyOD8PBwVq5cyeOPP17mnDIzMwkODiYjI4OgIM/v7i2oXKKn/m71eqziV6apvrU6NkIzma2GjubXdYN9WTikA10b1RT5oy7g6O+oWy04jUZDfHw8sbGx5mNyuZzY2Fj27Nlj85o9e/ZYjQfo27evefz58+dJTk62GhMcHEzXrl3t3rOgoIDMzEyrh0DgKF+M6EzP5rWZ9592AHyuf4BDhqLOVz/pe5jFbXSPRvz2wl1sn9KbOxrXEuJWybjVi5qamoperyc83DoVJTw8nBMnTti8Jjk52eb45ORk83nTMXtjijNnzhxmz57t0mcQCHq3qGPutfqf2+rTePp6JmvHslb9BjepwZva4Yy9uzGPdKpP83AR01aViDARYNq0aUycONH8OjMzk6ioKDfOSOCpyOUyLsw11nW7mdSXQF9/DoZ6Z0s+T8CtAhcWFoZCoSAlJcXqeEpKChERtn8oIiIiSh1v+jclJYXIyEirMR06dLB5Tx8fH3x8fFz9GAKBTUIiy84zFVQubt2DU6vVdOrUibi4okqoBoOBuLg4unXrZvOabt26WY0H2Lx5s3l8o0aNiIiIsBqTmZnJ3r177d5TIBB4KZKb+e677yQfHx9p5cqV0rFjx6QxY8ZIISEhUnJysiRJkjR8+HBp6tSp5vG7du2SlEqlNH/+fOn48ePSzJkzJZVKJR0+fNg8Zu7cuVJISIi0du1a6dChQ9LAgQOlRo0aSXl5eQ7NKSMjQwKkjIyMiv2wAoGgQnD0d9Tte3BDhgzh+vXrzJgxg+TkZDp06MDGjRvNToLExETk8iJDs3v37qxevZrXX3+d6dOn06xZM3755RfatCkKoJwyZQo5OTmMGTOGmzdvctddd7Fx40Z8fe1HkAsEAu/D7XFw1RERBycQVG88Ig5OIBAIKhMhcAKBwGsRAicQCLwWtzsZqiOmbUmRsiUQVE9Mv5tluRCEwNkgK8tYT19kMwgE1ZusrCyCg2036QbhRbWJwWDg6tWrBAYGmpOhTelbly5dEp5VC8T3Yh/x3dinvN+NJElkZWVRt25dqzCy4ggLzgZyuZz69evbPBcUFCR+WG0gvhf7iO/GPuX5bkqz3EwIJ4NAIPBahMAJBAKvRQicg/j4+DBz5kxRdaQY4nuxj/hu7FNV341wMggEAq9FWHACgcBrEQInEAi8FiFwAoHAaxECJxAIvBYhcHZIT09n2LBhBAUFERISwqhRo8jOzi51/AsvvEBMTAx+fn40aNCACRMmkJGRUYWzrhqc/W4Ali1bRq9evQgKCkImk3Hz5s2qmWwls3jxYqKjo/H19aVr167s27ev1PE//PADLVq0wNfXl7Zt27J+/foqmmnV4sz3cvToUR555BGio6ORyWQsWrSowuYhBM4Ow4YN4+jRo2zevJnffvuN7du3M2bMGLvjr169ytWrV5k/fz5Hjhxh5cqVbNy4kVGjRlXhrKsGZ78bgNzcXPr168f06dOraJaVz/fff8/EiROZOXMm+/fvp3379vTt25dr167ZHL97926GDh3KqFGjSEhIYNCgQQwaNIgjR45U8cwrF2e/l9zcXBo3bszcuXPtNptymcqtnO6ZHDt2TAKkf/75x3xsw4YNkkwmk65cueLwfdasWSOp1WpJq9VWxjTdQnm/my1btkiAdOPGjUqcZdXQpUsX6fnnnze/1uv1Ut26daU5c+bYHP/YY49J/fv3tzrWtWtXaezYsZU6z6rG2e/FkoYNG0offPBBhc1FWHA22LNnDyEhIdx+++3mY7Gxscjlcvbu3evwfUzllJVK70n5rajvxtPRaDTEx8cTGxtrPiaXy4mNjWXPnj02r9mzZ4/VeIC+ffvaHe+JuPK9VCZC4GyQnJxMnTp1rI4plUpq1qxJcnKyQ/dITU3lrbfeKnPp5mlUxHfjDaSmpqLX683NkUyEh4fb/R6Sk5OdGu+JuPK9VCa3lMBNnToVmUxW6uPEiRPlfp/MzEz69+9Pq1atmDVrVvknXgVU1XcjEFQl3rN2coBXXnmFESNGlDqmcePGRERElNgQ1el0pKenl7kJmpWVRb9+/QgMDOR///sfKpWqvNOuEqriu/EmwsLCUCgUpKSkWB1PSUmx+z1EREQ4Nd4TceV7qUxuKYGrXbs2tWvXLnNct27duHnzJvHx8XTq1AmAv/76C4PBQNeuXe1el5mZSd++ffHx8WHdunUe1Ye1sr8bb0OtVtOpUyfi4uIYNGgQYCyUGhcXx/jx421e061bN+Li4njppZfMxzZv3ky3bt2qYMZVgyvfS6VSYe4KL6Nfv35Sx44dpb1790o7d+6UmjVrJg0dOtR8/vLly1JMTIy0d+9eSZKMnba7du0qtW3bVjpz5oyUlJRkfuh0Ond9jErB2e9GkiQpKSlJSkhIkJYvXy4B0vbt26WEhAQpLS3NHR+hQvjuu+8kHx8faeXKldKxY8ekMWPGSCEhIVJycrIkSZI0fPhwaerUqebxu3btkpRKpTR//nzp+PHj0syZMyWVSiUdPnzYXR+hUnD2eykoKJASEhKkhIQEKTIyUpo0aZKUkJAgnT59utxzEQJnh7S0NGno0KFSjRo1pKCgIGnkyJFSVlaW+fz58+clQNqyZYskSUXhD7Ye58+fd8+HqCSc/W4kSZJmzpxp87v54osvqv4DVCAff/yx1KBBA0mtVktdunSR/v77b/O5nj17Sk899ZTV+DVr1kjNmzeX1Gq11Lp1a+n333+v4hlXDc58L6afl+KPnj17lnseolySQCDwWm4pL6pAILi1EAInEAi8FiFwAoHAaxECJxAIvBYhcAKBwGsRAicQCLwWIXACgcBrEQInEAi8FiFwAo9hxIgRNquc9OvXz91TE1RTbqlke4Hn069fP7744gurY/a6o2u12hLVXDQaDWq12un3dfU6gXsRFpzAo/Dx8SEiIsLqERoaCoBMJmPJkiUMGDCAgIAA3nnnHWbNmkWHDh34/PPPadSokbnCS2JiIgMHDqRGjRoEBQXx2GOPWZX4sXedwLMQAifwKmbNmsXgwYM5fPgwTz/9NABnzpzhp59+4ueff+bAgQMYDAYGDhxIeno627ZtY/PmzZw7d44hQ4ZY3av4dQLPQyxRBR7Fb7/9Ro0aNayOTZ8+3dyt64knnmDkyJFW5zUaDV9++aW53t3mzZs5fPgw58+fJyoqCoAvv/yS1q1b888//9C5c2eb1wk8DyFwAo+id+/eLFmyxOpYzZo1zc8tm+GYaNiwoZVIHT9+nKioKLO4AbRq1YqQkBCOHz9uFrji1wk8DyFwAo8iICCApk2blnrekWOOvpfAsxF7cIJbjpYtW3Lp0iUuXbpkPnbs2DFu3rxJq1at3DgzQUUjLDiBR1FQUFCi/ZxSqSQsLMzhe8TGxtK2bVuGDRvGokWL0Ol0jBs3jp49e9pc4go8F2HBCTyKjRs3EhkZafW46667nLqHTCZj7dq1hIaGcvfddxMbG0vjxo35/vvvK2nWAnchSpYLBAKvRVhwAoHAaxECJxAIvBYhcAKBwGsRAicQCLwWIXACgcBrEQInEAi8FiFwAoHAaxECJxAIvBYhcAKBwGsRAicQCLwWIXACgcBrEQInEAi8lv8HGLLKWg/LVGoAAAAASUVORK5CYII=", + "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.018729, + "end_time": "2024-03-22T21:54:38.634759", + "exception": false, + "start_time": "2024-03-22T21:54:38.616030", + "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": 2666.929317, + "end_time": "2024-03-22T21:54:41.375544", + "environment_variables": {}, + "exception": null, + "input_path": "eval/insurance/tvae/2/mlu-eval.ipynb", + "output_path": "eval/insurance/tvae/2/mlu-eval.ipynb", + "parameters": { + "allow_same_prediction": true, + "dataset": "insurance", + "dataset_name": "insurance", + "debug": false, + "folder": "eval", + "gp": true, + "gp_multiply": true, + "log_wandb": false, + "param_index": 0, + "path": "eval/insurance/tvae/2", + "path_prefix": "../../../../", + "random_seed": 2, + "single_model": "tvae" + }, + "start_time": "2024-03-22T21:10:14.446227", + "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