diff --git "a/contraceptive/tab_ddpm_concat/mlu-eval.ipynb" "b/contraceptive/tab_ddpm_concat/mlu-eval.ipynb" new file mode 100644--- /dev/null +++ "b/contraceptive/tab_ddpm_concat/mlu-eval.ipynb" @@ -0,0 +1,2277 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "982e76f5", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T19:39:37.388490Z", + "iopub.status.busy": "2024-03-22T19:39:37.388013Z", + "iopub.status.idle": "2024-03-22T19:39:37.426414Z", + "shell.execute_reply": "2024-03-22T19:39:37.425538Z" + }, + "papermill": { + "duration": 0.058091, + "end_time": "2024-03-22T19:39:37.428992", + "exception": false, + "start_time": "2024-03-22T19:39:37.370901", + "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-22T19:39:37.459640Z", + "iopub.status.busy": "2024-03-22T19:39:37.458799Z", + "iopub.status.idle": "2024-03-22T19:39:37.467412Z", + "shell.execute_reply": "2024-03-22T19:39:37.466266Z" + }, + "papermill": { + "duration": 0.023845, + "end_time": "2024-03-22T19:39:37.469586", + "exception": false, + "start_time": "2024-03-22T19:39:37.445741", + "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-22T19:39:37.499019Z", + "iopub.status.busy": "2024-03-22T19:39:37.498666Z", + "iopub.status.idle": "2024-03-22T19:39:37.503716Z", + "shell.execute_reply": "2024-03-22T19:39:37.502831Z" + }, + "papermill": { + "duration": 0.02368, + "end_time": "2024-03-22T19:39:37.506421", + "exception": false, + "start_time": "2024-03-22T19:39:37.482741", + "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-22T19:39:37.537472Z", + "iopub.status.busy": "2024-03-22T19:39:37.537182Z", + "iopub.status.idle": "2024-03-22T19:39:37.541295Z", + "shell.execute_reply": "2024-03-22T19:39:37.540543Z" + }, + "executionInfo": { + "elapsed": 678, + "status": "ok", + "timestamp": 1696841022168, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "ns5hFcVL2yvs", + "papermill": { + "duration": 0.021183, + "end_time": "2024-03-22T19:39:37.543345", + "exception": false, + "start_time": "2024-03-22T19:39:37.522162", + "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-22T19:39:37.568881Z", + "iopub.status.busy": "2024-03-22T19:39:37.568276Z", + "iopub.status.idle": "2024-03-22T19:39:37.574747Z", + "shell.execute_reply": "2024-03-22T19:39:37.573993Z" + }, + "papermill": { + "duration": 0.0214, + "end_time": "2024-03-22T19:39:37.576663", + "exception": false, + "start_time": "2024-03-22T19:39:37.555263", + "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": "8640b965", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T19:39:37.600634Z", + "iopub.status.busy": "2024-03-22T19:39:37.600394Z", + "iopub.status.idle": "2024-03-22T19:39:37.605081Z", + "shell.execute_reply": "2024-03-22T19:39:37.604247Z" + }, + "papermill": { + "duration": 0.018832, + "end_time": "2024-03-22T19:39:37.606932", + "exception": false, + "start_time": "2024-03-22T19:39:37.588100", + "status": "completed" + }, + "tags": [ + "injected-parameters" + ] + }, + "outputs": [], + "source": [ + "# Parameters\n", + "dataset = \"contraceptive\"\n", + "dataset_name = \"contraceptive\"\n", + "single_model = \"tab_ddpm_concat\"\n", + "gp = True\n", + "gp_multiply = True\n", + "random_seed = 4\n", + "debug = False\n", + "folder = \"eval\"\n", + "path_prefix = \"../../../../\"\n", + "path = \"eval/contraceptive/tab_ddpm_concat/4\"\n", + "param_index = 0\n", + "allow_same_prediction = True\n", + "log_wandb = False\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bd7c02d6", + "metadata": { + "papermill": { + "duration": 0.011011, + "end_time": "2024-03-22T19:39:37.629322", + "exception": false, + "start_time": "2024-03-22T19:39:37.618311", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "5f45b1d0", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T19:39:37.652460Z", + "iopub.status.busy": "2024-03-22T19:39:37.652206Z", + "iopub.status.idle": "2024-03-22T19:39:37.661394Z", + "shell.execute_reply": "2024-03-22T19:39:37.660450Z" + }, + "executionInfo": { + "elapsed": 7, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "UdvXYv3c3LXy", + "papermill": { + "duration": 0.023059, + "end_time": "2024-03-22T19:39:37.663391", + "exception": false, + "start_time": "2024-03-22T19:39:37.640332", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/kaggle/working\n", + "/kaggle/working/eval/contraceptive/tab_ddpm_concat/4\n" + ] + } + ], + "source": [ + "from pathlib import Path\n", + "import os\n", + "\n", + "%cd /kaggle/working/\n", + "\n", + "if path is None:\n", + " path = os.path.join(folder, dataset_name, single_model, random_seed)\n", + "Path(path).mkdir(parents=True, exist_ok=True)\n", + "\n", + "%cd {path}" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "f85bf540", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T19:39:37.689001Z", + "iopub.status.busy": "2024-03-22T19:39:37.688684Z", + "iopub.status.idle": "2024-03-22T19:39:39.679733Z", + "shell.execute_reply": "2024-03-22T19:39:39.678771Z" + }, + "papermill": { + "duration": 2.006351, + "end_time": "2024-03-22T19:39:39.681842", + "exception": false, + "start_time": "2024-03-22T19:39:37.675491", + "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-22T19:39:39.707158Z", + "iopub.status.busy": "2024-03-22T19:39:39.706313Z", + "iopub.status.idle": "2024-03-22T19:39:39.718462Z", + "shell.execute_reply": "2024-03-22T19:39:39.717708Z" + }, + "papermill": { + "duration": 0.02696, + "end_time": "2024-03-22T19:39:39.720557", + "exception": false, + "start_time": "2024-03-22T19:39:39.693597", + "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-22T19:39:39.745761Z", + "iopub.status.busy": "2024-03-22T19:39:39.745488Z", + "iopub.status.idle": "2024-03-22T19:39:39.752474Z", + "shell.execute_reply": "2024-03-22T19:39:39.751725Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "Vrl2QkoV3o_8", + "papermill": { + "duration": 0.021929, + "end_time": "2024-03-22T19:39:39.754349", + "exception": false, + "start_time": "2024-03-22T19:39:39.732420", + "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-22T19:39:39.779870Z", + "iopub.status.busy": "2024-03-22T19:39:39.779540Z", + "iopub.status.idle": "2024-03-22T19:39:39.873472Z", + "shell.execute_reply": "2024-03-22T19:39:39.872695Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "TilUuFk9vqMb", + "papermill": { + "duration": 0.109251, + "end_time": "2024-03-22T19:39:39.875637", + "exception": false, + "start_time": "2024-03-22T19:39:39.766386", + "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-22T19:39:39.900182Z", + "iopub.status.busy": "2024-03-22T19:39:39.899875Z", + "iopub.status.idle": "2024-03-22T19:39:44.646562Z", + "shell.execute_reply": "2024-03-22T19:39:44.645600Z" + }, + "executionInfo": { + "elapsed": 3113, + "status": "ok", + "timestamp": 1696841025277, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "7Abt8nStvr9Z", + "papermill": { + "duration": 4.761517, + "end_time": "2024-03-22T19:39:44.648995", + "exception": false, + "start_time": "2024-03-22T19:39:39.887478", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-03-22 19:39:42.177065: 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 19:39:42.177122: 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 19:39:42.178990: 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-22T19:39:44.676091Z", + "iopub.status.busy": "2024-03-22T19:39:44.675439Z", + "iopub.status.idle": "2024-03-22T19:39:44.681643Z", + "shell.execute_reply": "2024-03-22T19:39:44.680895Z" + }, + "papermill": { + "duration": 0.021832, + "end_time": "2024-03-22T19:39:44.683497", + "exception": false, + "start_time": "2024-03-22T19:39:44.661665", + "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-22T19:39:44.707470Z", + "iopub.status.busy": "2024-03-22T19:39:44.707201Z", + "iopub.status.idle": "2024-03-22T19:39:52.804846Z", + "shell.execute_reply": "2024-03-22T19:39:52.803750Z" + }, + "executionInfo": { + "elapsed": 20137, + "status": "ok", + "timestamp": 1696841045408, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "tbaguWxAvtPi", + "papermill": { + "duration": 8.112545, + "end_time": "2024-03-22T19:39:52.807357", + "exception": false, + "start_time": "2024-03-22T19:39:44.694812", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", + " warnings.warn(\n", + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:119: ConvergenceWarning: Number of distinct clusters (4) found smaller than n_clusters (10). Possibly due to duplicate points in X.\n", + " .fit(X)\n", + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:119: ConvergenceWarning: Number of distinct clusters (4) found smaller than n_clusters (10). Possibly due to duplicate points in X.\n", + " .fit(X)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", + " warnings.warn(\n", + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:119: ConvergenceWarning: Number of distinct clusters (4) found smaller than n_clusters (10). Possibly due to duplicate points in X.\n", + " .fit(X)\n" + ] + } + ], + "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-22T19:39:52.834999Z", + "iopub.status.busy": "2024-03-22T19:39:52.834669Z", + "iopub.status.idle": "2024-03-22T19:39:52.841186Z", + "shell.execute_reply": "2024-03-22T19:39:52.840371Z" + }, + "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.022468, + "end_time": "2024-03-22T19:39:52.843226", + "exception": false, + "start_time": "2024-03-22T19:39:52.820758", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'tvae': 46,\n", + " 'realtabformer': (24, 72, Embedding(72, 672), True),\n", + " 'lct_gan': 40,\n", + " 'tab_ddpm_concat': 10}" + ] + }, + "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-22T19:39:52.867600Z", + "iopub.status.busy": "2024-03-22T19:39:52.867329Z", + "iopub.status.idle": "2024-03-22T19:39:52.871801Z", + "shell.execute_reply": "2024-03-22T19:39:52.870997Z" + }, + "papermill": { + "duration": 0.018874, + "end_time": "2024-03-22T19:39:52.873785", + "exception": false, + "start_time": "2024-03-22T19:39:52.854911", + "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-22T19:39:52.897859Z", + "iopub.status.busy": "2024-03-22T19:39:52.897601Z", + "iopub.status.idle": "2024-03-22T19:39:53.346134Z", + "shell.execute_reply": "2024-03-22T19:39:53.345204Z" + }, + "papermill": { + "duration": 0.462942, + "end_time": "2024-03-22T19:39:53.348239", + "exception": false, + "start_time": "2024-03-22T19:39:52.885297", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../contraceptive/_cache_aug_test/tab_ddpm_concat/all inf False\n", + "../../../../ml-utility-loss/aug_test/contraceptive [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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 ../../../../contraceptive/_cache_bs_test/tab_ddpm_concat/all inf False\n", + "../../../../ml-utility-loss/bs_test/contraceptive [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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 ../../../../contraceptive/_cache_synth_test/tab_ddpm_concat/all inf False\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "../../../../ml-utility-loss/synthetics/contraceptive [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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-22T19:39:53.376897Z", + "iopub.status.busy": "2024-03-22T19:39:53.376578Z", + "iopub.status.idle": "2024-03-22T19:39:53.695609Z", + "shell.execute_reply": "2024-03-22T19:39:53.694765Z" + }, + "executionInfo": { + "elapsed": 588, + "status": "ok", + "timestamp": 1696841049215, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "NgahtU1q9uLO", + "papermill": { + "duration": 0.336267, + "end_time": "2024-03-22T19:39:53.697798", + "exception": false, + "start_time": "2024-03-22T19:39:53.361531", + "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': 'none',\n", + " 'patience': 10,\n", + " 'inds_init_mode': 'fixnorm',\n", + " 'grad_clip': 0.73,\n", + " 'gradient_penalty_mode': {'gradient_penalty': True,\n", + " 'forward_once': False,\n", + " 'calc_grad_m': False,\n", + " 'avg_non_role_model_m': False,\n", + " 'inverse_avg_non_role_model_m': False},\n", + " 'synth_data': 2,\n", + " 'bias_lr_mul': 1.0,\n", + " 'bias_weight_decay': 0.05,\n", + " 'head_activation': torch.nn.modules.activation.Softsign,\n", + " 'loss_balancer_beta': 0.67,\n", + " 'loss_balancer_r': 0.943,\n", + " 'tf_activation': torch.nn.modules.activation.Tanh,\n", + " 'dataset_size': 2048,\n", + " 'batch_size': 4,\n", + " 'epochs': 100,\n", + " 'lr_mul': 0.09,\n", + " 'n_warmup_steps': 100,\n", + " 'Optim': functools.partial(, amsgrad=True),\n", + " 'fixed_role_model': 'tab_ddpm_concat',\n", + " 'd_model': 256,\n", + " 'attn_activation': torch.nn.modules.activation.PReLU,\n", + " 'tf_d_inner': 512,\n", + " 'tf_n_layers_enc': 3,\n", + " 'tf_n_head': 32,\n", + " 'tf_activation_final': ml_utility_loss.activations.LeakyHardtanh,\n", + " 'ada_d_hid': 1024,\n", + " 'ada_n_layers': 9,\n", + " 'ada_activation': torch.nn.modules.activation.Softsign,\n", + " 'ada_activation_final': ml_utility_loss.activations.LeakyHardsigmoid,\n", + " 'head_d_hid': 256,\n", + " 'head_n_layers': 9,\n", + " 'head_n_head': 32,\n", + " 'head_activation_final': ml_utility_loss.activations.LeakyHardsigmoid,\n", + " 'models': ['tab_ddpm_concat'],\n", + " 'max_seconds': 3600,\n", + " 'tf_lora': False,\n", + " 'tf_num_inds': 128,\n", + " 'ada_n_seeds': 0,\n", + " 'gradient_penalty_kwargs': {'mag_loss': True,\n", + " 'mse_mag': True,\n", + " 'mag_corr': False,\n", + " 'seq_mag': False,\n", + " 'cos_loss': False,\n", + " 'mag_corr_kwargs': {'only_sign': False},\n", + " 'cos_loss_kwargs': {'only_sign': True, 'cos_matrix': False},\n", + " 'mse_mag_kwargs': {'target': 0.65, '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-22T19:39:53.725799Z", + "iopub.status.busy": "2024-03-22T19:39:53.724900Z", + "iopub.status.idle": "2024-03-22T19:39:53.827801Z", + "shell.execute_reply": "2024-03-22T19:39:53.826796Z" + }, + "papermill": { + "duration": 0.118907, + "end_time": "2024-03-22T19:39:53.829813", + "exception": false, + "start_time": "2024-03-22T19:39:53.710906", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../contraceptive/_cache_aug_train/tab_ddpm_concat/all inf False\n", + "split df ratio is 0\n", + "../../../../ml-utility-loss/aug_train/contraceptive [400, 0]\n", + "Caching in ../../../../contraceptive/_cache_aug_val/tab_ddpm_concat/all inf False\n", + "split df ratio is 1\n", + "../../../../ml-utility-loss/aug_val/contraceptive [0, 200]\n", + "Caching in ../../../../contraceptive/_cache_bs_train/tab_ddpm_concat/all inf False\n", + "split df ratio is 0\n", + "../../../../ml-utility-loss/bs_train/contraceptive [100, 0]\n", + "Caching in ../../../../contraceptive/_cache_bs_val/tab_ddpm_concat/all inf False\n", + "split df ratio is 1\n", + "../../../../ml-utility-loss/bs_val/contraceptive [0, 50]\n", + "Caching in ../../../../contraceptive/_cache_synth/tab_ddpm_concat/all inf False\n", + "Splitting without random!\n", + "Split with reverse index!\n", + "../../../../ml-utility-loss/synthetics/contraceptive [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-22T19:39:53.858319Z", + "iopub.status.busy": "2024-03-22T19:39:53.857429Z", + "iopub.status.idle": "2024-03-22T19:39:54.311997Z", + "shell.execute_reply": "2024-03-22T19:39:54.311027Z" + }, + "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.471401, + "end_time": "2024-03-22T19:39:54.314346", + "exception": false, + "start_time": "2024-03-22T19:39:53.842945", + "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-22T19:39:54.343206Z", + "iopub.status.busy": "2024-03-22T19:39:54.342865Z", + "iopub.status.idle": "2024-03-22T19:39:54.347087Z", + "shell.execute_reply": "2024-03-22T19:39:54.346206Z" + }, + "papermill": { + "duration": 0.02052, + "end_time": "2024-03-22T19:39:54.348907", + "exception": false, + "start_time": "2024-03-22T19:39:54.328387", + "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-22T19:39:54.374945Z", + "iopub.status.busy": "2024-03-22T19:39:54.374696Z", + "iopub.status.idle": "2024-03-22T19:39:54.381345Z", + "shell.execute_reply": "2024-03-22T19:39:54.380504Z" + }, + "papermill": { + "duration": 0.021868, + "end_time": "2024-03-22T19:39:54.383210", + "exception": false, + "start_time": "2024-03-22T19:39:54.361342", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "11858440" + ] + }, + "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-22T19:39:54.409845Z", + "iopub.status.busy": "2024-03-22T19:39:54.409280Z", + "iopub.status.idle": "2024-03-22T19:39:54.487414Z", + "shell.execute_reply": "2024-03-22T19:39:54.486496Z" + }, + "papermill": { + "duration": 0.093559, + "end_time": "2024-03-22T19:39:54.489392", + "exception": false, + "start_time": "2024-03-22T19:39:54.395833", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "========================================================================================================================\n", + "Layer (type:depth-idx) Output Shape Param #\n", + "========================================================================================================================\n", + "MLUtilitySingle [2, 1179, 10] --\n", + "├─Adapter: 1-1 [2, 1179, 10] --\n", + "│ └─Sequential: 2-1 [2, 1179, 256] --\n", + "│ │ └─FeedForward: 3-1 [2, 1179, 1024] --\n", + "│ │ │ └─Linear: 4-1 [2, 1179, 1024] 11,264\n", + "│ │ │ └─Softsign: 4-2 [2, 1179, 1024] --\n", + "│ │ └─FeedForward: 3-2 [2, 1179, 1024] --\n", + "│ │ │ └─Linear: 4-3 [2, 1179, 1024] 1,049,600\n", + "│ │ │ └─Softsign: 4-4 [2, 1179, 1024] --\n", + "│ │ └─FeedForward: 3-3 [2, 1179, 1024] --\n", + "│ │ │ └─Linear: 4-5 [2, 1179, 1024] 1,049,600\n", + "│ │ │ └─Softsign: 4-6 [2, 1179, 1024] --\n", + "│ │ └─FeedForward: 3-4 [2, 1179, 1024] --\n", + "│ │ │ └─Linear: 4-7 [2, 1179, 1024] 1,049,600\n", + "│ │ │ └─Softsign: 4-8 [2, 1179, 1024] --\n", + "│ │ └─FeedForward: 3-5 [2, 1179, 1024] --\n", + "│ │ │ └─Linear: 4-9 [2, 1179, 1024] 1,049,600\n", + "│ │ │ └─Softsign: 4-10 [2, 1179, 1024] --\n", + "│ │ └─FeedForward: 3-6 [2, 1179, 1024] --\n", + "│ │ │ └─Linear: 4-11 [2, 1179, 1024] 1,049,600\n", + "│ │ │ └─Softsign: 4-12 [2, 1179, 1024] --\n", + "│ │ └─FeedForward: 3-7 [2, 1179, 1024] --\n", + "│ │ │ └─Linear: 4-13 [2, 1179, 1024] 1,049,600\n", + "│ │ │ └─Softsign: 4-14 [2, 1179, 1024] --\n", + "│ │ └─FeedForward: 3-8 [2, 1179, 1024] --\n", + "│ │ │ └─Linear: 4-15 [2, 1179, 1024] 1,049,600\n", + "│ │ │ └─Softsign: 4-16 [2, 1179, 1024] --\n", + "│ │ └─FeedForward: 3-9 [2, 1179, 256] --\n", + "│ │ │ └─Linear: 4-17 [2, 1179, 256] 262,400\n", + "│ │ │ └─LeakyHardsigmoid: 4-18 [2, 1179, 256] --\n", + "├─Adapter: 1-2 [2, 294, 10] (recursive)\n", + "│ └─Sequential: 2-2 [2, 294, 256] (recursive)\n", + "│ │ └─FeedForward: 3-10 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-19 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Softsign: 4-20 [2, 294, 1024] --\n", + "│ │ └─FeedForward: 3-11 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-21 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Softsign: 4-22 [2, 294, 1024] --\n", + "│ │ └─FeedForward: 3-12 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-23 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Softsign: 4-24 [2, 294, 1024] --\n", + "│ │ └─FeedForward: 3-13 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-25 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Softsign: 4-26 [2, 294, 1024] --\n", + "│ │ └─FeedForward: 3-14 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-27 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Softsign: 4-28 [2, 294, 1024] --\n", + "│ │ └─FeedForward: 3-15 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-29 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Softsign: 4-30 [2, 294, 1024] --\n", + "│ │ └─FeedForward: 3-16 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-31 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Softsign: 4-32 [2, 294, 1024] --\n", + "│ │ └─FeedForward: 3-17 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-33 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Softsign: 4-34 [2, 294, 1024] --\n", + "│ │ └─FeedForward: 3-18 [2, 294, 256] (recursive)\n", + "│ │ │ └─Linear: 4-35 [2, 294, 256] (recursive)\n", + "│ │ │ └─LeakyHardsigmoid: 4-36 [2, 294, 256] --\n", + "├─TwinEncoder: 1-3 [2, 4096] --\n", + "│ └─Encoder: 2-3 [2, 16, 256] --\n", + "│ │ └─ModuleList: 3-20 -- (recursive)\n", + "│ │ │ └─EncoderLayer: 4-37 [2, 1179, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-1 [2, 1179, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-1 [2, 128, 256] 32,768\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-2 [2, 128, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-1 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-2 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-3 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-4 [2, 32, 128, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-1 [2, 32, 128, 1179] --\n", + "│ │ │ │ │ │ └─Linear: 7-5 [2, 128, 256] 65,792\n", + "│ │ │ │ │ │ └─PReLU: 7-6 [2, 128, 256] 1\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-3 [2, 1179, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-7 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-8 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-9 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-10 [2, 32, 1179, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-2 [2, 32, 1179, 128] --\n", + "│ │ │ │ │ │ └─Linear: 7-11 [2, 1179, 256] 65,792\n", + "│ │ │ │ │ │ └─PReLU: 7-12 [2, 1179, 256] 1\n", + "│ │ │ │ └─DoubleFeedForward: 5-2 [2, 1179, 256] --\n", + "│ │ │ │ │ └─Linear: 6-4 [2, 1179, 512] 131,584\n", + "│ │ │ │ │ └─Tanh: 6-5 [2, 1179, 512] --\n", + "│ │ │ │ │ └─Linear: 6-6 [2, 1179, 256] 131,328\n", + "│ │ │ └─EncoderLayer: 4-38 [2, 1179, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-3 [2, 1179, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-7 [2, 128, 256] 32,768\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-8 [2, 128, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-13 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-14 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-15 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-16 [2, 32, 128, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-3 [2, 32, 128, 1179] --\n", + "│ │ │ │ │ │ └─Linear: 7-17 [2, 128, 256] 65,792\n", + "│ │ │ │ │ │ └─PReLU: 7-18 [2, 128, 256] 1\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-9 [2, 1179, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-19 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-20 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-21 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-22 [2, 32, 1179, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-4 [2, 32, 1179, 128] --\n", + "│ │ │ │ │ │ └─Linear: 7-23 [2, 1179, 256] 65,792\n", + "│ │ │ │ │ │ └─PReLU: 7-24 [2, 1179, 256] 1\n", + "│ │ │ │ └─DoubleFeedForward: 5-4 [2, 1179, 256] --\n", + "│ │ │ │ │ └─Linear: 6-10 [2, 1179, 512] 131,584\n", + "│ │ │ │ │ └─Tanh: 6-11 [2, 1179, 512] --\n", + "│ │ │ │ │ └─Linear: 6-12 [2, 1179, 256] 131,328\n", + "│ │ │ └─EncoderLayer: 4-39 [2, 16, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-5 [2, 1179, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-13 [2, 128, 256] 32,768\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-14 [2, 128, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-25 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-26 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-27 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-28 [2, 32, 128, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-5 [2, 32, 128, 1179] --\n", + "│ │ │ │ │ │ └─Linear: 7-29 [2, 128, 256] 65,792\n", + "│ │ │ │ │ │ └─PReLU: 7-30 [2, 128, 256] 1\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-15 [2, 1179, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-31 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-32 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-33 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-34 [2, 32, 1179, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-6 [2, 32, 1179, 128] --\n", + "│ │ │ │ │ │ └─Linear: 7-35 [2, 1179, 256] 65,792\n", + "│ │ │ │ │ │ └─PReLU: 7-36 [2, 1179, 256] 1\n", + "│ │ │ │ └─DoubleFeedForward: 5-6 [2, 1179, 256] --\n", + "│ │ │ │ │ └─Linear: 6-16 [2, 1179, 512] 131,584\n", + "│ │ │ │ │ └─LeakyHardtanh: 6-17 [2, 1179, 512] --\n", + "│ │ │ │ │ └─Linear: 6-18 [2, 1179, 256] 131,328\n", + "│ │ │ │ └─PoolingByMultiheadAttention: 5-7 [2, 16, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-19 [2, 16, 256] 4,096\n", + "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-20 [2, 16, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-37 [2, 16, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-38 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-39 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-40 [2, 32, 16, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-7 [2, 32, 16, 1179] --\n", + "│ │ │ │ │ │ └─Linear: 7-41 [2, 16, 256] 65,792\n", + "│ │ │ │ │ │ └─PReLU: 7-42 [2, 16, 256] 1\n", + "│ └─Encoder: 2-4 [2, 16, 256] (recursive)\n", + "│ │ └─ModuleList: 3-20 -- (recursive)\n", + "│ │ │ └─EncoderLayer: 4-40 [2, 294, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-8 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-21 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-22 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-43 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-44 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-45 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-46 [2, 32, 128, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-8 [2, 32, 128, 294] --\n", + "│ │ │ │ │ │ └─Linear: 7-47 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─PReLU: 7-48 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-23 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-49 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-50 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-51 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-52 [2, 32, 294, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-9 [2, 32, 294, 128] --\n", + "│ │ │ │ │ │ └─Linear: 7-53 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─PReLU: 7-54 [2, 294, 256] (recursive)\n", + "│ │ │ │ └─DoubleFeedForward: 5-9 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-24 [2, 294, 512] (recursive)\n", + "│ │ │ │ │ └─Tanh: 6-25 [2, 294, 512] --\n", + "│ │ │ │ │ └─Linear: 6-26 [2, 294, 256] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-41 [2, 294, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-10 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-27 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-28 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-55 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-56 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-57 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-58 [2, 32, 128, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-10 [2, 32, 128, 294] --\n", + "│ │ │ │ │ │ └─Linear: 7-59 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─PReLU: 7-60 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-29 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-61 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-62 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-63 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-64 [2, 32, 294, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-11 [2, 32, 294, 128] --\n", + "│ │ │ │ │ │ └─Linear: 7-65 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─PReLU: 7-66 [2, 294, 256] (recursive)\n", + "│ │ │ │ └─DoubleFeedForward: 5-11 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-30 [2, 294, 512] (recursive)\n", + "│ │ │ │ │ └─Tanh: 6-31 [2, 294, 512] --\n", + "│ │ │ │ │ └─Linear: 6-32 [2, 294, 256] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-42 [2, 16, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-12 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-33 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-34 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-67 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-68 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-69 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-70 [2, 32, 128, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-12 [2, 32, 128, 294] --\n", + "│ │ │ │ │ │ └─Linear: 7-71 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─PReLU: 7-72 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-35 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-73 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-74 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-75 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-76 [2, 32, 294, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-13 [2, 32, 294, 128] --\n", + "│ │ │ │ │ │ └─Linear: 7-77 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─PReLU: 7-78 [2, 294, 256] (recursive)\n", + "│ │ │ │ └─DoubleFeedForward: 5-13 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-36 [2, 294, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardtanh: 6-37 [2, 294, 512] --\n", + "│ │ │ │ │ └─Linear: 6-38 [2, 294, 256] (recursive)\n", + "│ │ │ │ └─PoolingByMultiheadAttention: 5-14 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-39 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-40 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-79 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-80 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-81 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-82 [2, 32, 16, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-14 [2, 32, 16, 294] --\n", + "│ │ │ │ │ │ └─Linear: 7-83 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─PReLU: 7-84 [2, 16, 256] (recursive)\n", + "├─Head: 1-4 [2] --\n", + "│ └─Sequential: 2-5 [2, 1] --\n", + "│ │ └─FeedForward: 3-21 [2, 256] --\n", + "│ │ │ └─Linear: 4-43 [2, 256] 1,048,832\n", + "│ │ │ └─Softsign: 4-44 [2, 256] --\n", + "│ │ └─FeedForward: 3-22 [2, 256] --\n", + "│ │ │ └─Linear: 4-45 [2, 256] 65,792\n", + "│ │ │ └─Softsign: 4-46 [2, 256] --\n", + "│ │ └─FeedForward: 3-23 [2, 256] --\n", + "│ │ │ └─Linear: 4-47 [2, 256] 65,792\n", + "│ │ │ └─Softsign: 4-48 [2, 256] --\n", + "│ │ └─FeedForward: 3-24 [2, 256] --\n", + "│ │ │ └─Linear: 4-49 [2, 256] 65,792\n", + "│ │ │ └─Softsign: 4-50 [2, 256] --\n", + "│ │ └─FeedForward: 3-25 [2, 256] --\n", + "│ │ │ └─Linear: 4-51 [2, 256] 65,792\n", + "│ │ │ └─Softsign: 4-52 [2, 256] --\n", + "│ │ └─FeedForward: 3-26 [2, 256] --\n", + "│ │ │ └─Linear: 4-53 [2, 256] 65,792\n", + "│ │ │ └─Softsign: 4-54 [2, 256] --\n", + "│ │ └─FeedForward: 3-27 [2, 256] --\n", + "│ │ │ └─Linear: 4-55 [2, 256] 65,792\n", + "│ │ │ └─Softsign: 4-56 [2, 256] --\n", + "│ │ └─FeedForward: 3-28 [2, 256] --\n", + "│ │ │ └─Linear: 4-57 [2, 256] 65,792\n", + "│ │ │ └─Softsign: 4-58 [2, 256] --\n", + "│ │ └─FeedForward: 3-29 [2, 1] --\n", + "│ │ │ └─Linear: 4-59 [2, 1] 257\n", + "│ │ │ └─LeakyHardsigmoid: 4-60 [2, 1] --\n", + "========================================================================================================================\n", + "Total params: 11,858,440\n", + "Trainable params: 11,858,440\n", + "Non-trainable params: 0\n", + "Total mult-adds (M): 44.00\n", + "========================================================================================================================\n", + "Input size (MB): 0.12\n", + "Forward/backward pass size (MB): 375.40\n", + "Params size (MB): 47.43\n", + "Estimated Total Size (MB): 422.95\n", + "========================================================================================================================" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from torchinfo import summary\n", + "\n", + "role_model = params[\"fixed_role_model\"]\n", + "s = train_set[0][role_model]\n", + "summary(model[role_model], input_size=((2, *s[0].shape), (2, *s[1].shape)), depth=9) # 8 max" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "0f42c4d1", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T19:39:54.519279Z", + "iopub.status.busy": "2024-03-22T19:39:54.518964Z", + "iopub.status.idle": "2024-03-22T20:48:05.007193Z", + "shell.execute_reply": "2024-03-22T20:48:05.006166Z" + }, + "papermill": { + "duration": 4090.520458, + "end_time": "2024-03-22T20:48:05.024107", + "exception": false, + "start_time": "2024-03-22T19:39:54.503649", + "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.029891989165917038, 'avg_role_model_std_loss': 1.363000964352638, 'avg_role_model_mean_pred_loss': 0.0028323000936053095, 'avg_role_model_g_mag_loss': 0.03434117138773824, '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.03190343896651433, 'n_size': 900, 'n_batch': 225, 'duration': 264.29759979248047, 'duration_batch': 1.174655999077691, 'duration_size': 0.29366399976942276, 'avg_pred_std': 0.12323957710630364}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.018350417958055105, 'avg_role_model_std_loss': 0.8690771571510773, 'avg_role_model_mean_pred_loss': 0.0006744714792743404, '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.018350417958055105, 'n_size': 450, 'n_batch': 113, 'duration': 91.61005926132202, 'duration_batch': 0.810708489038248, 'duration_size': 0.2035779094696045, 'avg_pred_std': 0.05547503994332742}\n", + "Epoch 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.026780042523621685, 'avg_role_model_std_loss': 3.719150285677334, 'avg_role_model_mean_pred_loss': 0.0013821134704785879, 'avg_role_model_g_mag_loss': 0.06253340480448161, '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.02846383413299918, 'n_size': 900, 'n_batch': 225, 'duration': 265.14594316482544, 'duration_batch': 1.1784264140658909, 'duration_size': 0.2946066035164727, 'avg_pred_std': 0.08547261928673834}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.020631530765030118, 'avg_role_model_std_loss': 4.440361282132123, 'avg_role_model_mean_pred_loss': 0.0007865790576680511, '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.020631530765030118, 'n_size': 450, 'n_batch': 113, 'duration': 92.29275822639465, 'duration_batch': 0.8167500727999527, 'duration_size': 0.205095018280877, 'avg_pred_std': 0.06341225340801696}\n", + "Epoch 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.009797142112058484, 'avg_role_model_std_loss': 1.345002487987807, 'avg_role_model_mean_pred_loss': 0.00018001115952997852, 'avg_role_model_g_mag_loss': 0.014916595776513632, '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.01049884227078615, 'n_size': 900, 'n_batch': 225, 'duration': 267.053644657135, 'duration_batch': 1.1869050873650444, 'duration_size': 0.2967262718412611, 'avg_pred_std': 0.07698791329231527}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0058155485348672506, 'avg_role_model_std_loss': 2.1949546487962954, 'avg_role_model_mean_pred_loss': 7.145489165522021e-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.0058155485348672506, 'n_size': 450, 'n_batch': 113, 'duration': 92.60731506347656, 'duration_batch': 0.8195337616236864, 'duration_size': 0.20579403347439237, 'avg_pred_std': 0.03643730922346621}\n", + "Epoch 3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.00591874976532482, 'avg_role_model_std_loss': 0.5914836981606755, 'avg_role_model_mean_pred_loss': 8.3291523560353e-05, 'avg_role_model_g_mag_loss': 0.015630586181456844, '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.013930044301410413, 'n_size': 900, 'n_batch': 225, 'duration': 265.62826585769653, 'duration_batch': 1.1805700704786513, 'duration_size': 0.2951425176196628, 'avg_pred_std': 0.0992426086589694}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.005116828617950281, 'avg_role_model_std_loss': 1.3365860288515323, 'avg_role_model_mean_pred_loss': 4.988687947685675e-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.005116828617950281, 'n_size': 450, 'n_batch': 113, 'duration': 92.46403670310974, 'duration_batch': 0.8182658115319447, 'duration_size': 0.20547563711802164, 'avg_pred_std': 0.0723611570861751}\n", + "Epoch 4\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.006043252464086335, 'avg_role_model_std_loss': 0.6006597002678468, 'avg_role_model_mean_pred_loss': 7.193107055212267e-05, 'avg_role_model_g_mag_loss': 0.0193890755618405, '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.006235779779187093, 'n_size': 900, 'n_batch': 225, 'duration': 265.7200925350189, 'duration_batch': 1.1809781890445286, 'duration_size': 0.29524454726113214, 'avg_pred_std': 0.09385471865741743}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0037355842368884218, 'avg_role_model_std_loss': 2.1964674235988046, 'avg_role_model_mean_pred_loss': 1.4399180043685393e-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.0037355842368884218, 'n_size': 450, 'n_batch': 113, 'duration': 92.21309638023376, 'duration_batch': 0.8160451007100333, 'duration_size': 0.20491799195607505, 'avg_pred_std': 0.03963511501257596}\n", + "Epoch 5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.005593134965747595, 'avg_role_model_std_loss': 0.5571283631080762, 'avg_role_model_mean_pred_loss': 5.060047336453723e-05, 'avg_role_model_g_mag_loss': 0.005880406767505014, '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.006675898930989205, 'n_size': 900, 'n_batch': 225, 'duration': 265.53266191482544, 'duration_batch': 1.1801451640658909, 'duration_size': 0.2950362910164727, 'avg_pred_std': 0.09367100126213497}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.005213722620262868, 'avg_role_model_std_loss': 1.4734984655637393, 'avg_role_model_mean_pred_loss': 3.6257587302249085e-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.005213722620262868, 'n_size': 450, 'n_batch': 113, 'duration': 92.31340265274048, 'duration_batch': 0.8169327668384113, 'duration_size': 0.20514089478386774, 'avg_pred_std': 0.04706298913064916}\n", + "Epoch 6\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.004435698193054931, 'avg_role_model_std_loss': 0.5322100268975697, 'avg_role_model_mean_pred_loss': 2.625556939914274e-05, 'avg_role_model_g_mag_loss': 0.017856327523348026, '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.004762566664511622, 'n_size': 900, 'n_batch': 225, 'duration': 265.40029549598694, 'duration_batch': 1.1795568688710532, 'duration_size': 0.2948892172177633, 'avg_pred_std': 0.09591990354160468}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0032878017918361972, 'avg_role_model_std_loss': 2.197284267162057, 'avg_role_model_mean_pred_loss': 1.6023078919465373e-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.0032878017918361972, 'n_size': 450, 'n_batch': 113, 'duration': 92.23695397377014, 'duration_batch': 0.8162562298563729, 'duration_size': 0.20497100883060032, 'avg_pred_std': 0.04823664502257201}\n", + "Epoch 7\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.004083349550039404, 'avg_role_model_std_loss': 0.2640936150784081, 'avg_role_model_mean_pred_loss': 3.919473733837115e-05, 'avg_role_model_g_mag_loss': 0.007234169057984319, '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.004312839023510201, 'n_size': 900, 'n_batch': 225, 'duration': 265.5356845855713, 'duration_batch': 1.1801585981580947, 'duration_size': 0.29503964953952366, 'avg_pred_std': 0.10409059958325492}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0049268581152945344, 'avg_role_model_std_loss': 2.1081838779046094, 'avg_role_model_mean_pred_loss': 2.783397738109588e-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.0049268581152945344, 'n_size': 450, 'n_batch': 113, 'duration': 92.30034828186035, 'duration_batch': 0.8168172414323925, 'duration_size': 0.20511188507080078, 'avg_pred_std': 0.03578016849902285}\n", + "Epoch 8\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.004650288004955251, 'avg_role_model_std_loss': 0.3868287038255513, 'avg_role_model_mean_pred_loss': 4.264861073708936e-05, 'avg_role_model_g_mag_loss': 0.014303723979844815, '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.004827073722052672, 'n_size': 900, 'n_batch': 225, 'duration': 265.6125736236572, 'duration_batch': 1.1805003272162544, 'duration_size': 0.2951250818040636, 'avg_pred_std': 0.09734993250005775}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.00729073759013166, 'avg_role_model_std_loss': 1.2893098778926795, 'avg_role_model_mean_pred_loss': 7.92939556772391e-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.00729073759013166, 'n_size': 450, 'n_batch': 113, 'duration': 92.1851875782013, 'duration_batch': 0.8157981201610734, 'duration_size': 0.20485597239600287, 'avg_pred_std': 0.04885830329442644}\n", + "Epoch 9\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.005149225248670619, 'avg_role_model_std_loss': 0.3466197312315247, 'avg_role_model_mean_pred_loss': 4.727260695603993e-05, 'avg_role_model_g_mag_loss': 0.00807437449758355, '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.005820203127675793, 'n_size': 900, 'n_batch': 225, 'duration': 262.5310835838318, 'duration_batch': 1.1668048159281412, 'duration_size': 0.2917012039820353, 'avg_pred_std': 0.10039696198784642}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0032142305604389142, 'avg_role_model_std_loss': 1.9432415218951797, 'avg_role_model_mean_pred_loss': 1.8801717722896813e-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.0032142305604389142, 'n_size': 450, 'n_batch': 113, 'duration': 89.91775798797607, 'duration_batch': 0.7957323715750095, 'duration_size': 0.19981723997328016, 'avg_pred_std': 0.05169614580196155}\n", + "Epoch 10\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0037408947434030577, 'avg_role_model_std_loss': 0.3032218644981286, 'avg_role_model_mean_pred_loss': 2.4328275131388343e-05, 'avg_role_model_g_mag_loss': 0.004584924664943375, '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.005333074951292171, 'n_size': 900, 'n_batch': 225, 'duration': 261.823570728302, 'duration_batch': 1.1636603143480089, 'duration_size': 0.2909150785870022, 'avg_pred_std': 0.09640699982229206}\n", + "Time out: 3845.4765508174896/3600\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval loss {'role_model': 'tab_ddpm_concat', 'n_size': 1050, 'n_batch': 263, 'role_model_metrics': {'avg_loss': 0.00314096828578927, 'avg_g_mag_loss': 0.07551193804811766, 'avg_g_cos_loss': 0.04462564292983318, 'pred_duration': 3.8562533855438232, 'grad_duration': 12.572372913360596, 'total_duration': 16.42862629890442, 'pred_std': 0.08971857279539108, 'std_loss': 0.03517554700374603, 'mean_pred_loss': 1.2780794349964708e-05, 'pred_rmse': 0.05604434013366699, 'pred_mae': 0.04239872843027115, 'pred_mape': 0.13749265670776367, 'grad_rmse': 0.12085322290658951, 'grad_mae': 0.04438546299934387, 'grad_mape': 1.0239506959915161}, '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.00314096828578927, 'avg_g_mag_loss': 0.07551193804811766, 'avg_g_cos_loss': 0.04462564292983318, 'avg_pred_duration': 3.8562533855438232, 'avg_grad_duration': 12.572372913360596, 'avg_total_duration': 16.42862629890442, 'avg_pred_std': 0.08971857279539108, 'avg_std_loss': 0.03517554700374603, 'avg_mean_pred_loss': 1.2780794349964708e-05}, 'min_metrics': {'avg_loss': 0.00314096828578927, 'avg_g_mag_loss': 0.07551193804811766, 'avg_g_cos_loss': 0.04462564292983318, 'pred_duration': 3.8562533855438232, 'grad_duration': 12.572372913360596, 'total_duration': 16.42862629890442, 'pred_std': 0.08971857279539108, 'std_loss': 0.03517554700374603, 'mean_pred_loss': 1.2780794349964708e-05, 'pred_rmse': 0.05604434013366699, 'pred_mae': 0.04239872843027115, 'pred_mape': 0.13749265670776367, 'grad_rmse': 0.12085322290658951, 'grad_mae': 0.04438546299934387, 'grad_mape': 1.0239506959915161}, 'model_metrics': {'tab_ddpm_concat': {'avg_loss': 0.00314096828578927, 'avg_g_mag_loss': 0.07551193804811766, 'avg_g_cos_loss': 0.04462564292983318, 'pred_duration': 3.8562533855438232, 'grad_duration': 12.572372913360596, 'total_duration': 16.42862629890442, 'pred_std': 0.08971857279539108, 'std_loss': 0.03517554700374603, 'mean_pred_loss': 1.2780794349964708e-05, 'pred_rmse': 0.05604434013366699, 'pred_mae': 0.04239872843027115, 'pred_mape': 0.13749265670776367, 'grad_rmse': 0.12085322290658951, 'grad_mae': 0.04438546299934387, 'grad_mape': 1.0239506959915161}}}\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-22T20:48:05.057554Z", + "iopub.status.busy": "2024-03-22T20:48:05.057230Z", + "iopub.status.idle": "2024-03-22T20:48:05.061736Z", + "shell.execute_reply": "2024-03-22T20:48:05.060806Z" + }, + "papermill": { + "duration": 0.023563, + "end_time": "2024-03-22T20:48:05.063636", + "exception": false, + "start_time": "2024-03-22T20:48:05.040073", + "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-22T20:48:05.095084Z", + "iopub.status.busy": "2024-03-22T20:48:05.094772Z", + "iopub.status.idle": "2024-03-22T20:48:05.193382Z", + "shell.execute_reply": "2024-03-22T20:48:05.192337Z" + }, + "papermill": { + "duration": 0.117167, + "end_time": "2024-03-22T20:48:05.195816", + "exception": false, + "start_time": "2024-03-22T20:48:05.078649", + "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-22T20:48:05.230002Z", + "iopub.status.busy": "2024-03-22T20:48:05.229690Z", + "iopub.status.idle": "2024-03-22T20:48:05.510618Z", + "shell.execute_reply": "2024-03-22T20:48:05.509591Z" + }, + "papermill": { + "duration": 0.30074, + "end_time": "2024-03-22T20:48:05.512670", + "exception": false, + "start_time": "2024-03-22T20:48:05.211930", + "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-22T20:48:05.548670Z", + "iopub.status.busy": "2024-03-22T20:48:05.548275Z", + "iopub.status.idle": "2024-03-22T20:52:10.525895Z", + "shell.execute_reply": "2024-03-22T20:52:10.525087Z" + }, + "papermill": { + "duration": 244.997818, + "end_time": "2024-03-22T20:52:10.528358", + "exception": false, + "start_time": "2024-03-22T20:48:05.530540", + "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-22T20:52:10.564325Z", + "iopub.status.busy": "2024-03-22T20:52:10.563978Z", + "iopub.status.idle": "2024-03-22T20:52:10.584415Z", + "shell.execute_reply": "2024-03-22T20:52:10.583463Z" + }, + "papermill": { + "duration": 0.040608, + "end_time": "2024-03-22T20:52:10.586520", + "exception": false, + "start_time": "2024-03-22T20:52:10.545912", + "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.0388170.0522470.00314112.5849680.0443851.0239510.1208530.0000133.8802050.0423990.1374930.0560440.0897190.03517616.465174
\n", + "
" + ], + "text/plain": [ + " avg_g_cos_loss avg_g_mag_loss avg_loss grad_duration \\\n", + "tab_ddpm_concat 0.038817 0.052247 0.003141 12.584968 \n", + "\n", + " grad_mae grad_mape grad_rmse mean_pred_loss \\\n", + "tab_ddpm_concat 0.044385 1.023951 0.120853 0.000013 \n", + "\n", + " pred_duration pred_mae pred_mape pred_rmse pred_std \\\n", + "tab_ddpm_concat 3.880205 0.042399 0.137493 0.056044 0.089719 \n", + "\n", + " std_loss total_duration \n", + "tab_ddpm_concat 0.035176 16.465174 " + ] + }, + "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-22T20:52:10.620207Z", + "iopub.status.busy": "2024-03-22T20:52:10.619875Z", + "iopub.status.idle": "2024-03-22T20:52:10.977505Z", + "shell.execute_reply": "2024-03-22T20:52:10.976573Z" + }, + "papermill": { + "duration": 0.376739, + "end_time": "2024-03-22T20:52:10.979500", + "exception": false, + "start_time": "2024-03-22T20:52:10.602761", + "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-22T20:52:11.014665Z", + "iopub.status.busy": "2024-03-22T20:52:11.014330Z", + "iopub.status.idle": "2024-03-22T20:56:26.495271Z", + "shell.execute_reply": "2024-03-22T20:56:26.494363Z" + }, + "papermill": { + "duration": 255.501341, + "end_time": "2024-03-22T20:56:26.497846", + "exception": false, + "start_time": "2024-03-22T20:52:10.996505", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../contraceptive/_cache_aug_test/tab_ddpm_concat/all inf False\n", + "Caching in ../../../../contraceptive/_cache_bs_test/tab_ddpm_concat/all inf False\n", + "Caching in ../../../../contraceptive/_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-22T20:56:26.533812Z", + "iopub.status.busy": "2024-03-22T20:56:26.533500Z", + "iopub.status.idle": "2024-03-22T20:56:26.560312Z", + "shell.execute_reply": "2024-03-22T20:56:26.559584Z" + }, + "papermill": { + "duration": 0.046481, + "end_time": "2024-03-22T20:56:26.562238", + "exception": false, + "start_time": "2024-03-22T20:56:26.515757", + "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-22T20:56:26.595506Z", + "iopub.status.busy": "2024-03-22T20:56:26.595222Z", + "iopub.status.idle": "2024-03-22T20:56:26.600596Z", + "shell.execute_reply": "2024-03-22T20:56:26.599719Z" + }, + "papermill": { + "duration": 0.024394, + "end_time": "2024-03-22T20:56:26.602662", + "exception": false, + "start_time": "2024-03-22T20:56:26.578268", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'tab_ddpm_concat': 0.3847382401568549}\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-22T20:56:26.639258Z", + "iopub.status.busy": "2024-03-22T20:56:26.638403Z", + "iopub.status.idle": "2024-03-22T20:56:27.027627Z", + "shell.execute_reply": "2024-03-22T20:56:27.026727Z" + }, + "papermill": { + "duration": 0.410339, + "end_time": "2024-03-22T20:56:27.029724", + "exception": false, + "start_time": "2024-03-22T20:56:26.619385", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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S6FWe7C9iwBsU1CKiopCslcvlO8vlO8NCN79McbQ1NSEpKQkiETuW4J6dYlIJBKhf//+QmejSxqNJiT/mG1C+f5C+d6A4NxfZyUhG2qsJoQIjgIRIURwFIgCSC6XY+3atb6tGNALhPL9hfK9AT3v/np1YzUhJDRQiYgQIjgKRIQQwVEgIoQIjgIRIURwFIi85O2utO+//z6GDh0KhUKBUaNG4YsvvnA4zxjDmjVrkJiYCKVSiZkzZ+LChQuBvAW3vLm3N954A9OmTUNkZCQiIyMxc+ZMp/S5ubn8RgAdvubMmRPo23DLm/vLz893yrtC4bgdU29976ZPn+50bxzHYe7cufY0QX/vGPHYzp07mUwmY9u3b2enT59mS5YsYREREayiosJl+u+++46JxWL2pz/9iZ05c4b9v//3/5hUKmUnT560p9mwYQPTarXso48+YsePH2e33XYbS09PZ3q9Pli3xRjz/t4WLlzIXn31VfbLL7+ws2fPstzcXKbVallxcbE9TU5ODpszZw4rKyuzf9XW1gbrlhx4e395eXlMo9E45L28vNwhTW9972pqahzu69SpU0wsFrO8vDx7mmC/dxSIvDBx4kS2bNky+88Wi4UlJSWx9evXu0x/1113sblz5zocmzRpEnvkkUcYY4xZrVaWkJDA/vznP9vP19fXM7lczt57770A3IF73t7btcxmM1Or1eytt96yH8vJyWHz5s3zd1Z94u395eXlMa1W6/Z6ofTebd68manVatbc3Gw/Fuz3jqpmHrLtSjtz5kz7sc52pQWAH374wSE9AMyePduevqCgAOXl5Q5ptFotJk2a5PaageDLvV1Lp9PBZDIhKirK4fj+/fsRFxeHIUOG4LHHHkNNTY1f8+4JX++vubkZqampSE5Oxrx583D69Gn7uVB67958803cc889UKkc97cK5ntHgchDne1KW15e7vI55eXlnaa3fffmmoHgy71d6+mnn0ZSUpLDP8ScOXOwY8cO7Nu3Dxs3bsSBAwdw0003wWKx+DX/XfHl/oYMGYLt27fj448/xttvvw2r1YopU6aguLgYQOi8d4cOHcKpU6ewePFih+PBfu969ex70jNs2LABO3fuxP79+x0adO+55x7741GjRmH06NHIyMjA/v37ceONNwqRVY9NnjzZYW+9KVOmYNiwYfjrX/+K559/XsCc+deb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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from ml_utility_loss.loss_learning.visualization import plot_pred_density_2\n", + "\n", + "_ = plot_pred_density_2(y)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "e79e4b0f", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-22T20:56:27.064880Z", + "iopub.status.busy": "2024-03-22T20:56:27.064578Z", + "iopub.status.idle": "2024-03-22T20:56:27.411710Z", + "shell.execute_reply": "2024-03-22T20:56:27.410735Z" + }, + "papermill": { + "duration": 0.366976, + "end_time": "2024-03-22T20:56:27.413792", + "exception": false, + "start_time": "2024-03-22T20:56:27.046816", + "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-22T20:56:27.451530Z", + "iopub.status.busy": "2024-03-22T20:56:27.451208Z", + "iopub.status.idle": "2024-03-22T20:56:27.636663Z", + "shell.execute_reply": "2024-03-22T20:56:27.635658Z" + }, + "papermill": { + "duration": 0.207051, + "end_time": "2024-03-22T20:56:27.639085", + "exception": false, + "start_time": "2024-03-22T20:56:27.432034", + "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-22T20:56:27.677145Z", + "iopub.status.busy": "2024-03-22T20:56:27.676822Z", + "iopub.status.idle": "2024-03-22T20:56:27.889740Z", + "shell.execute_reply": "2024-03-22T20:56:27.888860Z" + }, + "papermill": { + "duration": 0.234701, + "end_time": "2024-03-22T20:56:27.891811", + "exception": false, + "start_time": "2024-03-22T20:56:27.657110", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAATIAAAEmCAYAAADhgRxIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABAsUlEQVR4nO2deVwT1/r/PyGQsG/KLggqVdytioLWpcVStVVv7+9qbW9du1ilrVLrvmFvi60btlq91muprdbtuvSrrb1KFatYqygWFbAiCJVVlBACJCSZ3x/ImEgCGchCmOf9es0L5sw5M89Mcj55zjNnETAMw4AgCMKKsbG0AQRBEC2FhIwgCKuHhIwgCKuHhIwgCKuHhIwgCKuHhIwgCKuHhIwgCKuHhIwgCKvH1tIGmBu1Wo2CggK4uLhAIBBY2hyCIJ6AYRhIpVL4+/vDxsYwX4t3QlZQUIDAwEBLm0EQRBPk5+ejQ4cOBuXlnZC5uLgAqHtIrq6uFraGIIgnqaioQGBgIFtXDYF3QlbfnHR1dSUhI4hWDJfQDwX7CYKwekjICIKwekjICIKwengXI2sJDMNAqVRCpVJZ2hSCsFqEQiFsbW2N2v3JokIWHx+PQ4cOITMzEw4ODoiMjMSnn36Krl276i2TmJiI6dOna6WJxWLU1NSY1FaFQoHCwkJUVVWZ9DoEwQccHR3h5+cHkUhklPNZVMiSk5MxZ84cDBw4EEqlEkuWLMHzzz+PmzdvwsnJSW85V1dXZGVlsfum7tiqVquRk5MDoVAIf39/iEQi6kxLEM2AYRgoFAqUlpYiJycHoaGhBnd6bQyLCtmJEye09hMTE+Ht7Y3U1FQMGzZMbzmBQABfX19Tm8eiUCigVqsRGBgIR0dHs13XEArKqyEA4OfuYGlTCMIgHBwcYGdnh7t370KhUMDe3r7F52xVwX6JRAIA8PT0bDRfZWUlOnbsiMDAQIwfPx43btzQm1cul6OiokJray7G+OUwJkqVGvcr5SitlEOpVlvaHIIwGGPXpVZTM9VqNebOnYshQ4agZ8+eevN17doVO3fuxNGjR/Hdd99BrVYjMjISf/31l8788fHxcHNzY7e2NDyJ0btDEPxC0FpWUXrnnXfw008/4dy5cwaPrwKA2tpahIWFYfLkyfjoo48aHJfL5ZDL5ex+/fAHiURicM/+mpoa5OTkICQkxChusLGoVamRUVjnYXb3c4WtsNX8LhFEozRWpyoqKuDm5sapjraKb35MTAyOHTuG06dPcxIxALCzs0O/fv1w+/ZtncfFYjE7HImGJRnGtGnTMGHCBKOec8SIEZg7d26jeYKDg5GQkGDU6xKWwZDP25hYVMgYhkFMTAwOHz6MX375BSEhIZzPoVKpkJ6eDj8/PxNYaP2Y+wtFmJ5Vq1ahb9++ljajVWHRt5Zz5szBnj17cPToUbi4uKCoqAgA4ObmBgeHurdwU6ZMQUBAAOLj4wEAq1evxuDBg9GlSxeUl5dj7dq1uHv3Lt544w2L3QdBtEVqa2thZ2dnaTMMwqIe2datWyGRSDBixAj4+fmx2759+9g8eXl5KCwsZPcfPnyIN998E2FhYRgzZgwqKiqQkpKC7t27m9V2hmFQpVCafdMMaTbVk23atGlITk7Gpk2bIBAIIBAIkJ2djZkzZyIkJAQODg7o2rUrNm3apLN8XFwcvLy84OrqilmzZkGhUBj0bGQyGaZMmQJnZ2f4+flh/fr1DfKUlJTgpZdegoODA0JCQrB79+4GeQQCAbZu3YrRo0fDwcEBnTp1wsGDB9njubm5EAgE2L9/P5555hk4ODhg4MCBuHXrFi5duoQBAwbA2dkZo0ePRmlpqUG2A8DOnTvRo0cPiMVi+Pn5ISYmhj2Wl5eH8ePHw9nZGa6urpg4cSKKi4vZ4/Xe0rfffovg4GC4ubnhlVdegVQqZfOo1Wp89tln6NKlC8RiMYKCgvDxxx+zxxcuXIinnnoKjo6O6NSpE5YvX47a2loAdV2U4uLicO3aNfYzTUxMbPKeMjMzMXToUNjb26N79+44deoUBAIBjhw5ovUs9+3bh+HDh8Pe3h67d+9GWVkZJk+ejICAADg6OqJXr174/vvvtc5tyOdtaizqkRnynuHMmTNa+xs3bsTGjRtNZJHhVNeq0H3Fz2a/7s3V0XAUGfaxbdq0Cbdu3ULPnj2xevVqAICHhwc6dOiAAwcOoF27dkhJScFbb70FPz8/TJw4kS2blJQEe3t7nDlzBrm5uZg+fTratWunVeH08eGHHyI5ORlHjx6Ft7c3lixZgitXrmg1h6ZNm4aCggKcPn0adnZ2eO+991BSUtLgXMuXL8eaNWuwadMmfPvtt3jllVeQnp6OsLAwNs/KlSuRkJCAoKAgzJgxA6+++ipcXFywadMmODo6YuLEiVixYgW2bt3apO1bt25FbGws1qxZg9GjR0MikeD8+fMA6gSoXsSSk5OhVCoxZ84cTJo0Set7mp2djSNHjuDYsWN4+PAhJk6ciDVr1rDPbvHixfjqq6+wceNGDB06FIWFhcjMzGTLu7i4IDExEf7+/khPT8ebb74JFxcXLFiwAJMmTcL169dx4sQJnDp1CkBdC6YxVCoVJkyYgKCgIFy8eBFSqRQffPCBzryLFi3C+vXr0a9fP9jb26Ompgb9+/fHwoUL4erqiuPHj+P1119H586dER4eDsCwz9vkMDxDIpEwABiJRGJwmerqaubmzZtMdXU1myaT1zIdFx4z+yaT17I21CpVzLX8h8y1/IeMQqnSafvw4cOZ999/v9H7mzNnDvP3v/+d3Z86dSrj6enJyGQyNm3r1q2Ms7Mzo1Lpvk49UqmUEYlEzP79+9m0srIyxsHBgbUjKyuLAcD8/vvvbJ6MjAwGALNx40Y2DQAza9YsrfMPGjSIeeeddxiGYZicnBwGALNjxw72+Pfff88AYJKSkti0+Ph4pmvXro3aXY+/vz+zdOlSncf+97//MUKhkMnLy2PTbty4oXUvK1euZBwdHZmKigo2z4cffsgMGjSIYRiGqaioYMRiMfPVV18ZZA/DMMzatWuZ/v37s/srV65k+vTpY3D5n376ibG1tWUKCwvZtJMnTzIAmMOHDzMM8/hZJiQkNHm+sWPHMh988AHDMIZ93rrQVafqaU4dpUHjzcTBToibq6Mtct2WsmXLFuzcuRN5eXmorq6GQqFo8OvZp08frVEMERERqKysRH5+Pjp27Kj33NnZ2VAoFBg0aBCb5unpqTV+NiMjA7a2tujfvz+b1q1bN7i7uzc4X0RERIP9tLQ0rbTevXuz//v4+AAAevXqpZWmy9t7kpKSEhQUFOC5557TeTwjIwOBgYFafRG7d+8Od3d3ZGRkYODAgQDq3r5qzm7q5+fHXj8jIwNyuVzvNQBg3759+Pzzz5GdnY3KykoolcoWvW3PyspCYGCg1miYem/qSQYMGKC1r1Kp8Mknn2D//v24d+8eFAoF5HI5+90w5PM2ByRkzUQgEBjcxGtN7N27F/Pnz8f69esREREBFxcXrF27FhcvXrS0ac1GMyBdPwb2yTS1ASMf6l8wGdOeJ6/f1DUuXLiA1157DXFxcYiOjoabmxv27t1rtrjTk2Oc165di02bNiEhIQG9evWCk5MT5s6da3C81Fy0in5khOkQiURa0w6dP38ekZGRmD17Nvr164cuXbogOzu7Qblr166hurqa3f/tt9/g7Ozc5MiIzp07w87OTksYHz58iFu3brH73bp1g1KpRGpqKpuWlZWF8vLyBuf77bffGuxrxseMiYuLC4KDg5GUlKTzeFhYGPLz85Gfn8+m3bx5E+Xl5Qa/bAoNDYWDg4Pea6SkpKBjx45YunQpBgwYgNDQUNy9e1crz5OfaVN07doV+fn5Wi8lLl26ZFDZ8+fPY/z48fjnP/+JPn36oFOnTlqfpSGftzmwPpeC4ERwcDAuXryI3NxcODs7IzQ0FLt27cLPP/+MkJAQfPvtt7h06VKDPnwKhQIzZ87EsmXLkJubi5UrVyImJqbJMXLOzs6YOXMmPvzwQ7Rr1w7e3t5YunSpVrmuXbvihRdewNtvv42tW7fC1tYWc+fO1emtHDhwAAMGDMDQoUOxe/du/P777/jPf/5jnIejg1WrVmHWrFnw9vbG6NGjIZVKcf78ebz77ruIiopCr1698NprryEhIQFKpRKzZ8/G8OHDGzTJ9GFvb4+FCxdiwYIFEIlEGDJkCEpLS3Hjxg3MnDkToaGhyMvLw969ezFw4EAcP34chw8f1jpHcHAwcnJykJaWhg4dOsDFxQVisVjvNUeNGoXOnTtj6tSp+OyzzyCVSrFs2TIATc8cExoaioMHDyIlJQUeHh7YsGEDiouLWeE25PM2B+SRtXHmz58PoVCI7t27w8vLC9HR0Xj55ZcxadIkDBo0CGVlZZg9e3aDcs899xxCQ0MxbNgwTJo0CePGjcOqVasMuubatWvxzDPP4KWXXkJUVBSGDh2qFQ8DgK+//hr+/v4YPnw4Xn75Zbz11lvw9vZucK64uDjs3bsXvXv3xq5du/D999+btKvN1KlTkZCQgC+//BI9evTAiy++iD///BNAXaU/evQoPDw8MGzYMERFRaFTp05a3YUMYfny5fjggw+wYsUKhIWFYdKkSWwMbdy4cZg3bx5iYmLQt29fpKSkYPny5Vrl//73v+OFF17AyJEj4eXl1aA7xJMIhUIcOXIElZWVGDhwIN544w0sXboUAJoccrds2TI8/fTTiI6OxogRI+Dr69tg1Ichn7epaTVjLc1Fc8ZxtdaxlkqVGjcfjbUM83OFXRsbaykQCHD48GGjD5ci6pqMQ4cOxe3bt9G5c2ezX9/YYy2paUkQPODw4cNsaOH27dt4//33MWTIEIuImCloWz/hhMnJy8uDs7Oz3i0vL8/SJjZKY7b/+uuvljavWezevVvvPfXo0QMAIJVKMWfOHHTr1g3Tpk3DwIEDcfToUQtbbjzIIyM44e/v36Af15PHjYUpoh6N2R4QEGD065mDcePGafXj0qS+K8iUKVMwZcoUc5plVkjICE7Y2tqiS5culjaj2Viz7fpwcXHR6oDLR6hpSRCE1UNCRhCE1UNCRhCE1UNCZs3Q0poEAYCEjCCINgAJWVvBBOMznlwMRHNGUYJoTVD3CyvG3C3LwsJCeHh4mPmqBNE0JGSEwWhOzGcpGIaBSqWCrS19dYnHUNOyuTAMoJCZf9PT211fy1IqleK1116Dk5MT/Pz8sHHjxmYvEadrsYpDhw5h5MiRcHR0RJ8+fXDhwgWtMufOnWMXBgkMDMR7770HmUzGHv/2228xYMAAuLi4wNfXF6+++qrWbK5nzpyBQCDATz/9hP79+0MsFuPcuXOcbSfaNvSz1lxqq4BPjDccx2CWFAAip6bzPSI2Nhbnz5/HDz/8AB8fH6xYscKoC0MsXboU69atQ2hoKJYuXYrJkyfj9u3bsLW1RXZ2Nl544QX861//ws6dO1FaWoqYmBjExMTg66+/BlC35NhHH32Erl27oqSkBLGxsZg2bRp+/PFHressWrQI69atQ6dOnah5SzSAhKwNI5VK8c0332DPnj3sHPH184AZi/nz52Ps2LEA6uYO69GjB27fvo1u3bohPj4er732Guv9hYaG4vPPP8fw4cOxdetW2NvbY8aMGey5OnXqhM8//xwDBw5EZWUlnJ2d2WOrV6/GqFGjjGY30bYgIWsudo513pElrmsgd+7cQW1trdZCE25ubkZdGEJz4Y/61d5LSkrQrVs3XLt2DX/88YfWmpUMw0CtViMnJwdhYWFITU3FqlWrcO3aNTx8+JCd2z4vL09rAkVDZ2Al+AkJWXMRCDg18UxkhIWvr3vhj3oxqqysxNtvv4333nuvQbmgoCDIZDJER0cjOjoau3fvhpeXF/Ly8hAdHd1gcYsnF8UgCE1IyNownTp1gp2dHS5duoSgoCAAgEQiwa1btzBs2DCTX//pp5/GzZs39c44kZ6ejrKyMqxZs4Zd1OTy5csmt4toe9BbyzaMi4sLpk6dig8//BCnT59mF7iwsbFpctEJY7Bw4UKkpKQgJiYGaWlp+PPPP3H06FHExMQAqPPKRCIRvvjiC9y5cwc//PADPvroI5PbRbQ9SMjaOBs2bEBERARefPFFREVFYciQIQgLCzPL2gO9e/dGcnIybt26hWeeeQb9+vXDihUr2JcNXl5eSExMxIEDB9C9e3esWbMG69atM7ldRNuDFh8xgNa6+IhKrcaNgrrFR7r5ukBk2/Qq5DKZDAEBAVi/fj1mzpxpahMJQie0+AjBiatXryIzMxPh4eGQSCRYvXo1AGD8+PEWtowgjAcJGQ9Yt24dsrKyIBKJ0L9/f/z666/IyMjA6NGj9ZaprKw0o4UE0TIsKmTx8fE4dOgQMjMz4eDggMjISHz66adN9nM6cOAAli9fjtzcXISGhuLTTz/FmDFjzGS1ddGvXz+kpqY2SK+urm50IQ6CsCYsKmTJycmYM2cOBg4cCKVSiSVLluD555/HzZs39fYbSklJweTJkxEfH48XX3wRe/bswYQJE3DlyhX07NnTzHdgvTg4OLTJhTgIftKqgv2lpaXw9vZGcnKy3n5OkyZNgkwmw7Fjx9i0wYMHo2/fvti2bVuT12hJsD84OBgODg6G3YwZaE6wnyBaA9XV1cjNzTVasL9Vdb+QSCQAAE9PT715Lly4gKioKK206OjoBrMuGJP63utVVVUmuwZB8In6uqQ5MqQltJpgv1qtxty5czFkyJBGm4hFRUXw8fHRSvPx8UFRUZHO/HK5HHK5nN2vqKjgbJtQKIS7uzs7vYyjo6NZOpQ2hUqtBqOsG8pTU1MDNXlkRCuHYRhUVVWhpKQE7u7uEAqN851tNUI2Z84cXL9+3ehzTcXHxyMuLq7F56mfVFBzrixLo2YYlJTXAABsZGLY2rQqB5sg9OLu7m7UiTpbhZDFxMTg2LFjOHv2LDp06NBoXl9fXxQXF2ulFRcX630oixcvRmxsLLtfUVHBjuvjgkAggJ+fH7y9vVFbW8u5vCmQyWvx1uHzAIDvZg6Cn3vrid8RhD7s7OyM5onVY1EhYxgG7777Lg4fPowzZ84gJCSkyTIRERFISkrSmuH05MmTiIiI0JlfLBZDLBYby2QIhUKjfwjNpRZC3JOqAABCO3GrGnVAEObEokI2Z84c7NmzB0ePHoWLiwsb53Jzc2PfDk6ZMgUBAQGIj48HALz//vsYPnw41q9fj7Fjx2Lv3r24fPkytm/fbrH7IAjCslg0qLJ161ZIJBKMGDECfn5+7LZv3z42T15eHgoLC9n9yMhI7NmzB9u3b0efPn1w8OBBHDlyhPqQEQSPsXjTsinOnDnTIO0f//gH/vGPf5jAIuuFMcXClgRhJdBrLoIgrB4SMoIgrB4SsjZC6xloRhDmh4TMiiHtIog6SMjaCCRqBJ8hISMIwuohISMIwuppUT+yyspKdjHWegydP4gwLq1oWjmCMDucPbKcnByMHTsWTk5OcHNzg4eHBzw8PODu7g4PDw9T2EgQBNEonD2yf/7zn2AYBjt37oSPj0+rmJeLAH0OBK/hLGTXrl1DampqkwuEEOaFmpYEn+HctBw4cCDy8/NNYQtBEESz4OyR7dixA7NmzcK9e/fQs2fPBnNu9+7d22jGEYZD/hjBZzgLWWlpKbKzszF9+nQ2TSAQgGEYCAQCqFQqoxpIEATRFJyFbMaMGejXrx++//57CvYTBNEq4Cxkd+/exQ8//ECLu7YyKNZP8BnOwf5nn30W165dM4UtBEEQzYKzR/bSSy9h3rx5SE9PR69evRoE+8eNG2c04/hOrUqNKoUKbg7GWcSUINoqnIVs1qxZAIDVq1c3OEbBfuMSvfEs7tyX4fclz8HbtakVkqhtSfAXzk1LtVqtdyMRMy537ssAAGdulVrYEoJo3XASstraWtja2uL69eumsofgAAX4CaIOTkJmZ2eHoKAg8rzMjCEdXEjUCD7DuWm5dOlSLFmyBA8ePDCFPQRBEJzhHOzfvHkzbt++DX9/f3Ts2BFOTk5ax69cuWI044g6DOl0TA4ZwWc4C9mECRNMYAbRGDR2giAah7OQrVy50hR2EARBNJtmT3WdmpqKjIwMAECPHj3Qr18/oxlFaGPIcFYK9hN8hrOQlZSU4JVXXsGZM2fg7u4OACgvL8fIkSOxd+9eeHl5GdtG3kPj8gmicTi/tXz33XchlUpx48YNPHjwAA8ePMD169dRUVGB9957zxQ2EgZAYkfwGc4e2YkTJ3Dq1CmEhYWxad27d8eWLVvw/PPPG9U4og6BAeF+aloSfKZZQ5SeHCgO1HWWfXJpOIIgCHPQrGl83n//fRQUFLBp9+7dw7x58/Dcc89xOtfZs2fx0ksvwd/fHwKBAEeOHGk0/5kzZyAQCBpsRUVFXG/DqjAo2E89yQgew1nINm/ejIqKCgQHB6Nz587o3LkzQkJCUFFRgS+++ILTuWQyGfr06YMtW7ZwKpeVlYXCwkJ28/b25lSeIIi2BecYWWBgIK5cuYJTp04hMzMTABAWFoaoqCjOFx89ejRGjx7NuZy3tzf7xpQgCKJZ/cgEAgFGjRqFUaNGGdseg+jbty/kcjl69uyJVatWYciQIRaxw1wYNESJWpYoq5Qjq0iKiM7taC0JntEsIUtKSkJSUhJKSkoaBPh37txpFMN04efnh23btmHAgAGQy+XYsWMHRowYgYsXL+Lpp5/WWUYul0Mul7P7FRUVJrOPsCzPrk+GpLoWm1/thxd7+1vaHMKMcBayuLg4rF69GgMGDICfn59Zf/m6du2qtcJ5ZGQksrOzsXHjRnz77bc6y8THxyMuLs5cJpoE8i0MQ1JdCwBIyighIeMZnIVs27ZtSExMxOuvv24KezgTHh6Oc+fO6T2+ePFixMbGsvsVFRUIDAw0h2lGg4YocYNalfyDs5ApFApERkaawpZmkZaWBj8/P73HxWIxxGKxGS0yIyReOrEhJeMdnIXsjTfewJ49e7B8+fIWX7yyshK3b99m93NycpCWlgZPT08EBQVh8eLFuHfvHnbt2gUASEhIQEhICHr06IGamhrs2LEDv/zyC/73v/+12JbWjEE9+0nVWEjG+AdnIaupqcH27dtx6tQp9O7du0Ev/w0bNhh8rsuXL2PkyJHsfn0TcOrUqUhMTERhYSHy8vLY4wqFAh988AHu3bsHR0dH9O7dG6dOndI6R1uEHAxu0PPiH5yF7I8//kDfvn0BoMEiJFwD/yNGjADTSHAnMTFRa3/BggVYsGABp2sQ/MMQD5ZoW3AWstOnT5vCDqIRaPERbthwHq9CWDv0kRNtEPLI+AYJmRVAMR9u0PPiHyRkVgHVTC7Q0+IfJGREm4P6kfEPzkJ29uxZKJXKBulKpRJnz541ilGENlQvuWFDz4t3cBaykSNH6lxlXCKRtPn+XJaC6iU3aOYL/sFZyBiG0flFKSsra7DqOEEQhDkwuB/Zyy+/DKDu127atGla4xdVKhX++OOPVjUGsy1B85Fxgxwy/mGwkLm5uQGo88hcXFzg4ODAHhOJRBg8eDDefPNN41tIEByhnv38w2Ah+/rrrwEAwcHBmD9/PjUjzQhVS25QsJ9/cB6itHLlSlPYQTQCraLEDWpa8g/Owf7i4mK8/vrr8Pf3h62tLYRCodZGEJaG+pHxD84e2bRp05CXl4fly5ebfaprQhtNL4yC/RrQV5J3cBayc+fO4ddff2Wn8iGI1gYF+/kH56ZlYGBgo3OIEcaHnF5uULCff3AWsoSEBCxatAi5ubkmMIfQhWFTXRP1kPDzD85Ny0mTJqGqqgqdO3eGo6Njg6mudQ1fIghzQk1L/sFZyBISEkxgBtEoVC85QR4Z/+AsZFOnTjWFHUQjGDbVNTUu6yEd4x/Nmo8sOzsby5Ytw+TJk1FSUgIA+Omnn3Djxg2jGsdnSJiaD3UJ4h+chSw5ORm9evXCxYsXcejQIVRWVgIArl27Rr3+TQRVTG5Qh1j+wVnIFi1ahH/96184efIkRCIRm/7ss8/it99+M6pxfIarQ8Z3/03TgyUd4x+chSw9PR1/+9vfGqR7e3vj/v37RjGK0IbqZdOoNZScnhf/4Cxk7u7uKCwsbJB+9epVBAQEGMUoQtvDIg+jadTkkfEazkL2yiuvYOHChSgqKoJAIIBarcb58+cxf/58TJkyxRQ28hIK9nNDW8hIyfgGZyH75JNP0K1bNwQGBqKyshLdu3fHsGHDEBkZiWXLlpnCRt5DHTybRlP3Scf4B+d+ZCKRCF999RWWL1+O69evo7KyEv369UNoaKgp7OMtXJuWfHfgVBpBMhJ+/sFZyOoJCgpCUFCQMW0hiGaj2bSkQeP8wyAhi42NxUcffQQnJyfExsY2mnfDhg1GMYzvMPQWjhNqalryGoOE7OrVq6itrWX/1wcFWY0H96mr+d221OpHRtLPOwwSstOnT+v8v6WcPXsWa9euRWpqKgoLC3H48GFMmDCh0TJnzpxBbGwsbty4gcDAQCxbtgzTpk0zmk2tEj31ku9xMU3II+M3zRpraSxkMhn69OmDLVu2GJQ/JycHY8eOxciRI5GWloa5c+fijTfewM8//2xiS82PdtOSX+tayuRK/OdcDvIfVBlcRt2WHgDBGYM8svrFeQ3h0KFDBucdPXo0Ro8ebXD+bdu2ISQkBOvXrwcAhIWF4dy5c9i4cSOio6MNPg/Ruon/KQPf/ZaHhJO3kB5n2OdKQsZvDPLI3Nzc2M3V1RVJSUm4fPkyezw1NRVJSUnsIr6m4sKFC4iKitJKi46OxoULF/SWkcvlqKio0NqsDb41lVJulwEApHKlwWU0dYw0jX8Y5JHVL84LAAsXLsTEiROxbds2dvk3lUqF2bNnw9XV1TRWPqKoqAg+Pj5aaT4+PqioqEB1dbXW6uf1xMfHIy4uzqR2mQIaNM4NzX5ktMYn/+AcI9u5cyfmz5+vtYalUChEbGwsdu7caVTjjMHixYshkUjYLT8/39ImcYZnDlmzbpialvyGc4dYpVKJzMxMdO3aVSs9MzMTarXaaIbpwtfXF8XFxVppxcXFcHV11emNAYBYLIZYLDapXaZA06ugbi1NQ01LfsNZyKZPn46ZM2ciOzsb4eHhAICLFy9izZo1mD59utEN1CQiIgI//vijVtrJkycRERFh0utaAs5NS55XXk2PjOePgpdwFrJ169bB19cX69evZ6fz8fPzw4cffogPPviA07kqKytx+/Ztdj8nJwdpaWnw9PREUFAQFi9ejHv37mHXrl0AgFmzZmHz5s1YsGABZsyYgV9++QX79+/H8ePHud6GVUEOWdOoySPjNZyFzMbGBgsWLMCCBQvYN4DNDfJfvnwZI0eOZPfrhz9NnToViYmJKCwsRF5eHns8JCQEx48fx7x587Bp0yZ06NABO3bsaJNdL7QGjRuSvw3V3ubotrZH1naeBWEYzR40DjRfwOoZMWJEoxUwMTFRZ5nGhkkR1k3c/91AdqmMc7m2JOQEd5olZAcPHsT+/fuRl5cHhUKhdezKlStGMYzv8HUO+q/P5zarHDUt+Q3n7heff/45pk+fDh8fH1y9ehXh4eFo164d7ty5w6mXPtE4VBe5odmPjOAfnIXsyy+/xPbt2/HFF19AJBJhwYIFOHnyJN577z1IJBJT2EjwrycZZ7RiZOSS8Q7OQpaXl4fIyEgAgIODA6RSKQDg9ddfx/fff29c63gMTd3MDepHxm84C5mvry8ePHgAoG6W2Pq1LHNycuiX0ILw/clTz35+w1nInn32Wfzwww8A6jrHzps3D6NGjcKkSZN0rndJNBOaIZYTWsF+y5lBWAjOby23b9/ODkWaM2cO2rVrh5SUFIwbNw5vv/220Q3kK4b0hdLMwXeHRDtGZkFDCIvASciUSiU++eQTzJgxAx06dABQt87lK6+8YhLjCMJQGOoQy2s4NS1tbW3x2WefQak0fJ4oonloB/upcdkU1I+M33COkT333HNITk42hS1EC+C7F0L9yPgN5xjZ6NGjsWjRIqSnp6N///5wcnLSOj5u3DijGcdnuI615Ds0+wW/4Sxks2fPBqB7/UqBQACVStVyqwheDlFqSfcdht588BrOQmbqyROJZtIG6m5L9Ic8Mn5j0eXgCP1oNy354ZK1RIAo2M9vDPbIqqurkZSUhBdffBFA3Vz4crmcPS4UCvHRRx/B3t7e+FbyEFp8hBvUs5/fGCxk33zzDY4fP84K2ebNm9GjRw92rvzMzEz4+/tj3rx5prGUaPO0LEZG/cj4jMFNy927d+Ott97SStuzZw9Onz6N06dPY+3atdi/f7/RDeQrfKyMLbljlUbolpwz/mGwkN2+fRu9evVi9+3t7WFj87h4eHg4bt68aVzrCINpC5WXgv1EczG4aVleXq4VEystLdU6rlartY4TLYRqIycYGmvJawz2yDp06IDr16/rPf7HH3+w4y+JlsPHutiS5jR17Oc3BgvZmDFjsGLFCtTU1DQ4Vl1djbi4OIwdO9aoxhH8wnhNS1I1vmFw03LJkiXYv38/unbtipiYGDz11FMAgKysLGzevBlKpRJLliwxmaF8g5pH3NDyyOjZ8Q6DhczHxwcpKSl45513sGjRIjYmIRAIMGrUKHz55Zfw8fExmaFE4/DdC2Eo2M9rOA1RCgkJwYkTJ/DgwQN2hfAuXbrA09PTJMbxGT4Kk9GaluTO8o5mrWvp6emJ8PBwY9tCaGBIXWxrFbYl4q2iIcC8hsZathHamKZxhqa65jckZK0UPtbFlggQxcj4DQkZ0Wqg2S+I5kJC1krhGv9qC3W3JTE/6kfGb0jIzIRSpcaJ60UoqzRsGBd5Fdygnv38hoTMTOw8n4NZ36XipS/OmfW61+9JMGfPFeTel5n1us2hJVpEYy35TasQsi1btiA4OBj29vYYNGgQfv/9d715ExMTIRAItDZrmMzxfzeKAQAFkoZDvAwhu7QSh678BbUe10Nfs+zFL87h+B+FeGPX5WZd15y0qB8ZuWS8pln9yIzJvn37EBsbi23btmHQoEFISEhAdHQ0srKy4O3trbOMq6srsrKy2H1rWPfRVsjNxicr9XPr65bgsxEIMKFfAOfr3ymt5FzG7LRAi1RawX4SNb5hcY9sw4YNePPNNzF9+nR0794d27Ztg6OjI3bu3Km3jEAggK+vL7tZw9AoO6FxHvXVvIc60/ledan7Bb+xqJApFAqkpqYiKiqKTbOxsUFUVBQuXLigt1xlZSU6duyIwMBAjB8/Hjdu3NCbVy6Xo6KiQmuzBLY2HD0yHlbHlk3jw7/nRTzGokJ2//59qFSqBh6Vj48PioqKdJbp2rUrdu7ciaNHj+K7776DWq1GZGQk/vrrL5354+Pj4ebmxm6BgYFGvw9DsDWSR9aWq2vLxloa5zyEdWLxpiVXIiIiMGXKFPTt2xfDhw/HoUOH4OXlhX//+9868y9evBgSiYTd8vPzzWxxHXYtjJE1XYBj/lZIyzrEUj8yPmPRYH/79u0hFApRXFyslV5cXAxfX1+DzmFnZ4d+/fqxs3E8iVgshlgsbrGtLUVow+03w9hV0RpeiLQEhjwyXmNRj0wkEqF///5ISkpi09RqNZKSkhAREWHQOVQqFdLT0+Hn52cqM40C1xgZH2lRz341Bfv5jMW7X8TGxmLq1KkYMGAAwsPDkZCQAJlMhunTpwMApkyZgoCAAMTHxwMAVq9ejcGDB6NLly4oLy/H2rVrcffuXbzxxhuWvI0m4Rzs56FbYayxlgT/sLiQTZo0CaWlpVixYgWKiorQt29fnDhxgn0BkJeXp7Xs3MOHD/Hmm2+iqKgIHh4e6N+/P1JSUtC9e3dL3YJBGC3YTxVWJyrq2c9rLC5kABATE4OYmBidx86cOaO1v3HjRmzcuNEMVhkXzsF+rf/19OY3II81YaxpfKhxyT+s7q2ltSLk3LQ07vWtIUJnrH5k5JHxDxIyM2Gsnv1tGupHRjQTql1mgvtbS47zkTFArUqNaoWK43XaBtSPjN+QkJkJzWC/qgWv2BqrpMM/O42wFSesVsxaNo2P0cwgrBASMjOh6ZHVGrDkT3MqZv0UQTcLLTOetKUYaxofEjX+QUJmJjSn8TFIyDieX7Py6urEbw0d+1sW7Nc8D8E3SMjMhJ1GXzilyrRVzQo0y+jQW0t+Q0JmJjQ9IlM0LTWzW+u4Sl33XFBebVBZCvbzGxIyC1BrQLBfbydYPUU1K7J1ypjuJmHc/+mfa04Tmo+M35CQmQnNeqY0wCNryfmt1CHTOb5UJjfsDazWbwNpGu8gITMTmh5WS5qW+kRK2yNrmElXmjVgqCjTVNf8hoTMTGgKU20Lgv0GNS2tU7Na2P1C8zwkZXyDhMwCmCLY31TYra0HwNXkkfEaEjIzoVm5DPHIDJnxQiu9DXhkLYHmI+M3JGRmQrtpafxgf1MxMmugZYuPUD8yPkNCZgEM6RCrN9ivJ7+mNurs2W8F4qbLCzW0Txw1LfkNCZmZ0HprqW6+R6avkvI+2E8rjfMaEjIzodW0VBqnaalvUlRr8L6MDXlk/IaEzAIoDenZz7E2qtqCR6Yj7clbUet5duSF8RsSMgtg+mC/daJLjDRFuaxSjgEfn8KKo9cb5NNqrZOm8Y5WsfgIH9CspC3pfqGPJp08K1C3pm7hmwt38UCmwK4Ld7F6fE+tYzRovJWgUgJVZUBlMVBZ8uhvMSArrfv77HLAM8TolyUhMyEZhRVwdbBDgLuD0bpf6GtBPTlEh2EYzrNglEhroFQx8Hd3aLZ9xsbQO6A5+00IwwDVDx+LUmWpxv8lgKzksWjJ7qPRn6Snp5CQWROFkmqM3vQrACB3zVitj9aQQeOce/Zr1OQqhQpRG5IxqFM7TucI/7huxff0Vc/Dxd6OmwFGoMl7biQD9SPjCMMAculjT4n1oEq0vSlZad3/6lrDzy2wAZy8ACdvwNkbcPZ59Ncb8DC+iAEkZCYjq0iq91hNLbcZYo//Udhkfs3W6k/phcgulSG7VNZkOV0USmqaLWS3SyoR/2MG3n0uFH0D3TmWNs5ycLymtvqxIMmeEKUnhUpp2FxvLA4ej0XJSVOgfABnr0d/fQDHdoCN0DT3pwcSMhMhfGKOfs169vGPGahVqzF7RBeDzvXvs3eazGOq2R/yyqpw94EMz4R6GZR/5jeXcLesCkmZJchdM5bTtXRpkeEdYjXO09ZiZKrauiablqekw3uqLAXkEm7nFrloiNAjUWrgSfnUeVi2ItPcnxEgITMRQo0KWKVQNahcn53IalTIbjXi0emiyTn7m3muYWtPAwAOzY7E00EeTZa9W1bV6PGsIimSMosxY0gI7O24/Wo3Jk+MtTUt1Wqg+oEOT0kjMF6fVlXG7dxCsXZzTlOUnJ5o6omcTHN/ZoaEzERoeghcl2erlCux4L9/6Dmqu5Zq9iMTmqAjWfpfEoOErCmiE84CAKrkKsyP7qp1rCX6o6tD7PwD13CjoAJH5wyByNa4PY3KqxT44VoBJvQLgGt9M5xhAHmFtihVPiFKmnEnhsP3QiCs84pYUfJp6EnVe072btbbmbCZkJCZCIXq8Ze0SqE02Es4nVmC6YmXOF9PsyLbtPBLrKtpZsN5geHGuZL3sOF1dTUtDTyf9nxkdX8Ppv4FAPjtThmGPWVY07ie5Ful6OjpiOD2ToCi6glPqRiXfk+HsDAf2b9Wo6+HAoJ6oVLJOV0Hju0eC9CToqQZd3LwBGyo26c+SMj0UVEIHP/g8ZdJ89ew/ksndtZbXK4R0K9rWmrj4ag7mL762M1mmaspAkbWHADG9/IMGd0A1DkW0ppauNjbNfpj8GSwX/MtrliXN6ZUaDfhNALjsrIC2P95G2qUQy2uhE1tZYPio4C62lP1aNNE7Ko7xsQK1KNmnZMXINT+HkhrapGWX47Uuw9x71Y1XurjjWE+7Rt9Rq0RpUoNmVwFqbwWlXIlZHIlpDVK9Av0gJue735LICHTR8U9IOt443nsHHUIXN2X1LPEFv0FD1AKd8irKhq4G0HtGsYmSqVy5Nxv/E1jQXmNznTNimvIywGuCI3sDOjqgqLLEzyVUYLecf/DzmkDGz2fmmFgAzU8IUUHRSUUtx7iZZuz8BJI0OnKaeBquXYTr7qhR1iPE4BB9fdb3+vA1p4Vob9qXXDmngD34Y4Sxh1ycTvEvfosnNv5133+dob1w2MYBnfvy5B69yFS8x7iyt2HyCqWan1VDqT+heFPeWHJmDB09XUx6LzNRa1mIFMoIZOrUCmvhbTmyf+VqJQrIX0kTJU1dfvsVqNE5aP8+t7M7387AuEhnka3nYRMH24dgLEbnvjVLn0c96iVAbVVQPnduu0JBgH4r/jRzm6gt409/i5yxX244T7jBkmpB3D6rIbH5403Em/BAY6ohr1es6oUSp3pmg6OXMegdC4OlS7PR6FiIFeqILbVDtArlGpcyn2A/h09GgTvS6VytHcW6XzzqMsj0+1xMXBhZPhX4hF4C8rxko0EXgIJmP/9DoHs8Ru87SV/wVVcDqGAAe4B2AtsqH/J1nBEUx02tjr7Op0ttMHem3KUMu64DzeM7N8TK/4+iH2Ic7em4LLyIeZFPYWL1+4hu1QG2zQnfPr/Ouq5UB01tSqk35PUCdfdOuEqkyka5AvydGSf58HUfCTfKsWvf5Zi0sBAzBv1FLxdHn8/GIZBTa0aUnltnejUKB//L6/VEhet/+WP/q+p95hUqJTr/m61BJGtDVzEtnC2t4WTyFbrbb4xaRVCtmXLFqxduxZFRUXo06cPvvjiC4SHh+vNf+DAASxfvhy5ubkIDQ3Fp59+ijFjxhjXKBdfYOBMdlepUkNao0RFTd2vU6W0HApJMVQVxVBLS+BnK0GYcw0EVXWB3JLCfFQ/LISXQAJHgRx26hp0tKlBR5Q8vkbySa1LHgUAe0DGiHGfcUMp3HGfccN9xpWtVC7V/qi4xSCr0h4dg4PZsioDg3AMw2Dq15cgEtrg88l9cTStAFFhPvByETdabvmR6/jsRCb+WPm8ljB98mMGElNyMaaXL758rb9WmYEfn8LMoSFY/mJ3nL99Hyt/eLy0m1BZBTy4A1SW4Oaff0J6/x462cvwiW06vAQSeAnK4SWQoD0kEAt0VLAU7V0PABAAakYAqdANDh7++K1EiFK4IbxnGAIDg594g+cD2LvrjDvt/vYyflYX45nQ9si9fR87L5ehV+d7+Fu/DrhTWonLdx9CaCPA5PBARHZph39su4B9l/Mxvp8/Ijs/bgYWV9SwopV69yFuFEgaDE8TCW3Qq4Mb+nf0wNNBHni6o7uWUL09rBM+PZGJn64X4fvf83E0rQCBHo51nlFNLWQKFVRGnh7X1kbACo+LvS2cxbZweiRGLvX/i+uO1f/v/Cif5uYktjX6Sxa9NpvlKo2wb98+xMbGYtu2bRg0aBASEhIQHR2NrKwseHt7N8ifkpKCyZMnIz4+Hi+++CL27NmDCRMm4MqVK+jZs6eOKzSPGwUSvL83DRXVdcJVXavvDZMNAF8AvugV4IalY8MwuFM7fH/qT2w8dQsA4IgahDpVw7aqBO0FkkcVVYIOdpUIsJOis4OMFT0HgQJOAjmcBCXaolePBMAeoL6hdV1sj/uMGyp/80CYncsj4asXQVfcZ9xQAnfcr3VD8KLjmNDXH2dvlQIAFv43Hf93rQA7vXNwMnY4ewl9miitUUJSXYsfrhUg5XYZNk3ui8SUXADAj+lF+PlaHvxxH16CcvY+HS+U41h6NYRVJYgXSOAlqhMpp3I58HndebtrXONVPd9ICeOIUsa9bnvk1bb3DcT5IiHKBO4oVLqihHHDA7hi6FO+WDymG6Yk1I2seNu1ExZHhun5/OooKK/GlbyHyC6R4ecbxQCAOSO74OkgD2xK+hNLDl1HD383HL56DwAw/CkveLvaw9vVHv8cHITvfsvDkkPpmD4khBWuezoWF27vLMaAjh51wtXRAz0DXBt4uZoEt3fC1n/2x+XcB/jX8Qyk5Zcjq7hh1xyBAHAWPRYUJ/ETIvSE8Lg8EiotAXr0v9jWxuoWeRYwFp7/ZNCgQRg4cCA2b94MAFCr1QgMDMS7776LRYsWNcg/adIkyGQyHDt2jE0bPHgw+vbti23btjV5vYqKCri5uUEikcDV1VVvvpsFFRjz+a8N0h1FQrjY28LF3o796yQS4tc/77Ou+ajuPjh5s7hJWxrCwAk1aP/IE/ESSB4LH+rEob1AAi/U/XUQNGyWNEYlY49Sxo1t3pYyjzw+uCGgQ0ecymNQCjd89c4YhAX5AAA6L/oBnpCyHpKXoJy9fphLNQSVJaxwuQu4jSSoYsQoeeRplj6yp96++v9LGXeUwRVytKwzprujHWJGdkGvADfIFHXNqmJJDa7mP8SVu+UoqmgYe7weFw0HOyGmff07fv3zPjp7OUFao0SJVI6trz2N0b38AAAVNbV4fsPZBuewEQDdfF3R/5Fw9e/ogQ4eDs0WCYZhkHr3IRRKNesh1YuQo0hodeKjD0PrqCYWFTKFQgFHR0ccPHgQEyZMYNOnTp2K8vJyHD16tEGZoKAgxMbGYu7cuWzaypUrceTIEVy7dq1BfrlcDrn88SvxiooKBAYGNvmQqhRKXMuXwMXeFq6PRMvZ3hZ2eqLepVI5NiXdwve/5+t19cf08sUHz3fFc+uT9V7XcOpEz0tQjvaQoL2g4rEnpCGCdYJYDnsBh7FyAGRwQDVjB09IYSMw/CuiYIQoxWMRqvMO3Vhv6j7j+ui4O6oaiQU2l54Brrh+r4JzOaGNAGF+LujYzgkXssvwTGh7bHqlH4C66YPGfn6OFSpPJxF+W/ycVrPp/O37WHbkOhvf6t/RA30C3eEstnijx+pojpBZ9Cnfv38fKpUKPj4+Wuk+Pj7IzMzUWaaoqEhn/qKiIp354+PjERcXx9k2R5EtIjobPujay0WMf03ohWmRwVjzUyZOZdQ1CyM7t0NKdhn6Brpj8+SnYWMjQO6asTh89S/M29dQeA1HABkcIGMckAu/JnqTMnBGtZY31/6Rd1UndI9FsD0ksBfUwgnVcBLUNY1UjABlrBfnxgpVvVdXCjeUPPKgKuAEY84Z5OMqRty4HrhbVoXBndrhmwu56BXghsGd2uHPkkpE9/DBV2fvICmzBEvGhCHQwxGD45PY8tOHBOP/9e+AN765DDXDwElc16RyEgvh7iBCrw5ueDrIA30C3eAo0l0d2jmLsWPqACQ8ChVMHBDYIPYzpEt7nJ4/wmj3TXDDoh5ZQUEBAgICkJKSgoiICDZ9wYIFSE5OxsWLFxuUEYlE+OabbzB58mQ27csvv0RcXByKixs255rrkbUUpUoN2yb6LNSq1LC1EUAgELDT7jAMA4VKrRU3UasZ2NgIoFSpYSMQwMZGgIqaWqjVDKoUKvi7O0CuVKGmVg1HkRDSGiUeyOTo4OGIP4sr4epgCzcHOziIhCiWyFEmk+NGQQVy78vQJ9AdHo4iVNTUIrdMhk7tHOEjVkBYfR811VVILxdBLvIAIxDCTiiAp5MYvq72qFWrkVkoRRdvZ4R6O6O9ixi/ZJZAJLTBs928IRAAKjUDsa0NymQKOIlskZZfDrlShX6BHqhUKCGpqkUXb2fklsnQxcvZaJ1ulSo1+yyb+gyI1ofVeWTt27eHUChsIEDFxcXw9fXVWcbX15dTfrFYDLG48TdypsCQCqTZTK2PbwgEggbB3/oKrnnO+mEx7o51+2JbIVvO00kET6e6mFKvDm5a5wpq54igdo7o1+Rwo2AAgP53x8DIrtovY8b18dfar++N0d657vlrerhujnXztAHAUz7G7R/1+Dm1jZgR0TQW/bkSiUTo378/kpIeNwXUajWSkpK0PDRNIiIitPIDwMmTJ/XmJwii7WPxSGRsbCymTp2KAQMGIDw8HAkJCZDJZJg+fToAYMqUKQgICEB8fDwA4P3338fw4cOxfv16jB07Fnv37sXly5exfft2S94GQRAWxOJCNmnSJJSWlmLFihUoKipC3759ceLECTagn5eXBxuNTouRkZHYs2cPli1bhiVLliA0NBRHjhwxah8ygiCsC4v3IzM3zQkkEgRhPppTR+mVDkEQVg8JGUEQVg8JGUEQVo/Fg/3mpj4kWFHBfRgLQRCmp75ucgnf807IpNK6mQMCAwMtbAlBEI0hlUrh5ubWdEbw8K2lWq1GQUEBXFxc2sxsAaagfihXfn4+vd1tAnpW3GjqeTEMA6lUCn9/f62uV43BO4/MxsYGHTp0sLQZVoOrqytVTgOhZ8WNxp6XoZ5YPRTsJwjC6iEhIwjC6iEhI3QiFouxcuVKi8wcYm3Qs+KGKZ4X74L9BEG0PcgjIwjC6iEhIwjC6iEhIwjC6iEhIwjC6iEh4zFbtmxBcHAw7O3tMWjQIPz++++N5j9w4AC6desGe3t79OrVCz/++KOZLLU8XJ7VV199hWeeeQYeHh7w8PBAVFRUk8+2rcH1u1XP3r17IRAItJaHNAiG4CV79+5lRCIRs3PnTubGjRvMm2++ybi7uzPFxcU6858/f54RCoXMZ599xty8eZNZtmwZY2dnx6Snp5vZcvPD9Vm9+uqrzJYtW5irV68yGRkZzLRp0xg3Nzfmr7/+MrPlloHr86onJyeHCQgIYJ555hlm/PjxnK5JQsZTwsPDmTlz5rD7KpWK8ff3Z+Lj43XmnzhxIjN27FittEGDBjFvv/22Se1sDXB9Vk+iVCoZFxcX5ptvvjGVia2K5jwvpVLJREZGMjt27GCmTp3KWcioaclDFAoFUlNTERUVxabZ2NggKioKFy5c0FnmwoULWvkBIDo6Wm/+tkJzntWTVFVVoba2Fp6enqYys9XQ3Oe1evVqeHt7Y+bMmc26Lu8GjRPmWeG9rdCcZ/UkCxcuhL+/f4MfgrZIc57XuXPn8J///AdpaWnNvi4JGUGYkDVr1mDv3r04c+YM7O3tLW1Oq0MqleL111/HV199hfbt2zf7PCRkPMQcK7y3FZrzrOpZt24d1qxZg1OnTqF3796mNLPVwPV5ZWdnIzc3Fy+99BKbplarAQC2trbIyspC586dm7wuxch4CK3wbjjNeVYA8Nlnn+Gjjz7CiRMnMGDAAHOY2irg+ry6deuG9PR0pKWlsdu4ceMwcuRIpKWlGT6Tc3PfTBDWzd69exmxWMwkJiYyN2/eZN566y3G3d2dKSoqYhiGYV5//XVm0aJFbP7z588ztra2zLp165iMjAxm5cqVvOp+weVZrVmzhhGJRMzBgweZwsJCdpNKpZa6BbPC9Xk9SXPeWpKQ8ZgvvviCCQoKYkQiERMeHs789ttv7LHhw4czU6dO1cq/f/9+5qmnnmJEIhHTo0cP5vjx42a22HJweVYdO3ZkADTYVq5caX7DLQTX75YmzREymsaHIAirh2JkBEFYPSRkBEFYPSRkBEFYPSRkBEFYPSRkBEFYPSRkBEFYPSRkBEFYPSRkBEFYPSRkRKtg2rRpEAgEDbYXXnjB0qYRVgDNfkG0Gl544QV8/fXXWmn6VqOura2FnZ2dVppCoYBIJOJ83eaWI1oP5JERrQaxWAxfX1+tzcPDAwAgEAiwdetWjBs3Dk5OTvj444+xatUq9O3bFzt27EBISAg731deXh7Gjx8PZ2dnuLq6YuLEiVrTyugrR1gvJGSE1bBq1Sr87W9/Q3p6OmbMmAEAuH37Nv773//i0KFDSEtLg1qtxvjx4/HgwQMkJyfj5MmTuHPnDiZNmqR1rifLEdYNNS2JVsOxY8fg7OyslbZkyRIsWbIEAPDqq69i+vTpWscVCgV27doFLy8vAHVzpKWnpyMnJ4edy2rXrl3o0aMHLl26hIEDB+osR1g3JGREq2HkyJHYunWrVprmgh26Jijs2LGjlhhlZGQgMDBQa0K+7t27w93dHRkZGayQPVmOsG5IyIhWg5OTE7p06dLocUPSDL0W0XagGBnRpggLC0N+fj7y8/PZtJs3b6K8vBzdu3e3oGWEKSGPjGg1yOXyBsvL2draclpdJyoqCr169cJrr72GhIQEKJVKzJ49G8OHD+fV3Pl8gzwyotVw4sQJ+Pn5aW1Dhw7ldA6BQICjR4/Cw8MDw4YNQ1RUFDp16oR9+/aZyGqiNUBTXRMEYfWQR0YQhNVDQkYQhNVDQkYQhNVDQkYQhNVDQkYQhNVDQkYQhNVDQkYQhNVDQkYQhNVDQkYQhNVDQkYQhNVDQkYQhNVDQkYQhNXz/wFhNblZ8YS4XAAAAABJRU5ErkJggg==", + "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.018188, + "end_time": "2024-03-22T20:56:27.928530", + "exception": false, + "start_time": "2024-03-22T20:56:27.910342", + "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": 4614.695564, + "end_time": "2024-03-22T20:56:30.671491", + "environment_variables": {}, + "exception": null, + "input_path": "eval/contraceptive/tab_ddpm_concat/4/mlu-eval.ipynb", + "output_path": "eval/contraceptive/tab_ddpm_concat/4/mlu-eval.ipynb", + "parameters": { + "allow_same_prediction": true, + "dataset": "contraceptive", + "dataset_name": "contraceptive", + "debug": false, + "folder": "eval", + "gp": true, + "gp_multiply": true, + "log_wandb": false, + "param_index": 0, + "path": "eval/contraceptive/tab_ddpm_concat/4", + "path_prefix": "../../../../", + "random_seed": 4, + "single_model": "tab_ddpm_concat" + }, + "start_time": "2024-03-22T19:39:35.975927", + "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