diff --git "a/insurance/tab_ddpm_concat/mlu-eval.ipynb" "b/insurance/tab_ddpm_concat/mlu-eval.ipynb" new file mode 100644--- /dev/null +++ "b/insurance/tab_ddpm_concat/mlu-eval.ipynb" @@ -0,0 +1,2552 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "982e76f5", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T14:28:22.712382Z", + "iopub.status.busy": "2024-03-22T14:28:22.711885Z", + "iopub.status.idle": "2024-03-22T14:28:22.751017Z", + "shell.execute_reply": "2024-03-22T14:28:22.750283Z" + }, + "papermill": { + "duration": 0.059065, + "end_time": "2024-03-22T14:28:22.753226", + "exception": false, + "start_time": "2024-03-22T14:28:22.694161", + "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-22T14:28:22.778729Z", + "iopub.status.busy": "2024-03-22T14:28:22.778350Z", + "iopub.status.idle": "2024-03-22T14:28:22.785122Z", + "shell.execute_reply": "2024-03-22T14:28:22.784296Z" + }, + "papermill": { + "duration": 0.021549, + "end_time": "2024-03-22T14:28:22.787100", + "exception": false, + "start_time": "2024-03-22T14:28:22.765551", + "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-22T14:28:22.810425Z", + "iopub.status.busy": "2024-03-22T14:28:22.810153Z", + "iopub.status.idle": "2024-03-22T14:28:22.814409Z", + "shell.execute_reply": "2024-03-22T14:28:22.813540Z" + }, + "papermill": { + "duration": 0.018306, + "end_time": "2024-03-22T14:28:22.816449", + "exception": false, + "start_time": "2024-03-22T14:28:22.798143", + "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-22T14:28:22.840425Z", + "iopub.status.busy": "2024-03-22T14:28:22.840157Z", + "iopub.status.idle": "2024-03-22T14:28:22.844167Z", + "shell.execute_reply": "2024-03-22T14:28:22.843327Z" + }, + "executionInfo": { + "elapsed": 678, + "status": "ok", + "timestamp": 1696841022168, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "ns5hFcVL2yvs", + "papermill": { + "duration": 0.018567, + "end_time": "2024-03-22T14:28:22.846201", + "exception": false, + "start_time": "2024-03-22T14:28:22.827634", + "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-22T14:28:22.869826Z", + "iopub.status.busy": "2024-03-22T14:28:22.869335Z", + "iopub.status.idle": "2024-03-22T14:28:22.874948Z", + "shell.execute_reply": "2024-03-22T14:28:22.874114Z" + }, + "papermill": { + "duration": 0.019401, + "end_time": "2024-03-22T14:28:22.876772", + "exception": false, + "start_time": "2024-03-22T14:28:22.857371", + "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": "181cc350", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T14:28:22.902286Z", + "iopub.status.busy": "2024-03-22T14:28:22.902021Z", + "iopub.status.idle": "2024-03-22T14:28:22.906860Z", + "shell.execute_reply": "2024-03-22T14:28:22.906112Z" + }, + "papermill": { + "duration": 0.019919, + "end_time": "2024-03-22T14:28:22.908779", + "exception": false, + "start_time": "2024-03-22T14:28:22.888860", + "status": "completed" + }, + "tags": [ + "injected-parameters" + ] + }, + "outputs": [], + "source": [ + "# Parameters\n", + "dataset = \"insurance\"\n", + "dataset_name = \"insurance\"\n", + "single_model = \"tab_ddpm_concat\"\n", + "gp = False\n", + "gp_multiply = False\n", + "random_seed = 0\n", + "debug = False\n", + "folder = \"eval\"\n", + "path_prefix = \"../../../../\"\n", + "path = \"eval/insurance/tab_ddpm_concat/0\"\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.011075, + "end_time": "2024-03-22T14:28:22.930960", + "exception": false, + "start_time": "2024-03-22T14:28:22.919885", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "5f45b1d0", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T14:28:22.954386Z", + "iopub.status.busy": "2024-03-22T14:28:22.954120Z", + "iopub.status.idle": "2024-03-22T14:28:22.962998Z", + "shell.execute_reply": "2024-03-22T14:28:22.962178Z" + }, + "executionInfo": { + "elapsed": 7, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "UdvXYv3c3LXy", + "papermill": { + "duration": 0.022966, + "end_time": "2024-03-22T14:28:22.964970", + "exception": false, + "start_time": "2024-03-22T14:28:22.942004", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/kaggle/working\n", + "/kaggle/working/eval/insurance/tab_ddpm_concat/0\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-22T14:28:22.988510Z", + "iopub.status.busy": "2024-03-22T14:28:22.988249Z", + "iopub.status.idle": "2024-03-22T14:28:24.972444Z", + "shell.execute_reply": "2024-03-22T14:28:24.971345Z" + }, + "papermill": { + "duration": 1.99836, + "end_time": "2024-03-22T14:28:24.974620", + "exception": false, + "start_time": "2024-03-22T14:28:22.976260", + "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-22T14:28:25.002365Z", + "iopub.status.busy": "2024-03-22T14:28:25.001964Z", + "iopub.status.idle": "2024-03-22T14:28:25.014498Z", + "shell.execute_reply": "2024-03-22T14:28:25.013592Z" + }, + "papermill": { + "duration": 0.02854, + "end_time": "2024-03-22T14:28:25.016521", + "exception": false, + "start_time": "2024-03-22T14:28:24.987981", + "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-22T14:28:25.040635Z", + "iopub.status.busy": "2024-03-22T14:28:25.040392Z", + "iopub.status.idle": "2024-03-22T14:28:25.047363Z", + "shell.execute_reply": "2024-03-22T14:28:25.046631Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "Vrl2QkoV3o_8", + "papermill": { + "duration": 0.021359, + "end_time": "2024-03-22T14:28:25.049522", + "exception": false, + "start_time": "2024-03-22T14:28:25.028163", + "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-22T14:28:25.073608Z", + "iopub.status.busy": "2024-03-22T14:28:25.073369Z", + "iopub.status.idle": "2024-03-22T14:28:25.166665Z", + "shell.execute_reply": "2024-03-22T14:28:25.165914Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "TilUuFk9vqMb", + "papermill": { + "duration": 0.107895, + "end_time": "2024-03-22T14:28:25.168887", + "exception": false, + "start_time": "2024-03-22T14:28:25.060992", + "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-22T14:28:25.195471Z", + "iopub.status.busy": "2024-03-22T14:28:25.195191Z", + "iopub.status.idle": "2024-03-22T14:28:29.788144Z", + "shell.execute_reply": "2024-03-22T14:28:29.787359Z" + }, + "executionInfo": { + "elapsed": 3113, + "status": "ok", + "timestamp": 1696841025277, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "7Abt8nStvr9Z", + "papermill": { + "duration": 4.609258, + "end_time": "2024-03-22T14:28:29.790488", + "exception": false, + "start_time": "2024-03-22T14:28:25.181230", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-03-22 14:28:27.399095: 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 14:28:27.399150: 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 14:28:27.400845: 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-22T14:28:29.816220Z", + "iopub.status.busy": "2024-03-22T14:28:29.815644Z", + "iopub.status.idle": "2024-03-22T14:28:29.822362Z", + "shell.execute_reply": "2024-03-22T14:28:29.821638Z" + }, + "papermill": { + "duration": 0.021526, + "end_time": "2024-03-22T14:28:29.824288", + "exception": false, + "start_time": "2024-03-22T14:28:29.802762", + "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-22T14:28:29.849336Z", + "iopub.status.busy": "2024-03-22T14:28:29.849070Z", + "iopub.status.idle": "2024-03-22T14:28:38.728835Z", + "shell.execute_reply": "2024-03-22T14:28:38.727751Z" + }, + "executionInfo": { + "elapsed": 20137, + "status": "ok", + "timestamp": 1696841045408, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "tbaguWxAvtPi", + "papermill": { + "duration": 8.895421, + "end_time": "2024-03-22T14:28:38.731645", + "exception": false, + "start_time": "2024-03-22T14:28:29.836224", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", + " warnings.warn(\n", + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:119: ConvergenceWarning: Number of distinct clusters (6) found smaller than n_clusters (10). Possibly due to duplicate points in X.\n", + " .fit(X)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/sklearn/preprocessing/_encoders.py:868: FutureWarning: `sparse` was renamed to `sparse_output` in version 1.2 and will be removed in 1.4. `sparse_output` is ignored unless you leave `sparse` to its default value.\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "from ml_utility_loss.loss_learning.estimator.preprocessing import DataPreprocessor\n", + "\n", + "preprocessor = DataPreprocessor(\n", + " task,\n", + " target=target,\n", + " cat_features=cat_features,\n", + " mixed_features=mixed_features,\n", + " longtail_features=longtail_features,\n", + " integer_features=integer_features,\n", + " lct_ae_embedding_size=lct_ae_embedding_size,\n", + " lct_ae_params=lct_ae_params,\n", + " lct_ae=lct_ae,\n", + " tab_ddpm_normalization=tab_ddpm_normalization,\n", + " tab_ddpm_cat_encoding=tab_ddpm_cat_encoding,\n", + " tab_ddpm_y_policy=tab_ddpm_y_policy,\n", + " tab_ddpm_is_y_cond=tab_ddpm_is_y_cond,\n", + " realtabformer_embedding=rtf_embed,\n", + " realtabformer_params=rtf_params,\n", + ")\n", + "preprocessor.fit(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "a9c9b110", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2024-03-22T14:28:38.759079Z", + "iopub.status.busy": "2024-03-22T14:28:38.758762Z", + "iopub.status.idle": "2024-03-22T14:28:38.765346Z", + "shell.execute_reply": "2024-03-22T14:28:38.764555Z" + }, + "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.022044, + "end_time": "2024-03-22T14:28:38.767245", + "exception": false, + "start_time": "2024-03-22T14:28:38.745201", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'tvae': 36,\n", + " 'realtabformer': (19, 551, Embedding(551, 800), True),\n", + " 'lct_gan': 29,\n", + " 'tab_ddpm_concat': 12}" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "preprocessor.adapter_sizes" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "3cb9ed90", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T14:28:38.792400Z", + "iopub.status.busy": "2024-03-22T14:28:38.791781Z", + "iopub.status.idle": "2024-03-22T14:28:38.796660Z", + "shell.execute_reply": "2024-03-22T14:28:38.795821Z" + }, + "papermill": { + "duration": 0.019562, + "end_time": "2024-03-22T14:28:38.798603", + "exception": false, + "start_time": "2024-03-22T14:28:38.779041", + "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-22T14:28:38.823546Z", + "iopub.status.busy": "2024-03-22T14:28:38.823305Z", + "iopub.status.idle": "2024-03-22T14:29:19.453844Z", + "shell.execute_reply": "2024-03-22T14:29:19.452858Z" + }, + "papermill": { + "duration": 40.657114, + "end_time": "2024-03-22T14:29:19.467500", + "exception": false, + "start_time": "2024-03-22T14:28:38.810386", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../insurance/_cache_aug_test/tab_ddpm_concat/all inf False\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "../../../../ml-utility-loss/aug_test/insurance [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Caching in ../../../../insurance/_cache_bs_test/tab_ddpm_concat/all inf False\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "../../../../ml-utility-loss/bs_test/insurance [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Caching in ../../../../insurance/_cache_synth_test/tab_ddpm_concat/all inf False\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "../../../../ml-utility-loss/synthetics/insurance [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "1050\n" + ] + } + ], + "source": [ + "from ml_utility_loss.loss_learning.estimator.pipeline import load_dataset_4\n", + "\n", + "test_set = load_dataset_4(\n", + " dataset_dir=os.path.join(path_prefix, \"ml-utility-loss/\"),\n", + " dataset_name=dataset_name,\n", + " preprocessor=preprocessor,\n", + " model=single_model,\n", + " cache_dir=path_prefix,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "14ff8b40", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T14:29:19.495009Z", + "iopub.status.busy": "2024-03-22T14:29:19.494671Z", + "iopub.status.idle": "2024-03-22T14:29:19.814690Z", + "shell.execute_reply": "2024-03-22T14:29:19.813766Z" + }, + "executionInfo": { + "elapsed": 588, + "status": "ok", + "timestamp": 1696841049215, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "NgahtU1q9uLO", + "papermill": { + "duration": 0.336357, + "end_time": "2024-03-22T14:29:19.816750", + "exception": false, + "start_time": "2024-03-22T14:29:19.480393", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'Body': 'twin_encoder',\n", + " 'loss_balancer_meta': True,\n", + " 'loss_balancer_log': False,\n", + " 'loss_balancer_lbtw': False,\n", + " 'pma_skip_small': False,\n", + " 'isab_skip_small': False,\n", + " 'layer_norm': False,\n", + " 'pma_layer_norm': False,\n", + " 'attn_residual': True,\n", + " 'tf_n_layers_dec': False,\n", + " 'tf_isab_rank': 0,\n", + " 'tf_layer_norm': False,\n", + " 'tf_pma_start': -1,\n", + " 'head_n_seeds': 0,\n", + " 'tf_pma_low': 16,\n", + " 'dropout': 0,\n", + " 'combine_mode': 'diff_left',\n", + " 'tf_isab_mode': 'separate',\n", + " 'grad_loss_fn': torch.Tensor>,\n", + " 'single_model': True,\n", + " 'bias': True,\n", + " 'bias_final': True,\n", + " 'pma_ffn_mode': 'shared',\n", + " 'patience': 10,\n", + " 'inds_init_mode': 'fixnorm',\n", + " 'grad_clip': 0.7,\n", + " 'head_final_mul': 'identity',\n", + " 'gradient_penalty_mode': {'gradient_penalty': False,\n", + " 'calc_grad_m': False,\n", + " 'avg_non_role_model_m': False,\n", + " 'inverse_avg_non_role_model_m': False},\n", + " 'synth_data': 2,\n", + " 'bias_lr_mul': 1.0,\n", + " 'bias_weight_decay': 0.05,\n", + " 'loss_balancer_beta': 0.79,\n", + " 'loss_balancer_r': 0.95,\n", + " 'dataset_size': 2048,\n", + " 'batch_size': 8,\n", + " 'epochs': 100,\n", + " 'n_warmup_steps': 100,\n", + " 'Optim': torch_optimizer.diffgrad.DiffGrad,\n", + " 'fixed_role_model': 'tab_ddpm_concat',\n", + " 'd_model': 256,\n", + " 'attn_activation': torch.nn.modules.activation.LeakyReLU,\n", + " 'tf_d_inner': 512,\n", + " 'tf_n_layers_enc': 4,\n", + " 'tf_n_head': 64,\n", + " 'tf_activation': ml_utility_loss.activations.LeakyHardsigmoid,\n", + " 'tf_activation_final': ml_utility_loss.activations.LeakyHardsigmoid,\n", + " 'ada_d_hid': 1024,\n", + " 'ada_n_layers': 7,\n", + " 'ada_activation': torch.nn.modules.activation.ReLU,\n", + " 'ada_activation_final': torch.nn.modules.activation.Softsign,\n", + " 'head_d_hid': 128,\n", + " 'head_n_layers': 9,\n", + " 'head_n_head': 64,\n", + " 'head_activation': torch.nn.modules.activation.PReLU,\n", + " 'head_activation_final': torch.nn.modules.activation.Softsign,\n", + " 'models': ['tab_ddpm_concat'],\n", + " 'max_seconds': 3600,\n", + " 'tf_lora': False,\n", + " 'tf_num_inds': 32,\n", + " 'ada_n_seeds': 0,\n", + " 'gradient_penalty_kwargs': {'mag_loss': True,\n", + " 'mse_mag': False,\n", + " 'mag_corr': False,\n", + " 'seq_mag': False,\n", + " 'cos_loss': False,\n", + " 'mag_corr_kwargs': {'only_sign': False},\n", + " 'cos_loss_kwargs': {'only_sign': True, 'cos_matrix': False},\n", + " 'mse_mag_kwargs': {'target': 0.1, 'multiply': 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-22T14:29:19.845842Z", + "iopub.status.busy": "2024-03-22T14:29:19.845524Z", + "iopub.status.idle": "2024-03-22T14:30:11.208799Z", + "shell.execute_reply": "2024-03-22T14:30:11.207769Z" + }, + "papermill": { + "duration": 51.393053, + "end_time": "2024-03-22T14:30:11.223271", + "exception": false, + "start_time": "2024-03-22T14:29:19.830218", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../insurance/_cache_aug_train/tab_ddpm_concat/all inf False\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "split df ratio is 0\n", + "../../../../ml-utility-loss/aug_train/insurance [400, 0]\n", + "Caching in ../../../../insurance/_cache_aug_val/tab_ddpm_concat/all inf False\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "split df ratio is 1\n", + "../../../../ml-utility-loss/aug_val/insurance [0, 200]\n", + "Caching in ../../../../insurance/_cache_bs_train/tab_ddpm_concat/all inf False\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "split df ratio is 0\n", + "../../../../ml-utility-loss/bs_train/insurance [100, 0]\n", + "Caching in ../../../../insurance/_cache_bs_val/tab_ddpm_concat/all inf False\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "split df ratio is 1\n", + "../../../../ml-utility-loss/bs_val/insurance [0, 50]\n", + "Caching in ../../../../insurance/_cache_synth/tab_ddpm_concat/all inf False\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Splitting without random!\n", + "Split with reverse index!\n", + "../../../../ml-utility-loss/synthetics/insurance [400, 200]\n", + "[900, 450]\n", + "[900, 450]\n" + ] + } + ], + "source": [ + "train_set, val_set = datasetsn(model=params[\"fixed_role_model\"], synth_data=params[\"synth_data\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "2fcb1418", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "execution": { + "iopub.execute_input": "2024-03-22T14:30:11.252134Z", + "iopub.status.busy": "2024-03-22T14:30:11.251841Z", + "iopub.status.idle": "2024-03-22T14:30:11.667944Z", + "shell.execute_reply": "2024-03-22T14:30:11.666922Z" + }, + "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.433012, + "end_time": "2024-03-22T14:30:11.670133", + "exception": false, + "start_time": "2024-03-22T14:30:11.237121", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Creating model of type \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[*] Embedding False True\n", + "['tab_ddpm_concat'] 1\n" + ] + } + ], + "source": [ + "from ml_utility_loss.loss_learning.estimator.model.pipeline import remove_non_model_params\n", + "from ml_utility_loss.loss_learning.estimator.pipeline import create_model\n", + "from ml_utility_loss.util import filter_dict, clear_memory\n", + "\n", + "clear_memory()\n", + "\n", + "params2 = remove_non_model_params(params)\n", + "adapters = filter_dict(preprocessor.adapter_sizes, params[\"models\"])\n", + "\n", + "model = create_model(\n", + " adapters=adapters,\n", + " #Body=\"twin_encoder\",\n", + " **params2,\n", + ")\n", + "#cf.apply_weight_standardization(model, n_last_layers_ignore=0)\n", + "print(model.models, len(model.adapters))" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "938f94fc", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T14:30:11.700280Z", + "iopub.status.busy": "2024-03-22T14:30:11.699872Z", + "iopub.status.idle": "2024-03-22T14:30:11.704571Z", + "shell.execute_reply": "2024-03-22T14:30:11.703669Z" + }, + "papermill": { + "duration": 0.02186, + "end_time": "2024-03-22T14:30:11.706511", + "exception": false, + "start_time": "2024-03-22T14:30:11.684651", + "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-22T14:30:11.735591Z", + "iopub.status.busy": "2024-03-22T14:30:11.735315Z", + "iopub.status.idle": "2024-03-22T14:30:11.742687Z", + "shell.execute_reply": "2024-03-22T14:30:11.741775Z" + }, + "papermill": { + "duration": 0.024819, + "end_time": "2024-03-22T14:30:11.745149", + "exception": false, + "start_time": "2024-03-22T14:30:11.720330", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "9613961" + ] + }, + "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-22T14:30:11.773580Z", + "iopub.status.busy": "2024-03-22T14:30:11.773302Z", + "iopub.status.idle": "2024-03-22T14:30:11.870431Z", + "shell.execute_reply": "2024-03-22T14:30:11.869372Z" + }, + "papermill": { + "duration": 0.114296, + "end_time": "2024-03-22T14:30:11.872927", + "exception": false, + "start_time": "2024-03-22T14:30:11.758631", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "========================================================================================================================\n", + "Layer (type:depth-idx) Output Shape Param #\n", + "========================================================================================================================\n", + "MLUtilitySingle [2, 1071, 12] --\n", + "├─Adapter: 1-1 [2, 1071, 12] --\n", + "│ └─Sequential: 2-1 [2, 1071, 256] --\n", + "│ │ └─FeedForward: 3-1 [2, 1071, 1024] --\n", + "│ │ │ └─Linear: 4-1 [2, 1071, 1024] 13,312\n", + "│ │ │ └─ReLU: 4-2 [2, 1071, 1024] --\n", + "│ │ └─FeedForward: 3-2 [2, 1071, 1024] --\n", + "│ │ │ └─Linear: 4-3 [2, 1071, 1024] 1,049,600\n", + "│ │ │ └─ReLU: 4-4 [2, 1071, 1024] --\n", + "│ │ └─FeedForward: 3-3 [2, 1071, 1024] --\n", + "│ │ │ └─Linear: 4-5 [2, 1071, 1024] 1,049,600\n", + "│ │ │ └─ReLU: 4-6 [2, 1071, 1024] --\n", + "│ │ └─FeedForward: 3-4 [2, 1071, 1024] --\n", + "│ │ │ └─Linear: 4-7 [2, 1071, 1024] 1,049,600\n", + "│ │ │ └─ReLU: 4-8 [2, 1071, 1024] --\n", + "│ │ └─FeedForward: 3-5 [2, 1071, 1024] --\n", + "│ │ │ └─Linear: 4-9 [2, 1071, 1024] 1,049,600\n", + "│ │ │ └─ReLU: 4-10 [2, 1071, 1024] --\n", + "│ │ └─FeedForward: 3-6 [2, 1071, 1024] --\n", + "│ │ │ └─Linear: 4-11 [2, 1071, 1024] 1,049,600\n", + "│ │ │ └─ReLU: 4-12 [2, 1071, 1024] --\n", + "│ │ └─FeedForward: 3-7 [2, 1071, 256] --\n", + "│ │ │ └─Linear: 4-13 [2, 1071, 256] 262,400\n", + "│ │ │ └─Softsign: 4-14 [2, 1071, 256] --\n", + "├─Adapter: 1-2 [2, 267, 12] (recursive)\n", + "│ └─Sequential: 2-2 [2, 267, 256] (recursive)\n", + "│ │ └─FeedForward: 3-8 [2, 267, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-15 [2, 267, 1024] (recursive)\n", + "│ │ │ └─ReLU: 4-16 [2, 267, 1024] --\n", + "│ │ └─FeedForward: 3-9 [2, 267, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-17 [2, 267, 1024] (recursive)\n", + "│ │ │ └─ReLU: 4-18 [2, 267, 1024] --\n", + "│ │ └─FeedForward: 3-10 [2, 267, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-19 [2, 267, 1024] (recursive)\n", + "│ │ │ └─ReLU: 4-20 [2, 267, 1024] --\n", + "│ │ └─FeedForward: 3-11 [2, 267, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-21 [2, 267, 1024] (recursive)\n", + "│ │ │ └─ReLU: 4-22 [2, 267, 1024] --\n", + "│ │ └─FeedForward: 3-12 [2, 267, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-23 [2, 267, 1024] (recursive)\n", + "│ │ │ └─ReLU: 4-24 [2, 267, 1024] --\n", + "│ │ └─FeedForward: 3-13 [2, 267, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-25 [2, 267, 1024] (recursive)\n", + "│ │ │ └─ReLU: 4-26 [2, 267, 1024] --\n", + "│ │ └─FeedForward: 3-14 [2, 267, 256] (recursive)\n", + "│ │ │ └���Linear: 4-27 [2, 267, 256] (recursive)\n", + "│ │ │ └─Softsign: 4-28 [2, 267, 256] --\n", + "├─TwinEncoder: 1-3 [2, 4096] --\n", + "│ └─Encoder: 2-3 [2, 16, 256] --\n", + "│ │ └─ModuleList: 3-16 -- (recursive)\n", + "│ │ │ └─EncoderLayer: 4-29 [2, 1071, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-1 [2, 1071, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-1 [2, 32, 256] 8,192\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-2 [2, 32, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-1 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-2 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-3 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-4 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-1 [2, 64, 32, 1071] --\n", + "│ │ │ │ │ │ └─Linear: 7-5 [2, 32, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-6 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-3 [2, 1071, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-7 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-8 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-9 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-10 [2, 64, 1071, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-2 [2, 64, 1071, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-11 [2, 1071, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-12 [2, 1071, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-2 [2, 1071, 256] --\n", + "│ │ │ │ │ └─Linear: 6-4 [2, 1071, 512] 131,584\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-5 [2, 1071, 512] --\n", + "│ │ │ │ │ └─Linear: 6-6 [2, 1071, 256] 131,328\n", + "│ │ │ └─EncoderLayer: 4-30 [2, 1071, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-3 [2, 1071, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-7 [2, 32, 256] 8,192\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-8 [2, 32, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-13 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-14 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-15 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-16 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-3 [2, 64, 32, 1071] --\n", + "│ │ │ │ │ │ └─Linear: 7-17 [2, 32, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-18 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-9 [2, 1071, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-19 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-20 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-21 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-22 [2, 64, 1071, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-4 [2, 64, 1071, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-23 [2, 1071, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-24 [2, 1071, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-4 [2, 1071, 256] --\n", + "│ │ │ │ │ └─Linear: 6-10 [2, 1071, 512] 131,584\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-11 [2, 1071, 512] --\n", + "│ │ │ │ │ └─Linear: 6-12 [2, 1071, 256] 131,328\n", + "│ │ │ └─EncoderLayer: 4-31 [2, 1071, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-5 [2, 1071, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-13 [2, 32, 256] 8,192\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-14 [2, 32, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-25 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-26 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-27 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-28 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-5 [2, 64, 32, 1071] --\n", + "│ │ │ │ │ │ └─Linear: 7-29 [2, 32, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-30 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-15 [2, 1071, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-31 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-32 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-33 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-34 [2, 64, 1071, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-6 [2, 64, 1071, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-35 [2, 1071, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-36 [2, 1071, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-6 [2, 1071, 256] --\n", + "│ │ │ │ │ └─Linear: 6-16 [2, 1071, 512] 131,584\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-17 [2, 1071, 512] --\n", + "│ │ │ │ │ └─Linear: 6-18 [2, 1071, 256] 131,328\n", + "│ │ │ └─EncoderLayer: 4-32 [2, 16, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-7 [2, 1071, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-19 [2, 32, 256] 8,192\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-20 [2, 32, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-37 [2, 32, 256] 65,536\n", + "│ │ │ │ │ ��� └─Linear: 7-38 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-39 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-40 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-7 [2, 64, 32, 1071] --\n", + "│ │ │ │ │ │ └─Linear: 7-41 [2, 32, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-42 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-21 [2, 1071, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-43 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-44 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-45 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-46 [2, 64, 1071, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-8 [2, 64, 1071, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-47 [2, 1071, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-48 [2, 1071, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-8 [2, 1071, 256] --\n", + "│ │ │ │ │ └─Linear: 6-22 [2, 1071, 512] 131,584\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-23 [2, 1071, 512] --\n", + "│ │ │ │ │ └─Linear: 6-24 [2, 1071, 256] 131,328\n", + "│ │ │ │ └─PoolingByMultiheadAttention: 5-9 [2, 16, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-25 [2, 16, 256] 4,096\n", + "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-26 [2, 16, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-49 [2, 16, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-50 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-51 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-52 [2, 64, 16, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-9 [2, 64, 16, 1071] --\n", + "│ │ │ │ │ │ └─Linear: 7-53 [2, 16, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-54 [2, 16, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-10 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-27 [2, 16, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-28 [2, 16, 512] --\n", + "│ │ │ │ │ └─Linear: 6-29 [2, 16, 256] (recursive)\n", + "│ └─Encoder: 2-4 [2, 16, 256] (recursive)\n", + "│ │ └─ModuleList: 3-16 -- (recursive)\n", + "│ │ │ └─EncoderLayer: 4-33 [2, 267, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-11 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-30 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-31 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-55 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-56 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-57 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-58 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-10 [2, 64, 32, 267] --\n", + "│ │ │ │ │ │ └─Linear: 7-59 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-60 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-32 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-61 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-62 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-63 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-64 [2, 64, 267, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-11 [2, 64, 267, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-65 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-66 [2, 267, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-12 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-33 [2, 267, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-34 [2, 267, 512] --\n", + "│ │ │ │ │ └─Linear: 6-35 [2, 267, 256] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-34 [2, 267, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-13 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-36 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-37 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-67 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-68 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-69 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-70 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-12 [2, 64, 32, 267] --\n", + "│ │ │ │ │ │ └─Linear: 7-71 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-72 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-38 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-73 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-74 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-75 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-76 [2, 64, 267, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-13 [2, 64, 267, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-77 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-78 [2, 267, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-14 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-39 [2, 267, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-40 [2, 267, 512] --\n", + "│ │ │ │ │ └─Linear: 6-41 [2, 267, 256] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-35 [2, 267, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-15 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-42 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-43 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-79 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-80 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-81 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-82 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-14 [2, 64, 32, 267] --\n", + "│ │ │ │ │ │ └─Linear: 7-83 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-84 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-44 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-85 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-86 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-87 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-88 [2, 64, 267, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-15 [2, 64, 267, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-89 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-90 [2, 267, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-16 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-45 [2, 267, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-46 [2, 267, 512] --\n", + "│ │ │ │ │ └─Linear: 6-47 [2, 267, 256] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-36 [2, 16, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-17 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-48 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-49 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-91 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-92 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-93 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-94 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-16 [2, 64, 32, 267] --\n", + "│ │ │ │ │ │ └─Linear: 7-95 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-96 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-50 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-97 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-98 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-99 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-100 [2, 64, 267, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-17 [2, 64, 267, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-101 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-102 [2, 267, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-18 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-51 [2, 267, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-52 [2, 267, 512] --\n", + "│ │ │ │ │ └─Linear: 6-53 [2, 267, 256] (recursive)\n", + "│ │ │ │ └─PoolingByMultiheadAttention: 5-19 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-54 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-55 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-103 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-104 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-105 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-106 [2, 64, 16, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-18 [2, 64, 16, 267] --\n", + "│ │ │ │ │ │ └─Linear: 7-107 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-108 [2, 16, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-20 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-56 [2, 16, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-57 [2, 16, 512] --\n", + "│ │ │ │ │ └─Linear: 6-58 [2, 16, 256] (recursive)\n", + "├─Head: 1-4 [2] --\n", + "│ └─Sequential: 2-5 [2, 1] --\n", + "│ │ └─FeedForward: 3-17 [2, 128] --\n", + "│ │ │ └─Linear: 4-37 [2, 128] 524,416\n", + "│ │ │ └─PReLU: 4-38 [2, 128] 1\n", + "│ │ └─FeedForward: 3-18 [2, 128] --\n", + "│ │ │ └─Linear: 4-39 [2, 128] 16,512\n", + "│ │ │ └─PReLU: 4-40 [2, 128] 1\n", + "│ │ └─FeedForward: 3-19 [2, 128] --\n", + "│ │ │ └─Linear: 4-41 [2, 128] 16,512\n", + "│ │ │ └─PReLU: 4-42 [2, 128] 1\n", + "│ │ └─FeedForward: 3-20 [2, 128] --\n", + "│ │ │ └─Linear: 4-43 [2, 128] 16,512\n", + "│ │ │ └─PReLU: 4-44 [2, 128] 1\n", + "│ │ └─FeedForward: 3-21 [2, 128] --\n", + "│ │ │ └─Linear: 4-45 [2, 128] 16,512\n", + "│ │ │ └─PReLU: 4-46 [2, 128] 1\n", + "│ │ └─FeedForward: 3-22 [2, 128] --\n", + "│ │ │ └─Linear: 4-47 [2, 128] 16,512\n", + "│ │ │ └─PReLU: 4-48 [2, 128] 1\n", + "│ │ └─FeedForward: 3-23 [2, 128] --\n", + "│ │ │ └─Linear: 4-49 [2, 128] 16,512\n", + "│ │ │ └─PReLU: 4-50 [2, 128] 1\n", + "│ │ └─FeedForward: 3-24 [2, 128] --\n", + "│ │ │ └─Linear: 4-51 [2, 128] 16,512\n", + "│ │ │ └─PReLU: 4-52 [2, 128] 1\n", + "│ │ └─FeedForward: 3-25 [2, 1] --\n", + "│ │ │ └─Linear: 4-53 [2, 1] 129\n", + "│ │ │ └─Softsign: 4-54 [2, 1] --\n", + "========================================================================================================================\n", + "Total params: 9,613,961\n", + "Trainable params: 9,613,961\n", + "Non-trainable params: 0\n", + "Total mult-adds (M): 38.08\n", + "========================================================================================================================\n", + "Input size (MB): 0.13\n", + "Forward/backward pass size (MB): 307.49\n", + "Params size (MB): 38.46\n", + "Estimated Total Size (MB): 346.07\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-22T14:30:11.909262Z", + "iopub.status.busy": "2024-03-22T14:30:11.908515Z", + "iopub.status.idle": "2024-03-22T15:32:14.293056Z", + "shell.execute_reply": "2024-03-22T15:32:14.291944Z" + }, + "papermill": { + "duration": 3722.423919, + "end_time": "2024-03-22T15:32:14.314157", + "exception": false, + "start_time": "2024-03-22T14:30:11.890238", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3 datasets [900, 450, 1050]\n", + "Creating model of type \n", + "[*] Embedding False True\n", + "g_loss_mul 0.1\n", + "Epoch 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.016726151166690722, 'avg_role_model_std_loss': 6.681427996787429, 'avg_role_model_mean_pred_loss': 0.0007995499490898637, '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.016726151166690722, 'n_size': 900, 'n_batch': 113, 'duration': 113.29283952713013, 'duration_batch': 1.0025915002400896, 'duration_size': 0.12588093280792237, 'avg_pred_std': 0.04266167516960243}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.013463321674304704, 'avg_role_model_std_loss': 5.035531684387279, 'avg_role_model_mean_pred_loss': 0.0003260195470640307, '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.013463321674304704, 'n_size': 450, 'n_batch': 57, 'duration': 46.18605709075928, 'duration_batch': 0.810281703346654, 'duration_size': 0.10263568242390951, 'avg_pred_std': 0.02743101706564949}\n", + "Epoch 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013343319840108355, 'avg_role_model_std_loss': 7.374786443262831, 'avg_role_model_mean_pred_loss': 0.00018221230446668457, '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.013343319840108355, 'n_size': 900, 'n_batch': 113, 'duration': 113.2004017829895, 'duration_batch': 1.0017734671061018, 'duration_size': 0.12577822420332166, 'avg_pred_std': 0.033394961601403435}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.013095296140398002, 'avg_role_model_std_loss': 4.660537766719707, 'avg_role_model_mean_pred_loss': 0.0003757634961128373, '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.013095296140398002, 'n_size': 450, 'n_batch': 57, 'duration': 46.44777750968933, 'duration_batch': 0.8148732896436724, 'duration_size': 0.10321728335486519, 'avg_pred_std': 0.0280298860416862}\n", + "Epoch 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013104651555832889, 'avg_role_model_std_loss': 5.731545712810247, 'avg_role_model_mean_pred_loss': 0.00016133929766812432, '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.013104651555832889, 'n_size': 900, 'n_batch': 113, 'duration': 113.58225321769714, 'duration_batch': 1.0051526833424527, 'duration_size': 0.12620250357521906, 'avg_pred_std': 0.03886226541568748}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.01287688842560682, 'avg_role_model_std_loss': 3.2905811405824417, 'avg_role_model_mean_pred_loss': 0.0003377204293245642, '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.01287688842560682, 'n_size': 450, 'n_batch': 57, 'duration': 47.43314838409424, 'duration_batch': 0.8321604979665655, 'duration_size': 0.10540699640909831, 'avg_pred_std': 0.03367136853436629}\n", + "Epoch 3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013487551987895535, 'avg_role_model_std_loss': 6.5134642504676314, 'avg_role_model_mean_pred_loss': 0.0002293419825039046, '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.013487551987895535, 'n_size': 900, 'n_batch': 113, 'duration': 112.98276948928833, 'duration_batch': 0.9998475176043216, 'duration_size': 0.1255364105436537, 'avg_pred_std': 0.037405478042772916}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.013358833422470424, 'avg_role_model_std_loss': 6.6747851123451865, 'avg_role_model_mean_pred_loss': 0.000459600389062934, '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.013358833422470424, 'n_size': 450, 'n_batch': 57, 'duration': 46.22313857078552, 'duration_batch': 0.8109322556278162, 'duration_size': 0.10271808571285672, 'avg_pred_std': 0.020856579136626238}\n", + "Epoch 4\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013331625766845214, 'avg_role_model_std_loss': 6.895425937681058, 'avg_role_model_mean_pred_loss': 0.00015765312878396825, '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.013331625766845214, 'n_size': 900, 'n_batch': 113, 'duration': 112.3973479270935, 'duration_batch': 0.9946667958149867, 'duration_size': 0.12488594214121501, 'avg_pred_std': 0.03705255519104215}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.015463804398766823, 'avg_role_model_std_loss': 5.035077505065904, 'avg_role_model_mean_pred_loss': 0.0007592894264012608, '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.015463804398766823, 'n_size': 450, 'n_batch': 57, 'duration': 46.07612347602844, 'duration_batch': 0.8083530434390955, 'duration_size': 0.10239138550228542, 'avg_pred_std': 0.03493314252741504}\n", + "Epoch 5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013444565045129921, 'avg_role_model_std_loss': 6.88672233373744, 'avg_role_model_mean_pred_loss': 0.0002211289928355282, '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.013444565045129921, 'n_size': 900, 'n_batch': 113, 'duration': 108.1660463809967, 'duration_batch': 0.9572216493893514, 'duration_size': 0.12018449597888523, 'avg_pred_std': 0.03778205175710991}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.013861719023229347, 'avg_role_model_std_loss': 5.471305163596984, 'avg_role_model_mean_pred_loss': 0.0005421772549703974, '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.013861719023229347, 'n_size': 450, 'n_batch': 57, 'duration': 44.389360666275024, 'duration_batch': 0.7787607134434215, 'duration_size': 0.09864302370283339, 'avg_pred_std': 0.025694214632701978}\n", + "Epoch 6\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013114380333055224, 'avg_role_model_std_loss': 5.976081524419583, 'avg_role_model_mean_pred_loss': 0.00027622638839541855, '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.013114380333055224, 'n_size': 900, 'n_batch': 113, 'duration': 111.54308128356934, 'duration_batch': 0.987106914013888, 'duration_size': 0.12393675698174371, 'avg_pred_std': 0.038547951167663644}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.012811201657168567, 'avg_role_model_std_loss': 3.3985922191304563, 'avg_role_model_mean_pred_loss': 0.00027678651687506, '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.012811201657168567, 'n_size': 450, 'n_batch': 57, 'duration': 45.941070795059204, 'duration_batch': 0.8059836981589334, 'duration_size': 0.1020912684334649, 'avg_pred_std': 0.03597862523441252}\n", + "Epoch 7\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013140132142644789, 'avg_role_model_std_loss': 6.532687967344641, 'avg_role_model_mean_pred_loss': 0.00014520771743971967, '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.013140132142644789, 'n_size': 900, 'n_batch': 113, 'duration': 108.82160568237305, 'duration_batch': 0.9630230591360447, 'duration_size': 0.12091289520263672, 'avg_pred_std': 0.03722985821520596}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.012903139407539533, 'avg_role_model_std_loss': 3.578145878625659, 'avg_role_model_mean_pred_loss': 0.0003883562163952724, '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.012903139407539533, 'n_size': 450, 'n_batch': 57, 'duration': 44.52135992050171, 'duration_batch': 0.7810764898333633, 'duration_size': 0.09893635537889268, 'avg_pred_std': 0.03204377959564067}\n", + "Epoch 8\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.012976793174942335, 'avg_role_model_std_loss': 5.416468192214529, 'avg_role_model_mean_pred_loss': 0.00026929119924884524, '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.012976793174942335, 'n_size': 900, 'n_batch': 113, 'duration': 110.61598777770996, 'duration_batch': 0.9789025467053979, 'duration_size': 0.1229066530863444, 'avg_pred_std': 0.04178034744134783}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.013890320318751037, 'avg_role_model_std_loss': 3.7336453318763363, 'avg_role_model_mean_pred_loss': 0.0005463759208261207, '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.013890320318751037, 'n_size': 450, 'n_batch': 57, 'duration': 45.11232590675354, 'duration_batch': 0.7914443141535709, 'duration_size': 0.10024961312611898, 'avg_pred_std': 0.037292727285571266}\n", + "Epoch 9\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013011944204982783, 'avg_role_model_std_loss': 6.452372519567247, 'avg_role_model_mean_pred_loss': 0.0001708998166064858, '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.013011944204982783, 'n_size': 900, 'n_batch': 113, 'duration': 108.52205491065979, 'duration_batch': 0.9603721673509716, 'duration_size': 0.12058006101184421, 'avg_pred_std': 0.036126165387047604}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.01294027495249692, 'avg_role_model_std_loss': 4.294494187321249, 'avg_role_model_mean_pred_loss': 0.0004066406136260209, '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.01294027495249692, 'n_size': 450, 'n_batch': 57, 'duration': 45.50484013557434, 'duration_batch': 0.7983305286942867, 'duration_size': 0.10112186696794298, 'avg_pred_std': 0.029192425953959555}\n", + "Epoch 10\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.01281262576735268, 'avg_role_model_std_loss': 5.773519790146028, 'avg_role_model_mean_pred_loss': 0.00017255405067423624, '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.01281262576735268, 'n_size': 900, 'n_batch': 113, 'duration': 110.79968285560608, 'duration_batch': 0.9805281668637706, 'duration_size': 0.1231107587284512, 'avg_pred_std': 0.04245836566721575}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.012781418984652394, 'avg_role_model_std_loss': 2.9514776281277206, 'avg_role_model_mean_pred_loss': 0.00034504475288883897, '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.012781418984652394, 'n_size': 450, 'n_batch': 57, 'duration': 46.79314422607422, 'duration_batch': 0.8209323548434073, 'duration_size': 0.10398476494683159, 'avg_pred_std': 0.03811844466907675}\n", + "Epoch 11\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013128257239651348, 'avg_role_model_std_loss': 5.248821901264445, 'avg_role_model_mean_pred_loss': 0.00028772900066602206, '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.013128257239651348, 'n_size': 900, 'n_batch': 113, 'duration': 112.41662859916687, 'duration_batch': 0.9948374212315653, 'duration_size': 0.12490736511018541, 'avg_pred_std': 0.039066291603762494}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.012926328503009345, 'avg_role_model_std_loss': 4.4593022893954055, 'avg_role_model_mean_pred_loss': 0.00044354169371757735, '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.012926328503009345, 'n_size': 450, 'n_batch': 57, 'duration': 46.57635951042175, 'duration_batch': 0.8171291142179254, 'duration_size': 0.10350302113427057, 'avg_pred_std': 0.02754177166998648}\n", + "Epoch 12\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013119876470623746, 'avg_role_model_std_loss': 5.730330355907093, 'avg_role_model_mean_pred_loss': 0.00015690460682182876, '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.013119876470623746, 'n_size': 900, 'n_batch': 113, 'duration': 113.1574444770813, 'duration_batch': 1.0013933139564717, 'duration_size': 0.12573049386342366, 'avg_pred_std': 0.04159025917142893}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.013785471472785705, 'avg_role_model_std_loss': 4.6235486922847935, 'avg_role_model_mean_pred_loss': 0.0005177017974133631, '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.013785471472785705, 'n_size': 450, 'n_batch': 57, 'duration': 45.30210542678833, 'duration_batch': 0.7947737794173392, 'duration_size': 0.10067134539286296, 'avg_pred_std': 0.029443472623825073}\n", + "Epoch 13\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.012679316052235663, 'avg_role_model_std_loss': 5.353459168564728, 'avg_role_model_mean_pred_loss': 0.00018473560166641948, '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.012679316052235663, 'n_size': 900, 'n_batch': 113, 'duration': 109.81215143203735, 'duration_batch': 0.9717889507259942, 'duration_size': 0.12201350159115261, 'avg_pred_std': 0.03975286655358772}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.01452305714185867, 'avg_role_model_std_loss': 6.82052209327945, 'avg_role_model_mean_pred_loss': 0.0006187541751139886, '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.01452305714185867, 'n_size': 450, 'n_batch': 57, 'duration': 45.597567081451416, 'duration_batch': 0.7999573172184459, 'duration_size': 0.10132792684766981, 'avg_pred_std': 0.028516328191025217}\n", + "Epoch 14\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.012685477107038929, 'avg_role_model_std_loss': 4.885799459394998, 'avg_role_model_mean_pred_loss': 9.410771968618429e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.012685477107038929, 'n_size': 900, 'n_batch': 113, 'duration': 112.43323254585266, 'duration_batch': 0.9949843588128554, 'duration_size': 0.12492581393983629, 'avg_pred_std': 0.043478165464723}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.013303691690218531, 'avg_role_model_std_loss': 4.612162083723674, 'avg_role_model_mean_pred_loss': 0.0004478314968633236, '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.013303691690218531, 'n_size': 450, 'n_batch': 57, 'duration': 46.16491627693176, 'duration_batch': 0.8099108118759958, 'duration_size': 0.10258870283762614, 'avg_pred_std': 0.030379774735162134}\n", + "Epoch 15\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.012951436785774099, 'avg_role_model_std_loss': 5.6180261968808605, 'avg_role_model_mean_pred_loss': 0.0001260765955767044, '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.012951436785774099, 'n_size': 900, 'n_batch': 113, 'duration': 112.08748507499695, 'duration_batch': 0.9919246466813889, 'duration_size': 0.12454165008332994, 'avg_pred_std': 0.0389383625469904}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.013147126083624446, 'avg_role_model_std_loss': 5.849595955204062, 'avg_role_model_mean_pred_loss': 0.00047660569695545343, '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.013147126083624446, 'n_size': 450, 'n_batch': 57, 'duration': 46.19347643852234, 'duration_batch': 0.8104118673424971, 'duration_size': 0.10265216986338298, 'avg_pred_std': 0.024712568949581237}\n", + "Epoch 16\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013076940375483698, 'avg_role_model_std_loss': 6.462012599512772, 'avg_role_model_mean_pred_loss': 0.0003414776301815831, '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.013076940375483698, 'n_size': 900, 'n_batch': 113, 'duration': 112.6052417755127, 'duration_batch': 0.9965065643850681, 'duration_size': 0.12511693530612522, 'avg_pred_std': 0.03943786635764141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.013706634990457031, 'avg_role_model_std_loss': 2.6824540562413044, 'avg_role_model_mean_pred_loss': 0.00021449473134149837, '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.013706634990457031, 'n_size': 450, 'n_batch': 57, 'duration': 46.32444953918457, 'duration_batch': 0.8127096410383258, 'duration_size': 0.10294322119818794, 'avg_pred_std': 0.04417712587797851}\n", + "Epoch 17\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013131085654927625, 'avg_role_model_std_loss': 7.07163172544333, 'avg_role_model_mean_pred_loss': 0.00013269016459129516, '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.013131085654927625, 'n_size': 900, 'n_batch': 113, 'duration': 112.05166149139404, 'duration_batch': 0.9916076238176464, 'duration_size': 0.12450184610154894, 'avg_pred_std': 0.03639758312332947}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.013306772463385843, 'avg_role_model_std_loss': 3.5713896107044203, 'avg_role_model_mean_pred_loss': 0.0004134395122505591, '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.013306772463385843, 'n_size': 450, 'n_batch': 57, 'duration': 45.87373447418213, 'duration_batch': 0.8048023591961777, 'duration_size': 0.10194163216484918, 'avg_pred_std': 0.03344645112622203}\n", + "Epoch 18\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013018570302778648, 'avg_role_model_std_loss': 5.669214043441515, 'avg_role_model_mean_pred_loss': 0.00020193976867753112, '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.013018570302778648, 'n_size': 900, 'n_batch': 113, 'duration': 111.77040791511536, 'duration_batch': 0.9891186541160651, 'duration_size': 0.12418934212790596, 'avg_pred_std': 0.03950189917752173}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.013145547265497347, 'avg_role_model_std_loss': 4.102805095807446, 'avg_role_model_mean_pred_loss': 0.00038455364744524763, '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.013145547265497347, 'n_size': 450, 'n_batch': 57, 'duration': 45.8624849319458, 'duration_batch': 0.8046049988060667, 'duration_size': 0.10191663318210178, 'avg_pred_std': 0.034161844544047325}\n", + "Epoch 19\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.012822051873275389, 'avg_role_model_std_loss': 5.499414050482283, 'avg_role_model_mean_pred_loss': 0.00015386838247107923, '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.012822051873275389, 'n_size': 900, 'n_batch': 113, 'duration': 111.74085307121277, 'duration_batch': 0.9888571068248918, 'duration_size': 0.12415650341245864, 'avg_pred_std': 0.03887049661767957}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.012638136894804322, 'avg_role_model_std_loss': 4.0768485525334475, 'avg_role_model_mean_pred_loss': 0.0003349378748481513, '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.012638136894804322, 'n_size': 450, 'n_batch': 57, 'duration': 46.025766372680664, 'duration_batch': 0.8074695854856256, 'duration_size': 0.10227948082817925, 'avg_pred_std': 0.031167056632081146}\n", + "Epoch 20\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.012691254431588783, 'avg_role_model_std_loss': 5.174604149312652, 'avg_role_model_mean_pred_loss': 5.650333046863428e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.012691254431588783, 'n_size': 900, 'n_batch': 113, 'duration': 111.79648971557617, 'duration_batch': 0.9893494665095236, 'duration_size': 0.12421832190619575, 'avg_pred_std': 0.041397298776866064}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.012594756139959726, 'avg_role_model_std_loss': 3.085094394737736, 'avg_role_model_mean_pred_loss': 0.0002528211896517658, '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.012594756139959726, 'n_size': 450, 'n_batch': 57, 'duration': 46.05099582672119, 'duration_batch': 0.8079122074863367, 'duration_size': 0.10233554628160264, 'avg_pred_std': 0.03782708470693283}\n", + "Epoch 21\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.012717143062295185, 'avg_role_model_std_loss': 5.476102162761738, 'avg_role_model_mean_pred_loss': 0.00015562177650104382, '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.012717143062295185, 'n_size': 900, 'n_batch': 113, 'duration': 111.75997877120972, 'duration_batch': 0.9890263608071657, 'duration_size': 0.12417775419023303, 'avg_pred_std': 0.04065807265089413}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.012463197727791137, 'avg_role_model_std_loss': 3.047649189417655, 'avg_role_model_mean_pred_loss': 0.0003119605865624761, '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.012463197727791137, 'n_size': 450, 'n_batch': 57, 'duration': 45.863757610321045, 'duration_batch': 0.8046273264968604, 'duration_size': 0.10191946135626899, 'avg_pred_std': 0.03551346450848015}\n", + "Epoch 22\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.012550297869214168, 'avg_role_model_std_loss': 5.768059328748397, 'avg_role_model_mean_pred_loss': 0.0001121935050624429, '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.012550297869214168, 'n_size': 900, 'n_batch': 113, 'duration': 111.46515083312988, 'duration_batch': 0.986417264009999, 'duration_size': 0.12385016759236654, 'avg_pred_std': 0.04134711747230813}\n", + "Time out: 3600.0357847213745/3600\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval loss {'role_model': 'tab_ddpm_concat', 'n_size': 1050, 'n_batch': 132, 'role_model_metrics': {'avg_loss': 0.018736953249844236, 'avg_g_mag_loss': 0.6755777371781213, 'avg_g_cos_loss': 0.01375962085758006, 'pred_duration': 2.3168554306030273, 'grad_duration': 6.480625629425049, 'total_duration': 8.797481060028076, 'pred_std': 0.04763111099600792, 'std_loss': 0.864331066608429, 'mean_pred_loss': 9.326593499281444e-06, 'pred_rmse': 0.1368829905986786, 'pred_mae': 0.08326660096645355, 'pred_mape': 3.067068099975586, 'grad_rmse': 0.13684110343456268, 'grad_mae': 0.08312927931547165, 'grad_mape': 0.9944403171539307}, '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.018736953249844236, 'avg_g_mag_loss': 0.6755777371781213, 'avg_g_cos_loss': 0.01375962085758006, 'avg_pred_duration': 2.3168554306030273, 'avg_grad_duration': 6.480625629425049, 'avg_total_duration': 8.797481060028076, 'avg_pred_std': 0.04763111099600792, 'avg_std_loss': 0.864331066608429, 'avg_mean_pred_loss': 9.326593499281444e-06}, 'min_metrics': {'avg_loss': 0.018736953249844236, 'avg_g_mag_loss': 0.6755777371781213, 'avg_g_cos_loss': 0.01375962085758006, 'pred_duration': 2.3168554306030273, 'grad_duration': 6.480625629425049, 'total_duration': 8.797481060028076, 'pred_std': 0.04763111099600792, 'std_loss': 0.864331066608429, 'mean_pred_loss': 9.326593499281444e-06, 'pred_rmse': 0.1368829905986786, 'pred_mae': 0.08326660096645355, 'pred_mape': 3.067068099975586, 'grad_rmse': 0.13684110343456268, 'grad_mae': 0.08312927931547165, 'grad_mape': 0.9944403171539307}, 'model_metrics': {'tab_ddpm_concat': {'avg_loss': 0.018736953249844236, 'avg_g_mag_loss': 0.6755777371781213, 'avg_g_cos_loss': 0.01375962085758006, 'pred_duration': 2.3168554306030273, 'grad_duration': 6.480625629425049, 'total_duration': 8.797481060028076, 'pred_std': 0.04763111099600792, 'std_loss': 0.864331066608429, 'mean_pred_loss': 9.326593499281444e-06, 'pred_rmse': 0.1368829905986786, 'pred_mae': 0.08326660096645355, 'pred_mape': 3.067068099975586, 'grad_rmse': 0.13684110343456268, 'grad_mae': 0.08312927931547165, 'grad_mape': 0.9944403171539307}}}\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-22T15:32:14.356600Z", + "iopub.status.busy": "2024-03-22T15:32:14.356191Z", + "iopub.status.idle": "2024-03-22T15:32:14.361074Z", + "shell.execute_reply": "2024-03-22T15:32:14.360119Z" + }, + "papermill": { + "duration": 0.028774, + "end_time": "2024-03-22T15:32:14.363233", + "exception": false, + "start_time": "2024-03-22T15:32:14.334459", + "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-22T15:32:14.403512Z", + "iopub.status.busy": "2024-03-22T15:32:14.403213Z", + "iopub.status.idle": "2024-03-22T15:32:14.485670Z", + "shell.execute_reply": "2024-03-22T15:32:14.484875Z" + }, + "papermill": { + "duration": 0.105605, + "end_time": "2024-03-22T15:32:14.488131", + "exception": false, + "start_time": "2024-03-22T15:32:14.382526", + "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-22T15:32:14.528399Z", + "iopub.status.busy": "2024-03-22T15:32:14.527691Z", + "iopub.status.idle": "2024-03-22T15:32:14.808061Z", + "shell.execute_reply": "2024-03-22T15:32:14.807102Z" + }, + "papermill": { + "duration": 0.302777, + "end_time": "2024-03-22T15:32:14.810066", + "exception": false, + "start_time": "2024-03-22T15:32:14.507289", + "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-22T15:32:14.853193Z", + "iopub.status.busy": "2024-03-22T15:32:14.852886Z", + "iopub.status.idle": "2024-03-22T15:34:18.403745Z", + "shell.execute_reply": "2024-03-22T15:34:18.402880Z" + }, + "papermill": { + "duration": 123.573926, + "end_time": "2024-03-22T15:34:18.406323", + "exception": false, + "start_time": "2024-03-22T15:32:14.832397", + "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-22T15:34:18.447363Z", + "iopub.status.busy": "2024-03-22T15:34:18.446530Z", + "iopub.status.idle": "2024-03-22T15:34:18.468428Z", + "shell.execute_reply": "2024-03-22T15:34:18.467518Z" + }, + "papermill": { + "duration": 0.043772, + "end_time": "2024-03-22T15:34:18.470346", + "exception": false, + "start_time": "2024-03-22T15:34:18.426574", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
avg_g_cos_lossavg_g_mag_lossavg_lossgrad_durationgrad_maegrad_mapegrad_rmsemean_pred_losspred_durationpred_maepred_mapepred_rmsepred_stdstd_losstotal_duration
tab_ddpm_concat0.010057NaN0.0187376.4715580.0831290.994440.1368410.0000092.345920.0832663.0670640.1368830.0476310.864338.817478
\n", + "
" + ], + "text/plain": [ + " avg_g_cos_loss avg_g_mag_loss avg_loss grad_duration \\\n", + "tab_ddpm_concat 0.010057 NaN 0.018737 6.471558 \n", + "\n", + " grad_mae grad_mape grad_rmse mean_pred_loss \\\n", + "tab_ddpm_concat 0.083129 0.99444 0.136841 0.000009 \n", + "\n", + " pred_duration pred_mae pred_mape pred_rmse pred_std \\\n", + "tab_ddpm_concat 2.34592 0.083266 3.067064 0.136883 0.047631 \n", + "\n", + " std_loss total_duration \n", + "tab_ddpm_concat 0.86433 8.817478 " + ] + }, + "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-22T15:34:18.509088Z", + "iopub.status.busy": "2024-03-22T15:34:18.508430Z", + "iopub.status.idle": "2024-03-22T15:34:18.869146Z", + "shell.execute_reply": "2024-03-22T15:34:18.868200Z" + }, + "papermill": { + "duration": 0.382188, + "end_time": "2024-03-22T15:34:18.871279", + "exception": false, + "start_time": "2024-03-22T15:34:18.489091", + "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-22T15:34:18.912473Z", + "iopub.status.busy": "2024-03-22T15:34:18.912179Z", + "iopub.status.idle": "2024-03-22T15:36:29.398389Z", + "shell.execute_reply": "2024-03-22T15:36:29.397576Z" + }, + "papermill": { + "duration": 130.509753, + "end_time": "2024-03-22T15:36:29.401031", + "exception": false, + "start_time": "2024-03-22T15:34:18.891278", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../insurance/_cache_aug_test/tab_ddpm_concat/all inf False\n", + "Caching in ../../../../insurance/_cache_bs_test/tab_ddpm_concat/all inf False\n", + "Caching in ../../../../insurance/_cache_synth_test/tab_ddpm_concat/all inf False\n" + ] + } + ], + "source": [ + "#\"\"\"\n", + "from ml_utility_loss.loss_learning.estimator.process import pred, pred_2\n", + "from ml_utility_loss.util import stack_samples\n", + "\n", + "#samples = test_set[list(range(len(test_set)))]\n", + "#y = {m: pred(model[m], s) for m, s in samples.items()}\n", + "y = pred_2(model, test_set, batch_size=batch_size)\n", + "#\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "6ab51db8", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T15:36:29.442257Z", + "iopub.status.busy": "2024-03-22T15:36:29.441947Z", + "iopub.status.idle": "2024-03-22T15:36:29.468537Z", + "shell.execute_reply": "2024-03-22T15:36:29.467652Z" + }, + "papermill": { + "duration": 0.049389, + "end_time": "2024-03-22T15:36:29.470551", + "exception": false, + "start_time": "2024-03-22T15:36:29.421162", + "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-22T15:36:29.508490Z", + "iopub.status.busy": "2024-03-22T15:36:29.508204Z", + "iopub.status.idle": "2024-03-22T15:36:29.513557Z", + "shell.execute_reply": "2024-03-22T15:36:29.512690Z" + }, + "papermill": { + "duration": 0.026473, + "end_time": "2024-03-22T15:36:29.515492", + "exception": false, + "start_time": "2024-03-22T15:36:29.489019", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'tab_ddpm_concat': 0.05068456961917469}\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-22T15:36:29.555333Z", + "iopub.status.busy": "2024-03-22T15:36:29.555062Z", + "iopub.status.idle": "2024-03-22T15:36:29.936809Z", + "shell.execute_reply": "2024-03-22T15:36:29.935892Z" + }, + "papermill": { + "duration": 0.404495, + "end_time": "2024-03-22T15:36:29.939133", + "exception": false, + "start_time": "2024-03-22T15:36:29.534638", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAATgAAAE8CAYAAABU7q18AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABHf0lEQVR4nO3dd3hUZdo/8O+ZPmmThJRJIAUIJFITQzEoBiQvAVkk6rIaCwkIuCu8qFl3FX+vVPeNjaYiuPsuiayCrruILiJlI2URROlFDSSEJEB6r1Of3x8nc5JJMqlTksn9ua65wpx5zpn7TDI3zzlP4xhjDIQQ4oREjg6AEEJshRIcIcRpUYIjhDgtSnCEEKdFCY4Q4rQowRFCnBYlOEKI06IERwhxWpTgCCFOixIcAQCEhobiV7/6lU3fg+M4rFmzptNya9asAcdxNo2FDAyU4JzEyZMnsWbNGlRWVjo6FNIPfPDBB0hPT3d0GDZHCc5JnDx5EmvXrqUER7qEEhwhhPRzlOCcwJo1a/CHP/wBADB06FBwHAeO43Dz5k2kpaXhgQcegJ+fH+RyOUaNGoVt27ZZPNahQ4cQGRkJhUKBUaNGYc+ePd2OR6PR4MUXX4Svry/c3d3x0EMP4datW+2WPXHiBCZOnAiFQoHhw4fjww8/bLccx3FYvnw5PvnkE4SHh0OhUCA6OhrHjx9v81lwHIdr167hqaeegkqlgq+vL1577TUwxpCfn4958+bBw8MDarUaGzZs6Pb5AcA333yD2NhYuLu7w8PDAxMnTsSuXbvMynz++eeIjo6GUqmEj48PnnrqKdy+fdusTHJyMtzc3HD79m0kJCTAzc0Nvr6+eOmll2AwGMzKGo1GbNmyBWPHjoVCoYCvry9mzZqFM2fOCGW68vsODQ3F1atXcezYMeFvZdq0aT36HPo8Rvq9ixcvssTERAaAbdq0if3tb39jf/vb31htbS2bOHEiS05OZps2bWLvvfcemzlzJgPA3n//fbNjhISEsJEjRzJPT0/2yiuvsI0bN7KxY8cykUjEDh061K14nnrqKQaAPfHEE+z9999njzzyCBs3bhwDwFavXi2Uu3TpElMqlSw4OJilpqay9evXM39/f6FsSwDYmDFjmI+PD1u3bh178803WUhICFMqlezy5ctCudWrVzMALDIykiUmJrIPPviAzZkzhwFgGzduZOHh4ex3v/sd++CDD9i9997LALBjx4516/zS0tIYx3FszJgx7E9/+hPbunUrW7x4MXv66afNygBgEydOZJs2bWKvvPIKUyqVLDQ0lFVUVAjlkpKSmEKhYKNHj2aLFi1i27ZtY48++igDwD744AOz901OTmYA2OzZs9nmzZvZO++8w+bNm8fee+89oUxXft9ffPEFGzJkCIuIiBD+Vrr7O+4vKME5ibfffpsBYDk5OWbb6+vr25SNj49nw4YNM9sWEhLCALB//vOfwraqqioWEBDAoqKiuhzHhQsXGAD23HPPmW1/4okn2iS4hIQEplAoWG5urrDtp59+YmKxuN0EB4CdOXNG2Jabm8sUCgV7+OGHhW2mBLd06VJhm16vZ0OGDGEcx7E33nhD2F5RUcGUSiVLSkrq8vlVVlYyd3d3NnnyZNbQ0GD2mtFoZIwxptVqmZ+fHxszZoxZmX379jEAbNWqVcK2pKQkBoCtW7fO7FhRUVEsOjpaeP7tt98yAGzFihVtYjK9L2Nd/32PHj2axcbGduGM+ze6RHVySqVS+HdVVRVKS0sRGxuLGzduoKqqyqxsYGAgHn74YeG5h4cHFixYgPPnz6OwsLBL77d//34AwIoVK8y2v/DCC2bPDQYDDh48iISEBAQHBwvb77rrLsTHx7d77JiYGERHRwvPg4ODMW/ePBw8eLDN5dzixYuFf4vFYkyYMAGMMTzzzDPCdk9PT4SHh+PGjRtdOjcAOHz4MGpqavDKK69AoVCYvWbq2nLmzBkUFxfjueeeMyszZ84cRERE4Ouvv25z3N/+9rdmz6dOnWoW1z//+U9wHIfVq1e32bdll5ru/L4HAkpwTu67775DXFwcXF1d4enpCV9fX7z66qsA0OYPPiwsrE3/s5EjRwIAbt682aX3y83NhUgkwvDhw822h4eHmz0vKSlBQ0MDRowY0eYYrcuatFd25MiRqK+vR0lJidn2lkkTAFQqFRQKBXx8fNpsr6iosHxCrWRnZwMAxowZY7FMbm4ugPbPIyIiQnjdxHQ/rSUvLy+zuLKzsxEYGAhvb+8O4+vO73sgkDg6AGI72dnZmDFjBiIiIrBx40YEBQVBJpNh//792LRpE4xGo6NDtBmxWNylbQDAHDxrv6W4umsg/74toQTnJNrr+f+vf/0LGo0GX331lVmN5siRI+0eIysrC4wxs2Ndu3YNAN/y1hUhISEwGo3Izs42q8FkZmaalfP19YVSqcT169fbHKN1WZP2yl67dg0uLi5takC2YqqZXrlyBWFhYe2WCQkJAcCfxwMPPGD2WmZmpvB6d9/34MGDKC8vt1iL687ve6CMFKFLVCfh6uoKAGYdfU01g5Y1lKqqKqSlpbV7jDt37uCLL74QnldXV2Pnzp2IjIyEWq3uUhyzZ88GALz77rtm2zdv3mz2XCwWIz4+Hnv37kVeXp6w/eeff8bBgwfbPfapU6dw7tw54Xl+fj6+/PJLzJw502q1oM7MnDkT7u7uSE1NRWNjo9lrps95woQJ8PPzw/bt26HRaITXv/nmG/z888+YM2dOt9/30UcfBWMMa9eubfOa6X278/t2dXUdEJ3CqQbnJEw33//f//t/ePzxxyGVSnH//fdDJpNh7ty5ePbZZ1FbW4u//OUv8PPzQ0FBQZtjjBw5Es888wx+/PFH+Pv7Y8eOHSgqKrKYENsTGRmJxMREfPDBB6iqqsKUKVOQkZGBrKysNmXXrl2LAwcOYOrUqXjuueeg1+vx3nvvYfTo0bh06VKb8mPGjEF8fDxWrFgBuVyODz74QDiOvXh4eGDTpk1YvHgxJk6ciCeeeAJeXl64ePEi6uvr8dFHH0EqleLNN9/EwoULERsbi8TERBQVFWHLli0IDQ3Fiy++2O33nT59Op5++mm8++67uH79OmbNmgWj0Yj//Oc/mD59OpYvX46ZM2d2+fcdHR2Nbdu24fXXX0dYWBj8/Pza1DadguMacIm1rV+/ng0ePJiJRCKhy8hXX33Fxo0bxxQKBQsNDWVvvvkm27FjR5suJSEhIWzOnDns4MGDbNy4cUwul7OIiAj2+eefdzuOhoYGtmLFCjZo0CDm6urK5s6dy/Lz89t0E2GMsWPHjrHo6Ggmk8nYsGHD2Pbt24WuHi0BYMuWLWMff/wxGzFiBJPL5SwqKoodOXLErJxp35KSErPtSUlJzNXVtU2ssbGxbPTo0d0+x6+++opNmTKFKZVK5uHhwSZNmsR2795tVuazzz5jUVFRTC6XM29vb/bkk0+yW7dudSmu9j4DvV7P3n77bRYREcFkMhnz9fVls2fPZmfPnjWLqyu/78LCQjZnzhzm7u7OADhtlxGOMVoXlfR9HMdh2bJleP/99x0dCulH6B4cIcRp0T040mWddfZVKpVQqVR2isb6SkpK2nQYbkkmk3XaD430LZTgSJcFBAR0+HpSUlK/noJn4sSJbTrhthQbG4ujR4/aLyDSa5TgSJcdPny4w9cDAwNt9t72uFX8ySefoKGhweLrXl5eNo+BWBc1MhBCnBY1MhBCnBZdorbDaDTizp07cHd3HzBDWgjpTxhjqKmpQWBgIEQiy/U0SnDtuHPnDoKCghwdBiGkE/n5+RgyZIjF1ynBtcPd3R0A/+F5eHg4OBpCSGvV1dUICgoSvquWUIJrh+my1MPDgxIcIX1YZ7eQqJGBEOK0KMERQpwWJThCiNOie3A9xBiDXq/vcOwiaZ9YLIZEIqEuOMTmKMH1gFarRUFBAerr6x0dSr/l4uKCgIAAyGQyR4dCnBgluG4yGo3IycmBWCxGYGAgZDIZ1US6gTEGrVaLkpIS5OTkYMSIER121CSkNyjBdZNWq4XRaERQUBBcXFwcHU6/pFQqIZVKkZubC61W22Z90YHiVkU9frxZjqkjfOHjJnd0OE6J/uvsIap19A59fsD3N8pxs7Qep2+UOzoUp+XQv7Ljx49j7ty5CAwMBMdx2Lt3r9nrycnJ4DjO7DFr1qxOj7t161aEhoZCoVBg8uTJ+OGHH2x0BoT0XH45fw/3enGNgyNxXg5NcHV1dRg/fjy2bt1qscysWbNQUFAgPHbv3t3hMT/77DOkpKRg9erVOHfuHMaPH4/4+HgUFxdbO3xCekUm4b9+D4233Tx6A51DE9zs2bPx+uuv4+GHH7ZYRi6XQ61WC4/OJh3cuHEjlixZgoULF2LUqFHYvn07XFxcsGPHDmuHTzoQGhraZi1UYk4s4hunVEqpgyNxXn3+RsjRo0fh5+eH8PBw/O53v0NZWZnFslqtFmfPnkVcXJywTSQSIS4uDqdOnbK4n0ajQXV1tdmDEFvTG4wAAIm4z38N+60+/cnOmjULO3fuREZGBt58800cO3YMs2fPtti5trS0FAaDAf7+/mbb/f39O1wwJTU1FSqVSnjQVEk8rVbr6BCcFmMMOgM/mfa5vAoHR+O8+nSCe/zxx/HQQw9h7NixSEhIwL59+/Djjz9afeGPlStXoqqqSnjk5+f36DhavdHiw/S/dVfK6rpQtiemTZuG5cuXY/ny5VCpVPDx8cFrr70mrHcQGhqK9evXY8GCBfDw8MDSpUsBACdOnMDUqVOhVCoRFBSEFStWoK6uTjhucXEx5s6dC6VSiaFDh+KTTz7pUXwDCcdxeDomBABwrZAaGWylX/WDGzZsGHx8fJCVlYUZM2a0ed3HxwdisRhFRUVm24uKiqBWqy0eVy6XQy7vfT+krUeyLL421McVCVGDhed/Pp4t/A/e2hAvJeZPaK5F7vguBw1a81rri/81skcxfvTRR3jmmWfwww8/4MyZM1i6dCmCg4OxZMkSAMA777yDVatWYfXq1QCA7OxszJo1C6+//jp27NiBkpISIUmmpaUB4Fu779y5gyNHjkAqlWLFihXUqNMFkqZ7cHojLYtiK/0qwd26dQtlZWUWl6+TyWSIjo5GRkYGEhISAPAjDzIyMrB8+XI7Rtp3BQUFYdOmTeA4DuHh4bh8+TI2bdokJLgHHngAv//974XyixcvxpNPPokXXngBADBixAi8++67iI2NxbZt25CXl4dvvvkGP/zwAyZOnAgA+Otf/4q77rrL7ufW35gaGfQW/qMjvefQBFdbW4usrOZaT05ODi5cuABvb294e3tj7dq1ePTRR6FWq5GdnY0//vGPCAsLQ3x8vLDPjBkz8PDDDwsJLCUlBUlJSZgwYQImTZqEzZs3o66uDgsXLrT5+SybHmbxNVGr0VxL7x9usWzrkV+L7h3am7DM3HPPPWZDy2JiYrBhwwbhvuaECRPMyl+8eBGXLl0yu+xkjAlD1q5duwaJRILo6Gjh9YiICHh6elotZmdU1aDDVxfvAACMjMFgZELCI9bj0AR35swZTJ8+XXiekpICgF9AeNu2bbh06RI++ugjVFZWIjAwEDNnzsT69evNLiezs7NRWloqPH/sscdQUlKCVatWobCwEJGRkThw4ECbhgdbMPVrcmTZ3nJ1dTV7Xltbi2effRYrVqxoUzY4OBjXrl2zV2hORaMzoLRGIzzXG40Qi8QOjMg5OTTBTZs2rcMFfQ8ePNjpMW7evNlmm+keEWnr9OnTZs+///57jBgxAmJx+1+uu+++Gz/99BPCwtqvnUZERECv1+Ps2bPCJWpmZiYqKyutGrez0bW676Y3MMj71Q2j/qFPt6IS68vLy0NKSgoyMzOxe/duvPfee3j++ectln/55Zdx8uRJLF++HBcuXMD169fx5ZdfCv+BhIeHY9asWXj22Wdx+vRpnD17FosXL4ZSqbTXKfVLrVvVjbT+uk1QghtgFixYgIaGBkyaNAnLli3D888/L3QHac+4ceNw7NgxXLt2DVOnTkVUVBRWrVqFwMDm4UVpaWkIDAxEbGwsHnnkESxduhR+fn72OJ1+y9RyKhZxeOqeELjIqPpmC/SpDjBSqRSbN2/Gtm3b2rzW3uU+AEycOBGHDh2yeEy1Wo19+/aZbXv66ad7FaezM92aUXso4OtOUyXZCtXgCHEA0y04mivVtijBEeIAjPGXp7cqGvD9jTLUavSODskp0SXqAGLtIW6k58LV7ghXu+OvJ3JwKrsMoYNc4UbNqFZHNThCHEjcdIlqoFZUm6AER4gDiZpGLxhpPKpNUJ2YEAfILqnFldtVKKvlp6SifnC2QTU4Qhygsl6HGyXNU04ZqAZnE5TgCHGA1kMUqQZnG5TgCHGA1hU2qsDZBt2DI8QBTDW2wZ5KTB3pA0+lzMEROSdKcIQ4gKnV1NddjgAVTUxgK3SJSogDmC5JRTTJpU1RgrMGxgC91v6PbtyY3rlzJwYNGgSNRmO2PSEhgQbGO4DpEjWvrA5nc8tRVN3o4IicE12iWoNBB/xng/3fd+rvAUnX7t3Mnz8fK1aswFdffYX58+cD4FfD+vrrrzucKYTYxtQRPrgvzAffXCnE8WuluH+kL/w9FI4Oy+lQDW6AUCqVeOKJJ4SVsADg448/RnBwMKZNm+a4wAYojuMgEnGQNI3V6mhma9JzVIOzBrGUr0054n27YcmSJZg4cSJu376NwYMHIz09HcnJyWaL0BD7Ejd99tTR1zYowVkDx3X5UtGRoqKiMH78eOzcuRMzZ87E1atX8fXXXzs6rAHpYn4lblc24E5lAwDqB2crlOAGmMWLF2Pz5s24ffs24uLiEBQU1PlOxOoKqhqR2WJFewbKcLZA9+AGmCeeeAK3bt3CX/7yFyxatMjR4QxYre+50S0426AEN8CoVCo8+uijcHNzQ0JCgqPDGbBM879JTNMlUYazCYcmuOPHj2Pu3LkIDAwEx3HYu3ev8JpOp8PLL7+MsWPHwtXVFYGBgViwYAHu3LnT4THXrFkDjuPMHhERETY+k/7l9u3bePLJJ80W0Cb2ZbrnNi7IE4/ePQRjB6scG5CTcmiCq6urw/jx47F169Y2r9XX1+PcuXN47bXXcO7cOezZsweZmZl46KGHOj3u6NGjUVBQIDxOnDhhi/D7nYqKCnzxxRc4evQoli1b5uhwBjTTJeogVxmCB7nA06XvN1L1Rw5tZJg9ezZmz57d7msqlQqHDx822/b+++9j0qRJyMvLQ3BwsMXjSiQSqNVqq8bqDKKiolBRUYE333wT4eHhjg5nQDNdklIPHdvqV62oVVVV4DgOnp6eHZa7fv06AgMDoVAoEBMTg9TU1A4TokajMRvCVF1dba2Q+xRL654S+zM2LWxfXqfFpVuV8HKRIcjbxbFBOaF+08jQ2NiIl19+GYmJifDw8LBYbvLkyUhPT8eBAwewbds25OTkYOrUqaipqbG4T2pqKlQqlfCgrhPE1h6KDMTvpg2HRCRCxs/F+LnAOf9TdbR+keB0Oh1+85vfgDHW7orsLc2ePRvz58/HuHHjEB8fj/3796OyshJ///vfLe6zcuVKVFVVCY/8/PxOY6KhNb0z0D8/qVgEhVQMqdjUiurggJxUn79ENSW33NxcfPvttx3W3trj6emJkSNHIisry2IZuVze5RZFqZQfHlVfXw+lkubx6qn6+noAzZ/nQGUaJjfQE76t9OkEZ0pu169fx5EjRzBo0KBuH6O2thbZ2dlWmxJILBbD09MTxcXFAAAXFxcay9kNjDHU19ejuLgYnp6eEIvFjg7JIU5ml6JOY4BpOjhKb7bh0ARXW1trVrPKycnBhQsX4O3tjYCAAPz617/GuXPnsG/fPhgMBhQWFgIAvL29IZPxzeozZszAww8/jOXLlwMAXnrpJcydOxchISG4c+cOVq9eDbFYjMTERKvFbWqhNSU50n2enp4DuqU7u6QOpTUahPm5AaCOvrbi0AR35swZTJ8+XXiekpICAEhKSsKaNWvw1VdfAQAiIyPN9jty5IgwxU92djZKS0uF127duoXExESUlZXB19cX9913H77//nv4+vpaLW6O4xAQEAA/Pz/odDqrHXegkEqlA7bmZmK6JKV7cLbl0AQ3bdq0Du89dOW+ROuuD59++mlvw+oysVg84L+opGdM0yOJ6B6cTfXpe3CEOCtTjS3UxxXD/dzgKqOvoi3Qp0qIA5hqbJ5KKfxoqnKb6Rf94AhxNs1DtagF3pYowRHiAKZL1HqtHj8XVCOntM6xATkpukQlxAEWxITAyICCygYcuFKIAJUCQ31cHR2W06EER4gDuDQ1KohF1E3ElugSlRAHErqJ0FgGm6AaHCEO8O0vReA4DkFe/BRJVIOzDUpwhNiZ0chwMb8KABDkxU/YQB19bYMuUQmxs5bjTsUi/itopCqcTVCCI8TOWuYyCTUy2BRdohJiZy1rcF6uMsweq4ZMTHUNW6AER4idtbzd5ioTI0LdvUlcSdfRfxuE2JmhxYpaNFTLtqgGR4idmS5RRRwHrd6IvPI6AJww+SWxHkpwhNiZm0yCRfcOhZEx1Gn0+NfFAsgkIoT5hTk6NKdDCY4QOxOJOKhc+MV2qur5GaGpH5xt0D04QhyIa/oGUn6zDarBEWJntRo9zudVQCEV464AvgWV+sHZBtXgCLGzOo0eZ25W4GJ+pbBsoJExuky1AUpwhNhZy1ZUUYtuIpTfrI8SHCF2ZrocFXF8X7jm7ZThrI3uwRFiZ6aB9SIRB4lIhLi7/MFxMKvNEetwaA3u+PHjmDt3LgIDA8FxHPbu3Wv2OmMMq1atQkBAAJRKJeLi4nD9+vVOj7t161aEhoZCoVBg8uTJ+OGHH2x0BoR0X8sFZ8QiDmOHqDBmsAoiESU4a3Nogqurq8P48eOxdevWdl9/66238O6772L79u04ffo0XF1dER8fj8bGRovH/Oyzz5CSkoLVq1fj3LlzGD9+POLj41FcXGyr0yCkW0yXqGKqsdke6yMAsC+++EJ4bjQamVqtZm+//bawrbKyksnlcrZ7926Lx5k0aRJbtmyZ8NxgMLDAwECWmpra5ViqqqoYAFZVVdW9kyCkC7KKa9jGQ5ls9+lcxhhjN0tr2Y2SWqbTGxwcWf/R1e9on21kyMnJQWFhIeLi4oRtKpUKkydPxqlTp9rdR6vV4uzZs2b7iEQixMXFWdwHADQaDaqrq80ehNjKEC8lno4JQfxoNQBg7/k72Hv+Nhp0BgdH5nz6bIIrLCwEAPj7+5tt9/f3F15rrbS0FAaDoVv7AEBqaipUKpXwCAoK6mX0hFgml4jh4yaHl6sMAIS+cNSGan19NsHZ08qVK1FVVSU88vPzHR0SGUBMjQvM6OBAnFCf7SaiVvPV96KiIgQEBAjbi4qKEBkZ2e4+Pj4+EIvFKCoqMtteVFQkHK89crkccrm890ET0gXF1Y3ILqmDt6sM4Wp3oS8c9YOzvj5bgxs6dCjUajUyMjKEbdXV1Th9+jRiYmLa3UcmkyE6OtpsH6PRiIyMDIv7EGJvxTUafH+jDL8U8vd6Tf3fDJTgrM6hNbja2lpkZWUJz3NycnDhwgV4e3sjODgYL7zwAl5//XWMGDECQ4cOxWuvvYbAwEAkJCQI+8yYMQMPP/wwli9fDgBISUlBUlISJkyYgEmTJmHz5s2oq6vDwoUL7X16hLTLYGweqsX/5LdTfrM+hya4M2fOYPr06cLzlJQUAEBSUhLS09Pxxz/+EXV1dVi6dCkqKytx33334cCBA1AoFMI+2dnZKC0tFZ4/9thjKCkpwapVq1BYWIjIyEgcOHCgTcMDIY7Scixqy5+MMpzVcYw+1Taqq6uhUqlQVVUFDw9aEIRY19ncChy/VoK7Atwxa0wArtyugt7IMNLfDS6yPntbvE/p6neUPk1C7Iy1GKoFAGMGqxwZjlPrs40MhDir5tlEaKiWrfUowd24ccPacRAyYDQ3MvDPi6sbkV9ej0YayWB1PUpwYWFhmD59Oj7++OMOB74TQtoaM9gDj08KwoQQbwDAoZ+K8I+zt1BUTd8la+tRgjt37hzGjRuHlJQUqNVqPPvsszQlESFd5K6QIkClFFbWMl2q0roM1tejBBcZGYktW7bgzp072LFjBwoKCnDfffdhzJgx2LhxI0pKSqwdJyFOS0QjGWymV40MEokEjzzyCD7//HO8+eabyMrKwksvvYSgoCAsWLAABQUF1oqTEKeRV1aPs7nluF3ZAID6wdlSrxLcmTNn8NxzzyEgIAAbN27ESy+9hOzsbBw+fBh37tzBvHnzrBUnIU4jq6QGx6+VIresDgBajEV1YFBOqkf94DZu3Ii0tDRkZmbiwQcfxM6dO/Hggw9CJOLz5dChQ5Geno7Q0FBrxkqIUzA2zRrSeiQDXaJaX48S3LZt27Bo0SIkJyebzfTRkp+fH/7617/2KjhCnFGboVpN11FGmi7J6nqU4A4fPozg4GChxmbCGEN+fj6Cg4Mhk8mQlJRklSAJcSbCmgxNX59RASoM8XKBrztN2WVtPUpww4cPR0FBAfz8/My2l5eXY+jQoTAYqMMiIZYYWw3VCle7OzIcp9ajRgZLrT21tbVmM30QQtpqfYlKbKdbNTjTdEYcx2HVqlVwcXERXjMYDDh9+rTF2XYJIbyWK9sDQFWDDo06A9zkErjKaf4La+rWp3n+/HkAfA3u8uXLkMlkwmsymQzjx4/HSy+9ZN0ICXEyU4YPQlSQJzybRjKcyi7FzwU1uH+kL6JDvBwcnXPpVoI7cuQIAGDhwoXYsmULzZVGSA/4uJk3JnDU0ddmelQfTktLs3YchAxYNBbVdrqc4B555BGkp6fDw8MDjzzySIdl9+zZ0+vACHFWWcU1qNMYEDrIFSoXKY1FtaEuJziVSiVUpVUqmoGUkJ46m1uBO5WNmDs+oCnB0UgGW+lygmt5WUqXqIT0XOsZfTlaVctmetQPrqGhAfX19cLz3NxcbN68GYcOHbJaYIQ4K0uralENzvp6lODmzZuHnTt3AgAqKysxadIkbNiwAfPmzcO2bdusGiAhzqZ1DS7Y2wWTh3kj2Nulg71IT/R4Rt+pU6cCAP7xj39ArVYjNzcXO3fuxLvvvmvVAAlxNs2ravHPQ31cMWW4D0IGuTowKufUowRXX18Pd3d+/NyhQ4fwyCOPQCQS4Z577kFubq5VAyTE2QiLzohoqJat9XjRmb179yI/Px8HDx7EzJkzAQDFxcVW7/wbGhoKjuPaPJYtW9Zu+fT09DZlaXws6UuE2USaqnANWgPKajWoadQ5MCrn1KOOvqtWrcITTzyBF198ETNmzEBMTAwAvjYXFRVl1QB//PFHs9lJrly5gv/6r//C/PnzLe7j4eGBzMxM4TlHg5pJHzJzlD+0BqMwVOvKnSqcuF6K0YEemDla7eDonEuPEtyvf/1r3HfffSgoKMD48eOF7TNmzMDDDz9steAAwNfX1+z5G2+8geHDhyM2NtbiPhzHQa2mPxTSNwW1akwQ0ZTlNtPjqQvUanWbJDJp0qReB9QRrVaLjz/+GCkpKR3WympraxESEgKj0Yi7774b//u//4vRo0dbLK/RaKDRaITn1dXVVo2bkI7QWFTb6VGCq6urwxtvvIGMjAwUFxfD2GquZVutfL93715UVlYiOTnZYpnw8HDs2LED48aNQ1VVFd555x1MmTIFV69exZAhQ9rdJzU1FWvXrrVJzIS09nNBNRgDhvu5Qi4R01hUG+JYD/7bSExMxLFjx/D0008jICCgTW3q+eeft1qALcXHx0Mmk+Ff//pXl/fR6XS46667kJiYiPXr17dbpr0aXFBQEKqqqmjGFGJ17397HToDw6L7hkKllOLSrUpk/FyMMD83zB0f6Ojw+oXq6mqoVKpOv6M9qsF98803+Prrr3Hvvff2OMDuys3Nxb///e9uD+SXSqWIiopCVlaWxTJyuRxyOc2HT+yj9YSXNJLBdnrUTcTLywve3t7WjqVDaWlp8PPzw5w5c7q1n8FgwOXLly2u/kWIvbUeqkVjUW2nRwlu/fr1WLVqldl4VFsyGo1IS0tDUlISJBLzSueCBQuwcuVK4fm6detw6NAh3LhxA+fOncNTTz2F3NxcLF682C6xEtIRo5EJicyU4Hzc5IgO8UKYn5sDI3NOPbpE3bBhA7Kzs+Hv74/Q0FBIpVKz18+dO2eV4Ez+/e9/Iy8vD4sWLWrzWl5entnyhRUVFViyZAkKCwvh5eWF6OhonDx5EqNGjbJqTIT0RMvLUNOfrb+HAv4e1BndFnqU4BISEqwcRsdmzpxpsQn96NGjZs83bdqETZs22SEqQrqvZUspraplez1KcKtXr7Z2HIQMCGY1uKYEpzMY0aAzgAPgrpBa2JP0RI/uwQH8NEn/93//h5UrV6K8vBwAf2l6+/ZtqwVHiLORikX41bgAPDg2QGhFzS+vx1//k4N9lwocG5wT6lEN7tKlS4iLi4NKpcLNmzexZMkSeHt7Y8+ePcjLyxPmiiOEmBOLOIzwN1/JnrqJ2E6PanApKSlITk7G9evXzWbqePDBB3H8+HGrBUfIQEAjGWynRzW4H3/8ER9++GGb7YMHD0ZhYWGvgyLEWWn0BtwsrYdEzGG4L98tpLkfHGU4a+tRDU4ul7c7IP3atWttZv8ghDSr1xiw/3IBDl5trgiYJr40UhXO6nqU4B566CGsW7cOOh0/QR/HccjLy8PLL7+MRx991KoBEuJMDK1GMfD/5n9SfrO+HiW4DRs2oLa2Fr6+vmhoaEBsbCzCwsLg7u6OP/3pT9aOkRCnYWpIEJslOGpksJUe3YNTqVQ4fPgwvvvuO1y8eBG1tbW4++67ERcXZ+34CHEqphzWso+vUibGuCEqKKVixwTlxLqd4IxGI9LT07Fnzx7cvHkTHMdh6NChUKvVYIzR9OCEdKD1QHsA8FBIMeMu/073/f5GGXQGI+4L86HvWRd16xKVMYaHHnoIixcvxu3btzF27FiMHj0aubm5SE5Otvp05YQ4G2FFrW7mp4o6LU5ll+HMzQqU1Gg634EA6GYNLj09HcePH0dGRgamT59u9tq3336LhIQE7Ny5EwsWLLBqkIQ4C2EmkRYZzmhk0OiNYGBwkbX/laysrsKg+mxUygejrE4LPxqc3yXdqsHt3r0br776apvkBgAPPPAAXnnlFXzyySdWC44QZ+PlKsPM0f6YMnyQsK1Go8f2Y9nYcSKn/Z2MRkiv/gMjSjMwungf6jV6O0Xb/3UrwV26dAmzZs2y+Prs2bNx8eLFXgdFiLNyk0swOlCFML/m4VqddhOpvIkAUQU8lVK46MqB8mzbB+okupXgysvL4e9v+Waov78/Kioqeh0UIQNJp91EyrIh5ji4KyTgAEirbtottv6uW/fgDAZDmxl1WxKLxdDrqfpMiCW1Gj2KqxuhlIkRoFICaE5wjKH9ngjl/KVrQPgEDC6+Cs6NlrXsqm4lOMYYkpOTLS7Q0nJlKkJIW7crGrD/cgGCvF3w62h+GcuW+czIAHHL/KbXAPVlKK5pRP6g4YjQXoJrfRlgNAAi6jfXmW4luKSkpE7LUAsqIZY194Nr3tayT5yRMYjR4sXaYgDAnUYpjhdKEWIQw9VoABoqAFcfu8Tcn3UrwaWlpdkqDkIGhPY6+oq4tq8Laov4HxJvgONwqUKKoXWVGFpXQgmuC3o0VIsQ0jPtDdUScRzuCnAHx3Hg0Or+W1OCq5HyyaxWrEJlQwlQX26PcPs9SnCE2FHzSIYWNTgRh1ljLKzbW1cKAKgRewIANBJ3GBsZ0Fhl0zidRY/XZCCEdF97l6gdauC7XdWK+H5zGrEbDAyAhlpSu4ISHCF2ZOrM23osqsHIoNEbzCe91DUAugYwxlDDeQBoqsEZGVhDpX0C7uf6dIJbs2YNf1+ixSMiIqLDfT7//HNERERAoVBg7Nix2L9/v52iJaRzQd5KPBDhh1GBHmbb/3z8Bj44ko3KBl3zxqbam17qCqOIX05QI3EHA2BoqGq+oUcs6tMJDgBGjx6NgoIC4XHixAmLZU+ePInExEQ888wzOH/+PBISEpCQkIArV67YMWJCLPNzV2B8kCdCBrmabRc3fRMNLWtwTQ0JYldvPB0Tgt9MDIJG7AoGDsygB7S19gq73+rzCU4ikUCtVgsPHx/LTeNbtmzBrFmz8Ic//AF33XUX1q9fj7vvvhvvv/++HSMmpPtM9+TMElxTDU7kMgg+bnIM9lRCJBJDK3Hl7+VRQ0On+nyCu379OgIDAzFs2DA8+eSTyMvLs1j21KlTbWYVjo+Px6lTpzp8D41Gg+rqarMHIbZQWa9Ffnk9qup1ZtvFTTflDC0vOxuauoIovYRNz00fjtixwyCXiAFNjc3j7e/6dIKbPHky0tPTceDAAWzbtg05OTmYOnUqamra/8UWFha2mQzA39+/06UMU1NToVKphEdQUJDVzoGQli7frsI/zt7CxVuVZtvF7a2s1VSDq+LccSq7DD/dqYZULAIn45cbhLbOHiH3a306wc2ePRvz58/HuHHjEB8fj/3796OyshJ///vfrfo+K1euRFVVlfDIz8+36vEJMWluRTVvRhVqcKYCjAn34MqNLvj+Rhku367kX5M3TbVE9+A61a86+np6emLkyJHIyspq93W1Wo2ioiKzbUVFRVCr1R0eVy6XW5xAgBBrMlqYsty0ypZwiapr4AfaA2iQqACUQSoW4cT1UojyGxGp08NFQwmuM326BtdabW0tsrOzERDQfq/vmJgYZGRkmG07fPgwYmJi7BEeIZ0SOvq2ynBB3i4Y6e8OV9OU5Y2V/E+5G7SMnzVEJhHhZlkdblQBWoORLlG7oE/X4F566SXMnTsXISEhuHPnDlavXg2xWIzExEQA/MwlgwcPRmpqKgDg+eefR2xsLDZs2IA5c+bg008/xZkzZ/DnP//ZkadBiKC9oVoAcG9Yq94BTfffoPSCzmAEAEjFIkhEHOrFLvylrpYaGTrTpxPcrVu3kJiYiLKyMvj6+uK+++7D999/D19fXwBAXl4eRKLmSuiUKVOwa9cu/M///A9effVVjBgxAnv37sWYMWMcdQqEmDHdYhN3du3UIsFp9XyCk0lEEIs46MQu/KUu1eA61acT3Kefftrh60ePHm2zbf78+Zg/f76NIiKkd1jTJWp765oyxsBY0+WraSiWwhNaTVOCE4sgEXPQil1gNDBAW08TX3aiTyc4QpxNuNodvu58p92WvrlcgF8KazAt3BdRwV7mNbi6ljU4EfQiBYym2+faOkBhPuyLNKMER4gdDfN1wzDfttu51gvPtEhw9wwbhLGDVXBTSFBaowE4DnqJC4Cm4VqU4CyiBEdIH9DcDw6AXtt8f03pCZVUCpVSalZOJ3EBUE334TpBCY4QOyqt1UBvYPB0kUIhbb53ZjbY3tRFRKoApOaXstPC/RAb7gvpTxeBsmrq7NuJftUPjpD+7mhmCXb/kIfcsnqz7WZro7a4PAWAS7cqcTa3ArUaPWQSEeQSMURyGq7VFVSDI8SOLI5kaNqgN7ZIcApPAMAPOeWoadRjsKcSbvKmr6ysabolSnAdogRHiB1ZGslgGqplNLLmLiJNNTidgd9HKuZws7QO14pqMEzDEAZQgusEXaISYkcGC2syeLnKMNTHFd6uMqC+jN/o4g3GmFlH37I6Da7eqUZBY4tuIsQiqsERYkfCSIZWCe6uAA/cFdDU3SOPX0kLLj4wGJlQ65OK+X5wAKARNTU+UILrENXgCLGj5pEMFgpo6/kHALgM4gfVN5E1jUUFAK2Q4KgVtSOU4AixI2GwfetWhiasvqn2pvAAJDLh8lQq5iAScZCI+f0auaYEZ9Dx/eZIu+gSlRA7igr2QoPWAHeF+VfvWlENDl0txGjuBqYDgAs/u4ipBieT8HURUw1OBwkglgCmxWck3nY7h/6EEhwhdhQZ5Nnudg58a6lYWw64AHAdBADwVMrwm4lBwqWt6R6c3sgAmRvf4qqtA1wowbWHEhwhfYC0aSiDuLGUT3BNNTiZRGQ2MF/ScmpzuSuf4HT1rQ9HmlCCI8SOSmv5aci9XGRC514A/L01xiBvKAGgBNz8290/QKXAkvuH8Yku09TZlxoaLKFGBkLs6LMf8/G3U7moaTRfNlAmFkFuqIHI0MjP7+bKTzlSXN2Ic3kVyGsa2iURi+Aml/DjWGl1rU5RgiPEjowWWlElYhFctaX8paerD9+AACC/oh7HMkvwU0E7izzTcK1O0SUqIXZkaSSDRMzBTVvCd+p1b15UqVHHt6LKm2YeadQZcOpGGYxGhhkeLnwhSnAWUQ2OEDsxTUkOtB1sLxOLECwug4dSCqN7oLC9UWcAACgkfIIzMoYLeZW4dKsKTEb34DpDNThC7MTQYtX61jU4BWfARG8NwDwAr2Bhu6kGp5Ca+sE110n0EhdIgeaRD6QNqsERYict8lubBIfq2wAz8iMYmqZJAlrU4JouUSUtqn4GSYt7cKzFwYmAEhwhdmJskYTEra9Ry2/wPz2D0TJVNerNE5xIxAnJUSdSNB1YD+g1Nom5v6NLVELsRMRxmDTUG3ojM78HxxhQeh1XblfhYq0MMwI1UKv45NX6EhXgGyS0egYDJwEksuY1HKQKe55Ov9Cna3CpqamYOHEi3N3d4efnh4SEBGRmZna4T3p6OjiOM3soFPSLJ44nk4hwb5gPYkf6mq+LWlcKNFRAz4lRKhsiXJYCwJyxAZgXGQgvF5mwTdJy9l+hLxw1NLSnTye4Y8eOYdmyZfj+++9x+PBh6HQ6zJw5E3V1HTeLe3h4oKCgQHjk5ubaKWJCeqDkZwCA1i0IRpEUDS0SnFqlwDBft1YL1DQlOAOjvnCd6NOXqAcOHDB7np6eDj8/P5w9exb333+/xf04joNarbZ1eIR0i95gRE2jHhIxB3cFvwwgjEag4BIAoHHQXUADzBJce+ZPCALHAa4yCSW4TvTpGlxrVVV8b25v745nTqitrUVISAiCgoIwb948XL16tcPyGo0G1dXVZg9CrK28Tov0kzfx2Y/5zRsrcgBNDSBVwOg9AgDQqDUI5c/mluNmqXnyUiml8FBI+Zqc6RJVRwmuPf0mwRmNRrzwwgu49957MWbMGIvlwsPDsWPHDnz55Zf4+OOPYTQaMWXKFNy6dcviPqmpqVCpVMIjKCjIFqdABji9sZ1RDAUX+Z/+YyCXywE01+BuVdTj+LVSXMivtHxQqsF1qN8kuGXLluHKlSv49NNPOywXExODBQsWIDIyErGxsdizZw98fX3x4YcfWtxn5cqVqKqqEh75+fkWyxLSU6aOvqZZeaGtB8qy+H8HjBcmwaxuGohfXsfP1OvtKjM7zpXbVTiaWYyi6kZASsO1OtKn78GZLF++HPv27cPx48cxZMiQbu0rlUoRFRWFrKwsi2XkcrnwvychtmJoXYMr/gkwGgB3NeDmB299A9QqBQa58n+LJTV837bWCS6ruBY5pXXwdZfDn1pRO9Sna3CMMSxfvhxffPEFvv32WwwdOrTbxzAYDLh8+TICAgI6L0yIDRmEWXmbElwh37gA9TgAQKCnEomTgnH/SF/oDEYUVjUK21uiVtSu69M1uGXLlmHXrl348ssv4e7ujsLCQgCASqWCUsn/0hcsWIDBgwcjNTUVALBu3Trcc889CAsLQ2VlJd5++23k5uZi8eLFDjsPQoDmqZLEIg6oLQZqivi53/zualP2Qn4l9EYGlVIKLxep2Wvm/eBMCa6e7zBscbmugalPJ7ht27YBAKZNm2a2PS0tDcnJyQCAvLw8iFoMQK6oqMCSJUtQWFgILy8vREdH4+TJkxg1apS9wiakXaZGBjHHNdfeBg0HZC5m5bR6I37IKQcARId4mXcKBj93HNB0yWtKcMwI6BraHGug69MJjnVhAPHRo0fNnm/atAmbNm2yUUSE9JyXiwyRwZ7wUoiBW01dl5ouT1u6VlQDvYEhMtgT44ao2rzeXIMz8jVAqQLQNfKXqZTgzPTpBEeIM1GrFPwY09Lr/CWlzAXwHtam3JjBKowK8LC4dqrZPTiA7wuna2xqaPC1Vfj9Up9uZCDEKZkuT/1H8zWwdlhKbkCrlbUAamjoANXgCLETjd4AXWMdFCVZ/BevncvTrhgf5IlwtTuUsqbkSAnOIkpwhNjJ+bxK5Fw4hsn6agwbNhxw8+vRcVzlErjKW3x1TX3hNDVWiNK50CUqIXZiNDL41l3jW0V7WHtrl9KT/9lYab1jOglKcITYS10JXLWl4MRiwK/n3ZZKajQ4mV2KK7eblhI0TXFOCa4NSnCE2ImyjO8aolUN61V3jsp6LU7fKMdPBU2z3iiaupI0VtHaDK1QgiPEHowGKCt+AQBofHrX6Vza1NFXq+enMxcSnF4L6Bt7dWxnQwmOEHsovQ6Rrh46sRJGz7Z937pDJmmV4MTS5hphY1Wvju1sKMERYg8FF2BgDMWu4ZBIe9d5QUhwBmPzRuE+HCW4lijBEWJrDRVAeQ48lVJ4h000W0CmJ9rU4IDmy9SGyl4d29lQPzhCbC3vewBAwNDRCBgf3uvDyVoMttcbjPzge1NXkYaKXh/fmVANjhBbaqgQFpVByBSrHNKU4IAWl6kug/if9aVWeQ9nQTU4QmyFMeDaIX4qI69QNLgEQqQ3QCYWtZkCqTtEIg6PTwqCTCyCQtI0XMu1aZB9XSnNC9cCJThCbMFoBLK/BcpvACIJMGImdp66iXqtAU/HhMDHrXdT5AeozGf5hcsgPqnpGvgxqXK3Xh3fWVCCI8RatHVAZR5QkcsnNlOL5sh4wHUQtHp+Ekup2AZ3hsRSviW1oYK/TKUEB4ASHCG9U1cGlPwClGbyU5C3JJbyyU09FnqDUZjRVy7pfYL7pbAaFXU6jPB3a64NuvrwCa62GPAK7fV7OANKcIR0l6YGKLkGFF0GqgvMX3PzBTxDAa8QwDMYkPDJp7GpSwfHWSnBFdQgp7QO7gpJc4LzCOQn06y+3evjOwtKcIR0RtfQdOl5k7/8rC9rfo0TAd5DAZ+RgM+I5rnZWtE0LeYsl4h71cBg4tI0F1ydRt+80WMw/7OKEpwJJThC2qPXAkVX+Nl3awrNB7FzHL+Wqd9owH+UxaTWkqkGp5Ba5/6baT64+qbECQBwD+ATrqaGv/+naLuew0BDCY6QlhoqgNtn+b5rek3zdlcfwDOEv7flGQRIlRYP0Z7GpkSkkLY/RXl3mWbzrde0SHASGeDuz182l98AAqOs8l79GSU4QhgDKnKA2+eAsqzm2prSCxgcDfiGAwqPXr2Fu1yC0YEecJNb5yvnKuOPY3aJCvCXytUF/D1CSnCU4MgApmvkL0NvnzO/r+Y9DBgygf9ppQ6zfh4KzByttsqxAAiLQZfXa8EYa76v5xMO3DgGVOY2LSPY+eWzM+sXQ7W2bt2K0NBQKBQKTJ48GT/88EOH5T///HNERERAoVBg7Nix2L9/v50iJX2eXguUZAI/fQWceg+4fphPbmIpn9QmLQXGP8YvyNyHRwN4ucrAcYBGZ4Sm5aB710GARwBgNAD5HX9PBoI+X4P77LPPkJKSgu3bt2Py5MnYvHkz4uPjkZmZCT+/tot2nDx5EomJiUhNTcWvfvUr7Nq1CwkJCTh37hzGjBnjgDMgdmM08DfXNdVAYzWgq+dbQPUa/t/1ZfyjZYOBqw8w+G7Af4zQpcMWSms18FRKhVXpe0sqFuFX4wIw2NOl7X294CnAlX8Ct8/w5+U2cNdK5VhXlo93oMmTJ2PixIl4//33AQBGoxFBQUH47//+b7zyyittyj/22GOoq6vDvn37hG333HMPIiMjsX379i69Z3V1NVQqFaqqquDh0bt7L30SY/zMr9o6PiE0Vjb9bPFgjL+RLnMF5O5ND4/mnxI5P8bSqAcMOsCo438atE0/dfzrYhl/81ss539KFPy+Yjn/b5HIPC5mND+GUWfhuZ5PWprqppir+YWPu/LnrPTku3T4RvBdK2xcU2vUGfDn4zfAGLDovlC4K6RWf4+yWg3cFBLIJWL+M7j0d76hQeYKhMXxNVIbJnB76+p3tE/X4LRaLc6ePYuVK1cK20QiEeLi4nDq1Kl29zl16hRSUlLMtsXHx2Pv3r0W30ej0UCjaW4xq66u7lqABZeAWz90/KUye431jdcMOj4xdUbXANSXd16uN0QSAE2JzRr/14okfPcIhQf/5ZYo+S+2VMk3Grj58UnaRqobddh7/jYMRgYj41fSatQZYDAy+LjLbZLcjEaGz8/eQqPOADe5BDKJCFLDOAwryYVCcxueBbsQMsiV/wwkcr4rCbjmxN7XLsUnLrbaofp0gistLYXBYIC/v7/Zdn9/f/zyyy/t7lNYWNhu+cLCQovvk5qairVr13Y/QF0DUFvS/f36ComcTwQKz6ak4NmcHDgxX0PS1vH9qjQ1fG1JU83/W6/hk4lIDIik/D0ssZSvsYkk/E9O1FTb0vLlDU1rBugb+RoYYDnRcqL2j2naJpLyNUBTvAoV/5C6OPQLyxhQVqtts10uFeGBiJ6tg9qZygYdJCIOjAE1jabPU4xi1RwE1lzCKFEuAMb/veoabBJDX9WnE5y9rFy50qzWV11djaCgoM539A1vXrzX7EvV6gvW114TSfjFgsUO/PUbDXzSM+og1CY4UVNik/GJsx9ylYnx6+ghEIk4iDkOIo6f3shDIRVm4rU2b1cZFk8dhjqNHjWNeugMxhaV4aF8nzm5gf/PyqBpqilbsdbch/XpBOfj4wOxWIyiIvNBzEVFRVCr229yV6vV3SoPAHK5HHJ5D+5PKD2bZ1Il3SMS92rpvL5KIhYhyNsx59VmxfvWnPDz7kyf7iYik8kQHR2NjIwMYZvRaERGRgZiYmLa3ScmJsasPAAcPnzYYnlCiPPq0zU4AEhJSUFSUhImTJiASZMmYfPmzairq8PChQsBAAsWLMDgwYORmpoKAHj++ecRGxuLDRs2YM6cOfj0009x5swZ/PnPf3bkaRBCHKDPJ7jHHnsMJSUlWLVqFQoLCxEZGYkDBw4IDQl5eXkQtehqMGXKFOzatQv/8z//g1dffRUjRozA3r17qQ8cIQNQn+8H5whO3w+OkH6uq9/RPn0PjhBCeoMSHCHEaVGCI4Q4rT7fyOAIptuSXR6yRQixK9N3s7MmBEpw7aipqQGAro1mIIQ4TE1NDVQqy1OzUytqO4xGI+7cuQN3d3erLBBiD6bhZfn5+U7T8uuM5wTQeVkDYww1NTUIDAw06ybWGtXg2iESiTBkyBBHh9EjHh4eTvWlAZzznAA6r97qqOZmQo0MhBCnRQmOEOK0KME5CblcjtWrV/dsVpQ+yhnPCaDzsidqZCCEOC2qwRFCnBYlOEKI06IERwhxWpTgCCFOixJcP/WnP/0JU6ZMgYuLCzw9Pbu0D2MMq1atQkBAAJRKJeLi4nD9+nXbBtpN5eXlePLJJ+Hh4QFPT08888wzqK2t7XCfadOmgeM4s8dvf/tbO0Xcvq1btyI0NBQKhQKTJ0/GDz90vMr8559/joiICCgUCowdOxb79++3U6Td053zSk9Pb/N7USgUdoyWEly/pdVqMX/+fPzud7/r8j5vvfUW3n33XWzfvh2nT5+Gq6sr4uPj0djYaMNIu+fJJ5/E1atXcfjwYezbtw/Hjx/H0qVLO91vyZIlKCgoEB5vvfWWHaJt32effYaUlBSsXr0a586dw/jx4xEfH4/i4uJ2y588eRKJiYl45plncP78eSQkJCAhIQFXrlyxc+Qd6+55Afyohpa/l9zcXDtGDICRfi0tLY2pVKpOyxmNRqZWq9nbb78tbKusrGRyuZzt3r3bhhF23U8//cQAsB9//FHY9s033zCO49jt27ct7hcbG8uef/55O0TYNZMmTWLLli0TnhsMBhYYGMhSU1PbLf+b3/yGzZkzx2zb5MmT2bPPPmvTOLuru+fV1b9NW6Ia3ACRk5ODwsJCxMXFCdtUKhUmT56MU6dOOTCyZqdOnYKnpycmTJggbIuLi4NIJMLp06c73PeTTz6Bj48PxowZg5UrV6K+vt7W4bZLq9Xi7NmzZp+zSCRCXFycxc/51KlTZuUBID4+vs/8XoCenRcA1NbWIiQkBEFBQZg3bx6uXr1qj3AFNNh+gCgsLAQAYbEeE39/f+E1RyssLISfn/nq7xKJBN7e3h3G+MQTTyAkJASBgYG4dOkSXn75ZWRmZmLPnj22DrmN0tJSGAyGdj/nX375pd19CgsL+/TvBejZeYWHh2PHjh0YN24cqqqq8M4772DKlCm4evWq3SazoBpcH/LKK6+0uSnb+mHpj6kvs/V5LV26FPHx8Rg7diyefPJJ7Ny5E1988QWys7OteBaku2JiYrBgwQJERkYiNjYWe/bsga+vLz788EO7xUA1uD7k97//PZKTkzssM2zYsB4dW61WAwCKiooQEBAgbC8qKkJkZGSPjtlVXT0vtVrd5oa1Xq9HeXm5EH9XTJ48GQCQlZWF4cOHdzve3vDx8YFYLEZRUZHZ9qKiIovnoFaru1XeEXpyXq1JpVJERUUhKyvLFiG2ixJcH+Lr6wtfX1+bHHvo0KFQq9XIyMgQElp1dTVOnz7drZbYnujqecXExKCyshJnz55FdHQ0AODbb7+F0WgUklZXXLhwAQDMErm9yGQyREdHIyMjAwkJCQD4CVQzMjKwfPnydveJiYlBRkYGXnjhBWHb4cOHERMTY4eIu6Yn59WawWDA5cuX8eCDD9ow0lYc2sRBeiw3N5edP3+erV27lrm5ubHz58+z8+fPs5qaGqFMeHg427Nnj/D8jTfeYJ6enuzLL79kly5dYvPmzWNDhw5lDQ0NjjiFds2aNYtFRUWx06dPsxMnTrARI0awxMRE4fVbt26x8PBwdvr0acYYY1lZWWzdunXszJkzLCcnh3355Zds2LBh7P7773fUKbBPP/2UyeVylp6ezn766Se2dOlS5unpyQoLCxljjD399NPslVdeEcp/9913TCKRsHfeeYf9/PPPbPXq1UwqlbLLly876hTa1d3zWrt2LTt48CDLzs5mZ8+eZY8//jhTKBTs6tWrdouZElw/lZSUxAC0eRw5ckQoA4ClpaUJz41GI3vttdeYv78/k8vlbMaMGSwzM9P+wXegrKyMJSYmMjc3N+bh4cEWLlxolrRzcnLMzjMvL4/df//9zNvbm8nlchYWFsb+8Ic/sKqqKgedAe+9995jwcHBTCaTsUmTJrHvv/9eeC02NpYlJSWZlf/73//ORo4cyWQyGRs9ejT7+uuv7Rxx13TnvF544QWhrL+/P3vwwQfZuXPn7BovTZdECHFa1IpKCHFalOAIIU6LEhwhxGlRgiOEOC1KcIQQp0UJjhDitCjBEUKcFiU4QojTogRHBrz09HSzad/XrFljNgFBcnKyMP6S9C+U4IjdJCcnW1wvYdmyZeA4zmzWEVskltDQUGzevNls22OPPYZr165Z3GfLli1IT08Xnk+bNs1sYDzpuyjBEbsKCgrCp59+ioaGBmFbY2Mjdu3aheDgYIfEpFQq20y02ZJKperywj6kb6EER+zq7rvvRlBQkNlsu3v27EFwcDCioqJ6dez2alYJCQlCrXDatGnIzc3Fiy++KEy0CbS9RG2tZU0yOTkZx44dw5YtW4Rj5OTkICwsDO+8847ZfhcuXADHcXad/4yYowRH7G7RokVIS0sTnu/YsQMLFy60+fvu2bMHQ4YMwbp164RVnrpry5YtiImJMVvFKzg4uM05AUBaWhruv/9+hIWFWesUSDdRgiN299RTT+HEiRPIzc1Fbm4uvvvuOzz11FM2f19vb2+IxWK4u7tDrVb3aMZclUoFmUwGFxcX4RhisRjJycnIzMwU1gnV6XTYtWsXFi1aZO3TIN1AM/oSu/P19cWcOXOQnp4OxhjmzJkDHx8fR4fVK4GBgZgzZw527NiBSZMm4V//+hc0Gg3mz5/v6NAGNKrBEYdYtGgR0tPT8dFHH1mtliMSidB6ekOdTmeVY3fF4sWLhQaUtLQ0PPbYY3BxcbHb+5O2KMERh5g1axa0Wi10Oh3i4+OtckxfX1+z+2oGg6HN6vAymQwGg6FX72PpGA8++CBcXV2xbds2HDhwgC5P+wC6RCUOIRaL8fPPPwv/tqSqqkpYRMZk0KBBCAoKalP2gQceQEpKCr7++msMHz4cGzduRGVlpVmZ0NBQHD9+HI8//jjkcnmPLo1DQ0Nx+vRp3Lx5E25ubvD29oZIJBLuxa1cuRIjRozoU4vGDFRUgyMO4+HhAQ8Pjw7LHD16FFFRUWaPtWvXtlt20aJFSEpKwoIFCxAbG4thw4Zh+vTpZmXWrVuHmzdvYvjw4T1eweyll16CWCzGqFGj4Ovri7y8POG1Z555Blqt1i6twqRztCYDIVb0n//8BzNmzEB+fn6bVeCJ/VGCI8QKNBoNSkpKkJSUBLVajU8++cTRIRHQJSohVrF7926EhISgsrISb731lqPDIU2oBkcIcVpUgyOEOC1KcIQQp0UJjhDitCjBEUKcFiU4QojTogRHCHFalOAIIU6LEhwhxGn9fxFxZjo3LTDOAAAAAElFTkSuQmCC", + "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-22T15:36:29.981202Z", + "iopub.status.busy": "2024-03-22T15:36:29.980878Z", + "iopub.status.idle": "2024-03-22T15:36:30.334109Z", + "shell.execute_reply": "2024-03-22T15:36:30.333251Z" + }, + "papermill": { + "duration": 0.376796, + "end_time": "2024-03-22T15:36:30.336314", + "exception": false, + "start_time": "2024-03-22T15:36:29.959518", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from ml_utility_loss.loss_learning.visualization import plot_density_3\n", + "\n", + "_ = plot_density_3(y2[\"pred\"], next(iter(y2[\"y\"].values())))" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "745adde1", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T15:36:30.377865Z", + "iopub.status.busy": "2024-03-22T15:36:30.377550Z", + "iopub.status.idle": "2024-03-22T15:36:30.599022Z", + "shell.execute_reply": "2024-03-22T15:36:30.598077Z" + }, + "papermill": { + "duration": 0.244382, + "end_time": "2024-03-22T15:36:30.601055", + "exception": false, + "start_time": "2024-03-22T15:36:30.356673", + "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-22T15:36:30.644445Z", + "iopub.status.busy": "2024-03-22T15:36:30.643625Z", + "iopub.status.idle": "2024-03-22T15:36:30.933373Z", + "shell.execute_reply": "2024-03-22T15:36:30.932477Z" + }, + "papermill": { + "duration": 0.31373, + "end_time": "2024-03-22T15:36:30.935421", + "exception": false, + "start_time": "2024-03-22T15:36:30.621691", + "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.021519, + "end_time": "2024-03-22T15:36:30.978068", + "exception": false, + "start_time": "2024-03-22T15:36:30.956549", + "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": 4092.449375, + "end_time": "2024-03-22T15:36:33.721338", + "environment_variables": {}, + "exception": null, + "input_path": "eval/insurance/tab_ddpm_concat/0/mlu-eval.ipynb", + "output_path": "eval/insurance/tab_ddpm_concat/0/mlu-eval.ipynb", + "parameters": { + "allow_same_prediction": true, + "dataset": "insurance", + "dataset_name": "insurance", + "debug": false, + "folder": "eval", + "gp": false, + "gp_multiply": false, + "log_wandb": false, + "param_index": 0, + "path": "eval/insurance/tab_ddpm_concat/0", + "path_prefix": "../../../../", + "random_seed": 0, + "single_model": "tab_ddpm_concat" + }, + "start_time": "2024-03-22T14:28:21.271963", + "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