diff --git "a/treatment/lct_gan/mlu-eval.ipynb" "b/treatment/lct_gan/mlu-eval.ipynb" new file mode 100644--- /dev/null +++ "b/treatment/lct_gan/mlu-eval.ipynb" @@ -0,0 +1,2380 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "982e76f5", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T16:53:54.603965Z", + "iopub.status.busy": "2024-03-22T16:53:54.603594Z", + "iopub.status.idle": "2024-03-22T16:53:54.637506Z", + "shell.execute_reply": "2024-03-22T16:53:54.636558Z" + }, + "papermill": { + "duration": 0.049204, + "end_time": "2024-03-22T16:53:54.639737", + "exception": false, + "start_time": "2024-03-22T16:53:54.590533", + "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-22T16:53:54.666476Z", + "iopub.status.busy": "2024-03-22T16:53:54.666093Z", + "iopub.status.idle": "2024-03-22T16:53:54.673364Z", + "shell.execute_reply": "2024-03-22T16:53:54.672349Z" + }, + "papermill": { + "duration": 0.023236, + "end_time": "2024-03-22T16:53:54.675564", + "exception": false, + "start_time": "2024-03-22T16:53:54.652328", + "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-22T16:53:54.700593Z", + "iopub.status.busy": "2024-03-22T16:53:54.700315Z", + "iopub.status.idle": "2024-03-22T16:53:54.704453Z", + "shell.execute_reply": "2024-03-22T16:53:54.703667Z" + }, + "papermill": { + "duration": 0.019169, + "end_time": "2024-03-22T16:53:54.706517", + "exception": false, + "start_time": "2024-03-22T16:53:54.687348", + "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-22T16:53:54.731010Z", + "iopub.status.busy": "2024-03-22T16:53:54.730726Z", + "iopub.status.idle": "2024-03-22T16:53:54.734735Z", + "shell.execute_reply": "2024-03-22T16:53:54.733853Z" + }, + "executionInfo": { + "elapsed": 678, + "status": "ok", + "timestamp": 1696841022168, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "ns5hFcVL2yvs", + "papermill": { + "duration": 0.018617, + "end_time": "2024-03-22T16:53:54.736705", + "exception": false, + "start_time": "2024-03-22T16:53:54.718088", + "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-22T16:53:54.760821Z", + "iopub.status.busy": "2024-03-22T16:53:54.760582Z", + "iopub.status.idle": "2024-03-22T16:53:54.766024Z", + "shell.execute_reply": "2024-03-22T16:53:54.765223Z" + }, + "papermill": { + "duration": 0.019584, + "end_time": "2024-03-22T16:53:54.768060", + "exception": false, + "start_time": "2024-03-22T16:53:54.748476", + "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": "fe93b2cc", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T16:53:54.793738Z", + "iopub.status.busy": "2024-03-22T16:53:54.793435Z", + "iopub.status.idle": "2024-03-22T16:53:54.798469Z", + "shell.execute_reply": "2024-03-22T16:53:54.797700Z" + }, + "papermill": { + "duration": 0.020228, + "end_time": "2024-03-22T16:53:54.800426", + "exception": false, + "start_time": "2024-03-22T16:53:54.780198", + "status": "completed" + }, + "tags": [ + "injected-parameters" + ] + }, + "outputs": [], + "source": [ + "# Parameters\n", + "dataset = \"treatment\"\n", + "dataset_name = \"treatment\"\n", + "single_model = \"lct_gan\"\n", + "gp = True\n", + "gp_multiply = True\n", + "random_seed = 42\n", + "debug = False\n", + "folder = \"eval\"\n", + "path_prefix = \"../../../../\"\n", + "path = \"eval/treatment/lct_gan/42\"\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.011272, + "end_time": "2024-03-22T16:53:54.823078", + "exception": false, + "start_time": "2024-03-22T16:53:54.811806", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "5f45b1d0", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T16:53:54.847715Z", + "iopub.status.busy": "2024-03-22T16:53:54.847006Z", + "iopub.status.idle": "2024-03-22T16:53:54.856170Z", + "shell.execute_reply": "2024-03-22T16:53:54.855346Z" + }, + "executionInfo": { + "elapsed": 7, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "UdvXYv3c3LXy", + "papermill": { + "duration": 0.023787, + "end_time": "2024-03-22T16:53:54.858208", + "exception": false, + "start_time": "2024-03-22T16:53:54.834421", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/kaggle/working\n", + "/kaggle/working/eval/treatment/lct_gan/42\n" + ] + } + ], + "source": [ + "from pathlib import Path\n", + "import os\n", + "\n", + "%cd /kaggle/working/\n", + "\n", + "if path is None:\n", + " path = os.path.join(folder, dataset_name, single_model, random_seed)\n", + "Path(path).mkdir(parents=True, exist_ok=True)\n", + "\n", + "%cd {path}" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "f85bf540", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T16:53:54.882551Z", + "iopub.status.busy": "2024-03-22T16:53:54.881844Z", + "iopub.status.idle": "2024-03-22T16:53:56.921479Z", + "shell.execute_reply": "2024-03-22T16:53:56.920577Z" + }, + "papermill": { + "duration": 2.054095, + "end_time": "2024-03-22T16:53:56.923643", + "exception": false, + "start_time": "2024-03-22T16:53:54.869548", + "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-22T16:53:56.951621Z", + "iopub.status.busy": "2024-03-22T16:53:56.951153Z", + "iopub.status.idle": "2024-03-22T16:53:56.967827Z", + "shell.execute_reply": "2024-03-22T16:53:56.967069Z" + }, + "papermill": { + "duration": 0.033246, + "end_time": "2024-03-22T16:53:56.969900", + "exception": false, + "start_time": "2024-03-22T16:53:56.936654", + "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-22T16:53:56.994398Z", + "iopub.status.busy": "2024-03-22T16:53:56.994089Z", + "iopub.status.idle": "2024-03-22T16:53:57.002129Z", + "shell.execute_reply": "2024-03-22T16:53:57.001365Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "Vrl2QkoV3o_8", + "papermill": { + "duration": 0.022576, + "end_time": "2024-03-22T16:53:57.004084", + "exception": false, + "start_time": "2024-03-22T16:53:56.981508", + "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-22T16:53:57.027681Z", + "iopub.status.busy": "2024-03-22T16:53:57.027415Z", + "iopub.status.idle": "2024-03-22T16:53:57.124714Z", + "shell.execute_reply": "2024-03-22T16:53:57.123657Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "TilUuFk9vqMb", + "papermill": { + "duration": 0.111825, + "end_time": "2024-03-22T16:53:57.127116", + "exception": false, + "start_time": "2024-03-22T16:53:57.015291", + "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-22T16:53:57.155124Z", + "iopub.status.busy": "2024-03-22T16:53:57.154827Z", + "iopub.status.idle": "2024-03-22T16:54:01.862723Z", + "shell.execute_reply": "2024-03-22T16:54:01.861696Z" + }, + "executionInfo": { + "elapsed": 3113, + "status": "ok", + "timestamp": 1696841025277, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "7Abt8nStvr9Z", + "papermill": { + "duration": 4.725452, + "end_time": "2024-03-22T16:54:01.865848", + "exception": false, + "start_time": "2024-03-22T16:53:57.140396", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-03-22 16:53:59.415157: 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 16:53:59.415216: 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 16:53:59.416897: 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-22T16:54:01.897085Z", + "iopub.status.busy": "2024-03-22T16:54:01.896382Z", + "iopub.status.idle": "2024-03-22T16:54:01.903562Z", + "shell.execute_reply": "2024-03-22T16:54:01.902506Z" + }, + "papermill": { + "duration": 0.022721, + "end_time": "2024-03-22T16:54:01.905669", + "exception": false, + "start_time": "2024-03-22T16:54:01.882948", + "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-22T16:54:01.933894Z", + "iopub.status.busy": "2024-03-22T16:54:01.933539Z", + "iopub.status.idle": "2024-03-22T16:54:24.491400Z", + "shell.execute_reply": "2024-03-22T16:54:24.490297Z" + }, + "executionInfo": { + "elapsed": 20137, + "status": "ok", + "timestamp": 1696841045408, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "tbaguWxAvtPi", + "papermill": { + "duration": 22.574641, + "end_time": "2024-03-22T16:54:24.494065", + "exception": false, + "start_time": "2024-03-22T16:54:01.919424", + "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" + ] + }, + { + "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" + ] + }, + { + "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" + ] + }, + { + "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" + ] + }, + { + "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-22T16:54:24.524116Z", + "iopub.status.busy": "2024-03-22T16:54:24.523692Z", + "iopub.status.idle": "2024-03-22T16:54:24.530799Z", + "shell.execute_reply": "2024-03-22T16:54:24.529968Z" + }, + "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.024897, + "end_time": "2024-03-22T16:54:24.532947", + "exception": false, + "start_time": "2024-03-22T16:54:24.508050", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'tvae': 95,\n", + " 'realtabformer': (69, 281, Embedding(281, 768), True),\n", + " 'lct_gan': 75,\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-22T16:54:24.559222Z", + "iopub.status.busy": "2024-03-22T16:54:24.558898Z", + "iopub.status.idle": "2024-03-22T16:54:24.563980Z", + "shell.execute_reply": "2024-03-22T16:54:24.563114Z" + }, + "papermill": { + "duration": 0.020558, + "end_time": "2024-03-22T16:54:24.565917", + "exception": false, + "start_time": "2024-03-22T16:54:24.545359", + "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-22T16:54:24.591748Z", + "iopub.status.busy": "2024-03-22T16:54:24.591466Z", + "iopub.status.idle": "2024-03-22T17:18:56.244286Z", + "shell.execute_reply": "2024-03-22T17:18:56.243405Z" + }, + "papermill": { + "duration": 1471.680855, + "end_time": "2024-03-22T17:18:56.259077", + "exception": false, + "start_time": "2024-03-22T16:54:24.578222", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../treatment/_cache_aug_test/lct_gan/all inf False\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "../../../../ml-utility-loss/aug_test/treatment [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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 ../../../../treatment/_cache_bs_test/lct_gan/all inf False\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "../../../../ml-utility-loss/bs_test/treatment [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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 ../../../../treatment/_cache_synth_test/lct_gan/all inf False\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "../../../../ml-utility-loss/synthetics/treatment [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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-22T17:18:56.287603Z", + "iopub.status.busy": "2024-03-22T17:18:56.287251Z", + "iopub.status.idle": "2024-03-22T17:18:56.608589Z", + "shell.execute_reply": "2024-03-22T17:18:56.607712Z" + }, + "executionInfo": { + "elapsed": 588, + "status": "ok", + "timestamp": 1696841049215, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "NgahtU1q9uLO", + "papermill": { + "duration": 0.338263, + "end_time": "2024-03-22T17:18:56.610783", + "exception": false, + "start_time": "2024-03-22T17:18:56.272520", + "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': 'torch',\n", + " 'grad_clip': 0.8,\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.1,\n", + " 'loss_balancer_beta': 0.73,\n", + " 'loss_balancer_r': 0.94,\n", + " 'dataset_size': 2048,\n", + " 'batch_size': 4,\n", + " 'epochs': 100,\n", + " 'lr_mul': 0.04,\n", + " 'n_warmup_steps': 220,\n", + " 'Optim': torch_optimizer.diffgrad.DiffGrad,\n", + " 'fixed_role_model': 'lct_gan',\n", + " 'd_model': 512,\n", + " 'attn_activation': ml_utility_loss.activations.LeakyHardsigmoid,\n", + " 'tf_d_inner': 512,\n", + " 'tf_n_layers_enc': 4,\n", + " 'tf_n_head': 64,\n", + " 'tf_activation': ml_utility_loss.activations.LeakyHardtanh,\n", + " 'tf_activation_final': ml_utility_loss.activations.LeakyHardtanh,\n", + " 'ada_d_hid': 1024,\n", + " 'ada_n_layers': 7,\n", + " 'ada_activation': torch.nn.modules.activation.SELU,\n", + " 'ada_activation_final': ml_utility_loss.activations.LeakyHardsigmoid,\n", + " 'head_d_hid': 128,\n", + " 'head_n_layers': 8,\n", + " 'head_n_head': 64,\n", + " 'head_activation': ml_utility_loss.activations.LeakyHardsigmoid,\n", + " 'head_activation_final': ml_utility_loss.activations.LeakyHardsigmoid,\n", + " 'models': ['lct_gan'],\n", + " 'max_seconds': 3600,\n", + " 'tf_lora': False,\n", + " 'tf_num_inds': 64,\n", + " 'ada_n_seeds': 0,\n", + " 'gradient_penalty_kwargs': {'mag_loss': True,\n", + " 'mse_mag': 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.2, '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-22T17:18:56.639191Z", + "iopub.status.busy": "2024-03-22T17:18:56.638880Z", + "iopub.status.idle": "2024-03-22T17:50:01.925295Z", + "shell.execute_reply": "2024-03-22T17:50:01.924278Z" + }, + "papermill": { + "duration": 1865.316192, + "end_time": "2024-03-22T17:50:01.940639", + "exception": false, + "start_time": "2024-03-22T17:18:56.624447", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../treatment/_cache_aug_train/lct_gan/all inf False\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "split df ratio is 0\n", + "../../../../ml-utility-loss/aug_train/treatment [400, 0]\n", + "Caching in ../../../../treatment/_cache_aug_val/lct_gan/all inf False\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "split df ratio is 1\n", + "../../../../ml-utility-loss/aug_val/treatment [0, 200]\n", + "Caching in ../../../../treatment/_cache_bs_train/lct_gan/all inf False\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "split df ratio is 0\n", + "../../../../ml-utility-loss/bs_train/treatment [100, 0]\n", + "Caching in ../../../../treatment/_cache_bs_val/lct_gan/all inf False\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "split df ratio is 1\n", + "../../../../ml-utility-loss/bs_val/treatment [0, 50]\n", + "Caching in ../../../../treatment/_cache_synth/lct_gan/all inf False\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Splitting without random!\n", + "Split with reverse index!\n", + "../../../../ml-utility-loss/synthetics/treatment [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-22T17:50:01.971379Z", + "iopub.status.busy": "2024-03-22T17:50:01.970531Z", + "iopub.status.idle": "2024-03-22T17:50:02.499249Z", + "shell.execute_reply": "2024-03-22T17:50:02.498338Z" + }, + "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.546432, + "end_time": "2024-03-22T17:50:02.501385", + "exception": false, + "start_time": "2024-03-22T17:50:01.954953", + "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" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['lct_gan'] 1\n" + ] + } + ], + "source": [ + "from ml_utility_loss.loss_learning.estimator.model.pipeline import remove_non_model_params\n", + "from ml_utility_loss.loss_learning.estimator.pipeline import create_model\n", + "from ml_utility_loss.util import filter_dict, clear_memory\n", + "\n", + "clear_memory()\n", + "\n", + "params2 = remove_non_model_params(params)\n", + "adapters = filter_dict(preprocessor.adapter_sizes, params[\"models\"])\n", + "\n", + "model = create_model(\n", + " adapters=adapters,\n", + " #Body=\"twin_encoder\",\n", + " **params2,\n", + ")\n", + "#cf.apply_weight_standardization(model, n_last_layers_ignore=0)\n", + "print(model.models, len(model.adapters))" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "938f94fc", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T17:50:02.532791Z", + "iopub.status.busy": "2024-03-22T17:50:02.532446Z", + "iopub.status.idle": "2024-03-22T17:50:02.536685Z", + "shell.execute_reply": "2024-03-22T17:50:02.535782Z" + }, + "papermill": { + "duration": 0.023513, + "end_time": "2024-03-22T17:50:02.539641", + "exception": false, + "start_time": "2024-03-22T17:50:02.516128", + "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-22T17:50:02.568171Z", + "iopub.status.busy": "2024-03-22T17:50:02.567868Z", + "iopub.status.idle": "2024-03-22T17:50:02.574874Z", + "shell.execute_reply": "2024-03-22T17:50:02.573995Z" + }, + "papermill": { + "duration": 0.023652, + "end_time": "2024-03-22T17:50:02.576882", + "exception": false, + "start_time": "2024-03-22T17:50:02.553230", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "18680833" + ] + }, + "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-22T17:50:02.605328Z", + "iopub.status.busy": "2024-03-22T17:50:02.605063Z", + "iopub.status.idle": "2024-03-22T17:50:02.699743Z", + "shell.execute_reply": "2024-03-22T17:50:02.698806Z" + }, + "papermill": { + "duration": 0.111362, + "end_time": "2024-03-22T17:50:02.702059", + "exception": false, + "start_time": "2024-03-22T17:50:02.590697", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "========================================================================================================================\n", + "Layer (type:depth-idx) Output Shape Param #\n", + "========================================================================================================================\n", + "MLUtilitySingle [2, 2648, 75] --\n", + "├─Adapter: 1-1 [2, 2648, 75] --\n", + "│ └─Sequential: 2-1 [2, 2648, 512] --\n", + "│ │ └─FeedForward: 3-1 [2, 2648, 1024] --\n", + "│ │ │ └─Linear: 4-1 [2, 2648, 1024] 77,824\n", + "│ │ │ └─SELU: 4-2 [2, 2648, 1024] --\n", + "│ │ └─FeedForward: 3-2 [2, 2648, 1024] --\n", + "│ │ │ └─Linear: 4-3 [2, 2648, 1024] 1,049,600\n", + "│ │ │ └─SELU: 4-4 [2, 2648, 1024] --\n", + "│ │ └─FeedForward: 3-3 [2, 2648, 1024] --\n", + "│ │ │ └─Linear: 4-5 [2, 2648, 1024] 1,049,600\n", + "│ │ │ └─SELU: 4-6 [2, 2648, 1024] --\n", + "│ │ └─FeedForward: 3-4 [2, 2648, 1024] --\n", + "│ │ │ └─Linear: 4-7 [2, 2648, 1024] 1,049,600\n", + "│ │ │ └─SELU: 4-8 [2, 2648, 1024] --\n", + "│ │ └─FeedForward: 3-5 [2, 2648, 1024] --\n", + "│ │ │ └─Linear: 4-9 [2, 2648, 1024] 1,049,600\n", + "│ │ │ └─SELU: 4-10 [2, 2648, 1024] --\n", + "│ │ └─FeedForward: 3-6 [2, 2648, 1024] --\n", + "│ │ │ └─Linear: 4-11 [2, 2648, 1024] 1,049,600\n", + "│ │ │ └─SELU: 4-12 [2, 2648, 1024] --\n", + "│ │ └─FeedForward: 3-7 [2, 2648, 512] --\n", + "│ │ │ └─Linear: 4-13 [2, 2648, 512] 524,800\n", + "│ │ │ └─LeakyHardsigmoid: 4-14 [2, 2648, 512] --\n", + "├─Adapter: 1-2 [2, 661, 75] (recursive)\n", + "│ └─Sequential: 2-2 [2, 661, 512] (recursive)\n", + "│ │ └─FeedForward: 3-8 [2, 661, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-15 [2, 661, 1024] (recursive)\n", + "│ │ │ └─SELU: 4-16 [2, 661, 1024] --\n", + "│ │ └─FeedForward: 3-9 [2, 661, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-17 [2, 661, 1024] (recursive)\n", + "│ │ │ └─SELU: 4-18 [2, 661, 1024] --\n", + "│ │ └─FeedForward: 3-10 [2, 661, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-19 [2, 661, 1024] (recursive)\n", + "│ │ │ └─SELU: 4-20 [2, 661, 1024] --\n", + "│ │ └─FeedForward: 3-11 [2, 661, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-21 [2, 661, 1024] (recursive)\n", + "│ │ │ └─SELU: 4-22 [2, 661, 1024] --\n", + "│ │ └─FeedForward: 3-12 [2, 661, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-23 [2, 661, 1024] (recursive)\n", + "│ │ │ └─SELU: 4-24 [2, 661, 1024] --\n", + "│ │ └─FeedForward: 3-13 [2, 661, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-25 [2, 661, 1024] (recursive)\n", + "│ │ │ └─SELU: 4-26 [2, 661, 1024] --\n", + "│ │ └─FeedForward: 3-14 [2, 661, 512] (recursive)\n", + "│ │ │ └─Linear: 4-27 [2, 661, 512] (recursive)\n", + "│ │ │ └─LeakyHardsigmoid: 4-28 [2, 661, 512] --\n", + "├─TwinEncoder: 1-3 [2, 8192] --\n", + "│ └─Encoder: 2-3 [2, 16, 512] --\n", + "│ │ └─ModuleList: 3-16 -- (recursive)\n", + "│ │ │ └─EncoderLayer: 4-29 [2, 2648, 512] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-1 [2, 2648, 512] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-1 [2, 64, 512] 32,768\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-2 [2, 64, 512] --\n", + "│ │ │ │ │ │ └─Linear: 7-1 [2, 64, 512] 262,144\n", + "│ │ │ │ │ │ └─Linear: 7-2 [2, 2648, 512] 262,144\n", + "│ │ │ │ │ │ └─Linear: 7-3 [2, 2648, 512] 262,144\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-4 [2, 64, 64, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-1 [2, 64, 64, 2648] --\n", + "│ │ │ │ │ │ └─Linear: 7-5 [2, 64, 512] 262,656\n", + "│ │ │ │ │ │ └─LeakyHardsigmoid: 7-6 [2, 64, 512] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-3 [2, 2648, 512] --\n", + "│ │ │ │ │ │ └─Linear: 7-7 [2, 2648, 512] 262,144\n", + "│ │ │ │ │ │ └─Linear: 7-8 [2, 64, 512] 262,144\n", + "│ │ │ │ │ │ └─Linear: 7-9 [2, 64, 512] 262,144\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-10 [2, 64, 2648, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-2 [2, 64, 2648, 64] --\n", + "│ │ │ │ │ │ └─Linear: 7-11 [2, 2648, 512] 262,656\n", + "│ │ │ │ │ │ └─LeakyHardsigmoid: 7-12 [2, 2648, 512] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-2 [2, 2648, 512] --\n", + "│ │ │ │ │ └─Linear: 6-4 [2, 2648, 512] 262,656\n", + "│ │ │ │ │ └─LeakyHardtanh: 6-5 [2, 2648, 512] --\n", + "│ │ │ │ │ └─Linear: 6-6 [2, 2648, 512] 262,656\n", + "│ │ │ └─EncoderLayer: 4-30 [2, 2648, 512] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-3 [2, 2648, 512] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-7 [2, 64, 512] 32,768\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-8 [2, 64, 512] --\n", + "│ │ │ │ │ │ └─Linear: 7-13 [2, 64, 512] 262,144\n", + "│ │ │ │ │ │ └─Linear: 7-14 [2, 2648, 512] 262,144\n", + "│ │ │ │ │ │ └─Linear: 7-15 [2, 2648, 512] 262,144\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-16 [2, 64, 64, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-3 [2, 64, 64, 2648] --\n", + "│ │ │ │ │ │ └─Linear: 7-17 [2, 64, 512] 262,656\n", + "│ │ │ │ │ │ └─LeakyHardsigmoid: 7-18 [2, 64, 512] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-9 [2, 2648, 512] --\n", + "│ │ │ │ │ │ └─Linear: 7-19 [2, 2648, 512] 262,144\n", + "│ │ │ │ │ │ └─Linear: 7-20 [2, 64, 512] 262,144\n", + "│ │ │ │ │ │ └─Linear: 7-21 [2, 64, 512] 262,144\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-22 [2, 64, 2648, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-4 [2, 64, 2648, 64] --\n", + "│ │ │ │ │ │ └─Linear: 7-23 [2, 2648, 512] 262,656\n", + "│ │ │ │ │ │ └─LeakyHardsigmoid: 7-24 [2, 2648, 512] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-4 [2, 2648, 512] --\n", + "│ │ │ │ │ └─Linear: 6-10 [2, 2648, 512] 262,656\n", + "│ │ │ │ │ └─LeakyHardtanh: 6-11 [2, 2648, 512] --\n", + "│ │ │ │ │ └─Linear: 6-12 [2, 2648, 512] 262,656\n", + "│ │ │ └─EncoderLayer: 4-31 [2, 2648, 512] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-5 [2, 2648, 512] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-13 [2, 64, 512] 32,768\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-14 [2, 64, 512] --\n", + "│ │ │ │ │ │ └─Linear: 7-25 [2, 64, 512] 262,144\n", + "│ │ │ │ │ │ └─Linear: 7-26 [2, 2648, 512] 262,144\n", + "│ │ │ │ │ │ └─Linear: 7-27 [2, 2648, 512] 262,144\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-28 [2, 64, 64, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-5 [2, 64, 64, 2648] --\n", + "│ │ │ │ │ │ └─Linear: 7-29 [2, 64, 512] 262,656\n", + "│ │ │ │ │ │ └─LeakyHardsigmoid: 7-30 [2, 64, 512] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-15 [2, 2648, 512] --\n", + "│ │ │ │ │ │ └─Linear: 7-31 [2, 2648, 512] 262,144\n", + "│ │ │ │ │ │ └─Linear: 7-32 [2, 64, 512] 262,144\n", + "│ │ │ │ │ │ └─Linear: 7-33 [2, 64, 512] 262,144\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-34 [2, 64, 2648, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-6 [2, 64, 2648, 64] --\n", + "│ │ │ │ │ │ └─Linear: 7-35 [2, 2648, 512] 262,656\n", + "│ │ │ │ │ │ └─LeakyHardsigmoid: 7-36 [2, 2648, 512] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-6 [2, 2648, 512] --\n", + "│ │ │ │ │ └─Linear: 6-16 [2, 2648, 512] 262,656\n", + "│ │ │ │ │ └─LeakyHardtanh: 6-17 [2, 2648, 512] --\n", + "│ │ │ │ │ └─Linear: 6-18 [2, 2648, 512] 262,656\n", + "│ │ │ └─EncoderLayer: 4-32 [2, 16, 512] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-7 [2, 2648, 512] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-19 [2, 64, 512] 32,768\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-20 [2, 64, 512] --\n", + "│ │ │ │ │ │ └─Linear: 7-37 [2, 64, 512] 262,144\n", + "│ │ │ │ │ │ └─Linear: 7-38 [2, 2648, 512] 262,144\n", + "│ │ │ │ │ │ └─Linear: 7-39 [2, 2648, 512] 262,144\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-40 [2, 64, 64, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-7 [2, 64, 64, 2648] --\n", + "│ │ │ │ │ │ └─Linear: 7-41 [2, 64, 512] 262,656\n", + "│ │ │ │ │ │ └─LeakyHardsigmoid: 7-42 [2, 64, 512] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-21 [2, 2648, 512] --\n", + "│ │ │ │ │ │ └─Linear: 7-43 [2, 2648, 512] 262,144\n", + "│ │ │ │ │ │ └─Linear: 7-44 [2, 64, 512] 262,144\n", + "│ │ │ │ │ │ └─Linear: 7-45 [2, 64, 512] 262,144\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-46 [2, 64, 2648, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-8 [2, 64, 2648, 64] --\n", + "│ │ │ │ │ │ └─Linear: 7-47 [2, 2648, 512] 262,656\n", + "│ │ │ │ │ │ └─LeakyHardsigmoid: 7-48 [2, 2648, 512] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-8 [2, 2648, 512] --\n", + "│ │ │ │ │ └─Linear: 6-22 [2, 2648, 512] 262,656\n", + "│ │ │ │ │ └─LeakyHardtanh: 6-23 [2, 2648, 512] --\n", + "│ │ │ │ │ └─Linear: 6-24 [2, 2648, 512] 262,656\n", + "│ │ │ │ └─PoolingByMultiheadAttention: 5-9 [2, 16, 512] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-25 [2, 16, 512] 8,192\n", + "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-26 [2, 16, 512] --\n", + "│ │ │ │ │ │ └─Linear: 7-49 [2, 16, 512] 262,144\n", + "│ │ │ │ │ │ └─Linear: 7-50 [2, 2648, 512] 262,144\n", + "│ │ │ │ │ │ └─Linear: 7-51 [2, 2648, 512] 262,144\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-52 [2, 64, 16, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-9 [2, 64, 16, 2648] --\n", + "│ │ │ │ │ │ └─Linear: 7-53 [2, 16, 512] 262,656\n", + "│ │ │ │ │ │ └─LeakyHardsigmoid: 7-54 [2, 16, 512] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-10 [2, 16, 512] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-27 [2, 16, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardtanh: 6-28 [2, 16, 512] --\n", + "│ │ │ │ │ └─Linear: 6-29 [2, 16, 512] (recursive)\n", + "│ └─Encoder: 2-4 [2, 16, 512] (recursive)\n", + "│ │ └─ModuleList: 3-16 -- (recursive)\n", + "│ │ │ └─EncoderLayer: 4-33 [2, 661, 512] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-11 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-30 [2, 64, 512] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-31 [2, 64, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-55 [2, 64, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-56 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-57 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-58 [2, 64, 64, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-10 [2, 64, 64, 661] --\n", + "│ │ │ │ │ │ └─Linear: 7-59 [2, 64, 512] (recursive)\n", + "│ │ │ │ │ │ └─LeakyHardsigmoid: 7-60 [2, 64, 512] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-32 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-61 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-62 [2, 64, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-63 [2, 64, 512] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-64 [2, 64, 661, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-11 [2, 64, 661, 64] --\n", + "│ │ │ │ │ │ └─Linear: 7-65 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ │ └─LeakyHardsigmoid: 7-66 [2, 661, 512] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-12 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-33 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardtanh: 6-34 [2, 661, 512] --\n", + "│ │ │ │ │ └─Linear: 6-35 [2, 661, 512] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-34 [2, 661, 512] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-13 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-36 [2, 64, 512] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-37 [2, 64, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-67 [2, 64, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-68 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-69 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-70 [2, 64, 64, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-12 [2, 64, 64, 661] --\n", + "│ │ │ │ │ │ └─Linear: 7-71 [2, 64, 512] (recursive)\n", + "│ │ │ │ │ │ └─LeakyHardsigmoid: 7-72 [2, 64, 512] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-38 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-73 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-74 [2, 64, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-75 [2, 64, 512] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-76 [2, 64, 661, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-13 [2, 64, 661, 64] --\n", + "│ │ │ │ │ │ └─Linear: 7-77 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ │ └─LeakyHardsigmoid: 7-78 [2, 661, 512] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-14 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-39 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardtanh: 6-40 [2, 661, 512] --\n", + "│ │ │ │ │ └─Linear: 6-41 [2, 661, 512] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-35 [2, 661, 512] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-15 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-42 [2, 64, 512] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-43 [2, 64, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-79 [2, 64, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-80 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-81 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-82 [2, 64, 64, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-14 [2, 64, 64, 661] --\n", + "│ │ │ │ │ │ └─Linear: 7-83 [2, 64, 512] (recursive)\n", + "│ │ │ │ │ │ └─LeakyHardsigmoid: 7-84 [2, 64, 512] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-44 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-85 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-86 [2, 64, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-87 [2, 64, 512] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-88 [2, 64, 661, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-15 [2, 64, 661, 64] --\n", + "│ │ │ │ │ │ └─Linear: 7-89 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ │ └─LeakyHardsigmoid: 7-90 [2, 661, 512] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-16 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-45 [2, 661, 512] (recursive)\n", + "│ │ │ �� │ └─LeakyHardtanh: 6-46 [2, 661, 512] --\n", + "│ │ │ │ │ └─Linear: 6-47 [2, 661, 512] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-36 [2, 16, 512] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-17 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-48 [2, 64, 512] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-49 [2, 64, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-91 [2, 64, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-92 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-93 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-94 [2, 64, 64, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-16 [2, 64, 64, 661] --\n", + "│ │ │ │ │ │ └─Linear: 7-95 [2, 64, 512] (recursive)\n", + "│ │ │ │ │ │ └─LeakyHardsigmoid: 7-96 [2, 64, 512] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-50 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-97 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-98 [2, 64, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-99 [2, 64, 512] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-100 [2, 64, 661, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-17 [2, 64, 661, 64] --\n", + "│ │ │ │ │ │ └─Linear: 7-101 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ │ └─LeakyHardsigmoid: 7-102 [2, 661, 512] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-18 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-51 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardtanh: 6-52 [2, 661, 512] --\n", + "│ │ │ │ │ └─Linear: 6-53 [2, 661, 512] (recursive)\n", + "│ │ │ │ └─PoolingByMultiheadAttention: 5-19 [2, 16, 512] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-54 [2, 16, 512] (recursive)\n", + "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-55 [2, 16, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-103 [2, 16, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-104 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-105 [2, 661, 512] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-106 [2, 64, 16, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-18 [2, 64, 16, 661] --\n", + "│ │ │ │ │ │ └─Linear: 7-107 [2, 16, 512] (recursive)\n", + "│ │ │ │ │ │ └─LeakyHardsigmoid: 7-108 [2, 16, 512] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-20 [2, 16, 512] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-56 [2, 16, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardtanh: 6-57 [2, 16, 512] --\n", + "│ │ │ │ │ └─Linear: 6-58 [2, 16, 512] (recursive)\n", + "├─Head: 1-4 [2] --\n", + "│ └─Sequential: 2-5 [2, 1] --\n", + "│ │ └─FeedForward: 3-17 [2, 128] --\n", + "│ │ │ └─Linear: 4-37 [2, 128] 1,048,704\n", + "│ │ │ └─LeakyHardsigmoid: 4-38 [2, 128] --\n", + "│ │ └─FeedForward: 3-18 [2, 128] --\n", + "│ │ │ └─Linear: 4-39 [2, 128] 16,512\n", + "│ │ │ └─LeakyHardsigmoid: 4-40 [2, 128] --\n", + "│ │ └─FeedForward: 3-19 [2, 128] --\n", + "│ │ │ └─Linear: 4-41 [2, 128] 16,512\n", + "│ │ │ └─LeakyHardsigmoid: 4-42 [2, 128] --\n", + "│ │ └─FeedForward: 3-20 [2, 128] --\n", + "│ │ │ └─Linear: 4-43 [2, 128] 16,512\n", + "│ │ │ └─LeakyHardsigmoid: 4-44 [2, 128] --\n", + "│ │ └─FeedForward: 3-21 [2, 128] --\n", + "│ │ │ └─Linear: 4-45 [2, 128] 16,512\n", + "│ │ │ └─LeakyHardsigmoid: 4-46 [2, 128] --\n", + "│ │ └─FeedForward: 3-22 [2, 128] --\n", + "│ │ │ └─Linear: 4-47 [2, 128] 16,512\n", + "│ │ │ └─LeakyHardsigmoid: 4-48 [2, 128] --\n", + "│ │ └─FeedForward: 3-23 [2, 128] --\n", + "│ │ │ └─Linear: 4-49 [2, 128] 16,512\n", + "│ │ │ └─LeakyHardsigmoid: 4-50 [2, 128] --\n", + "│ │ └─FeedForward: 3-24 [2, 1] --\n", + "│ │ │ └─Linear: 4-51 [2, 1] 129\n", + "│ │ │ └─LeakyHardsigmoid: 4-52 [2, 1] --\n", + "========================================================================================================================\n", + "Total params: 18,680,833\n", + "Trainable params: 18,680,833\n", + "Non-trainable params: 0\n", + "Total mult-adds (M): 73.97\n", + "========================================================================================================================\n", + "Input size (MB): 1.99\n", + "Forward/backward pass size (MB): 1079.48\n", + "Params size (MB): 74.72\n", + "Estimated Total Size (MB): 1156.19\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-22T17:50:02.735226Z", + "iopub.status.busy": "2024-03-22T17:50:02.734892Z", + "iopub.status.idle": "2024-03-22T19:00:38.391656Z", + "shell.execute_reply": "2024-03-22T19:00:38.390642Z" + }, + "papermill": { + "duration": 4235.677039, + "end_time": "2024-03-22T19:00:38.394746", + "exception": false, + "start_time": "2024-03-22T17:50:02.717707", + "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" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "g_loss_mul 0.1\n", + "Epoch 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.08288680652415173, 'avg_role_model_std_loss': 14.884825719568891, 'avg_role_model_mean_pred_loss': 0.014639717982716328, 'avg_role_model_g_mag_loss': 0.007401900000145865, '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.406318084973221, 'n_size': 900, 'n_batch': 225, 'duration': 398.05458784103394, 'duration_batch': 1.7691315015157063, 'duration_size': 0.4422828753789266, 'avg_pred_std': 0.04329945017169747}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.01646603072894332, 'avg_role_model_std_loss': 1.1389748531219954, 'avg_role_model_mean_pred_loss': 0.001041307360675295, '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.01646603072894332, 'n_size': 450, 'n_batch': 113, 'duration': 104.75376605987549, 'duration_batch': 0.9270244784059778, 'duration_size': 0.23278614679972331, 'avg_pred_std': 0.1397827780404771}\n", + "Epoch 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.014255170632645281, 'avg_role_model_std_loss': 0.24843680457298686, 'avg_role_model_mean_pred_loss': 0.000636702568035041, 'avg_role_model_g_mag_loss': 0.15559853479266167, '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.014447312605981198, 'n_size': 900, 'n_batch': 225, 'duration': 406.69940519332886, 'duration_batch': 1.8075529119703504, 'duration_size': 0.4518882279925876, 'avg_pred_std': 0.22602122453765736}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.011084747278914115, 'avg_role_model_std_loss': 0.774564493527634, 'avg_role_model_mean_pred_loss': 0.00036442376687365014, '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.011084747278914115, 'n_size': 450, 'n_batch': 113, 'duration': 105.70433187484741, 'duration_batch': 0.9354365652641364, 'duration_size': 0.23489851527743869, 'avg_pred_std': 0.13189282911609182}\n", + "Epoch 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.009175471019561883, 'avg_role_model_std_loss': 0.14389958513339807, 'avg_role_model_mean_pred_loss': 0.0003093209020328993, 'avg_role_model_g_mag_loss': 0.16885624952562567, '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.00928754332613001, 'n_size': 900, 'n_batch': 225, 'duration': 406.6975419521332, 'duration_batch': 1.8075446308983696, 'duration_size': 0.4518861577245924, 'avg_pred_std': 0.23166270198714403}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.00785602382393045, 'avg_role_model_std_loss': 1.3146459211567783, 'avg_role_model_mean_pred_loss': 0.0001525110592525784, '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.00785602382393045, 'n_size': 450, 'n_batch': 113, 'duration': 105.51167917251587, 'duration_batch': 0.9337316740930608, 'duration_size': 0.23447039816114637, 'avg_pred_std': 0.11703323267914861}\n", + "Epoch 3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.006946129192502769, 'avg_role_model_std_loss': 0.16631651740127382, 'avg_role_model_mean_pred_loss': 0.00011629207969720338, 'avg_role_model_g_mag_loss': 0.1469966934973167, '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.007030756754486194, 'n_size': 900, 'n_batch': 225, 'duration': 404.7738826274872, 'duration_batch': 1.798995033899943, 'duration_size': 0.44974875847498574, 'avg_pred_std': 0.23086450531949393}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.006420711345431553, 'avg_role_model_std_loss': 1.1872994360646385, 'avg_role_model_mean_pred_loss': 8.72488180067034e-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.006420711345431553, 'n_size': 450, 'n_batch': 113, 'duration': 103.53712010383606, 'duration_batch': 0.9162577000339475, 'duration_size': 0.2300824891196357, 'avg_pred_std': 0.1300600932704221}\n", + "Epoch 4\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.005421485699508695, 'avg_role_model_std_loss': 0.08202415918292068, 'avg_role_model_mean_pred_loss': 0.00010085892813725515, 'avg_role_model_g_mag_loss': 0.13527608269825578, '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.005492081102662875, 'n_size': 900, 'n_batch': 225, 'duration': 403.6879127025604, 'duration_batch': 1.7941685009002686, 'duration_size': 0.44854212522506715, 'avg_pred_std': 0.23655629260775943}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.009256900170618995, 'avg_role_model_std_loss': 2.8233697297467697, 'avg_role_model_mean_pred_loss': 0.0006465031184101571, '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.009256900170618995, 'n_size': 450, 'n_batch': 113, 'duration': 101.8208520412445, 'duration_batch': 0.9010694870906594, 'duration_size': 0.22626856009165447, 'avg_pred_std': 0.13276277751503135}\n", + "Epoch 5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0043073366452492535, 'avg_role_model_std_loss': 0.19139563928810466, 'avg_role_model_mean_pred_loss': 8.40804457109845e-05, 'avg_role_model_g_mag_loss': 0.12489897313269062, '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.0043637448957360905, 'n_size': 900, 'n_batch': 225, 'duration': 398.688072681427, 'duration_batch': 1.7719469896952311, 'duration_size': 0.4429867474238078, 'avg_pred_std': 0.23179641341906973}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0055422348428186925, 'avg_role_model_std_loss': 1.4432227016979617, 'avg_role_model_mean_pred_loss': 5.823207058893942e-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.0055422348428186925, 'n_size': 450, 'n_batch': 113, 'duration': 101.09947466850281, 'duration_batch': 0.8946856165354231, 'duration_size': 0.22466549926333956, 'avg_pred_std': 0.11363168490392674}\n", + "Epoch 6\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.003263339866756117, 'avg_role_model_std_loss': 0.3763446019548343, 'avg_role_model_mean_pred_loss': 2.3110432702086737e-05, 'avg_role_model_g_mag_loss': 0.10734513330583771, '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.0033083394544084713, 'n_size': 900, 'n_batch': 225, 'duration': 398.69307565689087, 'duration_batch': 1.7719692251417372, 'duration_size': 0.4429923062854343, 'avg_pred_std': 0.24115597604735134}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.00555163197664519, 'avg_role_model_std_loss': 1.1181977761929087, 'avg_role_model_mean_pred_loss': 0.00010318647899446903, '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.00555163197664519, 'n_size': 450, 'n_batch': 113, 'duration': 101.25119686126709, 'duration_batch': 0.8960282908076733, 'duration_size': 0.22500265969170463, 'avg_pred_std': 0.11773095095579861}\n", + "Epoch 7\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0027152151927152266, 'avg_role_model_std_loss': 0.07267851859859407, 'avg_role_model_mean_pred_loss': 1.4569837801249912e-05, 'avg_role_model_g_mag_loss': 0.09808282882389095, '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.0027543007831668043, 'n_size': 900, 'n_batch': 225, 'duration': 400.2191047668457, 'duration_batch': 1.7787515767415365, 'duration_size': 0.4446878941853841, 'avg_pred_std': 0.23774532583390182}\n", + "Time out: 3949.559079647064/3600\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval loss {'role_model': 'lct_gan', 'n_size': 1050, 'n_batch': 263, 'role_model_metrics': {'avg_loss': 0.0047467758956138695, 'avg_g_mag_loss': 0.016803590516231294, 'avg_g_cos_loss': 0.0, 'pred_duration': 6.370237112045288, 'grad_duration': 11.638083219528198, 'total_duration': 18.008320331573486, 'pred_std': 0.23633873462677002, 'std_loss': 0.0008537429966963828, 'mean_pred_loss': 3.869256761390716e-05, 'pred_rmse': 0.06889685243368149, 'pred_mae': 0.04724160581827164, 'pred_mape': 4645955.0, 'grad_rmse': 0.14325737953186035, 'grad_mae': 0.09063062816858292, 'grad_mape': 1.6706515550613403}, '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.0047467758956138695, 'avg_g_mag_loss': 0.016803590516231294, 'avg_g_cos_loss': 0.0, 'avg_pred_duration': 6.370237112045288, 'avg_grad_duration': 11.638083219528198, 'avg_total_duration': 18.008320331573486, 'avg_pred_std': 0.23633873462677002, 'avg_std_loss': 0.0008537429966963828, 'avg_mean_pred_loss': 3.869256761390716e-05}, 'min_metrics': {'avg_loss': 0.0047467758956138695, 'avg_g_mag_loss': 0.016803590516231294, 'avg_g_cos_loss': 0.0, 'pred_duration': 6.370237112045288, 'grad_duration': 11.638083219528198, 'total_duration': 18.008320331573486, 'pred_std': 0.23633873462677002, 'std_loss': 0.0008537429966963828, 'mean_pred_loss': 3.869256761390716e-05, 'pred_rmse': 0.06889685243368149, 'pred_mae': 0.04724160581827164, 'pred_mape': 4645955.0, 'grad_rmse': 0.14325737953186035, 'grad_mae': 0.09063062816858292, 'grad_mape': 1.6706515550613403}, 'model_metrics': {'lct_gan': {'avg_loss': 0.0047467758956138695, 'avg_g_mag_loss': 0.016803590516231294, 'avg_g_cos_loss': 0.0, 'pred_duration': 6.370237112045288, 'grad_duration': 11.638083219528198, 'total_duration': 18.008320331573486, 'pred_std': 0.23633873462677002, 'std_loss': 0.0008537429966963828, 'mean_pred_loss': 3.869256761390716e-05, 'pred_rmse': 0.06889685243368149, 'pred_mae': 0.04724160581827164, 'pred_mape': 4645955.0, 'grad_rmse': 0.14325737953186035, 'grad_mae': 0.09063062816858292, 'grad_mape': 1.6706515550613403}}}\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-22T19:00:38.430630Z", + "iopub.status.busy": "2024-03-22T19:00:38.429858Z", + "iopub.status.idle": "2024-03-22T19:00:38.434341Z", + "shell.execute_reply": "2024-03-22T19:00:38.433435Z" + }, + "papermill": { + "duration": 0.024595, + "end_time": "2024-03-22T19:00:38.436245", + "exception": false, + "start_time": "2024-03-22T19:00:38.411650", + "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-22T19:00:38.469769Z", + "iopub.status.busy": "2024-03-22T19:00:38.469456Z", + "iopub.status.idle": "2024-03-22T19:00:38.596113Z", + "shell.execute_reply": "2024-03-22T19:00:38.595324Z" + }, + "papermill": { + "duration": 0.146222, + "end_time": "2024-03-22T19:00:38.598627", + "exception": false, + "start_time": "2024-03-22T19:00:38.452405", + "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-22T19:00:38.635319Z", + "iopub.status.busy": "2024-03-22T19:00:38.634452Z", + "iopub.status.idle": "2024-03-22T19:00:38.905876Z", + "shell.execute_reply": "2024-03-22T19:00:38.904973Z" + }, + "papermill": { + "duration": 0.291967, + "end_time": "2024-03-22T19:00:38.907984", + "exception": false, + "start_time": "2024-03-22T19:00:38.616017", + "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-22T19:00:38.945124Z", + "iopub.status.busy": "2024-03-22T19:00:38.944791Z", + "iopub.status.idle": "2024-03-22T19:05:25.592731Z", + "shell.execute_reply": "2024-03-22T19:05:25.591881Z" + }, + "papermill": { + "duration": 286.669422, + "end_time": "2024-03-22T19:05:25.595196", + "exception": false, + "start_time": "2024-03-22T19:00:38.925774", + "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-22T19:05:25.632815Z", + "iopub.status.busy": "2024-03-22T19:05:25.631976Z", + "iopub.status.idle": "2024-03-22T19:05:25.653483Z", + "shell.execute_reply": "2024-03-22T19:05:25.652522Z" + }, + "papermill": { + "duration": 0.042389, + "end_time": "2024-03-22T19:05:25.655469", + "exception": false, + "start_time": "2024-03-22T19:05:25.613080", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
avg_g_cos_lossavg_g_mag_lossavg_lossgrad_durationgrad_maegrad_mapegrad_rmsemean_pred_losspred_durationpred_maepred_mapepred_rmsepred_stdstd_losstotal_duration
lct_gan0.00.0004490.00474711.5821970.0906311.6706520.1432570.0000396.4151070.0472424645954.50.0688970.2363390.00085417.997304
\n", + "
" + ], + "text/plain": [ + " avg_g_cos_loss avg_g_mag_loss avg_loss grad_duration grad_mae \\\n", + "lct_gan 0.0 0.000449 0.004747 11.582197 0.090631 \n", + "\n", + " grad_mape grad_rmse mean_pred_loss pred_duration pred_mae \\\n", + "lct_gan 1.670652 0.143257 0.000039 6.415107 0.047242 \n", + "\n", + " pred_mape pred_rmse pred_std std_loss total_duration \n", + "lct_gan 4645954.5 0.068897 0.236339 0.000854 17.997304 " + ] + }, + "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-22T19:05:25.690857Z", + "iopub.status.busy": "2024-03-22T19:05:25.690259Z", + "iopub.status.idle": "2024-03-22T19:05:26.216854Z", + "shell.execute_reply": "2024-03-22T19:05:26.215856Z" + }, + "papermill": { + "duration": 0.546735, + "end_time": "2024-03-22T19:05:26.219100", + "exception": false, + "start_time": "2024-03-22T19:05:25.672365", + "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-22T19:05:26.257147Z", + "iopub.status.busy": "2024-03-22T19:05:26.256380Z", + "iopub.status.idle": "2024-03-22T19:10:48.212600Z", + "shell.execute_reply": "2024-03-22T19:10:48.211612Z" + }, + "papermill": { + "duration": 321.97834, + "end_time": "2024-03-22T19:10:48.215223", + "exception": false, + "start_time": "2024-03-22T19:05:26.236883", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../treatment/_cache_aug_test/lct_gan/all inf False\n", + "Caching in ../../../../treatment/_cache_bs_test/lct_gan/all inf False\n", + "Caching in ../../../../treatment/_cache_synth_test/lct_gan/all inf False\n" + ] + } + ], + "source": [ + "#\"\"\"\n", + "from ml_utility_loss.loss_learning.estimator.process import pred, pred_2\n", + "from ml_utility_loss.util import stack_samples\n", + "\n", + "#samples = test_set[list(range(len(test_set)))]\n", + "#y = {m: pred(model[m], s) for m, s in samples.items()}\n", + "y = pred_2(model, test_set, batch_size=batch_size)\n", + "#\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "6ab51db8", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T19:10:48.252524Z", + "iopub.status.busy": "2024-03-22T19:10:48.252211Z", + "iopub.status.idle": "2024-03-22T19:10:48.278190Z", + "shell.execute_reply": "2024-03-22T19:10:48.277470Z" + }, + "papermill": { + "duration": 0.046837, + "end_time": "2024-03-22T19:10:48.280187", + "exception": false, + "start_time": "2024-03-22T19:10:48.233350", + "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-22T19:10:48.314828Z", + "iopub.status.busy": "2024-03-22T19:10:48.314536Z", + "iopub.status.idle": "2024-03-22T19:10:48.319916Z", + "shell.execute_reply": "2024-03-22T19:10:48.319062Z" + }, + "papermill": { + "duration": 0.025269, + "end_time": "2024-03-22T19:10:48.322225", + "exception": false, + "start_time": "2024-03-22T19:10:48.296956", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'lct_gan': 0.41919846044793607}\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-22T19:10:48.360763Z", + "iopub.status.busy": "2024-03-22T19:10:48.359857Z", + "iopub.status.idle": "2024-03-22T19:10:48.794117Z", + "shell.execute_reply": "2024-03-22T19:10:48.793175Z" + }, + "papermill": { + "duration": 0.455983, + "end_time": "2024-03-22T19:10:48.796356", + "exception": false, + "start_time": "2024-03-22T19:10:48.340373", + "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-22T19:10:48.834451Z", + "iopub.status.busy": "2024-03-22T19:10:48.834145Z", + "iopub.status.idle": "2024-03-22T19:10:49.238845Z", + "shell.execute_reply": "2024-03-22T19:10:49.237854Z" + }, + "papermill": { + "duration": 0.426045, + "end_time": "2024-03-22T19:10:49.240918", + "exception": false, + "start_time": "2024-03-22T19:10:48.814873", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAS8AAAEmCAYAAAAz0RYQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABLRUlEQVR4nO2deXxU9bn/32f2TDIz2feEgGyCkAQUDVZBpVKlFq6ttbYKiFi9pfdVLtda03t/WPVl8d5btLT1hW0toFepFRdstVUpCrSAC6vsyJKEJSskM5l9O78/TjJZSEKWWTLJ9/16ndfMnPmeM89MMp95vs95vs8jybIsIxAIBHGGKtYGCAQCQX8Q4iUQCOISIV4CgSAuEeIlEAjiEiFeAoEgLhHiJRAI4hIhXgKBIC4R4iUQCOISTawNiDbBYJDz589jMpmQJCnW5ggEgk7IskxzczO5ubmoVN37V8NOvM6fP09BQUGszRAIBJfhzJkz5Ofnd/v8sBMvk8kEKB+M2WyOsTUCgaAzNpuNgoKC0He1O4adeLVOFc1msxAvgWAQc7mwjgjYCwSCuESIl0AgiEuEeAkEgrgkpjGv1atXs3r1aioqKgCYOHEiy5cv57bbbuty/Lp167j//vs77NPr9bjd7rDaJcsyfr+fQCAQ1vMK+oZWq0WtVsfaDMEgJabilZ+fzzPPPMOYMWOQZZmXXnqJuXPnsnfvXiZOnNjlMWazmWPHjoUehztXy+v1Ul1djdPpDOt5BX1HkiTy8/NJSkqKtSmCQUhMxeuOO+7o8Pjpp59m9erVfPLJJ92KlyRJZGdnR8SeYDDI6dOnUavV5ObmotPpRCJrjJBlmfr6es6ePcuYMWOEBya4hEGTKhEIBNiwYQMOh4OysrJux9ntdkaMGEEwGGTKlCn8/Oc/71boADweDx6PJ/TYZrN1O9br9RIMBikoKMBoNPbvjQjCRkZGBhUVFfh8vsElXsEAnN4KtmoomAbpY2Jt0bAk5gH7AwcOkJSUhF6v5+GHH+btt99mwoQJXY4dN24ca9as4Z133uGVV14hGAwyffp0zp492+35V6xYgcViCW29ya7vaUmCIHoMWq+36hOo+hSaquDQ2+C8GGuLhiVSrBtweL1eqqqqsFqtvPHGG7z44ots3bq1WwFrj8/n48orr+See+7hqaee6nJMV55XQUEBVqv1kiRVt9vN6dOnGTlyJAaDYWBvTDBgBuXfw++Fnb9WblvJKYbxt8fOpiGGzWbDYrF0+R1tT8xdDJ1Ox+jRo5k6dSorVqyguLiYVatW9epYrVZLaWkpJ06c6HaMXq8PZdOLrHrBgGk4pghXQgqUfFfZV39EmUoKokrMxaszwWCwg6fUE4FAgAMHDpCTkxNhqwY/M2fOZOnSpbE2Y+hzoeWHMmsCJBeCLlERs6bK2No1DImpeJWXl7Nt2zYqKio4cOAA5eXlbNmyhe9973sAzJ8/n/Ly8tD4J598kg8//JBTp06xZ88e7r33XiorK1m8eHGs3kLcsWXLFiRJoqmpKdamxB+yDI0tIpUyEiQJUkcpj5uqYmfXMCWmVxvr6uqYP38+1dXVWCwWJk+ezAcffMBXv/pVAKqqqjoEzxsbG3nwwQepqakhJSWFqVOnsmPHjl7FxwSCAWOvBZ8LNDow5yr7LHlQcwBs52Nr2zAkpp7XH/7wByoqKvB4PNTV1fH3v/89JFygeAnr1q0LPX7uueeorKzE4/FQU1PDe++9R2lpaVRs9fqD3W7+QLDXY329HDsQPB4PP/nJTygoKECv1zN69OjQZ33TTTcBkJKSgiRJLFy48LLna25u5nvf+x6JiYnk5OTw3HPPXTJN/b//+z+uvvpqTCYT2dnZfPe736Wuri70fKvHt3nzZq6++mqMRiPTp0/vkHA86GkVKHMeqFpSN8z5bc8FB/Z3E/SNQZPnNdh5/uPuLwqMTE9kXmle6PHvtp3EF+j6Im5+SgJ3Xd2WrrFm+2lc3kuDvf/+1bH9tnX+/Pns3LmTX/3qVxQXF3P69GkaGhooKCjgzTff5Jvf/CbHjh3DbDaTkJBw2fMtW7aM7du38+c//5msrCyWL1/Onj17KCkpCY3x+Xw89dRTjBs3jrq6OpYtW8bChQv561//2uFc//mf/8nKlSvJyMjg4YcfZtGiRWzfvr3f7zWqNNcot6Z2SdKJ6Yon5veCswGSMmNj2zBEiNcQ4/jx47z++uts2rSJWbNmATBq1KjQ86mpqQBkZmaSnJx82fM1Nzfz0ksvsX79em655RYA1q5dS25ubodxixYtCt0fNWoUv/rVr7jmmmuw2+0dlvc8/fTTzJgxA4DHHnuMOXPm4Ha7B08qRE/YW8QrqZ14SRIkZoD1HDjqhXhFESFevWTJTaO7fU7VKZfy+zde0e3YznmXi64fORCzLmHfvn2o1eqQQAyUU6dO4fP5mDZtWmifxWJh3LhxHcbt3r2bn/3sZ+zfv5/GxkaCLVOoqqqqDjHJyZMnh+63XiWuq6ujsLAwLPZGjIAfHA3KfVOn5WntxUsQNYR49RKdpvfhwUiN7Q29mQaGG4fDwezZs5k9ezavvvoqGRkZVFVVMXv2bLxeb4exWq02dL81gz4YD7EiZ4OSy6U14NWY0Mpy2wqAxAzltlXcBFFh0OV5CQbGpEmTCAaDbN26tcvndTodQK/L/YwaNQqtVsvnn38e2me1Wjl+/Hjo8dGjR7lw4QLPPPMMN9xwA+PHj+8QrB8SOBoIyDJ7GjQ8v+Ukn5xqtyQoMb1ljPC8ookQryFGUVERCxYsYNGiRWzcuJHTp0+zZcsWXn/9dQBGjBiBJEm8++671NfXY7fbezyfyWRiwYIF/PjHP+bjjz/m0KFDPPDAA6hUqpDnUVhYiE6n49e//jWnTp3iz3/+c7fLteIW5wXON7k440lgRJqRaSNT254zpim3bqvItI8iQryGIKtXr+Zb3/oWP/jBDxg/fjwPPvggDocDgLy8PJ544gkee+wxsrKy+OEPf3jZ8z377LOUlZXx9a9/nVmzZnH99ddz5ZVXhoLsGRkZrFu3jg0bNjBhwgSeeeYZfvGLX0T0PUYbv72BaqsblyaZibkW1O0DnbokUGuUJFa3NXZGDjNivjA72vS06HNQLgQehDgcDvLy8li5ciUPPPBAxF5nMP09av7+a05XVnKu4Ot886szkCQJWZbx+IMYtGr4/EWw18Pkb0Na9xdsBJentwuzRcBecFn27t3L0aNHmTZtGlarlSeffBKAuXPnxtiyKBEMYr1QC0BBXgGSJHG6wcHfD9eSadYztyQPDMmKeLmaYmrqcEKI1zCncypDZw4fPgzAL37xC44dO4ZOp2Pq1Kn84x//ID09PVpmxhTZ3USzy0NQUjMiV0mTSNSrsXv8eC4G8AeCaBJSlMGuxhhaOrwQ4jXMyc3NZd++fT0+X1hYyO7du6Nn1CDjYkMNvoCMz5BMlkWpsJuRpMeoU+P0Bqhr9pArxCvqCPEa5mg0GkaP7j4BVwCpkoPJ+RaakwpDgXpJksi2GDhV76DG5iY3KVkZ7G6KmZ3DDXG1USC4DJLHSqJOQ3ZWVof92WblIkKt1a3EvEC52ji8roHFDCFeAsHlaA3CG1I67M62KOJVY3OD3qTsDPjAH94+ooKuEeIlEPSA1x/kyOmz1NrcyIaOl+0zTYp4NTl9eGQVaFuWZnmao23msETEvASCHmiwe7hwoQ6n5CcroaPnlaBTMyYriUS9hkBQVrwvnwvcNlFdIgoI8RIIeqC+0Yo66CXRqAX9pQmTX5/crjSQwQL2OvB03xtUED7EtFEg6AFbo7LY2mA0KUUHe6I17iXEKyoI8RoiDLbuQYPNnv7isF4AQG9K63aM2xfggt3T5pmJmFdUiKl4rV69msmTJ4f6KZaVlfG3v/2tx2M2bNjA+PHjMRgMTJo06ZIyw4L+07n2lgA8dqX0TYI5tcvnq60uVm85ydt7z7V5Xm7heUWDmIpXfn4+zzzzDLt372bXrl3cfPPNzJ07l0OHDnU5fseOHdxzzz088MAD7N27l3nz5jFv3jwOHjwYOSNlWalPHoutl/lCCxcuZOvWraxatQpJkpAkiZMnT/LAAw8wcuRIEhISGDdu3CXNfBcuXMi8efN4+umnyc3NDVVH3bFjByUlJRgMBq6++mo2btyIJEkdMvEPHjzIbbfdRlJSEllZWdx33300NDR0a09FRUVY/hzRxO0LEHQqVSKMlq49L7NBKa5o9/jxa1vKXQvPKyrENGB/xx13dHj89NNPs3r1aj755BMmTpx4yfhVq1bxta99jR//+McAPPXUU2zatInf/OY3vPDCC5ExMuCDf6yMzLkvxw3/cfk4C8rncvz4ca666qrQoumUlBTy8/PZsGEDaWlp7Nixg+9///vk5OTw7W9/O3Ts5s2bMZvNbNq0CVBW9N9xxx3cfvvtrF+/nsrKykumf01NTdx8880sXryY5557DpfLxU9+8hO+/e1v89FHH3VpT0ZGRpg+lOjR5PShDzSjU6vQJaZ0OcaoU6PTqPD6gzRjJAUU8ZLlS2t+C8LKoLnaGAgE2LBhAw6Hg7Kysi7H7Ny5k2XLlnXYN3v2bDZu3NjteT0eT4cO3Dbb0HPpLRYLOp0Oo9FIdnZbffUnnngidH/kyJHs3LmT119/vYN4JSYm8uKLL4YqrL7wwgtIksTvf/97DAYDEyZM4Ny5czz44IOhY37zm99QWlrKz3/+89C+NWvWUFBQwPHjxxk7dmyX9sQb2RYDXx2px2czKVcSu0CSJMwJWhqaPTQF9Ip4Bf1Koqo2+iW5hxMxF68DBw5QVlaG2+0mKSmJt99+u9sqBzU1NWR1WqKRlZVFTU1Nt+dfsWJFhy9xn1FrFQ8oFqi1lx/TA88//zxr1qyhqqoKl8uF1+vt0K4MlLLRrcIFcOzYMSZPntyhflb75hsA+/fv5+OPP+7QFaiVkydPMnZs/9u2DTa0fjtanQb0XYsXQHKreLmDoDWAzw0euxCvCBNz8Ro3bhz79u3DarXyxhtvsGDBArZu3Rq2Ltjl5eUdvDWbzUZBQUEPR3RCkno1dRtsvPbaazzyyCOsXLmSsrIyTCYT//u//8unn37aYVxiYmKfz22327njjjv47//+70uea+0INCTwe5TYI7QF47sg2aj8yDS5fEpVVZ8bvHYg/qbK8UTMxUun04WqGkydOpXPP/+cVatW8dvf/vaSsdnZ2dTW1nbYV1tb2+PURK/Xo9frw2v0IESn03VoqrF9+3amT5/OD37wg9C+kydPXvY848aN45VXXsHj8YQ+t/bNNwCmTJnCm2++SVFRERpN1/9Cne2JR/558BR5DQ6y01NI6OEHzJKgiJetVbwcDeB1RMvMYcugy/MKBoMdYlTtKSsrY/PmzR32bdq0qdsY2XCiqKiITz/9lIqKChoaGhgzZgy7du3igw8+4Pjx4/y///f/LhGhrvjud79LMBjk+9//PkeOHOGDDz4I1aNvbbixZMkSLl68yD333MPnn3/OyZMn+eCDD7j//vtDgtXZnrhob9YOWZY5fb6GGpuboPbS6XF7ss0GigssjM5MAl2LJ+vtubGJYODEVLzKy8vZtm0bFRUVHDhwgPLycrZs2cL3vvc9QGlbX15eHhr/ox/9iPfff5+VK1dy9OhRfvazn7Fr165eNZEY6jzyyCOo1WomTJhARkYGs2fP5s477+Tuu+/m2muv5cKFCx28sO4wm8385S9/Yd++fZSUlPCf//mfLF++HCAUB8vNzWX79u0EAgFuvfVWJk2axNKlS0lOTkalUnVpT1VVVeTefARw+QJIHjsSYEjqPt4FkGk2cPP4LCbmWoR4RRM5hixatEgeMWKErNPp5IyMDPmWW26RP/zww9DzM2bMkBcsWNDhmNdff10eO3asrNPp5IkTJ8rvvfden17TarXKgGy1Wi95zuVyyYcPH5ZdLle/3s9Q5ZVXXpG1Wq3sdDqj+rqx/HtUN7nkP21YL+9e92NZPvrX3h9Y9aksf/RzWT60MXLGDXF6+o62J6Yxrz/84Q89Pr9ly5ZL9t11113cddddEbJIAPDyyy8zatQo8vLy2L9/fyiHKxbduGOF1eVDH3Cg16h6DNa34vYFsLl9WFQJ6EG52iiIKDEP2AsGHzU1NSxfvpyamhpycnK46667ePrpp2NtVlSxunzo/A70GnWvxOvtveeosbr5l5FqikAE7KOAEC/BJTz66KM8+uijsTYjpthcPnQBB/qE3nleJoOGGivYgi1XtkXMK+IMuquNAsFgwOH1K+KlUXVZx6szppY1jtZAi3j5PcrSMkHEEJ5XF8iigcKgIJZ/h29clY6/wYhKknrteQHYvCpQaZQlQl47JHS9JlIwcITn1Q6tVvn1dDqdMbZEAG0letRqddRfW/I60KpVqHV60Fw+ydncIl7NHj/oW/LCRNwrogjPqx1qtZrk5GTq6uoAMBqNocRMQXQJBoPU19djNBq7zeKPKK3VUHsxZYS2aWOz2w9JiUrHIXHFMaII8epE61KjVgETxA6VSkVhYWHUf0BqbW4Of3GSsU0u8lIvP2WEtmmjw+snqDEqUxqf8OAjiRCvTkiSRE5ODpmZmfh8IuAaS3Q6XShjP5pcdHipr28gy+sjrxfxLoAErZqSwmRMeg1BV4IQryggxKsb1Gp1TGItgtjT7FauNOp6maAKyo/eTeNa2p2dao15CfGKJCJgLxB0wu5pyfFS9168OtC6vtEnAvaRRHheAkEnmt1+EkOeV+8C9tC2RCghqMUEwvOKMMLzEgg6Yff40fn7Nm0E+OTUBV79pIqjDX5lh4h5RRQhXgJBJ+xON9qgq8/ilaRvyfUKthQuFOIVUYR4CQTtCARlVF6ldZlOpweN4TJHtJHYIl7WQKt4uSDOijDGEyLmJRC0Q62SWDwtg4AmBXWCqU/ty1o9L5u/pXGKLIPf1RbAF4QV4XkJBJ2QvA40KhVSH4L10OZ52b0tXYRA8b4EEUGIl0DQmdaO1/qea9d3JlGv5AV6/UH86pbCjWJ9Y8QQ4iUQtOPQeSs7jlRQ3+xROgH1AZ1apQT5AY/U6nmJoH2kEDEvgaAdtTY3zosXcesCfcrxAiXLfuqIFNQqCU1TErgQuV4RJKae14oVK7jmmmswmUxkZmYyb948jh071uMx69atQ5KkDlv77s4CwUDouDSob54XwHWj0rimKBV9QsuxIss+YsRUvLZu3cqSJUv45JNP2LRpEz6fj1tvvRWHo+c/uNlsprq6OrRVVlZGyWLBUKeDePVx2tgBnVG5FQH7iBHTaeP777/f4fG6devIzMxk9+7d3Hjjjd0eJ0lSj12yBYL+Ynf70Aac6DRJ/VrX2LpESB/QYQERsI8ggypgb7VaAUhNTe1xnN1uZ8SIERQUFDB37lwOHTrU7ViPx4PNZuuwCQRd4QsE8bmdqOSAUru+H57XofNWXv2kii9qvS0nFTGvSDFoxCsYDLJ06VKuv/56rrrqqm7HjRs3jjVr1vDOO+/wyiuvEAwGmT59OmfPnu1y/IoVK7BYLKGtoKAgUm9BEOfYW6aMapWEWp8I6r5PTFpzvWytWfYiYB8xBo14LVmyhIMHD/Laa6/1OK6srIz58+dTUlLCjBkzeOutt8jIyOC3v/1tl+PLy8uxWq2h7cyZM5EwXzAEcPsDGHGhU6uQ+lMKB0jUtaxvDLRk2QvPK2IMilSJH/7wh7z77rts27aN/Pz8Ph2r1WopLS3lxIkTXT6v1+vR6y/fQEEgyLEkcG9pCsEjlv7V8aLT+kY1besbY1ARdqgT009UlmV++MMf8vbbb/PRRx8xcuTIPp8jEAhw4MABcnJyImChYLgheZVpY3+vNBp1Spa9M6gl0Nq5TXhfESGmnteSJUtYv34977zzDiaTiZqaGgAsFgsJCcryivnz55OXl8eKFSsAePLJJ7nuuusYPXo0TU1N/O///i+VlZUsXrw4Zu9DMIRo7fjTT89Lr1GhVkkEgiq8Kj0JskcRr37kjAl6JqbitXr1agBmzpzZYf/atWtZuHAhAFVVVR2aMDQ2NvLggw9SU1NDSkoKU6dOZceOHUyYMCFaZguGKFuO1ZF0vJKxGh/mfoqNJEkYdWqa3X58kkERL5EuERFiKl696Yi8ZcuWDo+fe+45nnvuuQhZJBjOnG10kd3USCBVBl3/PC+A0sIUgrKMti4JHFaRqBohBkXAXiAYDNg9rdn1un5PGwGmjkhpOWESOBAxrwghLoEIBCgJqm6PF23ArSSohiNGFeoiJMQrEgjPSyBASVDVBlyoVaBWa0Br7Pe53L4ANpcPvV+jLBES08aIIMRLIKDdlFGtQtIn9an8c2eOVNvYcqyea7R+vgIiYB8hxLRRIKB/XbK7w9iSZW8PtmbZC88rEgjxEggAfzBIIq6Bl8KhLVHVLpYIRRQxbRQIgMn5yUzyJCNXJg7Y82pdItQsi/6NkUR4XgJBC5KnGZUkhWHaqHhejoCOoCwr08Ze5DQK+oYQL4GgFW/L0qABThtblwj51Qa8gaAiXCLuFXaEeAkEwIZdZ/ji1FlFbAaY49W6REiW1Pho1z1bEFZEzEsw7PEFgpxtdJHT1IjKktTnrkFdUVqYgizLaM4mgc/a0ogjbeDGCkII8RIMe+xuP+qgF53kH1A5nPaElghdTAKrWN8YCcS0UTDsaXb7laYbahWSRg8aXfhO3pqpLxJVw47wvATDnmaPD33A3rKmceBTRmhbImQIaDGD8LwigPC8BMMee6vnFYYE1VaOVNt49dMqDjf4lR0i1yvs9Eu8Tp06FW47BIKYoaxrdPa7S3ZXtCaqOkSiasTol3iNHj2am266iVdeeQW32x1umwSCqGOUXS3TxoElqLaSoO20REi0QAs7/RKvPXv2MHnyZJYtW0Z2djYPPfQQn332WbhtEwiiwi1XZvH1cUlkJOkHVEG1PaElQsGWzlXC8wo7/RKvkpISVq1axfnz51mzZg3V1dV85Stf4aqrruLZZ5+lvr4+3HYKBBFF8tqRJCls08a2LkLtlggJwsqAAvYajYY777yTDRs28N///d+cOHGCRx55hIKCAubPn091dXWPx69YsYJrrrkGk8lEZmYm8+bN49ixY5d93Q0bNjB+/HgMBgOTJk3ir3/960DehkAAHptyG6arja1LhHzqBCVr3+cU6xvDzIDEa9euXfzgBz8gJyeHZ599lkceeYSTJ0+yadMmzp8/z9y5c3s8fuvWrSxZsoRPPvmETZs24fP5uPXWW3E4us+J2bFjB/fccw8PPPAAe/fuZd68ecybN4+DBw8O5K0IhimNDi+v7jzFl2eUtnvhinm1LhHyqwz4AzIEAxDwhuXcAgVJ7k0Ln048++yzrF27lmPHjnH77bezePFibr/99g4tys6ePUtRURF+v7/X562vryczM5OtW7dy4403djnm7rvvxuFw8O6774b2XXfddZSUlPDCCy9c9jVsNhsWiwWr1YrZHJ5fWUH8UnnBwbufHeMrDX+iuDANbvzxgKqotmdPVSPBoMykU79HLwXh2ofAmBqWcw9levsd7VeS6urVq1m0aBELFy7stlN1ZmYmf/jDH/p0XqvVCkBqavd/4J07d7Js2bIO+2bPns3GjRu7HO/xePB4PKHHNputTzYJhjbNbj/6gL2tgmqYhAtgSmHLEqFqE7jFEqFw0y/x2rRpE4WFhR08LVD6MJ45c4bCwkJ0Oh0LFizo9TmDwSBLly7l+uuv56qrrup2XE1NDVlZWR32ZWVlhbptd2bFihU88cQTvbZDMLxodvvR+e3o1OFLk7gEbUKLeIkrjuGkXzGvK664goaGhkv2X7x4kZEjR/bLkCVLlnDw4EFee+21fh3fHeXl5Vit1tB25syZsJ5fEN/YPX70AUdYc7xacfsC1NrcNAdFomok6Jfn1V2YzG63YzAY+ny+H/7wh7z77rts27aN/Pz8HsdmZ2dTW1vbYV9tbS3Z2dldjtfr9ej1+j7bJBge2D0+dAE7OkP41jW20tpF6Aa/n6sNiGljmOmTeLXGmiRJYvny5RiNbb3tAoEAn376KSUlJb0+nyzL/Nu//Rtvv/02W7Zs6ZXXVlZWxubNm1m6dGlo36ZNmygrK+v16woErTS7/aT5W7sGhVe82pYItfx4isoSYaVP4rV3715AEZ0DBw6g07WVDtHpdBQXF/PII4/0+nxLlixh/fr1vPPOO5hMplDcymKxkJCQAMD8+fPJy8tjxYoVAPzoRz9ixowZrFy5kjlz5vDaa6+xa9cufve73/XlrQgEAGjVKoyyE71GDYbwilfrEiFHUFRTjQR9Eq+PP/4YgPvvv59Vq1YNONVg9erVAMycObPD/rVr17Jw4UIAqqqqOlwYmD59OuvXr+e//uu/+OlPf8qYMWPYuHFjj0F+gaA77plWiOwzgNcf9phX2xIhEfOKBP2Kea1duzYsL96bFLMtW7Zcsu+uu+7irrvuCosNgmFOwI/kdQAD7xrUmdYlQi5ZR0CWUQvxCiu9Fq8777yTdevWYTabufPOO3sc+9Zbbw3YMIEgKniblVuVpq3qaZjQa1RoVBI+tQFfIIhaVJYIK70WL4vFoixcbbkvEMQ7R6ptHD1yhGuanOTn5oU1QRWUC1sJOjVeTwK+QBCD8LzCSq/Fq/1UMVzTRoEgljQ6vdhtjcrC6TAH61uZMiIFfAnoTqkg4FM2tTYirzXc6FfMy+VyIctyKFWisrKSt99+mwkTJnDrrbeG1UCBIFI0u/3oAg7lSmOEsuunFKYo1STO6pTF2T4nqMXMJRz0K8N+7ty5vPzyywA0NTUxbdo0Vq5cydy5c0NXEAWCwY7N5UPvt0cku74DkqQsEQKRLhFG+l1J9YYbbgDgjTfeIDs7m8rKSl5++WV+9atfhdVAgSBStHpekUhQbaV1iZC9NV1CJKqGjX6Jl9PpxGRSfqk+/PBD7rzzTlQqFddddx2VlZVhNVAgiATBoKxUlPCHt+VZZ47WNLP+0yq+bAwoO4TnFTb63YBj48aNnDlzhg8++CAU56qrqxM1sgRxgd3rJyjLGIIt5XAiFLBPDOV6iVr24aZf4rV8+XIeeeQRioqKuPbaa0PrCj/88ENKS0vDaqBAEAm8/iAZRkhS+5GQwBCZIHpCi3jZRQu0sNOvq43f+ta3+MpXvkJ1dTXFxcWh/bfccgv/8i//EjbjBIJIkZ6k597iZPAmg9YAmshUHknUtSzODsW8hHiFi36JFyilaTqXoZk2bdqADRIIooZbqdwbKa8LwKhvmzYGgmKJUDjpl3g5HA6eeeYZNm/eTF1dHcFgsMPzoqO2IC6Ignjp1Cq06nZLhIR4hY1+idfixYvZunUr9913Hzk5OaFlQwJBvPDn/edJrDrO1WofFkNyxF5HWSKkwadqXSIkrjaGi36J19/+9jfee+89rr/++nDbIxBEhYZmD+rmi0gpQATFC2BKYTKqDD+6KpUI2IeRfolXSkpKjx1+BILBTGuOV2GgJccrgtNGgNLCFPDq4bwafG5lmZBKHdHXHA70K1XiqaeeYvny5Tid4ldEEH+05nglBJqVrkERFi8ANIa2qhVi6hgW+uV5rVy5kpMnT5KVlUVRURFabcdV8nv27AmLcQJBJLC5fKiDHowqnxKvjbB4uX0BrC4fiQENSSqfMnXUJ0X0NYcD/RKvefPmhdkMgSB62Fx+9P5mpZqENgE0ussfNACO1TTz0dE6brHLTE5GxL3CRL/E6/HHHw+3HQJB1LC521WTiMKUMbEl18st6wC/SFQNE/2KeYFSCufFF1+kvLycixcvAsp08dy5c70+x7Zt27jjjjvIzc1FkiQ2btzY4/gtW7YgSdIlW3fdsgWCrtCqVWRo3crSnSiIV4KuUws0EfMKC/3yvL744gtmzZqFxWKhoqKCBx98kNTUVN566y2qqqpCtb4uh8PhoLi4mEWLFl22Ln57jh071mEBeGZmZp/fg2D4MnVECniNcDYhOp6XrnMLNOF5hYN+ideyZctYuHAh//M//xMqjQNw++23893vfrfX57ntttu47bbb+vz6mZmZJCcn9/k4gSCEu0m5jXCOF4CxxfNyYRBLhMJIv6aNn3/+OQ899NAl+/Py8qIyhSspKSEnJ4evfvWrbN++vcexHo8Hm83WYRMMX2RZVlruhcQr8p6XTqMsEfK3LBESnld46Jd46fX6LkXg+PHjZGRkDNio7sjJyeGFF17gzTff5M0336SgoICZM2f2mJqxYsUKLBZLaCsoKIiYfYLBT12zh9VbTnDoZEvRTGN0kq2NOg0+lUFp9iEC9mGhX+L1jW98gyeffBKfzwco67eqqqr4yU9+wje/+c2wGtiecePG8dBDDzF16lSmT5/OmjVrmD59Os8991y3x5SXl2O1WkPbmTNnImafYPDT5PQRdNuVLj5SlBJUUboIlY7OU65wCs8rLPRLvFauXIndbicjIwOXy8WMGTMYPXo0JpOJp59+Otw29si0adM4ceJEt8/r9XrMZnOHbdgSDML5vXD6H+AentPnJqeXBL8VvVatVE+N0jKdkoJkJo3IVnLLhHiFhX4F7C0WC5s2bWL79u3s378fu93OlClTmDVrVrjtuyz79u0jJycn6q8bd8gyHH4b6o8rj8/vgSkLICE5pmZFmyaXD4PfhkGjgoSU6L64rqUjt8+t/D1ENZYB0WfxCgaDrFu3jrfeeouKigokSWLkyJFkZ2cjy3KfyuPY7fYOXtPp06fZt28fqampFBYWUl5ezrlz50KpF7/85S8ZOXIkEydOxO128+KLL/LRRx/x4Ycf9vVtDD/qjijCpVIrbe09zfDlJph8V6wtiypWpw+D34rBoIaE6BUXcPsCNDlVmLx+pbqqz9UmZoJ+0adpoyzLfOMb32Dx4sWcO3eOSZMmMXHiRCorK1m4cGGfS0Dv2rWL0tLSUN37ZcuWUVpayvLlywGorq6mqqoqNN7r9fIf//EfTJo0iRkzZrB//37+/ve/c8stt/TpdYcdsgxVO5T7hWVQfI/yq3/hBNjrYmtblGlyeRXPS6uOqud1vLaZP+46R6W1pXCnSFQdMH3yvNatW8e2bdvYvHkzN910U4fnPvroI+bNm8fLL7/M/Pnze3W+mTNnKpete3i99jz66KM8+uijfTFZAGA7D/Z6UGsg/2plPV/GOKg7Cuf2wLivxdrCqODxB3B4Ahh8Ngza6E4bja1dhGifqJoWtdcfivTJ8/rjH//IT3/600uEC+Dmm2/mscce49VXXw2bcYIwUX9UuU0b09a5Oae47blOZbyHKr6AzKh0I+kaJxpVtMVL8ROcootQ2OiTeH3xxRd87Wvd/0rfdttt7N+/f8BGCcKILEP9MeV+5pU4vX5ONzhwJxUoQuZzQdPwaBScpNcwd4KF4hyjMm2O4sWKxHbiJSML8QoDfZo2Xrx4kaysrG6fz8rKorGxccBGCcKI84LSaEKloUrO5i/bK/D6gxi0au4xF5JsPQaNpyF1ZKwtjQ6ulv9PgyWq1Uxbuwi5MRAI2tCIRNUB0yfPKxAIoNF0r3dqtRq/3z9gowRhpMWr8ibl8NcjDXj9QVSShNsX4OO6JAKyDI0VsbUxSnj8AWSnUgEl2mkSWrUKvVaFX23A6w+KgH0Y6JPnJcsyCxcuRK/vukGnx+MJi1GCMNKkXK390pOKyxsgLUnHN6fk88fPqjjnyKTW5iZXqgWvA3SJMTY2srz22RlSaw5xk9FPUrRzvACTvm2JkNHniPrrDzX6JF4LFiy47JjeXmkURAFZDolXSu4V5DckUFyQTKJew3Wj0jhRp0fflA1YoekMZI6Prb0RxB8I0uT0keG+iM6sAmN61G0oKUhBbcjFUH9MeF5hoE/itXbt2kjZIYgEzovKImCVhtyCK7irSBNKTbkqz8JVeRY4NkpZMmQ7N6TFq8nlIyjLmIJNaNVqSIx+msKkfAskZEOTWCIUDvpdSVUQBzSfV25N2UqOF1y6AsKSp9zazkfRsOhz0eFFFfSTLDmRkGLieQHK6gYQlSXCgBCvoUxzDbIsc8pj4qLD22VCcJMmgxqbG7m5WuknOES5YPdi8Ddh1KpAa4hJfM/jD1DrUtHsaekg1EOCtuDyCPEayjRX4/AG2F6r5Y+fVV3yXQkEZV79opkvLwZwuDxgr42NnVHggsNDgq9JqVtvTI/JougzF138cf8FKhqcyg+F3x11G4YSQryGKsEg2GuxunzYdRkUpBpRqTp+YdUqiRHpiTTrM2l0esFWHSNjI099syJeRp0ajLFZlpOk1yBLGlxyS59Tjz0mdgwVhHgNVZwNEPDT6AG3xkJhatcVDIrSEnFo07G5fGAfml2YZFlmdGYSBQankumeGJt4V5KhpYsQCcoU3ivEayAI8RqqtMS7aoMWkCTyUxK6HJafkoBTl4bd4ydgG5riJUkSN4zJ4LosGa1aFTPPy6hVI0ngUSXgCwrxGihCvIYq9lqc3gBWTTp6rYq0xK67QlsStJCUTVAG+8UhHLQPBpTUEYiZ56VSSSTqNHjVRiXL3isSVQeCEK+hiqMeu8ePU5tKttnQbZFISZLIzMjAr9Jjc3rA0RBlQyPPRYcXt60B5CCotaCPXSnwRL0Gn9qoNOIQMa8BIcRrqOJooNnjx6lNIdts6HFoXqoRpy6NZrd/SMa9/nawmte37FYuSiRmxLT8cpKhvefVHDM7hgL9qmEvGOR4neB1UJRmZPakiZgSe85pGpWRROb4caQ3uYZcZdVAUOaC3Uue7wIJRjUkdV8VJRpMyDHhJQ9TzWExbRwgQryGIk5l6qcxpjAi8/ILkJP0GpLyRoDtC2geWp7XBbuHQFDGHGxEr1VBUmZM7RmdaQJdLlzUiGnjABHTxqGIo1657UtgutUjsdcOqczv81YlETRLsinLgmIsXgDokpRbcbVxQMRUvLZt28Ydd9xBbm4ukiSxcePGyx6zZcsWpkyZgl6vZ/To0ZfUuRcAjgs0Or0cbNJxtrF3a+ga5CQqGj2cv2BrK9g3BKixutAEXKRoPEqsKzG24uULBKl2q7G6fErjW78oI9VfYipeDoeD4uJinn/++V6NP336NHPmzOGmm25i3759LF26lMWLF/PBBx9E2NI4w1HPRYeXfRfUVF3onXhZ3QFOOAzU2z1tntsQ4HyTm0TvBUx6jVKAUNN1yki0sLp8vLa7liP1LaIl4l79JqYxr9tuu43bbrut1+NfeOEFRo4cycqVKwG48sor+ec//8lzzz3H7NmzI2Vm/OFswOUN4DSmkm7qunBkZ7LNBg5q00hyNOC1VqPLGBdhIyOP0+vH6vKR67tAUqJmUEwZTS1Z9i4M+INBNJ5mMEavf+RQIq5iXjt37rykK/fs2bPZuXNnt8d4PB5sNluHbUjjdSB7HTh9AVza5G6TUzuTqNcgmbKQAVvD0CiPo5IkZl2ZxeQUr9ItKMZTRgC9Ro1eq2qXLiHiXv0lrsSrpqbmkgYgWVlZ2Gw2XK6uK1OuWLECi8US2goKCqJhauxwNODxBXGqklBpdKQYez9NSkrNUU5xYWiIl0GrZlK+hSsTW6ZmpuzYGtSC2aDFpzbiEVn2AyKuxKs/lJeXY7VaQ9uZM2dibVJkcTTg9AZwalNITdJdUkmiJ5Iz8wFwN18E3xAp1+JzKx2UAEw5sbWlBVP7RFWPSFTtL3GV55WdnU1tbceaU7W1tZjNZhISul54rNfru20YMiRxNuD0+nFpU0hP6tv7zkpL5kt1Ena3A9lei5QyIkJGRh63L8DhahtFqjpSQenRqOu6ska0MRu01AnPa8DEledVVlbG5s2bO+zbtGkTZWVlMbJoEOKox+VTPK/0pL5dWcs06XHp05ABT1N8J6uebXSx9Vg9n+w7qOwYJF4XgDlBg0ediMcfEJ7XAIip52W32zlx4kTo8enTp9m3bx+pqakUFhZSXl7OuXPnePnllwF4+OGH+c1vfsOjjz7KokWL+Oijj3j99dd57733YvUWBheyDI4GRmcmkXVVMRpL3xYga9UqZpROIKG6GclzIUJGRoczLfltI7RNyg5zbuyM6URBqhHd2EKyKg3gGeIXkCJITD2vXbt2UVpaSmlpKQDLli2jtLSU5cuXA1BdXU1VVVVo/MiRI3nvvffYtGkTxcXFrFy5khdffFGkSbTidYDPhSSpMKdmY9T1/bfJmJqnZKLHeUnoMxeVGvGZtJTBGUSeV6bJwKRRBZgNWsXzGkIrGqJJTD2vmTNndtkUopWusudnzpzJ3r17I2hVHNOyphFDslL6pT+05kI5GpRS0qq4iiwA0Oz2ccHuRR90kKL1gqQZNFcaQ+hMSsZ/MKD86OiTYm1R3BF//5mC7nE0cNHhYc8FNUeq+zcdcWvMHKl3s6+ygaAjPqeOp+qVIPhIbWNLfld6/8U8QtTavdR7tfiDQTF17CdCvIYSjnpsbj+nnAnU2vqX6qDTqKn2m3D5AjTVnw2zgdHhVIOS+HmFvknZkVwYO2O64b0vqtlbF8TpDYBbiFd/EOI1lAjleKX2OU2iFZVKQp+sTLGa6s+F07qo4A8EqW6pJJFHyzTaMvgSk80JWrzqRCVdQnhe/UKI11BBlpEd9S05Xslk9HJNY1ckpipX5hwX4y/TXqNW8eANo/jm5FQS/S3VMSz5sTWqC0wGDR51UkuiqhCv/iDEa6jgtePzuPAFwK1LJrWXaxq7IjkjD4jfXC+tWkWhulG5imdMG5TBcJNBg1eThMcnpo39RYjXUKHF63JrzFiMCUqLr36SnlMASPidNrzO+EmiDAbltqvX1pZlYIPQ6wJITtDhVSfiFp5XvxHiNVRwXAitaextGZzuSDIakROSkYGGmvhZC3q42sZLOyo4eM4KTS35gcmDL94FkGzU4lEn4RaeV78R4jVUcNQTCMh49Gn9Dta3JyElB5Neg8oZP4UJj1TbaHT68LjsbbX4U4pialN3WBK0eDRKzCvosUPAH2uT4o64Wpgt6AFHPQWpRvKuLMaffvmmG5ej5MqxSKdrQWUNg3GRx+r0cbZRKYs0Tn9RiXclpoPeFGPLusaoUzN9fAFFwWRlh7dZqfQq6DXC8xoKyHKodLPKlIlOM/A/q9TakMMRH63Q9p9tAqAo3UiSo2XKmDoydgZdBkmSmFqUSlpaBipJAnd8/EgMJoR4DQXcVqWZg0odvl/vlmVC/uYG/D5veM4ZIXyBIIfOK3Gj4jwLXDytPJE6KoZW9RJDsnI7hJqeRAshXkOBlmVBn9XKfFrRFJ5z6s0cveBj1+kGKs9UXX58DDlW04zbF8CcoKUowa0sdlZpBmVyanua3T7OefQ0ubzgaoq1OXGHEK+hgKMeuydAXcBMsztMgV9JQk7MQAYu1A7eK46yLLP3TBMAxfkWVBdbSiwlFw669Yydqbzg5B9n/MqKAHdTrM2JO4R4DQVaqqc6tSkDyqzvjKUlWdVWP3gz7SVJ4qtXZjE2y8RVeRZoOK48kT4mtob1AkuCFrfGrCSqimljnxHiNRRw1LetaQyjeKVmKtOuQHMtTu/gvZSfbTEwZ3IOhoADbOeVUjPxIF5GRbzcviBBZ5Oo69VHhHjFO8EgvuZ6PP4gTm1Kr1ud9QZDSg5GnRqj9wJnL/aueW00CQQ7fdkvfKncmnMHbYpEe0x6DUG9RSm77XaCr+sOWIKuEeIV77ibcLo8BCUNelMaBq06fOc2pmM26tAEPVTXD65k1WBQ5rXPq/j4aJ2SpQ5Q3zplHBs7w/qAJElYTEa8aiMub0DEvfqIEK94p10liXBOGQFQa0hMUfK96s+f6bHqbbQ5XG2jzubhaE3L2ktPMzRVKvfjqNt3WqIej8asTMtF3KtPCPGKd+x1qCQJlSmTTJMh7KdPySwgNVHH1FT3oAnJePwBdpxUanVNG5mqeJu1h5WYkSU/rjLV05J0uDVmXL6ASJfoI4NCvJ5//nmKioowGAxce+21fPbZZ92OXbduHZIkddgMhvB/aeMGey1ZZgM3T53EdaNSw356bUo+47JMjNQ29qmBbSTZceICDk+AZKOWkoJkZWftAeU2+6qY2dUfrshIYsr4URSkGNua4wp6RczF609/+hPLli3j8ccfZ8+ePRQXFzN79mzq6rpflmI2m6murg5tlZWVUbR4kNHa5ceUhSRFQFxaEz1t55SGHDHmXJMrtBTolvFZqFUSNNeCvV5ZYZAxPrYG9pHURB35eYWK99jaQEXQK2IuXs8++ywPPvgg999/PxMmTOCFF17AaDSyZs2abo+RJIns7OzQlpWVFUWLBxFeJ0GXVYlFJUXoM0jMAI0et9vNF8e/bAuOxwCvP8jfD9ciyzAx10xhWksH7PN7lNv0MaDtunP6oCYxXbl1XhDpEn0gpuLl9XrZvXs3s2bNCu1TqVTMmjWLnTt3dnuc3W5nxIgRFBQUMHfuXA4dOtTtWI/Hg81m67ANGew1NNg9/PNcgI9PRmhhrySBJZ9jtc0cOnyIL2vtkXmdXtDo9OL0BjAZNNw4NkPZ6XNBbUtX7LypMbNtIJx16zhr82J3ikz7vhBT8WpoaCAQCFziOWVlZVFT03UJ4nHjxrFmzRreeecdXnnlFYLBINOnT+fs2a473axYsQKLxRLaCgoG93q3PmGvw+EJYNWkKZUJIoUln/QkPSZPDUdqYif+WWYD915XyB3FuW0pIdVfKLWwkjIG/VrG7jh4vpljVi1NTi/Eabu5WBDzaWNfKSsrY/78+ZSUlDBjxgzeeustMjIy+O1vf9vl+PLycqxWa2g7c2bwrtPrM801ODx+HLp0ssxhTpNojyWf9CQdZk815y46sbp8kXutLvAH2mJtJoOWLHPLBZpgAM7tVu7nTVW8xDgkPUmPS5uitEETca9eE1PxSk9PR61WU1vbsbV8bW0t2dm963Cs1WopLS3lxIkTXT6v1+sxm80dtqFCsLkGh9ePQ5tGVgTSJEKYctHr9aTr/Bh9Fzl0Lnq1p+psbtbtqOBUfRfT1ZoDSjkgXSJkxddVxvZkmQ04tcnYPX6lU7mgV8RUvHQ6HVOnTmXz5s2hfcFgkM2bN1NWVtarcwQCAQ4cOEBOTk6kzByc+Ny4rPUEZfAnZpJsjGAFBbUGkkeQZdaT7D7L/rNWpWVXhKmxunljz1ma3X52VTZ2TJINBqByh3K/sGzQV5DoiQyT4nl5/EG8ttrLHyAABsG0cdmyZfz+97/npZde4siRI/zrv/4rDoeD+++/H4D58+dTXl4eGv/kk0/y4YcfcurUKfbs2cO9995LZWUlixcvjtVbiA22czg8Sreg1OSUyKRJtCd1FKlGHTmB87h9AQ5XRzb2daymmTd2n8HjC5KXnMDcktyO7/H83javK7ckorZEGoNWjdasFH90NNYOipSUeCDmNezvvvtu6uvrWb58OTU1NZSUlPD++++HgvhVVVWoVG0a29jYyIMPPkhNTQ0pKSlMnTqVHTt2MGHChFi9hdhgO0+z249dn0O2OQpJuqmjkCSJMYYmDuAjGKFL+h5/gO0nGth/RpmaFqUbmTMpt2Npa48dTm9T7hd9Ja69rlaS07IJVGhxutykOBtClWwF3SPJg2nBWhSw2WxYLBasVmt8x7/2v0Zd5REOJV3HyMk3UpSeGPnX/OQFgs6LOMZ8A1NB+GNMgaDMSzsqQhcEri5K4for0i/N7D/yF6g5CKYsmLIQVDGfQAyY3ZUXafjHGkZqLjJ2xncgZ3KsTYoZvf2Oxv9ffTgiy2A7R6bJwE3XlEZHuAAyxqKSJEy2L0O7LilL00fcvkAolqVWSRSkGrEkaPnmlHxuGJNxqXDVHVWES5JgzOwhIVwA47LNXFs8kdGZSW1t2wQ9EvNpo6AfOBrA71WmS4lRnF5kToCqT6HhBPg91Dll3v2imtsmZZNj6X1mu9sXoOKCg1P1Dk7W2bnr6gKyLcrU9yuj09Gopa47frsa4fjflPsF14IlLxzvalCQpNdARgE07AO7EK/eIMQrHrFW4fD6UafmY4im55GUBcZUcF6EhuN8WpuG1eXjjV1nue6KNIrzk7tsu+YLBKlucnOuycXZRifnm9wdYmanGuwh8UrQdVOPzOeCLzaAzw3mHBh5Y0TeYkwxtVwxt9cqV1NVYazNNgQR4hWPNFZwut7B4WYtJYXNjM2KUtVQSVLyqU5vg3N7mF18H0G5mlP1Dv75ZQOfnrpAtiWBJL2GgtQEJuZaAGhy+nhzT8cVEOlJOkamJzE6M+nyCbY+F3zxurL2T2+Cq745JL/YtX4j1os+DDgptNcqFWEF3SLEK94IBvFdqMDu8WNNzgt5LFEjpxgqt4PtPDpnDd8ozuVwtY3PTl+kyenjTLty0a3ilZaoI92kJz1RR25yAkVpiVh6m5fmaoQDbyhTZa0BJn87Lko89wenL8gJTwo5/jMUNp0R4nUZhHjFG/YabM3N+FVa9Kl5mA1RThPQJ0HmlUrQvHIH0qRvMTHXwoQcMw12L/XNHpxePyntaumrVBL3XTeib68jy1B3GI6/r8T39Ekw+TvKGsYhSo7FwGeGbFIaK3HWn8ZYeG2sTRrUCPGKNxoraXL6sOlzKUxLio0NhWVQewgavoSmM5BcgCRJZJj04Wm9Zj0Hp7dCY0udNkseTJgLBsvAzz2IMWjVJGSMgsZPaao+hVGW43a9ZjQYGteZhxHyhS+xunw0GfIpSotSikRnEtOV6SMonlEgDAu1gwGoPwb7/gh7XlaES6WBkTdAyfeGvHC1kps/goBKi7W5WaRMXAbhecUTHjvO+io8/iDNiUXkpcSw8N7IG5UGr44G+HITjLut715CMAi2s0ruVt0h5UoigKSCrIlQdH1c1aMPByMzTHyiz0PrqsBbdxydeZit2e0DQrziiQtfctHhwaFLJyc7q+tcqGihS4TxX4cDG6B6vyJco7+qLOLuCa9T6fLT8CVcPNkmWKDEtbImQu4USEiOqPmDldREHf7UKwieq6Cx6jBZo2fE2qRBixCveKL+GDkWA4GiqahbG0/EkrQrYOxsOPY+nN+nTPXyr1aKAuqMylTQ61BqVDXXKqLVueSL1gBpo5UE2JSRQyZjvr9IkkTGiIkk1G9F66wFtw0McbyMLYII8YoX3DZorECjUlE0fioYjbG2SCG3FPRmOPquktbw5abLH5OYDqmjlJrz5vxhL1idmTY2H7XzSiTbeag/CgXTYm3SoESIV7xQc0BJH0guULLcBxNpV8C1DyslmS98CfY6JbFUpVEaYhjTlEYelnzFfl2MLjTECRq1CrInge28MiXPv0ZcdewCIV7xQDCI/9w+jpyzok6+kXFBWWn5NZjQ6KHgGmUDRWjFF67/ZE4g8OXfuVBzljTredTJQ2cdZ7gQ/no8UHeYuvpamnwaPrdnMNh0q0uEcA0IWaNnuzWVk/UOzh3cFmtzBiVCvAY7wSCBiu1UN7moNk1i6qgINZcVDCokScIy9gYA6k/uw2sTte07I8RrsHN+D+fPn8Ula3FmFHNljrjyNFyYMHYMbstIvP4Apz97N9bmDDqEeA1mXE04jn3E+SYXVZZpTB+fN/hiXYKIoVWrKLr6NmQkGisPUn1if6xNGlQI8RqsBHz4vniTL89dwKbNxFg0lTGZMVrLKIgZI4tGoRs5HRmo3L6BhtrzsTZp0DAoxOv555+nqKgIg8HAtddey2effdbj+A0bNjB+/HgMBgOTJk3ir3/9a5QsjRI+N3zxJ5wXzmEPajmfP5tbr8oRsa5hyuSvzEGdnI/sd1Pzz3Vgr4+1SYOCmIvXn/70J5YtW8bjjz/Onj17KC4uZvbs2dTV1XU5fseOHdxzzz088MAD7N27l3nz5jFv3jwOHjwYZcsjgCwj1x1F/vxFaDqDxZRE/o33cdvV4zDqRFbLcEWn0zH5a4tITMlkjDkIe9ZB1af4vO7LHjuUiXn3oGuvvZZrrrmG3/zmN4DSdLagoIB/+7d/47HHHrtk/N13343D4eDdd9sCmNdddx0lJSW88MILl329QdM9SJaRfS68bjvuxlrs9ZW4q49ia6xjZFoiyWlZMPFflA45AgEo60IPbwyVCjpQ5+GioZCkrFGY03MwJaeRlGRGr9WgUUlx66n39jsa059zr9fL7t27OzSVValUzJo1i507d3Z5zM6dO1m2bFmHfbNnz2bjxo1djvd4PHg8ntBjm633zVKtTh9/3n+OVnWXZci6+DkW+ylAJsdioCjVCMi4fX72VjWiDJaRkJUDABmZLJOeUelGkGV8gSB7T9ciBwN0br4TUGnZp57IzKu/ARodAkEInRGK74GaL/Ce/CdOx2l09sN4Gw7TALQmUwRUWizGBCYVpCoVOlRqPq1oJCjLSEiXpOCZDFomtLuKvbuyCX83jW+ltCuYNutbocdv7TmLw+PvcqzFqOMbxW3VYH2BYFiLCcRUvBoaGggEAqEGs61kZWVx9OjRLo+pqanpcnxNTde1j1asWMETTzzRL/sCskyD3dthX7K9CRwtMQeNAQzKUhfJHwBXU2jcJe6szgetpwoECQQCyl1Ji0+fjGTKQpt+BekjrmRUVip00chCIECSIKcYXdYkJo05TUPlYZobzuJvrsfvsuMLBFEHfehkCTzNbcc5LoCs/F92/t+U/RpwtP2fy46LBANdT8j8hvQOjxudPmyuruu5XfI6YZ7jDflASnl5eQdPzWazUVBQ0Ktjk/Qavjklv8Mvldo1G8n3FSRJwqjTQoJShlkjwxVX+lpc9XYuuySBJGHQqkGveFJqGcZNUaHWGUkw6LvsuCMQ9IhKhTHrCgqzrmjbFwwi+1143Q7kQAA0klLZQw4y6goXQVkm0H4a0YJOI0FSWwXc/FFu2hyvjoqjSeh4xftrV2UT6EboNOqOLp4mzGk+MRWv9PR01Go1tbW1HfbX1taSnZ3d5THZ2dl9Gq/X69Hr+1eaWKdRUZjWuXpDYZdj1UBmL+vmqYBBtrRaMBRQqZB0iei7WPiekdz702T3of5jXnLvC2Je0kB4gMT0J1+n0zF16lQ2b94c2hcMBtm8eTNlZWVdHlNWVtZhPMCmTZu6HS8QCIYmMZ82Llu2jAULFnD11Vczbdo0fvnLX+JwOLj//vsBmD9/Pnl5eaxYsQKAH/3oR8yYMYOVK1cyZ84cXnvtNXbt2sXvfve7WL4NgUAQZWIuXnfffTf19fUsX76cmpoaSkpKeP/990NB+aqqKlTtitVNnz6d9evX81//9V/89Kc/ZcyYMWzcuJGrrroqVm9BIBDEgJjneUWbQZPnJRAIuqS331FxmUsgEMQlQrwEAkFcIsRLIBDEJTEP2Eeb1hBfX5YJCQSC6NH63bxcOH7YiVdzs7JkordZ9gKBIDY0NzdjsVi6fX7YXW0MBoOcP38ek8kUt6vuB0Lr8qgzZ86Iq63tEJ9L18Tic5FlmebmZnJzczukSXVm2HleKpWK/Pz8WJsRc8xms/iSdoH4XLom2p9LTx5XKyJgLxAI4hIhXgKBIC4R4jXM0Ov1PP744/2utDFUEZ9L1wzmz2XYBewFAsHQQHheAoEgLhHiJRAI4hIhXgKBIC4R4iUQCOISIV5DENGBvGv68rmsW7cOSZI6bAaDIYrWRp5t27Zxxx13kJubiyRJ3bYPbM+WLVuYMmUKer2e0aNHs27duojb2R1CvIYYogN51/T1cwElq7y6ujq0VVZWRtHiyONwOCguLub555/v1fjTp08zZ84cbrrpJvbt28fSpUtZvHgxH3zwQYQt7QZZMKSYNm2avGTJktDjQCAg5+bmyitWrOhy/Le//W15zpw5HfZde+218kMPPRRRO6NNXz+XtWvXyhaLJUrWxR5Afvvtt3sc8+ijj8oTJ07ssO/uu++WZ8+eHUHLukd4XkOI1g7ks2bNCu3rTQfy9uNB6UDe3fh4pD+fC4DdbmfEiBEUFBQwd+5cDh06FA1zBy2D7X9FiNcQoqcO5N11FO9rB/J4pD+fy7hx41izZg3vvPMOr7zyCsFgkOnTp3P27NlomDwo6e5/xWaz4XK5om7PsKsqIRD0hrKysg69QKdPn86VV17Jb3/7W5566qkYWiZoRXheQ4hodCCPR/rzuXRGq9VSWlrKiRMnImFiXNDd/4rZbCYhofeds8OFEK8hhOhA3jX9+Vw6EwgEOHDgADk5OZEyc9Az6P5XYnKZQBAxXnvtNVmv18vr1q2TDx8+LH//+9+Xk5OT5ZqaGlmWZfm+++6TH3vssdD47du3yxqNRv7FL34hHzlyRH788cdlrVYrHzhwIFZvISL09XN54okn5A8++EA+efKkvHv3bvk73/mObDAY5EOHDsXqLYSd5uZmee/evfLevXtlQH722WflvXv3ypWVlbIsy/Jjjz0m33fffaHxp06dko1Go/zjH/9YPnLkiPz888/LarVafv/992NivxCvIcivf/1rubCwUNbpdPK0adPkTz75JPTcjBkz5AULFnQY//rrr8tjx46VdTqdPHHiRPm9996LssXRoS+fy9KlS0Njs7Ky5Ntvv13es2dPDKyOHB9//LEMXLK1fg4LFiyQZ8yYcckxJSUlsk6nk0eNGiWvXbs26na3IkriCASCuETEvAQCQVwixEsgEMQlQrwEAkFcIsRLIBDEJUK8BAJBXCLESyAQxCVCvAQCQVwixEsw5Fm3bh3Jycmhxz/72c8oKSkJPV64cCHz5s2Lul2CgSHESxA2Fi5ciCRJPPzww5c8t2TJEiRJYuHChR3Gh1s0ioqK+OUvf9lh3913383x48e7PWbVqlUdyhnPnDmTpUuXhtUuQfgR4iUIKwUFBbz22msd6ju53W7Wr19PYWFhTGxKSEggMzOz2+ctFksHz0wQHwjxEoSVKVOmUFBQwFtvvRXa99Zbb1FYWEhpaemAzt2VRzRv3ryQNzdz5kwqKyv593//91DTDLh02tiZ9h7gwoUL2bp1K6tWrQqd4/Tp04wePZpf/OIXHY7bt28fkiQN6zI5sUSIlyDsLFq0iLVr14Yer1mzhvvvvz/ir/vWW2+Rn5/Pk08+GWqa0VdWrVpFWVkZDz74YOgchYWFl7wngLVr13LjjTcyevTocL0FQR8Q4iUIO/feey///Oc/qayspLKyku3bt3PvvfdG/HVTU1NRq9WYTCays7P7VVDRYrGg0+kwGo2hc6jVahYuXMixY8dC7dJ8Ph/r169n0aJF4X4bgl4iykALwk5GRgZz5sxh3bp1yLLMnDlzSE9Pj7VZAyI3N5c5c+awZs0apk2bxl/+8hc8Hg933XVXrE0btgjPSxARFi1axLp163jppZfC5p2oVCo6V3Dy+XxhOXdvWLx4cehixNq1a7n77rsxGo1Re31BR4R4CSLC1772NbxeLz6fj9mzZ4flnBkZGR3iWIFA4JLmuDqdjkAgMKDX6e4ct99+O4mJiaxevZr3339fTBljjJg2CiKCWq3myJEjofvdYbVa2bdvX4d9aWlpFBQUXDL25ptvZtmyZbz33ntcccUVPPvsszQ1NXUYU1RUxLZt2/jOd76DXq/v13S1qKiITz/9lIqKCpKSkkhNTUWlUoViX+Xl5YwZM2ZI1fmPR4TnJYgYZrMZs9nc45gtW7ZQWlraYXviiSe6HLto0SIWLFjA/PnzmTFjBqNGjeKmm27qMObJJ5+koqKCK664goyMjH7Z/cgjj6BWq5kwYQIZGRlUVVWFnnvggQfwer1RuXoq6BlRBlog6AP/+Mc/uOWWWzhz5swlDVgF0UWIl0DQCzweD/X19SxYsIDs7GxeffXVWJs07BHTRoGgF/zxj39kxIgRNDU18T//8z+xNkeA8LwEAkGcIjwvgUAQlwjxEggEcYkQL4FAEJcI8RIIBHGJEC+BQBCXCPESCARxiRAvgUAQlwjxEggEcYkQL4FAEJf8f/XmbGAWpzDIAAAAAElFTkSuQmCC", + "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-22T19:10:49.281017Z", + "iopub.status.busy": "2024-03-22T19:10:49.280683Z", + "iopub.status.idle": "2024-03-22T19:10:49.490180Z", + "shell.execute_reply": "2024-03-22T19:10:49.489281Z" + }, + "papermill": { + "duration": 0.232063, + "end_time": "2024-03-22T19:10:49.492171", + "exception": false, + "start_time": "2024-03-22T19:10:49.260108", + "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-22T19:10:49.532570Z", + "iopub.status.busy": "2024-03-22T19:10:49.531730Z", + "iopub.status.idle": "2024-03-22T19:10:49.808277Z", + "shell.execute_reply": "2024-03-22T19:10:49.807332Z" + }, + "papermill": { + "duration": 0.2992, + "end_time": "2024-03-22T19:10:49.810292", + "exception": false, + "start_time": "2024-03-22T19:10:49.511092", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#\"\"\"\n", + "from ml_utility_loss.loss_learning.visualization import plot_grad, plot_grad_2, plot_grad_3\n", + "import matplotlib.pyplot as plt\n", + "\n", + "#plot_grad_2(y, model.models)\n", + "for m in model.models:\n", + " ym = y[m]\n", + " fig, ax = plt.subplots()\n", + " plot_grad_3(ym[\"error\"], ym[\"grad\"], name=f\"{m}_grad\", fig=fig, ax=ax)\n", + "#\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "54c0e9f3", + "metadata": { + "papermill": { + "duration": 0.019261, + "end_time": "2024-03-22T19:10:49.848721", + "exception": false, + "start_time": "2024-03-22T19:10:49.829460", + "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": 8219.40624, + "end_time": "2024-03-22T19:10:52.592795", + "environment_variables": {}, + "exception": null, + "input_path": "eval/treatment/lct_gan/42/mlu-eval.ipynb", + "output_path": "eval/treatment/lct_gan/42/mlu-eval.ipynb", + "parameters": { + "allow_same_prediction": true, + "dataset": "treatment", + "dataset_name": "treatment", + "debug": false, + "folder": "eval", + "gp": true, + "gp_multiply": true, + "log_wandb": false, + "param_index": 0, + "path": "eval/treatment/lct_gan/42", + "path_prefix": "../../../../", + "random_seed": 42, + "single_model": "lct_gan" + }, + "start_time": "2024-03-22T16:53:53.186555", + "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