diff --git "a/treatment/realtabformer/mlu-eval.ipynb" "b/treatment/realtabformer/mlu-eval.ipynb" new file mode 100644--- /dev/null +++ "b/treatment/realtabformer/mlu-eval.ipynb" @@ -0,0 +1,2312 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "982e76f5", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:16:01.509609Z", + "iopub.status.busy": "2024-03-22T21:16:01.509278Z", + "iopub.status.idle": "2024-03-22T21:16:01.542820Z", + "shell.execute_reply": "2024-03-22T21:16:01.541972Z" + }, + "papermill": { + "duration": 0.048611, + "end_time": "2024-03-22T21:16:01.545010", + "exception": false, + "start_time": "2024-03-22T21:16:01.496399", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import joblib\n", + "\n", + "#joblib.parallel_backend(\"threading\")" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "675f0b41", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:16:01.569755Z", + "iopub.status.busy": "2024-03-22T21:16:01.569411Z", + "iopub.status.idle": "2024-03-22T21:16:01.576059Z", + "shell.execute_reply": "2024-03-22T21:16:01.575231Z" + }, + "papermill": { + "duration": 0.020997, + "end_time": "2024-03-22T21:16:01.577917", + "exception": false, + "start_time": "2024-03-22T21:16:01.556920", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'\\n%cd /kaggle/working\\n#!git clone https://github.com/R-N/ml-utility-loss --depth=1 --single-branch --branch=main\\n%cd ml-utility-loss\\n!git pull\\n#!pip install .\\n!pip install . --no-deps --force-reinstall --upgrade\\n#'" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\"\"\"\n", + "%cd /kaggle/working\n", + "#!git clone https://github.com/R-N/ml-utility-loss --depth=1 --single-branch --branch=main\n", + "%cd ml-utility-loss\n", + "!git pull\n", + "#!pip install .\n", + "!pip install . --no-deps --force-reinstall --upgrade\n", + "#\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "5ae30f5c", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:16:01.601394Z", + "iopub.status.busy": "2024-03-22T21:16:01.601121Z", + "iopub.status.idle": "2024-03-22T21:16:01.605121Z", + "shell.execute_reply": "2024-03-22T21:16:01.604363Z" + }, + "papermill": { + "duration": 0.018064, + "end_time": "2024-03-22T21:16:01.607047", + "exception": false, + "start_time": "2024-03-22T21:16:01.588983", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.rcParams['figure.figsize'] = [3,3]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "9f42c810", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:16:01.630333Z", + "iopub.status.busy": "2024-03-22T21:16:01.629817Z", + "iopub.status.idle": "2024-03-22T21:16:01.633637Z", + "shell.execute_reply": "2024-03-22T21:16:01.632807Z" + }, + "executionInfo": { + "elapsed": 678, + "status": "ok", + "timestamp": 1696841022168, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "ns5hFcVL2yvs", + "papermill": { + "duration": 0.017561, + "end_time": "2024-03-22T21:16:01.635544", + "exception": false, + "start_time": "2024-03-22T21:16:01.617983", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "datasets = [\n", + " \"insurance\",\n", + " \"treatment\",\n", + " \"contraceptive\"\n", + "]\n", + "\n", + "study_dir = \"./\"" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "85d0c8ce", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:16:01.658463Z", + "iopub.status.busy": "2024-03-22T21:16:01.658206Z", + "iopub.status.idle": "2024-03-22T21:16:01.663633Z", + "shell.execute_reply": "2024-03-22T21:16:01.662844Z" + }, + "papermill": { + "duration": 0.019036, + "end_time": "2024-03-22T21:16:01.665456", + "exception": false, + "start_time": "2024-03-22T21:16:01.646420", + "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": "153f3577", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:16:01.691381Z", + "iopub.status.busy": "2024-03-22T21:16:01.690621Z", + "iopub.status.idle": "2024-03-22T21:16:01.696401Z", + "shell.execute_reply": "2024-03-22T21:16:01.695551Z" + }, + "papermill": { + "duration": 0.021042, + "end_time": "2024-03-22T21:16:01.698287", + "exception": false, + "start_time": "2024-03-22T21:16:01.677245", + "status": "completed" + }, + "tags": [ + "injected-parameters" + ] + }, + "outputs": [], + "source": [ + "# Parameters\n", + "dataset = \"treatment\"\n", + "dataset_name = \"treatment\"\n", + "single_model = \"realtabformer\"\n", + "gp = True\n", + "gp_multiply = True\n", + "random_seed = 4\n", + "debug = False\n", + "folder = \"eval\"\n", + "path_prefix = \"../../../../\"\n", + "path = \"eval/treatment/realtabformer/4\"\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.011356, + "end_time": "2024-03-22T21:16:01.720851", + "exception": false, + "start_time": "2024-03-22T21:16:01.709495", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "5f45b1d0", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:16:01.744904Z", + "iopub.status.busy": "2024-03-22T21:16:01.744611Z", + "iopub.status.idle": "2024-03-22T21:16:01.754648Z", + "shell.execute_reply": "2024-03-22T21:16:01.753746Z" + }, + "executionInfo": { + "elapsed": 7, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "UdvXYv3c3LXy", + "papermill": { + "duration": 0.024601, + "end_time": "2024-03-22T21:16:01.756631", + "exception": false, + "start_time": "2024-03-22T21:16:01.732030", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/kaggle/working\n", + "/kaggle/working/eval/treatment/realtabformer/4\n" + ] + } + ], + "source": [ + "from pathlib import Path\n", + "import os\n", + "\n", + "%cd /kaggle/working/\n", + "\n", + "if path is None:\n", + " path = os.path.join(folder, dataset_name, single_model, random_seed)\n", + "Path(path).mkdir(parents=True, exist_ok=True)\n", + "\n", + "%cd {path}" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "f85bf540", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:16:01.781822Z", + "iopub.status.busy": "2024-03-22T21:16:01.781532Z", + "iopub.status.idle": "2024-03-22T21:16:03.880213Z", + "shell.execute_reply": "2024-03-22T21:16:03.879298Z" + }, + "papermill": { + "duration": 2.113569, + "end_time": "2024-03-22T21:16:03.882203", + "exception": false, + "start_time": "2024-03-22T21:16:01.768634", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Set seed to \n" + ] + } + ], + "source": [ + "from ml_utility_loss.util import seed\n", + "if single_model:\n", + " model_name=f\"{model_name}_{single_model}\"\n", + "if random_seed is not None:\n", + " seed(random_seed)\n", + " print(\"Set seed to\", seed)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "8489feae", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:16:03.909111Z", + "iopub.status.busy": "2024-03-22T21:16:03.908710Z", + "iopub.status.idle": "2024-03-22T21:16:03.923589Z", + "shell.execute_reply": "2024-03-22T21:16:03.922838Z" + }, + "papermill": { + "duration": 0.030682, + "end_time": "2024-03-22T21:16:03.925451", + "exception": false, + "start_time": "2024-03-22T21:16:03.894769", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import json\n", + "import os\n", + "\n", + "df = pd.read_csv(os.path.join(dataset_dir, f\"{dataset_name}.csv\"))\n", + "with open(os.path.join(dataset_dir, f\"{dataset_name}.json\")) as f:\n", + " info = json.load(f)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "debcc684", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:16:03.949182Z", + "iopub.status.busy": "2024-03-22T21:16:03.948882Z", + "iopub.status.idle": "2024-03-22T21:16:03.956011Z", + "shell.execute_reply": "2024-03-22T21:16:03.955324Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "Vrl2QkoV3o_8", + "papermill": { + "duration": 0.021402, + "end_time": "2024-03-22T21:16:03.957981", + "exception": false, + "start_time": "2024-03-22T21:16:03.936579", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "task = info[\"task\"]\n", + "target = info[\"target\"]\n", + "cat_features = info[\"cat_features\"]\n", + "mixed_features = info[\"mixed_features\"]\n", + "longtail_features = info[\"longtail_features\"]\n", + "integer_features = info[\"integer_features\"]\n", + "\n", + "test = df.sample(frac=0.2, random_state=42)\n", + "train = df[~df.index.isin(test.index)]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "7538184a", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:16:03.981722Z", + "iopub.status.busy": "2024-03-22T21:16:03.981467Z", + "iopub.status.idle": "2024-03-22T21:16:04.073372Z", + "shell.execute_reply": "2024-03-22T21:16:04.072644Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "TilUuFk9vqMb", + "papermill": { + "duration": 0.106321, + "end_time": "2024-03-22T21:16:04.075491", + "exception": false, + "start_time": "2024-03-22T21:16:03.969170", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import ml_utility_loss.synthesizers.tab_ddpm.params as TAB_DDPM_PARAMS\n", + "import ml_utility_loss.synthesizers.lct_gan.params as LCT_GAN_PARAMS\n", + "import ml_utility_loss.synthesizers.realtabformer.params as RTF_PARAMS\n", + "from ml_utility_loss.synthesizers.realtabformer.params.default import GPT2_PARAMS, REALTABFORMER_PARAMS\n", + "from ml_utility_loss.util import filter_dict_2, filter_dict\n", + "\n", + "tab_ddpm_params = getattr(TAB_DDPM_PARAMS, dataset_name).BEST\n", + "lct_gan_params = getattr(LCT_GAN_PARAMS, dataset_name).BEST\n", + "lct_ae_params = filter_dict_2(lct_gan_params, LCT_GAN_PARAMS.default.AE_PARAMS)\n", + "rtf_params = getattr(RTF_PARAMS, dataset_name).BEST\n", + "rtf_params = filter_dict(rtf_params, REALTABFORMER_PARAMS)\n", + "\n", + "lct_ae_embedding_size=lct_gan_params[\"embedding_size\"]\n", + "tab_ddpm_normalization=\"quantile\"\n", + "tab_ddpm_cat_encoding=tab_ddpm_params[\"cat_encoding\"]\n", + "#tab_ddpm_cat_encoding=\"one-hot\"\n", + "tab_ddpm_y_policy=\"default\"\n", + "tab_ddpm_is_y_cond=True" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "cca61838", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:16:04.102547Z", + "iopub.status.busy": "2024-03-22T21:16:04.102266Z", + "iopub.status.idle": "2024-03-22T21:16:08.861893Z", + "shell.execute_reply": "2024-03-22T21:16:08.861116Z" + }, + "executionInfo": { + "elapsed": 3113, + "status": "ok", + "timestamp": 1696841025277, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "7Abt8nStvr9Z", + "papermill": { + "duration": 4.775879, + "end_time": "2024-03-22T21:16:08.864333", + "exception": false, + "start_time": "2024-03-22T21:16:04.088454", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-03-22 21:16:06.437912: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:9261] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", + "2024-03-22 21:16:06.437991: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:607] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", + "2024-03-22 21:16:06.439715: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1515] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n" + ] + } + ], + "source": [ + "from ml_utility_loss.loss_learning.estimator.pipeline import load_lct_ae\n", + "\n", + "lct_ae = load_lct_ae(\n", + " dataset_name=dataset_name,\n", + " model_dir=os.path.join(path_prefix, \"ml-utility-loss/models\"),\n", + " model_name=\"lct_ae\",\n", + " df_name=\"df\",\n", + ")\n", + "lct_ae = None" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "6f83b7b6", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:16:08.889960Z", + "iopub.status.busy": "2024-03-22T21:16:08.889374Z", + "iopub.status.idle": "2024-03-22T21:16:08.895447Z", + "shell.execute_reply": "2024-03-22T21:16:08.894744Z" + }, + "papermill": { + "duration": 0.020825, + "end_time": "2024-03-22T21:16:08.897377", + "exception": false, + "start_time": "2024-03-22T21:16:08.876552", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "from ml_utility_loss.loss_learning.estimator.pipeline import load_rtf_embed\n", + "\n", + "rtf_embed = load_rtf_embed(\n", + " dataset_name=dataset_name,\n", + " model_dir=os.path.join(path_prefix, \"ml-utility-loss/models\"),\n", + " model_name=\"realtabformer\",\n", + " df_name=\"df\",\n", + " ckpt_type=\"best-disc-model\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "0026de74", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:16:08.923043Z", + "iopub.status.busy": "2024-03-22T21:16:08.922708Z", + "iopub.status.idle": "2024-03-22T21:16:31.891605Z", + "shell.execute_reply": "2024-03-22T21:16:31.890521Z" + }, + "executionInfo": { + "elapsed": 20137, + "status": "ok", + "timestamp": 1696841045408, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "tbaguWxAvtPi", + "papermill": { + "duration": 22.984464, + "end_time": "2024-03-22T21:16:31.894136", + "exception": false, + "start_time": "2024-03-22T21:16:08.909672", + "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-22T21:16:31.924230Z", + "iopub.status.busy": "2024-03-22T21:16:31.923854Z", + "iopub.status.idle": "2024-03-22T21:16:31.930601Z", + "shell.execute_reply": "2024-03-22T21:16:31.929661Z" + }, + "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.024535, + "end_time": "2024-03-22T21:16:31.932760", + "exception": false, + "start_time": "2024-03-22T21:16:31.908225", + "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-22T21:16:31.959846Z", + "iopub.status.busy": "2024-03-22T21:16:31.959527Z", + "iopub.status.idle": "2024-03-22T21:16:31.964480Z", + "shell.execute_reply": "2024-03-22T21:16:31.963643Z" + }, + "papermill": { + "duration": 0.020899, + "end_time": "2024-03-22T21:16:31.966551", + "exception": false, + "start_time": "2024-03-22T21:16:31.945652", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "from ml_utility_loss.loss_learning.estimator.pipeline import load_dataset_3_factory\n", + "\n", + "datasetsn = load_dataset_3_factory(\n", + " dataset_dir=os.path.join(path_prefix, \"ml-utility-loss/\"),\n", + " dataset_name=dataset_name,\n", + " preprocessor=preprocessor,\n", + " cache_dir=path_prefix,\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "ad1eb833", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:16:31.994153Z", + "iopub.status.busy": "2024-03-22T21:16:31.993837Z", + "iopub.status.idle": "2024-03-22T21:16:41.497048Z", + "shell.execute_reply": "2024-03-22T21:16:41.496077Z" + }, + "papermill": { + "duration": 9.519677, + "end_time": "2024-03-22T21:16:41.499124", + "exception": false, + "start_time": "2024-03-22T21:16:31.979447", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../treatment/_cache_aug_test/realtabformer/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/realtabformer/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/realtabformer/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-22T21:16:41.528542Z", + "iopub.status.busy": "2024-03-22T21:16:41.528144Z", + "iopub.status.idle": "2024-03-22T21:16:41.866503Z", + "shell.execute_reply": "2024-03-22T21:16:41.865498Z" + }, + "executionInfo": { + "elapsed": 588, + "status": "ok", + "timestamp": 1696841049215, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "NgahtU1q9uLO", + "papermill": { + "duration": 0.355412, + "end_time": "2024-03-22T21:16:41.868649", + "exception": false, + "start_time": "2024-03-22T21:16:41.513237", + "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': 2,\n", + " 'epochs': 100,\n", + " 'lr_mul': 0.04,\n", + " 'n_warmup_steps': 220,\n", + " 'Optim': torch_optimizer.diffgrad.DiffGrad,\n", + " 'fixed_role_model': 'realtabformer',\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': ['realtabformer'],\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-22T21:16:41.899593Z", + "iopub.status.busy": "2024-03-22T21:16:41.899282Z", + "iopub.status.idle": "2024-03-22T21:16:42.010321Z", + "shell.execute_reply": "2024-03-22T21:16:42.009337Z" + }, + "papermill": { + "duration": 0.129193, + "end_time": "2024-03-22T21:16:42.012558", + "exception": false, + "start_time": "2024-03-22T21:16:41.883365", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../treatment/_cache_aug_train/realtabformer/all inf False\n", + "split df ratio is 0\n", + "../../../../ml-utility-loss/aug_train/treatment [400, 0]\n", + "Caching in ../../../../treatment/_cache_aug_val/realtabformer/all inf False\n", + "split df ratio is 1\n", + "../../../../ml-utility-loss/aug_val/treatment [0, 200]\n", + "Caching in ../../../../treatment/_cache_bs_train/realtabformer/all inf False\n", + "split df ratio is 0\n", + "../../../../ml-utility-loss/bs_train/treatment [100, 0]\n", + "Caching in ../../../../treatment/_cache_bs_val/realtabformer/all inf False\n", + "split df ratio is 1\n", + "../../../../ml-utility-loss/bs_val/treatment [0, 50]\n", + "Caching in ../../../../treatment/_cache_synth/realtabformer/all inf False\n", + "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-22T21:16:42.042357Z", + "iopub.status.busy": "2024-03-22T21:16:42.042043Z", + "iopub.status.idle": "2024-03-22T21:16:42.588076Z", + "shell.execute_reply": "2024-03-22T21:16:42.587088Z" + }, + "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.563354, + "end_time": "2024-03-22T21:16:42.590230", + "exception": false, + "start_time": "2024-03-22T21:16:42.026876", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Creating model of type \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[*] Embedding True True\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['realtabformer'] 1\n" + ] + } + ], + "source": [ + "from ml_utility_loss.loss_learning.estimator.model.pipeline import remove_non_model_params\n", + "from ml_utility_loss.loss_learning.estimator.pipeline import create_model\n", + "from ml_utility_loss.util import filter_dict, clear_memory\n", + "\n", + "clear_memory()\n", + "\n", + "params2 = remove_non_model_params(params)\n", + "adapters = filter_dict(preprocessor.adapter_sizes, params[\"models\"])\n", + "\n", + "model = create_model(\n", + " adapters=adapters,\n", + " #Body=\"twin_encoder\",\n", + " **params2,\n", + ")\n", + "#cf.apply_weight_standardization(model, n_last_layers_ignore=0)\n", + "print(model.models, len(model.adapters))" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "938f94fc", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:16:42.621551Z", + "iopub.status.busy": "2024-03-22T21:16:42.620716Z", + "iopub.status.idle": "2024-03-22T21:16:42.625070Z", + "shell.execute_reply": "2024-03-22T21:16:42.624257Z" + }, + "papermill": { + "duration": 0.02226, + "end_time": "2024-03-22T21:16:42.626963", + "exception": false, + "start_time": "2024-03-22T21:16:42.604703", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "study_name=f\"{model_name}_{dataset_name}\"" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "12fb613e", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:16:42.654211Z", + "iopub.status.busy": "2024-03-22T21:16:42.653945Z", + "iopub.status.idle": "2024-03-22T21:16:42.660740Z", + "shell.execute_reply": "2024-03-22T21:16:42.659851Z" + }, + "papermill": { + "duration": 0.022498, + "end_time": "2024-03-22T21:16:42.662580", + "exception": false, + "start_time": "2024-03-22T21:16:42.640082", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "19390534" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def count_parameters(model):\n", + " return sum(p.numel() for p in model.parameters() if p.requires_grad)\n", + "\n", + "count_parameters(model)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "bd386e57", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:16:42.690063Z", + "iopub.status.busy": "2024-03-22T21:16:42.689798Z", + "iopub.status.idle": "2024-03-22T21:16:42.844098Z", + "shell.execute_reply": "2024-03-22T21:16:42.843156Z" + }, + "papermill": { + "duration": 0.170368, + "end_time": "2024-03-22T21:16:42.846290", + "exception": false, + "start_time": "2024-03-22T21:16:42.675922", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "========================================================================================================================\n", + "Layer (type:depth-idx) Output Shape Param #\n", + "========================================================================================================================\n", + "MLUtilitySingle [2, 2648, 52992] --\n", + "├─Adapter: 1-1 [2, 2648, 52992] --\n", + "│ └─Embedding: 2-1 [2, 2648, 69, 768] (215,808)\n", + "│ └─TensorInductionPoint: 2-2 [69, 1] 69\n", + "│ └─Sequential: 2-3 [2, 2648, 512] --\n", + "│ │ └─FeedForward: 3-1 [2, 2648, 1024] --\n", + "│ │ │ └─Linear: 4-1 [2, 2648, 1024] 787,456\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, 52992] (recursive)\n", + "│ └─Embedding: 2-4 [2, 661, 69, 768] (recursive)\n", + "│ └─TensorInductionPoint: 2-5 [69, 1] (recursive)\n", + "│ └─Sequential: 2-6 [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-7 [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-8 [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-9 [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: 19,606,342\n", + "Trainable params: 19,390,534\n", + "Non-trainable params: 215,808\n", + "Total mult-adds (M): 77.67\n", + "========================================================================================================================\n", + "Input size (MB): 1.83\n", + "Forward/backward pass size (MB): 3885.09\n", + "Params size (MB): 78.43\n", + "Estimated Total Size (MB): 3965.34\n", + "========================================================================================================================" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from torchinfo import summary\n", + "\n", + "role_model = params[\"fixed_role_model\"]\n", + "s = train_set[0][role_model]\n", + "summary(model[role_model], input_size=((2, *s[0].shape), (2, *s[1].shape)), depth=9) # 8 max" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "0f42c4d1", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T21:16:42.877991Z", + "iopub.status.busy": "2024-03-22T21:16:42.877640Z", + "iopub.status.idle": "2024-03-22T22:34:44.654907Z", + "shell.execute_reply": "2024-03-22T22:34:44.654090Z" + }, + "papermill": { + "duration": 4681.795472, + "end_time": "2024-03-22T22:34:44.657060", + "exception": false, + "start_time": "2024-03-22T21:16:42.861588", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3 datasets [900, 450, 1050]\n", + "Creating model of type \n", + "[*] Embedding True 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.03997775016380672, 'avg_role_model_std_loss': 4.1784445257359195, 'avg_role_model_mean_pred_loss': 0.003654398211962573, 'avg_role_model_g_mag_loss': 1.125379170803628, '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.04061377539565386, 'n_size': 900, 'n_batch': 450, 'duration': 674.5398631095886, 'duration_batch': 1.4989774735768635, 'duration_size': 0.7494887367884318, 'avg_pred_std': 0.13649817022379668}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.014926234884779453, 'avg_role_model_std_loss': 5.134242437605607, 'avg_role_model_mean_pred_loss': 0.0010615593935528929, '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.014926234884779453, 'n_size': 450, 'n_batch': 225, 'duration': 201.71023845672607, 'duration_batch': 0.8964899486965603, 'duration_size': 0.44824497434828015, 'avg_pred_std': 0.10115677190537907}\n", + "Epoch 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013389052229801714, 'avg_role_model_std_loss': 1.3475211419678794, 'avg_role_model_mean_pred_loss': 0.0008060232592924967, 'avg_role_model_g_mag_loss': 0.8510899391982396, '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.013631856909132883, 'n_size': 900, 'n_batch': 450, 'duration': 668.8134686946869, 'duration_batch': 1.4862521526548598, 'duration_size': 0.7431260763274299, 'avg_pred_std': 0.1980984934745033}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.008773729122132234, 'avg_role_model_std_loss': 3.148535844511999, 'avg_role_model_mean_pred_loss': 0.0007421919603760864, '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.008773729122132234, 'n_size': 450, 'n_batch': 225, 'duration': 197.29309678077698, 'duration_batch': 0.8768582079145644, 'duration_size': 0.4384291039572822, 'avg_pred_std': 0.0931849179521747}\n", + "Epoch 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.007238608380309618, 'avg_role_model_std_loss': 1.7181790947342477, 'avg_role_model_mean_pred_loss': 0.0001944728850099263, 'avg_role_model_g_mag_loss': 0.5850073061873101, '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.0073909809483623376, 'n_size': 900, 'n_batch': 450, 'duration': 671.3675940036774, 'duration_batch': 1.4919279866748385, 'duration_size': 0.7459639933374193, 'avg_pred_std': 0.18768813919843738}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.011670945049314128, 'avg_role_model_std_loss': 4.705433707986743, 'avg_role_model_mean_pred_loss': 0.0008353222444575463, '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.011670945049314128, 'n_size': 450, 'n_batch': 225, 'duration': 201.83496594429016, 'duration_batch': 0.8970442930857341, 'duration_size': 0.44852214654286704, 'avg_pred_std': 0.08814679903484034}\n", + "Epoch 3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.007349486502970738, 'avg_role_model_std_loss': 1.3100048318551674, 'avg_role_model_mean_pred_loss': 0.0001732898741345901, 'avg_role_model_g_mag_loss': 0.552599703557272, '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.007496255471258072, 'n_size': 900, 'n_batch': 450, 'duration': 675.7493937015533, 'duration_batch': 1.5016653193367853, 'duration_size': 0.7508326596683926, 'avg_pred_std': 0.1919305363571362}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.008832458678805387, 'avg_role_model_std_loss': 4.634036721558722, 'avg_role_model_mean_pred_loss': 0.000772223847405924, '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.008832458678805387, 'n_size': 450, 'n_batch': 225, 'duration': 201.21838569641113, 'duration_batch': 0.8943039364284939, 'duration_size': 0.44715196821424696, 'avg_pred_std': 0.07392007318481268}\n", + "Epoch 4\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.005864556821421445, 'avg_role_model_std_loss': 1.186049147437506, 'avg_role_model_mean_pred_loss': 0.00015830445035028238, 'avg_role_model_g_mag_loss': 0.5711013979733394, '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.006005265417448634, 'n_size': 900, 'n_batch': 450, 'duration': 674.45822930336, 'duration_batch': 1.4987960651185777, 'duration_size': 0.7493980325592888, 'avg_pred_std': 0.18369348015795975}\n", + "Time out: 4172.159170627594/3600\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval loss {'role_model': 'realtabformer', 'n_size': 1050, 'n_batch': 525, 'role_model_metrics': {'avg_loss': 0.005029816059507788, 'avg_g_mag_loss': 0.2514285687037889, 'avg_g_cos_loss': 0.0, 'pred_duration': 27.87242317199707, 'grad_duration': 6.086328506469727, 'total_duration': 33.9587516784668, 'pred_std': 0.24172629415988922, 'std_loss': 0.00011316310701658949, 'mean_pred_loss': 0.00015098780568223447, 'pred_rmse': 0.07092119008302689, 'pred_mae': 0.043616220355033875, 'pred_mape': 2446463.25, 'grad_rmse': 0.9615513682365417, 'grad_mae': 0.46518340706825256, 'grad_mape': 7.454497337341309}, '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.005029816059507788, 'avg_g_mag_loss': 0.2514285687037889, 'avg_g_cos_loss': 0.0, 'avg_pred_duration': 27.87242317199707, 'avg_grad_duration': 6.086328506469727, 'avg_total_duration': 33.9587516784668, 'avg_pred_std': 0.24172629415988922, 'avg_std_loss': 0.00011316310701658949, 'avg_mean_pred_loss': 0.00015098780568223447}, 'min_metrics': {'avg_loss': 0.005029816059507788, 'avg_g_mag_loss': 0.2514285687037889, 'avg_g_cos_loss': 0.0, 'pred_duration': 27.87242317199707, 'grad_duration': 6.086328506469727, 'total_duration': 33.9587516784668, 'pred_std': 0.24172629415988922, 'std_loss': 0.00011316310701658949, 'mean_pred_loss': 0.00015098780568223447, 'pred_rmse': 0.07092119008302689, 'pred_mae': 0.043616220355033875, 'pred_mape': 2446463.25, 'grad_rmse': 0.9615513682365417, 'grad_mae': 0.46518340706825256, 'grad_mape': 7.454497337341309}, 'model_metrics': {'realtabformer': {'avg_loss': 0.005029816059507788, 'avg_g_mag_loss': 0.2514285687037889, 'avg_g_cos_loss': 0.0, 'pred_duration': 27.87242317199707, 'grad_duration': 6.086328506469727, 'total_duration': 33.9587516784668, 'pred_std': 0.24172629415988922, 'std_loss': 0.00011316310701658949, 'mean_pred_loss': 0.00015098780568223447, 'pred_rmse': 0.07092119008302689, 'pred_mae': 0.043616220355033875, 'pred_mape': 2446463.25, 'grad_rmse': 0.9615513682365417, 'grad_mae': 0.46518340706825256, 'grad_mape': 7.454497337341309}}}\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-22T22:34:44.690729Z", + "iopub.status.busy": "2024-03-22T22:34:44.690390Z", + "iopub.status.idle": "2024-03-22T22:34:44.694856Z", + "shell.execute_reply": "2024-03-22T22:34:44.693981Z" + }, + "papermill": { + "duration": 0.023889, + "end_time": "2024-03-22T22:34:44.696895", + "exception": false, + "start_time": "2024-03-22T22:34:44.673006", + "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-22T22:34:44.729578Z", + "iopub.status.busy": "2024-03-22T22:34:44.729280Z", + "iopub.status.idle": "2024-03-22T22:34:44.859492Z", + "shell.execute_reply": "2024-03-22T22:34:44.858686Z" + }, + "papermill": { + "duration": 0.149537, + "end_time": "2024-03-22T22:34:44.861809", + "exception": false, + "start_time": "2024-03-22T22:34:44.712272", + "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-22T22:34:44.896759Z", + "iopub.status.busy": "2024-03-22T22:34:44.896419Z", + "iopub.status.idle": "2024-03-22T22:34:45.193385Z", + "shell.execute_reply": "2024-03-22T22:34:45.192492Z" + }, + "papermill": { + "duration": 0.316689, + "end_time": "2024-03-22T22:34:45.195432", + "exception": false, + "start_time": "2024-03-22T22:34:44.878743", + "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-22T22:34:45.230997Z", + "iopub.status.busy": "2024-03-22T22:34:45.230208Z", + "iopub.status.idle": "2024-03-22T22:43:15.124159Z", + "shell.execute_reply": "2024-03-22T22:43:15.123146Z" + }, + "papermill": { + "duration": 509.915174, + "end_time": "2024-03-22T22:43:15.127171", + "exception": false, + "start_time": "2024-03-22T22:34:45.211997", + "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-22T22:43:15.161923Z", + "iopub.status.busy": "2024-03-22T22:43:15.161610Z", + "iopub.status.idle": "2024-03-22T22:43:15.183186Z", + "shell.execute_reply": "2024-03-22T22:43:15.182334Z" + }, + "papermill": { + "duration": 0.040817, + "end_time": "2024-03-22T22:43:15.185177", + "exception": false, + "start_time": "2024-03-22T22:43:15.144360", + "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
realtabformer0.00.3809520.005036.1398320.4651837.4544970.9615510.00015127.9044750.0436162446463.50.0709210.2417260.00011334.044307
\n", + "
" + ], + "text/plain": [ + " avg_g_cos_loss avg_g_mag_loss avg_loss grad_duration \\\n", + "realtabformer 0.0 0.380952 0.00503 6.139832 \n", + "\n", + " grad_mae grad_mape grad_rmse mean_pred_loss pred_duration \\\n", + "realtabformer 0.465183 7.454497 0.961551 0.000151 27.904475 \n", + "\n", + " pred_mae pred_mape pred_rmse pred_std std_loss \\\n", + "realtabformer 0.043616 2446463.5 0.070921 0.241726 0.000113 \n", + "\n", + " total_duration \n", + "realtabformer 34.044307 " + ] + }, + "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-22T22:43:15.219860Z", + "iopub.status.busy": "2024-03-22T22:43:15.219538Z", + "iopub.status.idle": "2024-03-22T22:43:15.647783Z", + "shell.execute_reply": "2024-03-22T22:43:15.646798Z" + }, + "papermill": { + "duration": 0.448182, + "end_time": "2024-03-22T22:43:15.649866", + "exception": false, + "start_time": "2024-03-22T22:43:15.201684", + "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-22T22:43:15.685806Z", + "iopub.status.busy": "2024-03-22T22:43:15.685033Z", + "iopub.status.idle": "2024-03-22T22:52:22.374570Z", + "shell.execute_reply": "2024-03-22T22:52:22.373559Z" + }, + "papermill": { + "duration": 546.710655, + "end_time": "2024-03-22T22:52:22.377660", + "exception": false, + "start_time": "2024-03-22T22:43:15.667005", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../treatment/_cache_aug_test/realtabformer/all inf False\n", + "Caching in ../../../../treatment/_cache_bs_test/realtabformer/all inf False\n", + "Caching in ../../../../treatment/_cache_synth_test/realtabformer/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-22T22:52:22.414647Z", + "iopub.status.busy": "2024-03-22T22:52:22.414333Z", + "iopub.status.idle": "2024-03-22T22:52:22.441063Z", + "shell.execute_reply": "2024-03-22T22:52:22.440149Z" + }, + "papermill": { + "duration": 0.047944, + "end_time": "2024-03-22T22:52:22.443151", + "exception": false, + "start_time": "2024-03-22T22:52:22.395207", + "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-22T22:52:22.476264Z", + "iopub.status.busy": "2024-03-22T22:52:22.475900Z", + "iopub.status.idle": "2024-03-22T22:52:22.481296Z", + "shell.execute_reply": "2024-03-22T22:52:22.480405Z" + }, + "papermill": { + "duration": 0.024382, + "end_time": "2024-03-22T22:52:22.483457", + "exception": false, + "start_time": "2024-03-22T22:52:22.459075", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'realtabformer': 0.41001513860391026}\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-22T22:52:22.519004Z", + "iopub.status.busy": "2024-03-22T22:52:22.518705Z", + "iopub.status.idle": "2024-03-22T22:52:22.913927Z", + "shell.execute_reply": "2024-03-22T22:52:22.912866Z" + }, + "papermill": { + "duration": 0.416011, + "end_time": "2024-03-22T22:52:22.916171", + "exception": false, + "start_time": "2024-03-22T22:52:22.500160", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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EQkEguMT72dUpPsKBALVEUIkEAhURwiRQCBQHdWD1cMhGt6Ku9RDIBCMKtHP5vFC0WNaiLq7uwHiy64WCASq0d3djcPhGPT1Mb1qFolEaGhowGaz9ZRfpBfREpe6ujqxahgn4p4lRqL3TZZluru7KSoqQnOMVjhj2iPSaDRMnCgq3O12u/hQDRFxzxIjkft2LE8oighWCwQC1RFCJBAIVEcI0RjGaDRy9913J9aRIE0R9ywxRvq+jelgtUAgGB8Ij0ggEKiOECKBQKA6QogEAoHqCCESCASqI4QohRnqDrjPPvss06dPx2QycfLJJ/Ovf/1rlCxNLYZy36qqqmIbI0QfJpNpFK1Vn3feeYfLL7+coqIiJEni+eefP+573nrrLU499VSMRiMVFRVUVVUNywYhRCnKUHfAff/997n++uv5xje+wbZt21iyZAlLlizh008/HWXL1SWRnYPtdjuNjY2xR01NzSharD5ut5tZs2bxyCOPxDX+4MGDXHbZZZx33nls376d22+/nRUrVvDyyy8nboQsSEnmzZsn33rrrbHn4XBYLioqktetWzfg+GuuuUa+7LLL+hybP3++fMstt4yonanGUO9bZWWl7HA4Rsm61AeQn3vuuWOO+cEPfiCfdNJJfY5de+218sUXX5zwdYVHlIJEd8C98MILY8eOtQMuwAcffNBnPMDFF1886PjxSCL3DcDlcjFp0iRKSkq44oor+Oyzz0bD3DHLSPytCSFKQY61A25TU9OA72lqahrS+PFIIvdt2rRpPP7447zwwgs89dRTRCIRzjzzTA4dOjQaJo9JBvtbczqdeL3ehM45pqvvBYLhsmDBgj576J155pmceOKJPProo9x3330qWpZeCI8oBRnqDrgABQUFQxo/Hknkvh2NXq9nzpw57Nu3byRMHBcM9rdmt9sxm80JnVMIUQqSyA64CxYs6DMe4NVXX02rHXOTsXNwOBxmx44dFBYWjpSZY54R+VtLOMwtGFH+8pe/yEajUa6qqpJ37twpr1y5Us7MzJSbmppkWZblr3/96/Kdd94ZG//ee+/JOp1O/tWvfiXv2rVLvvvuu2W9Xi/v2LFDrR9BFYZ63+6991755Zdflvfv3y9v2bJFvu6662STySR/9tlnav0Io053d7e8bds2edu2bTIgP/DAA/K2bdvkmpoaWZZl+c4775S//vWvx8YfOHBAtlgs8n/913/Ju3btkh955BFZq9XKL730UsI2CCFKYR5++GG5tLRUNhgM8rx58+QPP/ww9trChQvlZcuW9Rn/17/+VT7hhBNkg8Egn3TSSfKLL744yhanBkO5b7fffntsbH5+vnzppZfKW7duVcFq9XjzzTdloN8jep+WLVsmL1y4sN97Zs+eLRsMBnny5MlyZWXlsGwQbUAEAoHqiBiRQCBQHSFEAoFAdYQQCQQC1RFCJBAIVEcIkUAgUB0hRAKBQHWEEAkEAtURQiQQCFRHCJFgTFFVVUVmZmbs+T333MPs2bNjz5cvX86SJUtG3S7B8BBCJBiQ5cuXI0kS3/zmN/u9duuttyJJEsuXL+8zPtkCUFZWxoMPPtjn2LXXXsuePXsGfc9DDz3Up3/yokWLuP3225NqlyD5CCESDEpJSQl/+ctf+jS78vl8PPPMM5SWlqpik9lsJi8vb9DXHQ5HH49JMDYQQiQYlFNPPZWSkhI2bNgQO7ZhwwZKS0uZM2fOsM49kKeyZMmSmJe1aNEiampq+N73vhfbXQP6T82Oprdntnz5ct5++20eeuih2DkOHjxIRUUFv/rVr/q8b/v27UiSJPoQqYQQIsExuemmm6isrIw9f/zxx7nxxhtH/LobNmxg4sSJ/PjHP47trjFUHnroIRYsWMDNN98cO0dpaWm/nwmgsrKSc889l4qKimT9CIIhIIRIcExuuOEG/vOf/1BTU0NNTQ3vvfceN9xww4hfNysrC61Wi81mo6CgIKFOkw6HA4PBgMViiZ1Dq9WyfPlydu/eHdvvLBgM8swzz3DTTTcl+8cQxInoWS04Jrm5uVx22WVUVVUhyzKXXXYZOTk5aps1LIqKirjssst4/PHHmTdvHv/85z/x+/1cffXVapuWtgiPSHBcbrrpJqqqqnjiiSeS5jVoNBqOboUVDAaTcu54WLFiRSwQX1lZybXXXovFYhm16wv6IoRIcFwuueQSAoEAwWCQiy++OCnnzM3N7RP3CYfD/XalNRgMhMPhYV1nsHNceumlZGRksH79el566SUxLVMZMTUTHBetVsuuXbti3w9GV1cX27dv73MsOzubkpKSfmPPP/98Vq9ezYsvvsiUKVN44IEH6Ozs7DOmrKyMd955h+uuuw6j0ZjQlLCsrIyNGzdSXV2N1WolKysLjUYTixWtWbOGqVOnptUmA6mI8IgEcWG327Hb7ccc89ZbbzFnzpw+j3vvvXfAsTfddBPLli1j6dKlLFy4kMmTJ3Peeef1GfPjH/+Y6upqpkyZQm5ubkJ233HHHWi1WmbMmEFubi61tbWx177xjW8QCARGZRVQcGxEz2pB2vLuu+9ywQUXUFdX12/nUsHoIoRIkHb4/X5aW1tZtmwZBQUFPP3002qblPaIqZkg7fjzn//MpEmT6Ozs5Je//KXa5ggQHpFAIEgBhEckEAhURwiRQCBQHSFEAoFAdYQQCQQC1RFCJBAIVEcIkUAgUB0hRAKBQHWEEAkEAtX5/0J+lT85FfF/AAAAAElFTkSuQmCC", + "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-22T22:52:22.954710Z", + "iopub.status.busy": "2024-03-22T22:52:22.954391Z", + "iopub.status.idle": "2024-03-22T22:52:23.361755Z", + "shell.execute_reply": "2024-03-22T22:52:23.360832Z" + }, + "papermill": { + "duration": 0.43022, + "end_time": "2024-03-22T22:52:23.364049", + "exception": false, + "start_time": "2024-03-22T22:52:22.933829", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAASIAAAEoCAYAAAD8JfzQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABD1klEQVR4nO29eXhU5d3//zqzz2SW7HtC2AVZRaGgLW6VR611qdW2jwquXbBXlR9VeBas1hbbqoWn+tjWFqhftT61orW1itQqKCJFEEXZJJAFkpCELJOZyazn/P44M0NCEpJMljPJ3K/rmmuSM2f5zPaez33fn0VSFEVBIBAINESntQECgUAghEggEGiOECKBQKA5QogEAoHmCCESCASaI4RIIBBojhAigUCgOUKIBAKB5gghEggEmiOESCAQaI5BawNiPPLII6xcuZIf/OAHrFmzpk/HyLJMTU0NDocDSZKG1kCBQNBvFEWhra2NwsJCdLqe/Z6kEKKdO3fym9/8hhkzZvTruJqaGkpKSobIKoFAMFhUV1dTXFzc4+OaC5HH4+Hf//3fefrpp3n44Yf7dazD4QDUJ+l0OofCPIFAMADcbjclJSXx72pPaC5ES5cu5corr+TSSy/tVYgCgQCBQCD+f1tbGwBOp1MIkUCQxPQ2daKpEL3wwgvs3r2bnTt39mn/1atX8+CDDw6xVQKBYLjRbNWsurqaH/zgBzz33HNYLJY+HbNy5UpaW1vjt+rq6iG2UiAQDAeSVoXRXnnlFa699lr0en18WyQSQZIkdDodgUCg02Pd4Xa7cblctLa2iqGZQJCE9PU7qtnQ7JJLLmHv3r2dtt16662cddZZ3H///b2KkEAgGD1oJkQOh4Np06Z12paWlkZWVlaX7QKBYHQjIqsFAoHmaL5835F33nlHaxMEAgCCYZl3P2+g2Rdi3thMSjJtWps0qhEekUDQDVsPNfDJsVaqm3y8+nENbf6Q1iaNaoQQCQSn4faH+KzGDYBRLxEMy+ypbtHWqFGOECKB4DQO1rUhKwrFGVb+bVp+fJtoATh0JNUckUCQDGSmmRibncaEXDtjs+1cNbOA4gybqPAwhAghEghOY3yOnfE59vj/E3LPnLApGDhiaCYQCDRHCJFA0IH6Nj+t7aFO80H+UIRthxt59eMaMU80RIihmUDQga2HGqlu8rHo7HymFqq5UQadxK7KZiKygrs9jMtm1NjK0YfwiASCKIqi0NCm1rvKtpvi2w16Hdl2MwB1br8mto12hBAJBFG8wQj+UARJUlfOOpLnVIWo0RPo7lDBABFCJBBEaYx6Qxk2EwZ9569GTJhOeoPDblcqIIRIIIhy0hsblpm7PBYTomYhREOCECKBIEpDmyoyWXZTl8diQtTiCxGRxcrZYCOESCCI0hT1drK7ESK72YDJoMOgl/D4w8Nt2qhHLN8LBFHOLcug0RMg19m1hrokSdx6fhlWo16kegwBQogEgiiT8hxMyus5ncNmEl+XoUIMzQQCgeYIiRcIUFfD2vxhMu0m7Obuvxa1re3srGjGYTZw0Vm5w2zh6EZ4RAIBcPBEGy/tPsb28pPd7xDwEPG1UF7voarJN7zGpQDCIxIIUJflAVzWbvLIju+GzzeTHQpR2lzKcd18FEURk9aDiPCIBAKgtV1duk8/PaHV2wiH/wGKjFmvo6jtExzeSjwBsYQ/mAghEgg45RGln+4RVW0HOQJZE5BK52I26ihyfxTfXzA4CCESpDzBsIwvGAHA2VGIQn5oOKD+PWYBlHwBk9GAI3CC9tYGDSwdvQghEqQ8sVZBJoMOi7FDq/PGgxAJQ1o2OAvBbCfsHANA5MQ+LUwdtQghEqQ8sfkep+W0tZuT5ep9zlkQnZhWsiehl8DYWjmcJo56xKqZIOXJTDPx5al56HUdVsFkGZorojuMi2+ePm0mOt92JJ0bIiHQi2qNg4EQIkHK47AYmVbk6ryxrRbCATBawFEQ36y3ZYDZCYE2aK3uJFKCxBFDM4GgO9zH1XtXCeg6fE0kCdJL1b9bjw+/XaMU4REJUp6jjV70kkSu03xqsjomRM7CTvuGIjLb6wyk17RwdkYNegSDgfCIBCnPOwfreWn3sXjhfADcNeq9s6jTvgadRHm7A28gQrCldhitHN0IIRKkNIqixAudOS3RiWe/W71JUqf5IVDrEumceYBEqN2tzhUJBowQIkFK0x6KEJYVJAnsseX7tjr1Pi0bDF2rNabZbLQbXQTCMnjqh9Ha0YsQIkFK0xb1htJMhlPL996ouNjzuj3GbjbgM2YSDMtqLppgwAghEqQ0sahqe8dgxpiXk9Z9zSG72UC7MYNgRAafEKLBQAiRIKWJeUSOjkIU83LsOd0eYzPraTemExIe0aAhhEiQ0ngDarJrWqwqYyQE7U3q3z14RGkmA2FLppr14TsJimgvNFBEHJEgpZmc7yDdZjzVYtrbqAqL0QqmtG6PmZRnZ/Klc+Ddt9Xo66AHzD0X3Rf0jhAiQUqT4zCT4+jQ2TU+UZ0bT3Q9HUmSQG8Aawb4mlTxEkI0IMTQTCDoiDdaZ6iHYVknrJnqfWwoJ0gYIUSClOZgXRuVJ72EI7K6wdes3tsyz3jc3/fW8nZVCH84Au0tQ2tkCiCESJCyyLLC65/WsnH3cXUpHtTJZ+hViE64/dQFLWoskb9laA1NAYQQCVIWXyiCooBOkrAa9Wptan+r+qD1zEKUZjLgNzgIRWThEQ0CQogEKYs3WpnRZor2s29vAUVWi531MvlsM+sJGJynPCKxhD8gNBWip556ihkzZuB0OnE6ncyfP5/XX39dS5MEKURciMzRYh6xSWdbZo8rZjHSzDGPSIFwEEKi6eJA0FSIiouLeeSRR9i1axcffvghF198MVdffTWfffaZlmYJUoRY5454i2lfVIh6GZaBOjRTJAPtOpu6QQzPBoSmQnTVVVdxxRVXMHHiRCZNmsRPfvIT7HY7H3zwgZZmCVKEU0OzmBD1baJaPUb1orySXd0gJqwHRNIENEYiEV588UW8Xi/z58/vdp9AIEAgcKp4ldvtHi7zBKMQbzCWeX/a0KwvHpHZgMmgI2RyAh7hEQ0QzYVo7969zJ8/H7/fj91u5+WXX2bq1Knd7rt69WoefPDBYbZQMFqZVugiz2kh2x6NrI4NzWxZvR5blmVj6UUToKIOjtYIj2iAaL5qNnnyZPbs2cOOHTv47ne/y+LFi9m3r/vmdStXrqS1tTV+q66uHmZrBaOJXKeFs6NiRMgPQa/6QB+GZlJsMtsS7f7hF975QNDcIzKZTEyYMAGAOXPmsHPnTtauXctvfvObLvuazWbMZnOX7QLBgGmPRlSb0sDQj89YbJk/IIRoIGguRKcjy3KneSCBYChQFIV9tW7STAZKMm3oY0Mra0afz/H3vbX4Wtq4MhTB6nersUS9LPsLukdTIVq5ciWXX345paWltLW18fzzz/POO++wadMmLc0SpACBsMybn50A4O6LJ6CPTTZbXD0fdBoNbQGa2/UEwzJWYxhC7WCyDYG1ox9Nhai+vp5bbrmF2tpaXC4XM2bMYNOmTXz5y1/W0ixBChCLITIZdBj1ulOTzdb0Pp/DatLTJBkI6q1AWB2eCSFKCE2F6Pe//72WlxekMLEYongwYyzHrB8eUSyWqF1nB1rUCWtH/iBamTpovmomEGhBLIbIFo8halHvLel9PscpIbKqG8SEdcIIIRKkJJ1qVcvyKRHpz9DMqHpTPilaUlYIUcIIIRKkJL6OHlGwTS0BotODqe8lX+NpHkTnhUQsUcIIIRKkJDGPyG42nBqWmZ2g6/tXwmbSYzLokM1OdYPwiBIm6eKIBILhYHZpOiWZVnIdFvAcUzf2Y6IaYEKunYl5Dmi1wu73hEc0AIQQCVKSPKdFTe0AaGxR7/sxPwQd0zyiHlHQo8439cOrEqiIV0wgiC/dpyd2vMmuzi8pijrfJOg3wiMSpBwRWWF/rRu72UBppg1dAlHVMf6y5zieQJjrdVbMsgcCnoTOk+oIj0iQcviCYTbvO8GrH9eoqWEJRFXHOOH2U+8OEIjFEgU9g2VmSiGESJByxFbMbCY9khxRvRhIyJOxRqs7+mMlYwNCiBJBCJEg5YhXZjQbTs0P6Y1g7H+emM2oxhL5Y0GNYo4oIYQQCVIOXwePqNOwLIESHrGgRp8uugInPKKEEEIkSDlO1ao2nBKiBFfMrDEhIpZvJjyiRBBCJEg5Ypn3aR2jqhMUolgHEK8iJqsHghAiQcrhDcYSXvUJlf/oiM2kx2zUETFG2woJjyghRByRIOU4ryyDCTl2ClwWqGtRNyawdA9wdqGTaUUutfj+e0A4AJGQOvkt6DNCiAQpR4HLSoErOpQaYFR1PM3DYAa9ASJh1SvqQycQwSnE0EyQuoT86g0GHg0tSWr2Poh5ogQQHpEgpQiGZQ6daMNuNlBmjs7nmGxgMCV0vois8OrHx/EFI9xoSMNAk1jCTwAhRIKUwu0PsXnfCSxGPd89W109G4g3pJPgeHM7oYhCINumfqHEhHW/EUMzQUrhC3RYMRvg0j2oc0SWaHR1QB+NzBbR1f1GCJEgpThVNL9DekeCK2YxYrFE7ZKIrk4UIUSClCJWq9pu7pDeMcCJ6niaR6x2tZis7jdCiAQphSeeZzbwqOoY8TQP4REljBAiQUrhi6V3mHQDjqqOEfOIPDGPKNCmVmsU9BkhRIKUIpbeYZcCIIfV+J9BECKzUYdsiAqRHFYjrAV9RizfC1KKBeOzaClwUqBvUjeYHWq96QFwTmkGc8ZEI6kbzKoIBT1gtAzQ2tQhJYQoEokQCoW0NkOQBGRaJDItJmhwq1UVzbng9/e4v8lkQtdLVw6pYx0js0MVokAbpGUPltmjnlEtRIqiUFdXR0tLi9amCJKNcASc80BvgqNHe9xNp9MxduxYTKY+Rl6b7OBtFCtn/SQhITpy5Ajjxo0bbFsGnZgI5ebmYrPZOv9yCVIOWVYIhiPodBKmsBfCfjClqbdu95epqamhtraW0tLSHj8/7cEIr39aSyAs8w17GhKIlbN+kpAQTZgwgYULF3L77bdz/fXXY7Ek31g4EonERSgrK0trcwRJQDAs0xYOolMknCY96IxgtZ1xLicnJ4eamhrC4TBGY/elPQx6icqTPgBCLhsmgKB3CJ7B6CWhVbPdu3czY8YMli1bRn5+Pt/+9rf517/+Ndi2DYjYnJDN1v+C6ILRiRxdUtfrAFldPUM680R1bEgWiUR63Meo12EyqF8lkeaRGAkJ0axZs1i7di01NTWsW7eO2tpaLrjgAqZNm8bjjz9OQ0PDYNuZMGI4JogREyKdJIESFZZeVsz6+vmxRvPN2qVY7WoxNOsPA4ojMhgMXHfddbz44ov87Gc/4/DhwyxfvpySkhJuueUWamtrB8tOgWDAyHLUI0IGBTWGSBqcUDqrSPMYEAN6Fz788EO+973vUVBQwOOPP87y5cspLy9n8+bN1NTUcPXVVw+WnQLBgInqkCpEoA7LBsljtnWX5iGiq/tMQkL0+OOPM336dBYsWEBNTQ3PPPMMlZWVPPzww4wdO5YvfvGLbNiwgd27dw+2vYIEqaioQJIk9uzZMyzn2bZtG9OnT8doNHLNNdcM6JqDRXxoRt+GZf0hNjTzKlEhEtHV/SKhVbOnnnqK2267jSVLllBQUNDtPrm5ufz+978fkHGCoeOdd97hoosuorm5mfT09EE//7Jly5g1axavv/46drt90M+fCJGoS6RToh7RIAqRzWTAYtQjSwa1frWIru4XCQnR5s2bKS0t7RJxqigK1dXVlJaWYjKZWLx48aAYmeoEg8G+B9QlCeXl5XznO9+huLg44XMM9vN2WIxEZAVDuF3d0GHFTFEUIpEIBkNiMb7nT8jigonRSOpGEV3dXxIamo0fP57GxsYu25uamhg7duyAjRpqgmG5x1s4Ivd531Af9k2ECy+8kLvvvpt77rmH7OxsFi1axKeffsrll1+O3W4nLy+Pm2++udN78MYbb3DBBReQnp5OVlYWX/nKVygvL+/2/BUVFVx00UUAZGRkIEkSS5Ys6dd5Dhw4wIIFC7BYLEybNo0tW7bEzy1JEidPnuS2225DkiQ2bNgAwJYtW5g7dy5ms5mCggJWrFhBOBw+4/N+5513kCSJTZs2MXv2bKxWKxdffDH19fW8/vrrTJkyBafTybe+9S18Pl/8XLIss3r1asaOHYvVamXmzJm8+spGrCY9OiXCO+++j2Rx8PrrrzNnzhzMZjPvvfdeQu8XnLa6Zop6gGLCus8kJP9KD5NwHo8nKYMbT+fJtw/3+NjY7DSumV0U//+3W8sJRbp/vsUZVr5+bkn8/3XbjtIe7Bxvcu+XJyVk4x/+8Ae++93vsm3bNlpaWrj44ou54447+OUvf0l7ezv3338/N9xwA//85z8B8Hq9LFu2jBkzZuDxeFi1ahXXXnste/bs6eK5lpSU8NJLL/G1r32NgwcP4nQ6sVqt/TrPD3/4Q9asWcPUqVN5/PHHueqqqzh69CglJSXU1tYyefJkHnroIW688UZcLhfHjx/niiuuYMmSJTzzzDMcOHCAO++8E4vFwo9+9KNunzcQX3n90Y9+xBNPPIHNZuOGG27ghhtuwGw28/zzz+PxeLj22mv51a9+xf333w/A6tWrefbZZ/n1r3/NxIkT2bp1KzfddBM5OTksnHNW/HorVqzg0UcfZdy4cWRkZCT0XnXBHGu2KISor/RLiJYtWwao6r9q1apOwYKRSIQdO3Ywa9asQTUwVZk4cSI///nPAXj44YeZPXs2P/3pT+OPr1u3jpKSEg4dOsSkSZP42te+1un4devWkZOTw759+5g2bVqnx/R6PZmZarZ4bm5upzmivp7n7rvvju/71FNP8cYbb/D73/+e++67j/z8fCRJwuVykZ+fD8D//u//UlJSwhNPPIEkSZx11lnU1NRw//33s2rVqrjIdXzecEqIHn74Yc4//3wAbr/9dlauXEl5eXk81ej666/n7bff5v777ycQCPDTn/6Uf/zjH8yfPx+AMWVjeWfrVv73qV+z8LePx8//0EMP8eUvf7n3N6QXWttDvLX/BIoCX0uPpoyI6Oo+0y8h+uijjwDVI9q7d2+n8bvJZGLmzJksX758cC0cApZeNKHHx3Snrebe9aXxPe57+srvbecP3rB0zpw58b8//vhj3n777W4nfcvLy5k0aRKff/45q1atYseOHTQ2NiLL6rCwqqqqixCdib6eJ/YFBzWe7Nxzz2X//v09nnf//v3Mnz+/0xDm/PPPx+PxcOzYMUpLS7s8747MmDEj/ndeXh42m61TvmNeXl48uv/w4cP4fL4uAhMMBpk+Y6b6T9SOc889t+cXox9IElSe9KGTJJRcu5pvJqKr+0y/hOjtt98G4NZbb2Xt2rU4nc4hMWqoiYXja7lvb6SlnUrE9Hg8XHXVVfzsZz/rsl9s1fKqq65izJgxPP300xQWFiLLMtOmTSMYDPbruoN1nkTp+Lw70jHPS5KkLnlfkiTFRdPjUYdEr732GkVF6jDbHwzjCURwWqLvUXSiuqfr9RdbdPleVhSCehtmEEOzfpDQHNH69esH2w7BGTjnnHN46aWXKCsr63ZV5+TJkxw8eJCnn36aL37xiwC9Trx2l0PVn/N88MEHfOlLXwIgHA6za9cu7r777h6vN2XKFF566SUURYl7Rdu2bcPhcAxoZa07pk6ditlspqqqioULFwLgCYTxBsKkSQFQfNBLjaH+YojmmwXDMu1SVIjEZHWf6bMQXXfddWzYsAGn08l11113xn03btzYp3OuXr2ajRs3cuDAAaxWKwsWLOBnP/sZkydP7qtZKcHSpUt5+umn+eY3v8l9991HZmYmhw8f5oUXXuB3v/sdGRkZZGVl8dvf/paCggKqqqpYsWLFGc85ZswYJEnib3/7G1dccQVWq7Vf53nyySeZOHEiU6ZM4Ze//CXNzc3cdtttPV7ve9/7HmvWrOH73/8+d999NwcPHuSBBx5g2bJlvRYe6y8Oh4Ply5dz7733IssyF1xwAcdPnOTdbe+R67Bw57euHbTUjo7YTHqCYRmfZCUdTkVXi3zHXunzu+FyueK/ZC6X64y3vrJlyxaWLl3KBx98wObNmwmFQlx22WV4vWKSryOFhYVs27aNSCTCZZddxvTp07nnnntIT09Hp9Oh0+l44YUX2LVrF9OmTePee+/lF7/4xRnPWVRUxIMPPsiKFSvIy8vj7rvv7td5HnnkER555BFmzpzJe++9x6uvvkp2ds8xM0VFRfz973/nX//6FzNnzuQ73/kOt99+O//1X/81oNemJ3784x/z3//936xevZopU6bwtau/wlub3mBsWdT7GiIhAvApZnWDiK7uM5LS01q8BjQ0NJCbm8uWLVvibn9HAoEAgcCpN9btdlNSUkJra2uX+Sq/38/Ro0cZO3bsiAgpEAwtTd4AoYhCJm6MRMCWAYbePxf9+Ry9+nEN5fUeLpmSy4yj61QRmntnSgc1ut1uXC5Xt9/RjiT0s9De3t4peKyyspI1a9bw5ptvJnK6OK2tanuX2NLy6axevbqT51VSUtLtfgLB6URkQAFdrPyHNPhVkm1GPRajXs11NTvUjQGxctYXEhKiq6++mmeeeQaAlpYW5s6dy2OPPcbVV1/NU089lZAhsixzzz33cP755/e43Lxy5UpaW1vjt+rq6oSuJUg9XFYDToteDc+QGNQ8sxiXTMnluxeOZ2ZJuoiu7icJV2iMrar8+c9/Jj8/n8rKSp555hn+53/+JyFDli5dyqeffsoLL7zQ4z5msxmn09npJhD0BZNBj1WvqPE9g1j+oyOdu3mI6Or+kJB/6vP5cDhU1/PNN9/kuuuuQ6fT8YUvfIHKysp+n+/uu+/mb3/7G1u3bh30pVyBII4SzWsbAm+oCyYRXd0fEvKIJkyYwCuvvEJ1dTWbNm3isssuA6C+vr5fXoqiKNx99928/PLL/POf/xwRCbOCkUc4IuMLhgmFYkI0NF20Gj0BXtp1jL99UgOm6ByRiK7uEwkJ0apVq1i+fDllZWXMmzcvHu7/5ptvMnv27D6fZ+nSpTz77LM8//zzOBwO6urqqKuro729PRGzBIJuCUUU2vxhArHo8F4K5ieKrChUNfmoaWkXQ7N+ktBPw/XXX88FF1xAbW0tM2fOjG+/5JJLuPbaa/t8ntjE9oUXXthp+/r16+NlKQSCgRLv3hGvzDg0HpHNpJ63PSijmKL9zcRkdZ9I+B3Jz8+PZ1bHmDt3br/OkUQhTIJRjKwoHZbupSGbI7J2yDfzS2lYQURX95GEhMjr9fLII4/w1ltvUV9fH082jHHkyJFBMU4gGAzU7h0yktq6Y8iESK+TMBt1BEIyPsyqEMWiq0XJ2DOSkBDdcccdbNmyhZtvvpmCggLRO0yQ1ESi3pAkRUVoCNI7YtiMegIhmXZZJ2pX94OEhOj111/ntddeixeqEgwuF154IbNmzWLNmjVamwIknz39RVYUVYh0DPnSvc1koNkXUit1mkXt6r6S0E9DRkZGj2kYguRguOoHjQRkWUFSIuqHfQhSOzpiNemxmvREFEVEV/eDhIToxz/+MatWreqUbzYiUBQIB4f/1o9J+SVLlrBlyxbWrl2LJElIkkR5eTm33357vBD85MmTWbt2bZfjrrnmGn7yk59QWFgYL6Xy/vvvM2vWLCwWC+eeey6vvPJKl75kZyrM3509FRUVA34rhgtFUUi3GbGbpFNDsyHkKzMK+M7C8ZyV7zy1hC+CGnsloZ+Hxx57jPLycvLy8igrK+tSLS9pGytGQvDuY8N/3S/+f2DoW1uctWvXcujQIaZNm8ZDDz0EqB5ocXExL774IllZWbz//vvcddddFBQUcMMNN8SPfeutt3A6nWzevBlQM5+vuuoqrrjiCp5//nkqKyu55557Ol2vt8L83dmTk5MzCC/K8CBJEiaDHqTB72XW0/XixKKrRSxRryQkRMnSuXM04nK5MJlM2Gy2TuERDz74YPzvsWPHsn37dv70pz91EqK0tDR+97vfxasv/vrXv0aSJJ5++mksFgtTp07l+PHj3HnnnfFjnnjiiV4L83dnz4hDHtoYom4R0dV9JqF35YEHHhhsO4YHvVH1TrS47gB58sknWbduHVVVVbS3txMMBrt0TJk+fXqnhgYHDx5kxowZneronB7r1ZfC/COZUEQmHI5gkiPoh2FoVtPSzvbykzitRr6cLaKr+0rCPw8tLS38+c9/pry8nB/+8IdkZmaye/du8vLy4gXLkw5J6vMQKZl44YUXWL58OY899hjz58/H4XDwi1/8gh07dnTaL5FC8H0pzD+SCYRl2tv9OGQFvWlol+5BbWtd1eQjy26CQjFZ3VcSEqJPPvmESy+9FJfLRUVFBXfeeSeZmZls3LiRqqqqeK0iQWKYTKZORe23bdvGggUL+N73vhff1lMX145MnjyZZ599lkAggNmsli/duXNnp316K8zfnT0jCVlWl+51EsMyLLPGysUGI2CKJoAHRXR1byT087Bs2TKWLFnC559/3sntv+KKK9i6deugGZeqlJWVsWPHDioqKmhsbGTixIl8+OGHbNq0iUOHDvHf//3fXQSlO771rW8hyzJ33XUX+/fvZ9OmTTz66KPAqUnVpUuX0tTUxDe/+U127txJeXk5mzZt4tZbb42Lz+n2nB5Jn8zEY4iGS4iiaR7+UATZGPWIIqJ2dW8kJEQ7d+7k29/+dpftRUVF1NXVDdioVGf58uXo9XqmTp1KTk4OixYt4rrrruPGG29k3rx5nDx5spN31BNOp5O//vWv7Nmzh1mzZvGf//mfrFq1CiD+A9JbYf7u7Kmqqhq6Jz/IRKIxRBLSsAmRJKkOkF+JRleDGJ71QkLvjNlsxu12d9l+6NChEbW0m6xMmjSJ7du3d9q2fv36Lv3kVq9eHf97w4YN3Z5rwYIFfPzxx/H/n3vuOYxGY7yzKqhtns/UAqo7e0YKEUXBqISHzSPS6SQsRj3twQi+YASbiK7uEwl5RF/96ld56KGHCIVCgOrmV1VVcf/993fpnS7QlmeeeYb33nuPo0eP8sorr8RjhKxWq9amDTmyoqDE54iGxyOCU22F2oMREV3dRxISosceewyPx0NOTg7t7e0sXLiQCRMm4HA4+MlPfjLYNgoGQF1dHTfddBNTpkzh3nvv5etf/zq//e1vtTZrWJBlBQlZ9YYkachXzGJYjWqaR1hWRMnYPpLQT4TL5WLz5s1s27aNjz/+GI/HwznnnMOll1462PYJBsh9993Hfffdp7UZmqDTSaSbJXSKHklnGLZVq+vnFJ+KsG4VsUR9od9CJMsyGzZsYOPGjVRUVCBJEmPHjiU/P79TX/NkQRRfS110koRJkkGX+LAskc9P5zQPEV3dF/rlqyqKwle/+lXuuOMOjh8/zvTp0zn77LOprKxkyZIl/SoTO9TE8t9GXGKuYHCRB1YwP1bFQK9PMCJb1K7uE/16dzZs2MDWrVt56623uOiiizo99s9//pNrrrmGZ555hltuuWVQjUwEvV5Peno69fX1ANhstqTz1gZCOCITCEdQAItBj0E/PPMfI4lgKAIBLwYlgk4Kg+Lv1/GyLNPQ0IDNZusx2LM7Kk962VnRTI7DzMJcMVndF/olRH/84x/5j//4jy4iBHDxxRezYsUKnnvuuaQQIiCepBkTo9GEPxQhGFYDCyVJLcil140eoR0MfMEwumAbRp2E3uJOKM9Mp9NRWlrarx+xQFimusmn1soujk1Wi+jqM9EvIfrkk0/4+c9/3uPjl19+ecKdXocCSZIoKCggNzc3HmowWlAUhYN1bRxu8NDYFsBlM/HVmYVCjDrw+q7D5B/dTEGOg/QL7gJ9/4dnJpMpHtjZV2LR1fEqjXAqulqUjO2Wfr0zTU1N5OXl9fh4Xl4ezc3NAzZqsNHr9YmP8ZOVQBuzTMeYUmLhD4dM1HkiHGkKMr3YpbVlSYPf3QCBNtKsOVjSulYXGCpicUTeYFitvCBqV/dKv4QoEomccays1+sJh8MDNkrQPYqi8MmxViZYWkk78BKEA5iBL5PPX5QvsLOiiWlFzlE1F5YowbCMzqdWmTSnD28dpTSz+h0JhGRCERmjiK7ulX4JkaIoLFmyJJ7JfTqBgEjsG0pOuANs2XcMz4kX+UKxGX1aFgTclIZrGev9iCPSuVQ3tVOaZdPaVM1x+0PYQicx6CRMzp69+KHAbNBh0EmEZQVfIILLZAdvo5iwPgP9EqLFixf3uk+yTFSPRg6eaKPA/Qm55hD6tEKYcys0HUH/2cucqztEWdkCcp3d/0ikGu72ELZgM2aDDuy5w3ptSZJIMxtobQ/hCYZxiejqXumXEJ2edCkYPhRF4UhdMxM9e8nKscDYhWqRt5zJkDGGIiopkg6DsUxrU5MCty+ANdyM2WbQZDhkNxsIRmTCEVnEEvWBYSzgKxgIDW0BDE2HMCkhXJklqgCBuhxcMg+aK6H2Yyj70oisQjnYTHaGCebb0RlNYEkf9ut//dwOaR4+EV3dGyIKboRwtNFLrucgLpsJfeHMzvEomePAmk446Ofz/XvYU92imZ3JgjV4EpfViCOzQJPYnU4LBsIj6hUhRCOE2oZGnIFaXFYT5E/r/KAkQe4UPP4wh/b+iw8rmkSOnbdBvR/m+aFuEaVAekUI0QggIisETxwCwJFbApZuYoVyp+KwGskMVOPz+Wj2ja4Azv7y+dEjnHD7CVmyNLn+sWYff951jH/sO9GhFIinX802UwkhRCMAvU7imhIfZ+U7sBVM7n6ntBz0tkxcZh1Ofw1VTamb7BsMy9RUV3Ck0UskbXiX7mOEIwrVTT5q3f6u0dWCLgghGglEQpjcVWTYTEjZPfQZkyTIHIfLaiTdX03lydRdKna7mzFFvOj1Oizp2rREigU1egMdoqtBDM96QAjRSMB9XC1nYbZD2hlqgncQomNNPmQ5NYcBvpPH1T+smZqtIKaZT+WbRWTllFcUECtn3SGEKMmRZYV3d+6isslLyFFy5hWg9FJsFhM22YvO30yjNzWHAYHmWgAkh3Ytsq1GvVonm2jOWWzCWghRtwghSnKafEF89RWccAfQZ4w5884GE7r0UhxmA+mB45z0BIfHyCQj1KJ6RAaXdp1q1ejqaPJrIAyWaLNFIUTdIgIak5z6Fi/2YD1pZj26jNLeD0gvZWx2OePzZUwFzqE3MAmJuNXeepbMQk3tSDMbaPOH8QYiYI6+F/5WTW1KVoRHlOS01FeiUyJY0pxgy+z9AFcxFqMek6cmNZeKg14ivhYA7FnFmppiNxuwmfTqHFHcI+raD1AgPKKkx19/BCtgzhnbtwhhZ6FaiTDggfbmvonXaKKtjikFTnwGF7ZMbT3Cr8woOBVh3RyN/fILIeoO4RElMbKsEG6pAcCR28v8UAy9ERwFnHD7eXP7hxw6kWJzEm21mA16MvJKMRu0LYbXOc0j5hG1pqan2gtCiJKYJm8AS3s9ep2EI6cP80MxXMX4QxHaGyqpOpligY2t0aV7Z5G2dpxOTIgiYQil2HvSB8TQLInxtTVjxY/VbETn6EeEcHopDosR58lajrW2D52ByYai0FR3FI/Hh17ORGspamgLsOVQA0a9xNWzitRUj6BXHZ7F0j4EgBCipKbU0EpJWQZha6465OorzkLsFgOWcDMtrW78oQgW4yir2d0dvpO0uj3UtIWR222aC5EkQXWT79Rrb3GpQhRwA9qFFiQjYmiWzLTVIiFhzOjnV8poxeTIwWLUYQ/WU9vav35eIxb3cfzhCB5TNhl2q9bWYI+mecRbP8VWzsSEdRc0FaKtW7dy1VVXUVhYiCRJvPLKK1qak3y0qfEwJBIh7CzEYTZiD9RT25Iiw7PW4/iDETzmPFzWfniQQ4TFqMdkUL9inkBYxBKdAU2FyOv1MnPmTJ588kktzUhKGtv87Px0H4cbPOBIIDDPWYjDYsARrKcmRTyicEs1gbBMmymPLHtyVKl0WlSvqM0fOlW+JSCE6HQ0nSO6/PLLufzyy7U0IWlpbKgjHGinXW9JrOZyVIjSWxtRjCkwAg+142+pRwEijkJspuSY/rRbDDR6grT5w6eESAzNupAc71YfCQQCnVoWud2j9w11N1QDYHLlJ9QqmbRcrBYL80r0SOOTwzsYUlqq8QXDtBvTcTqTp8mkw6wOEdv8YXCK6OqeGFE/latXr8blcsVvJSUlWps0ZLQ3qkJkzUrwOep0SM4CJCRw1wyiZUlKSyX+kIzbXEi2PXlaKjksBtLMejUoPjZZHfRBODUTkntiRAnRypUraW1tjd+qq6u1NmlIkGWFcKsqHq7cAYitU51bUtzH8Ycig2Fa8tJSSUmmlUvmn8ecsgytrYkzd2wmd31pPF8YlwVG66kCaWLCuhMjSojMZjNOp7PTbTTS5PVj8Tei10k4cwYiREX4gmG27f6EZz+oHDwDk42gFzwNSEg48sfhtGi/YhajS/tva1Qk25uH35gkZkQJUarQeOI4OiWMxWpFGkhzQGchZoMeQ3sjXl87bv8oLajfUqXep2Unf8SyEKJu0XSy2uPxcPjw4fj/R48eZc+ePWRmZlJa2o/cqlGG1d9AyGzAnF44sJ5cZgd6mwubqRV7sIHallKc+cnjLQwaLVV4g2E+DTkwVjVzTmnyDM1kWWHjR8dp84f45txSLNZ09QF/i5ZmJR2aekQffvghs2fPZvbs2QAsW7aM2bNns2rVKi3N0pwxxlamF7mYNGHiwE/mKMBhMWIP1lMzWvPOmito84c50J6RdE0DdDqJk54ALb6Q6pEKj6hbNPWILrzwQtEIsDva1JrLscnmAeEswmH+BHtbPbUtozCw0dcEviY8QYVWZxETHRatLeqC3WLAF4zQ5g+TK4SoW8QcUZIRCgWJtNWr/wxG8XdXkRphHThBg9uv5jyNJk6WA1CvyyaiM5HrTD4hik2eq0GN6epGvxvkUb6S2Q+EECUZRyqOsvNIAwebOnxoB4I9H7PJhF0XwBh2c8I9yryipnIiisIxSfUec53JE0MUI5b31uILqm2FdAZQZLGE3wEhRElGW0M1CiCn5Q9sojqG3gD2PHLsZs7L8GEzjaJyIOEgtFThC4Y5aSnFZtLjMCdfskBMiFrbQ+p7GpuwFsOzOEKIkoz2k8cAsGUPYuF3VxElmTbOy2wnK4mijgdMSyXIEVoVO36DizynpWvcThKQblOFyN0eDZ+IzxO1aGNQEiKEKImQZYVILKI6r481qvuCMypq7uODd85koPEQAJ60Ugx6XVIOy0D1iGwmPdZYIm58CV94RDGSz49NYZraPJgDzeh1Eq6cQfSIoqtvkbZ6ahpayHTa473ZRyxyJC5EZ00/jwnOEsJJ2mI73Wbi2wvHn9ogPKIuCI8oiWiqqwIUTGkuJMsgpq9YnGBxcrC2lTc/+IgjDckVa5MQzRUQ8quR1K4SDHrdyCmHa422ePKd1NaOJEIIURLRFiv9kTEEjQGdRTjMBhyBURLY2HAAACV7EuhG2Mc4lrbT3qx29RAIIUom8qVmsu0m0vOGIL3FWYTdYsAePMHx5hEuRB2GZdvbsvl/2yv4PMn7t+2uamb9tqPsOHISTHY1C19RoL1Ja9OSAiFESUSRrpmJuQ4KS8YN/smjgY3OYD2tvqAa0zJSaToaHZbZOOTPoNETTMrVso5EZIUWX4hmX1Bdwo95Rd5GbQ1LEoQQJQtBrxrgJklgH4SI6tOx52EwmMgwhrGGW6gcyY0X6z4GwJt+Fs3tEXSSRHGG9l07zsSpoMboEr4tKkQ+IUQghChpaD2hBuYp1kwwDkGagk4PriLSbSac/hoqm0aoEAW90KhWbDhqVFeiCtItST9RnWFTy/U2+YJqfqUtS31ATFgDQoiShkOHD/LxsVYO+uxDd5H0MbisRpyBWqqbfESSdLn7jJz4TE2PcORT7lO9oLHZSV6DCMiwGZEkCIRkfMGIGJqdhhCiJCHQrAYbpmUPYR3u9FLSzHpmOd3cMKcYXXJPq3RFUaBWHZaFcqdTHfXqxmTZtLSqTxj0uvjwrMkbPOURtTeL5FeEECUFoXAkXuA+I38QI6pPx1mIpDdSbFPI0bmTfoK3C80VqgehN3JUN4ZQRMFlNZIzQtJWMtOiwzNvUG0tpDeqIiRyzoQQJQMNjSfQRwIYDQbsmYNQg6gndHpwRT2uWHnVkcSxD9X7/Bm4nA6mFjqZVuQaMYKa57SQ77Jg1Os6r5x56rU1LAkY4XH+o4OWmiMA6F2Farb8UJI+BpqOUld5gF1NRcwbl5lU7Xd6xNcEJw+rX+Dic8mzWVh09hCsLg4hXxiXpXbziGHPB3cteE5A3lTtDEsChEeUBHhOHAXAlls29BfLUId+Tcc/5/O6Fg7Xe4b+moNB9Q71PmsC2DK1tWWwcOSp954T2tqRBAgh0hhFUQg2qcOk9IIhCGQ8HUcBmGxkW8ARqOPzE23JX663vRlqPwFAKZnL++WNNLQFejkoeQlHZHXF0h4VorY6dSI+hRFCpDFKwMPZ6WGK0q1kFYwd+gtKEmRNIDPNRHagmkZPkPpk/1JXbFOX7DPHcUzOZseRJv70YfWILHv7lz3HefLtcmpa2iEtFyQdhNohkNwpKkONECKN0bXVkGEzUVpSisEyTPEwWRMw6HRM0NcB8FlNEpcs9TbCiU/Vv8d+kR1H1dysKQUOTIaR9/HVSRKyolDf5lfnA9Oic0YpPjwbee/kaKM12jY7fRj7uGWUgU5PsdmPJdTC/to2QpEk9C4UBT7frN5nT6Q6nE51kw+9TuLcspE5T5TrUBcG4kPLWDpPrHNLiiKESGMqyg/Q7AsStg/hsv3pGMyQPgan1UBppIpgWOZAbRIODRoOqrFDOgPyuEt477AahTytyJlUbaX7Q87pQhRrGdU6yqpn9hMhRBri8bipPVbJwbo2ws4hjKjujtwpSEhMNx4n227CbkmySI6gFz5/U/27dB57myTqWv2YDDrmjs0687FJTKzdUZM3pHqhrg5lfOUk9EqHCSFEGlJXcQBQ0DvzsNjTh/fi2ZNAZ6DY5OWmaZbkytdSFDj0hipGadm05Z0X94bOn5CNfQSXuU0z6bGZ9MiKQqMnoGbhG0wQCYE3dQMbhRBpiLtGLe5ly5sw/Bc3WiBrPDpJQjrx2fBf/0wc2wkNh9RI8ClXYbdaWDA+izFZNmYUubS2bkBIkkS+S/WKalr8anXJWHODFB6eCSHSCEWW8Z9Qu5RmFk/Sxoj86ep93SeEgwF2VjTxYYXGFQNPlkP5P9W/x10EjnwkSWJ2aQbXzi5CN+IydbsyLtvOWfkOsqK5Z7iK1PvYwkUKMnJ93BFOY0MNUrANSW8gp1gDjwggc7yafOlvpfbzXbxXk41OkijKsFLg0qDQWEsVfLYRFIVQ7nTe9ZQwPxjBGm0KOVJyynpjerGL6cUdPLt4/l+lOiwdJc+zPwiPSCMaK/YBYMwcg8GkUa6XTgdFcwAo9n7GpFw7sqLw2ie1uP2h4bWl8TB88ieIhPHYx/Cn1il8fMzNa3trkz/ye6C4itVM/KAvZeOJhBBpRLBuPwDOEo2THQtmgMGM5G3k0uyTZNiMtPnDbNx1bHjqWisKVH0An/4ZORzkiJzDM62zqfeqntD5E7JGjSfUEUVROOkJqCVBdHo1tgug6YimdmmFECIt8LuZ4fQyvTidkokztbXFaIWSeQCYq7dx3ex8HBYDzb4Qz/+ris9qWofOI/GehD3PEf78LWpbfLzVWsCrkfMJKHrGZNm46QtjtBkiDgM7jjbxzPZKPjgSLRWbEU3vaTqqnVEaIoRICxo/R0LCnlM6/Mv23VF8ntqosL0ZZ90ObjyvhAKXhUBI5t3PGzuVlJUHobxsxNtEaN9rsPN30FLNyXb4pzKHT9MWYLeauezsPK6dXTSil+l7ozRTrSpZedKnvqaZUSFqPabmnqUYo/edTmIidXvRA+ScpbUpKgYTTLwMPnsZqj7AkTmOr59bwp7qZsIRBYNe/b2KyApPvn0Yh8VAmsmA2ajDbNCh1+mQgMJ0K1ML1Q61wbDMtvJGIhGFiKIQCQXQNR/FevJTLO5K8l1mxmSmQfZEMs+7GOMBL5fkO5hS4FQLh41y8p1qwX9/KEKt209ReqZaKM3bqPZsK9DYUx5mhBANM62NNRzc+xlZdgvjFkwhaWY/cs+CxqlwYh98+hL6WTcxZ0xOp11a20Px/lzxtjgdUCAuRLKisO/IMVz+42S0V5LuP4ZOUbuaykCjqZgxs6+E9BKMwA3njszcsUTR6STKsmwcqGujotFLUboVcqfC0a1Qv18IkWBoOXZgJxFZoclSzHizQ2tzOjP5CrX2j7sWPvp/6v85k+PLyRk2I3d+aRzN3iCBcAR/SCYQVmvryLJMnjmoCllLJaamCr7qq0GSQGeVkGwmdLY8dLlnYS6ZgyMzJyWXqTsyNieNA3VtHDrRxoLxWUi5U1Qhaq5Uo8pNSRTtPsQIIRpGIuEQnordAGRPOE9ja7pBb4TpN8CnL6lzFZ+9rC4t508HZxGS2Y5dr8eeJqtfFKUJQk3gqVOL/we98VPpgJKsNLUQW0aZKmj2vJQXn46My7ZjMuho8YWobfVTmJ4Jjny1UFrdXij9gtYmDhtCiIaRqn07kANeMDsomTBda3O6x2SDmd+EqvfVZfXWY+qtL0g6sOeoJU3Sy1QRG4pmkaMEk0HH+Bw7+2vdfF7voTDdCkXnwIG/w/HdUDxXjfVKAYQQDROKHKFx/7sAOCeej8GYxGUs9AYY+yUomAV1n6ilODwnIByNK5IkddnfmgnWDNXTcRao9/okfl5JyDlj0pmUZ2dMVnQYljsVyt9W24+f/Fz1JFMAIUTDRPW+HYQ9J1EMZsbPWKC1OX3D4oSyC9QbqD245IgqNmKINSjkOizkdpwq1BuhcBZUboeKdyFrYkp4RaP/GSYBSshP497NADgmX4jFmvydSbtFp1eX+oUIDQn+UEStw10yTy1e52k4VSZ3lCOEaBiQjrzD9BwDuXkFTD7nQq3NESQhB+va2PB+hVr9wGiFMVGv+cjbnRYBRitCiIaa+v1Q8xFGvY7x538Nk0nMoQi6otdBezDCh5XN1Lv9UHSuGuAY9MGB10Z9uyEhRENI47GDHN/+fygoUDrvVGKjQHAa43PsjM+1E5EV/vZJLZ4wMPVq0BnUGk2HNo1qMRJCNBQoCsf376D8H+uoavRQJRXD2Au1tkqQxEiSxGVT83BajbS2h9i4+xgtunQ460p1Tq7mI9j/6qmVy1FGUgjRk08+SVlZGRaLhXnz5vGvf/1La5MSprmugo9ff5qq919EjkQgexJ5X7ghJVY+BAPDYtRz/TnFOCwGTnqCPLejir2hIph8uRqjdWIf7Hxa7XobCWtt7qCi+fL9//3f/7Fs2TJ+/etfM2/ePNasWcOiRYs4ePAgubm5WpvXI3I4jC7Sro7hfY0cPnKYluoDhNoaAFAkHdYJX2T6giswGPQaWysYKbhsRm48r4S/762lpsWPNxiGcTPBmkHw078QaDmJ6dNXMVreQpdZBq5SsGWCNR2MNtCPzFVNSdG4/N28efM477zzeOKJJwCQZZmSkhK+//3vs2LFik77BgIBAoFT7ZHdbjclJSW0trbidDp7vkjTEbUOsqJwoNZNa3vMvVWi4271JZAUhbljM+Nj8YN1bpp9gVNjc0VBASQlghQJMndsJlI0bfVAnZtmXwhF0qHPP5sx51xCfn7xgF8fQWoiywr7at1MyjvV0faTqgb273ybvLZ9mCMedBLodZLaAAGYmOfAbjGBwcSJthBVLX5AhyLpQNKhdEixnpxvJ92q1sxuaPNzpNF36uIddOysfAeunnrIzbhRjTU7A263G5fL1et3VFOPKBgMsmvXLlauXBnfptPpuPTSS9m+fXuX/VevXs2DDz7Y/wuFg2pMBqB43cjt3ZdBlQD8HV6SoAcl0HVMHpOusAxGiw1sWThtaehtReSXnYXDceY3RyDoDZ1OYtppHUsCsp623HOpc84kLXACl/84acFGrKEWTBEPsqKAIkPIjxxoJ+zz9XB2wOMHWRUixetH9vQQImAPQKQHIVIGrw+bpkLU2NhIJBIhLy+v0/a8vDwOHDjQZf+VK1eybNmy+P8xj6hX0ktg5jdAksiZEMQViXpAkgSSFC1FKiHpJHBEKwJKEgXtYTJlGQl1n1P76TFbbRisafG5n2Hs0ypIUc4ry+S8skxkWSEQnkAwIhOOyIQiCgoKZosEShAiIRx+P6W+IJIcQVHkLituljQTGFXXJy0YodTb/Y+zxWECfQ9DvUGsDqD5HFF/MJvNmM0JFJo3pcUr4GVn9P0wZ5JV6RAIQPWWrCY9Vrqbe1STjO1pYO9jQ9y06E1LNF3Kyc7ORq/Xc+JE584FJ06cID8/XyOrBALBcKOpEJlMJubMmcNbb70V3ybLMm+99Rbz58/X0DKBQDCcaD40W7ZsGYsXL+bcc89l7ty5rFmzBq/Xy6233qq1aQKBYJjQXIhuvPFGGhoaWLVqFXV1dcyaNYs33nijywS2QCAYvWgeRzQQ+hqjIBAItKGv31GRdyAQCDRHCJFAINAczeeIBkJsVOl2uzW2RCAQdEfsu9nbDNCIFqK2tjaAvkVXCwQCzWhra8PlcvX4+IierJZlmZqaGhwORzT9IrWIpbhUV1eLyfo+Il6zxEj0dVMUhba2NgoLC9GdoRTOiPaIdDodxcUiw93pdIovVT8Rr1liJPK6nckTiiEmqwUCgeYIIRIIBJojhGgEYzabeeCBBxKrSJCiiNcsMYb6dRvRk9UCgWB0IDwigUCgOUKIBAKB5gghEggEmiOESCAQaI4QoiSmv40nX3zxRc466ywsFgvTp0/n73//+zBZmlz053XbsGFDvDFC7GaxWIbRWu3ZunUrV111FYWFhUiSxCuvvNLrMe+88w7nnHMOZrOZCRMmsGHDhgHZIIQoSYk1nnzggQfYvXs3M2fOZNGiRdTX13e7//vvv883v/lNbr/9dj766COuueYarrnmGj799NNhtlxb+vu6gRotXFtbG79VVlYOo8Xa4/V6mTlzJk8++WSf9j969ChXXnklF110EXv27OGee+7hjjvuYNOmTYkboQiSkrlz5ypLly6N/x+JRJTCwkJl9erV3e5/ww03KFdeeWWnbfPmzVO+/e1vD6mdyUZ/X7f169crLpdrmKxLfgDl5ZdfPuM+9913n3L22Wd32nbjjTcqixYtSvi6wiNKQmKNJy+99NL4tjM1ngTYvn17p/0BFi1a1OP+o5FEXjcAj8fDmDFjKCkp4eqrr+azzz4bDnNHLEPxWRNClIScqfFkXV1dt8fU1dX1a//RSCKv2+TJk1m3bh1/+ctfePbZZ5FlmQULFnDs2LHhMHlE0tNnze12097entA5R3T2vUAwUObPn9+pddWCBQuYMmUKv/nNb/jxj3+soWWphfCIkpBEGk/m5+enfKPKwWjYaTQamT17NocPHx4KE0cFPX3WnE4nVqs1oXMKIUpCEmk8OX/+/E77A2zevDmlGlUORsPOSCTC3r17KSgoGCozRzxD8llLeJpbMKS88MILitlsVjZs2KDs27dPueuuu5T09HSlrq5OURRFufnmm5UVK1bE99+2bZtiMBiURx99VNm/f7/ywAMPKEajUdm7d69WT0ET+vu6Pfjgg8qmTZuU8vJyZdeuXco3vvENxWKxKJ999plWT2HYaWtrUz766CPlo48+UgDl8ccfVz766COlsrJSURRFWbFihXLzzTfH9z9y5Ihis9mUH/7wh8r+/fuVJ598UtHr9cobb7yRsA1CiJKYX/3qV0ppaaliMpmUuXPnKh988EH8sYULFyqLFy/utP+f/vQnZdKkSYrJZFLOPvts5bXXXhtmi5OD/rxu99xzT3zfvLw85YorrlB2796tgdXa8fbbbytAl1vsdVq8eLGycOHCLsfMmjVLMZlMyrhx45T169cPyAZRBkQgEGiOmCMSCASaI4RIIBBojhAigUCgOUKIBAKB5gghEggEmiOESCAQaI4QIoFAoDlCiAQCgeYIIRKMKDZs2EB6enr8/x/96EfMmjUr/v+SJUu45pprht0uwcAQQiToliVLliBJEt/5zne6PLZ06VIkSWLJkiWd9h9sASgrK2PNmjWdtt14440cOnSox2PWrl3bqX7yhRdeyD333DOodgkGHyFEgh4pKSnhhRde6FTsyu/38/zzz1NaWqqJTVarldzc3B4fd7lcnTwmwchACJGgR8455xxKSkrYuHFjfNvGjRspLS1l9uzZAzp3d57KNddcE/eyLrzwQiorK7n33nvj3TWg69DsdDp6ZkuWLGHLli2sXbs2fo6jR48yYcIEHn300U7H7dmzB0mSRB0ijRBCJDgjt912G+vXr4//v27dOm699dYhv+7GjRspLi7moYceinfX6C9r165l/vz53HnnnfFzlJaWdnlOAOvXr+dLX/oSEyZMGKynIOgHQogEZ+Smm27ivffeo7KyksrKSrZt28ZNN9005NfNzMxEr9fjcDjIz89PqNKky+XCZDJhs9ni59Dr9SxZsoSDBw/G+52FQiGef/55brvttsF+GoI+ImpWC85ITk4OV155JRs2bEBRFK688kqys7O1NmtAFBYWcuWVV7Ju3Trmzp3LX//6VwKBAF//+te1Ni1lER6RoFduu+02NmzYwB/+8IdB8xp0Oh2nl8IKhUKDcu6+cMcdd8Qn4tevX8+NN96IzWYbtusLOiOESNAr//Zv/0YwGCQUCrFo0aJBOWdOTk6neZ9IJNKlK63JZCISiQzoOj2d44orriAtLY2nnnqKN954QwzLNEYMzQS9otfr2b9/f/zvnmhtbWXPnj2dtmVlZVFSUtJl34svvphly5bx2muvMX78eB5//HFaWlo67VNWVsbWrVv5xje+gdlsTmhIWFZWxo4dO6ioqMBut5OZmYlOp4vPFa1cuZKJEyemVJOBZER4RII+4XQ6cTqdZ9znnXfeYfbs2Z1uDz74YLf73nbbbSxevJhbbrmFhQsXMm7cOC666KJO+zz00ENUVFQwfvx4cnJyErJ7+fLl6PV6pk6dSk5ODlVVVfHHbr/9doLB4LCsAgrOjKhZLUhZ3n33XS655BKqq6u7dC4VDC9CiAQpRyAQoKGhgcWLF5Ofn89zzz2ntUkpjxiaCVKOP/7xj4wZM4aWlhZ+/vOfa22OAOERCQSCJEB4RAKBQHOEEAkEAs0RQiQQCDRHCJFAINAcIUQCgUBzhBAJBALNEUIkEAg0RwiRQCDQnP8fltDyz7pMw0sAAAAASUVORK5CYII=", + "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-22T22:52:23.400992Z", + "iopub.status.busy": "2024-03-22T22:52:23.400664Z", + "iopub.status.idle": "2024-03-22T22:52:23.570840Z", + "shell.execute_reply": "2024-03-22T22:52:23.569887Z" + }, + "papermill": { + "duration": 0.191211, + "end_time": "2024-03-22T22:52:23.573134", + "exception": false, + "start_time": "2024-03-22T22:52:23.381923", + "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-22T22:52:23.611709Z", + "iopub.status.busy": "2024-03-22T22:52:23.611355Z", + "iopub.status.idle": "2024-03-22T22:52:23.833610Z", + "shell.execute_reply": "2024-03-22T22:52:23.832552Z" + }, + "papermill": { + "duration": 0.244314, + "end_time": "2024-03-22T22:52:23.835761", + "exception": false, + "start_time": "2024-03-22T22:52:23.591447", + "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.018036, + "end_time": "2024-03-22T22:52:23.872486", + "exception": false, + "start_time": "2024-03-22T22:52:23.854450", + "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": 5786.510322, + "end_time": "2024-03-22T22:52:26.614799", + "environment_variables": {}, + "exception": null, + "input_path": "eval/treatment/realtabformer/4/mlu-eval.ipynb", + "output_path": "eval/treatment/realtabformer/4/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/realtabformer/4", + "path_prefix": "../../../../", + "random_seed": 4, + "single_model": "realtabformer" + }, + "start_time": "2024-03-22T21:16:00.104477", + "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