{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "982e76f5", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T11:11:21.204576Z", "iopub.status.busy": "2024-03-26T11:11:21.203640Z", "iopub.status.idle": "2024-03-26T11:11:21.247501Z", "shell.execute_reply": "2024-03-26T11:11:21.246180Z" }, "papermill": { "duration": 0.061151, "end_time": "2024-03-26T11:11:21.250127", "exception": false, "start_time": "2024-03-26T11:11:21.188976", "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-26T11:11:21.277170Z", "iopub.status.busy": "2024-03-26T11:11:21.276590Z", "iopub.status.idle": "2024-03-26T11:11:21.286210Z", "shell.execute_reply": "2024-03-26T11:11:21.285191Z" }, "papermill": { "duration": 0.025784, "end_time": "2024-03-26T11:11:21.288536", "exception": false, "start_time": "2024-03-26T11:11:21.262752", "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-26T11:11:21.315211Z", "iopub.status.busy": "2024-03-26T11:11:21.314331Z", "iopub.status.idle": "2024-03-26T11:11:21.319222Z", "shell.execute_reply": "2024-03-26T11:11:21.318209Z" }, "papermill": { "duration": 0.020123, "end_time": "2024-03-26T11:11:21.321494", "exception": false, "start_time": "2024-03-26T11:11:21.301371", "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-26T11:11:21.346210Z", "iopub.status.busy": "2024-03-26T11:11:21.345663Z", "iopub.status.idle": "2024-03-26T11:11:21.350619Z", "shell.execute_reply": "2024-03-26T11:11:21.349573Z" }, "executionInfo": { "elapsed": 678, "status": "ok", "timestamp": 1696841022168, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "ns5hFcVL2yvs", "papermill": { "duration": 0.019915, "end_time": "2024-03-26T11:11:21.352898", "exception": false, "start_time": "2024-03-26T11:11:21.332983", "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-26T11:11:21.379395Z", "iopub.status.busy": "2024-03-26T11:11:21.378781Z", "iopub.status.idle": "2024-03-26T11:11:21.385080Z", "shell.execute_reply": "2024-03-26T11:11:21.384183Z" }, "papermill": { "duration": 0.021745, "end_time": "2024-03-26T11:11:21.387284", "exception": false, "start_time": "2024-03-26T11:11:21.365539", "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": "19566fb6", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T11:11:21.411621Z", "iopub.status.busy": "2024-03-26T11:11:21.411072Z", "iopub.status.idle": "2024-03-26T11:11:21.416660Z", "shell.execute_reply": "2024-03-26T11:11:21.415732Z" }, "papermill": { "duration": 0.020763, "end_time": "2024-03-26T11:11:21.419001", "exception": false, "start_time": "2024-03-26T11:11:21.398238", "status": "completed" }, "tags": [ "injected-parameters" ] }, "outputs": [], "source": [ "# Parameters\n", "dataset = \"treatment\"\n", "dataset_name = \"treatment\"\n", "single_model = \"tvae\"\n", "gp = True\n", "gp_multiply = True\n", "random_seed = 1\n", "debug = False\n", "folder = \"eval\"\n", "path_prefix = \"../../../../\"\n", "path = \"eval/treatment/tvae/1\"\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.011406, "end_time": "2024-03-26T11:11:21.441744", "exception": false, "start_time": "2024-03-26T11:11:21.430338", "status": "completed" }, "tags": [] }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 7, "id": "5f45b1d0", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T11:11:21.467564Z", "iopub.status.busy": "2024-03-26T11:11:21.467205Z", "iopub.status.idle": "2024-03-26T11:11:21.478570Z", "shell.execute_reply": "2024-03-26T11:11:21.477595Z" }, "executionInfo": { "elapsed": 7, "status": "ok", "timestamp": 1696841022169, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "UdvXYv3c3LXy", "papermill": { "duration": 0.026594, "end_time": "2024-03-26T11:11:21.480855", "exception": false, "start_time": "2024-03-26T11:11:21.454261", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/kaggle/working\n", "/kaggle/working/eval/treatment/tvae/1\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-26T11:11:21.509801Z", "iopub.status.busy": "2024-03-26T11:11:21.508738Z", "iopub.status.idle": "2024-03-26T11:11:23.838086Z", "shell.execute_reply": "2024-03-26T11:11:23.837005Z" }, "papermill": { "duration": 2.346397, "end_time": "2024-03-26T11:11:23.840269", "exception": false, "start_time": "2024-03-26T11:11:21.493872", "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-26T11:11:23.865086Z", "iopub.status.busy": "2024-03-26T11:11:23.864569Z", "iopub.status.idle": "2024-03-26T11:11:23.883003Z", "shell.execute_reply": "2024-03-26T11:11:23.881737Z" }, "papermill": { "duration": 0.033617, "end_time": "2024-03-26T11:11:23.885417", "exception": false, "start_time": "2024-03-26T11:11:23.851800", "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-26T11:11:23.910407Z", "iopub.status.busy": "2024-03-26T11:11:23.910066Z", "iopub.status.idle": "2024-03-26T11:11:23.919166Z", "shell.execute_reply": "2024-03-26T11:11:23.918067Z" }, "executionInfo": { "elapsed": 6, "status": "ok", "timestamp": 1696841022169, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "Vrl2QkoV3o_8", "papermill": { "duration": 0.023974, "end_time": "2024-03-26T11:11:23.921363", "exception": false, "start_time": "2024-03-26T11:11:23.897389", "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-26T11:11:23.947347Z", "iopub.status.busy": "2024-03-26T11:11:23.947044Z", "iopub.status.idle": "2024-03-26T11:11:24.058104Z", "shell.execute_reply": "2024-03-26T11:11:24.056937Z" }, "executionInfo": { "elapsed": 6, "status": "ok", "timestamp": 1696841022169, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "TilUuFk9vqMb", "papermill": { "duration": 0.127513, "end_time": "2024-03-26T11:11:24.060802", "exception": false, "start_time": "2024-03-26T11:11:23.933289", "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-26T11:11:24.085724Z", "iopub.status.busy": "2024-03-26T11:11:24.085383Z", "iopub.status.idle": "2024-03-26T11:11:29.418209Z", "shell.execute_reply": "2024-03-26T11:11:29.417185Z" }, "executionInfo": { "elapsed": 3113, "status": "ok", "timestamp": 1696841025277, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "7Abt8nStvr9Z", "papermill": { "duration": 5.348314, "end_time": "2024-03-26T11:11:29.420799", "exception": false, "start_time": "2024-03-26T11:11:24.072485", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2024-03-26 11:11:26.605320: 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-26 11:11:26.605381: 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-26 11:11:26.607182: 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-26T11:11:29.449372Z", "iopub.status.busy": "2024-03-26T11:11:29.447953Z", "iopub.status.idle": "2024-03-26T11:11:29.455792Z", "shell.execute_reply": "2024-03-26T11:11:29.454962Z" }, "papermill": { "duration": 0.024758, "end_time": "2024-03-26T11:11:29.458456", "exception": false, "start_time": "2024-03-26T11:11:29.433698", "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-26T11:11:29.485653Z", "iopub.status.busy": "2024-03-26T11:11:29.484807Z", "iopub.status.idle": "2024-03-26T11:11:55.808522Z", "shell.execute_reply": "2024-03-26T11:11:55.807064Z" }, "executionInfo": { "elapsed": 20137, "status": "ok", "timestamp": 1696841045408, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "tbaguWxAvtPi", "papermill": { "duration": 26.3409, "end_time": "2024-03-26T11:11:55.811986", "exception": false, "start_time": "2024-03-26T11:11:29.471086", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", " warnings.warn(\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", " warnings.warn(\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", " warnings.warn(\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", " warnings.warn(\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", " warnings.warn(\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", " warnings.warn(\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", " warnings.warn(\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", " warnings.warn(\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", " warnings.warn(\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/opt/conda/lib/python3.10/site-packages/sklearn/preprocessing/_encoders.py:868: FutureWarning: `sparse` was renamed to `sparse_output` in version 1.2 and will be removed in 1.4. `sparse_output` is ignored unless you leave `sparse` to its default value.\n", " warnings.warn(\n" ] } ], "source": [ "from ml_utility_loss.loss_learning.estimator.preprocessing import DataPreprocessor\n", "\n", "preprocessor = DataPreprocessor(\n", " task,\n", " target=target,\n", " cat_features=cat_features,\n", " mixed_features=mixed_features,\n", " longtail_features=longtail_features,\n", " integer_features=integer_features,\n", " lct_ae_embedding_size=lct_ae_embedding_size,\n", " lct_ae_params=lct_ae_params,\n", " lct_ae=lct_ae,\n", " tab_ddpm_normalization=tab_ddpm_normalization,\n", " tab_ddpm_cat_encoding=tab_ddpm_cat_encoding,\n", " tab_ddpm_y_policy=tab_ddpm_y_policy,\n", " tab_ddpm_is_y_cond=tab_ddpm_is_y_cond,\n", " realtabformer_embedding=rtf_embed,\n", " realtabformer_params=rtf_params,\n", ")\n", "preprocessor.fit(df)" ] }, { "cell_type": "code", "execution_count": 15, "id": "a9c9b110", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "execution": { "iopub.execute_input": "2024-03-26T11:11:55.847611Z", "iopub.status.busy": "2024-03-26T11:11:55.847191Z", "iopub.status.idle": "2024-03-26T11:11:55.855362Z", "shell.execute_reply": "2024-03-26T11:11:55.854307Z" }, "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.030365, "end_time": "2024-03-26T11:11:55.857738", "exception": false, "start_time": "2024-03-26T11:11:55.827373", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "{'tvae': 95,\n", " 'realtabformer': (69, 281, Embedding(281, 768), True),\n", " 'lct_gan': 75,\n", " 'tab_ddpm_concat': 12}" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "preprocessor.adapter_sizes" ] }, { "cell_type": "code", "execution_count": 16, "id": "ad1eb833", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T11:11:55.887063Z", "iopub.status.busy": "2024-03-26T11:11:55.886108Z", "iopub.status.idle": "2024-03-26T11:11:55.961492Z", "shell.execute_reply": "2024-03-26T11:11:55.960348Z" }, "papermill": { "duration": 0.092656, "end_time": "2024-03-26T11:11:55.964066", "exception": false, "start_time": "2024-03-26T11:11:55.871410", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Caching in ../../../../treatment/_cache_aug_test/tvae/all inf False\n", "../../../../ml-utility-loss/aug_test/treatment 0\n", "Caching in ../../../../treatment/_cache_bs_test/tvae/all inf False\n", "../../../../ml-utility-loss/bs_test/treatment 0\n", "Caching in ../../../../treatment/_cache_synth_test/tvae/all inf False\n", "../../../../ml-utility-loss/synthetics/treatment 600\n", "600\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": 17, "id": "14ff8b40", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T11:11:55.995445Z", "iopub.status.busy": "2024-03-26T11:11:55.995042Z", "iopub.status.idle": "2024-03-26T11:11:56.351968Z", "shell.execute_reply": "2024-03-26T11:11:56.351003Z" }, "executionInfo": { "elapsed": 588, "status": "ok", "timestamp": 1696841049215, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "NgahtU1q9uLO", "papermill": { "duration": 0.374884, "end_time": "2024-03-26T11:11:56.354152", "exception": false, "start_time": "2024-03-26T11:11:55.979268", "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': 'torch',\n", " 'grad_clip': 0.75,\n", " 'gradient_penalty_mode': {'gradient_penalty': True,\n", " 'forward_once': False,\n", " 'calc_grad_m': False,\n", " 'avg_non_role_model_m': False,\n", " 'inverse_avg_non_role_model_m': False},\n", " 'synth_data': 2,\n", " 'bias_lr_mul': 1.0,\n", " 'bias_weight_decay': 0.05,\n", " 'loss_balancer_beta': 0.75,\n", " 'loss_balancer_r': 0.96,\n", " 'dataset_size': 2048,\n", " 'batch_size': 2,\n", " 'epochs': 100,\n", " 'lr_mul': 0.06,\n", " 'n_warmup_steps': 80,\n", " 'Optim': torch_optimizer.diffgrad.DiffGrad,\n", " 'fixed_role_model': 'tvae',\n", " 'g_loss_mul': 0.2,\n", " 'd_model': 512,\n", " 'attn_activation': torch.nn.modules.activation.SELU,\n", " 'tf_d_inner': 256,\n", " 'tf_n_layers_enc': 4,\n", " 'tf_n_head': 32,\n", " 'tf_activation': ml_utility_loss.activations.LeakyHardtanh,\n", " 'tf_activation_final': ml_utility_loss.activations.LeakyHardtanh,\n", " 'ada_d_hid': 2048,\n", " 'ada_n_layers': 6,\n", " 'ada_activation': ml_utility_loss.activations.LeakyHardtanh,\n", " 'ada_activation_final': ml_utility_loss.activations.LeakyHardsigmoid,\n", " 'head_d_hid': 128,\n", " 'head_n_layers': 7,\n", " 'head_n_head': 64,\n", " 'head_activation': ml_utility_loss.activations.LeakyHardsigmoid,\n", " 'head_activation_final': ml_utility_loss.activations.LeakyHardsigmoid,\n", " 'models': ['tvae'],\n", " 'max_seconds': 3600,\n", " 'tf_lora': False,\n", " 'tf_num_inds': 32,\n", " 'ada_n_seeds': 0,\n", " 'gradient_penalty_kwargs': {'mag_loss': True,\n", " 'mse_mag': True,\n", " 'mag_corr': False,\n", " 'seq_mag': False,\n", " 'cos_loss': False,\n", " 'mag_corr_kwargs': {'only_sign': False},\n", " 'cos_loss_kwargs': {'only_sign': True, 'cos_matrix': False},\n", " 'mse_mag_kwargs': {'target': 0.5, 'multiply': True, 'forgive_over': True}}}" ] }, "execution_count": 17, "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", "params = getattr(PARAMS, dataset_name).BEST_DICT[gp][gp_multiply][single_model]\n", "params = {\n", " **getattr(PARAMS, dataset_name).DEFAULTS,\n", " **params,\n", "}\n", "if isinstance(params, (list, tuple)):\n", " params = params[param_index]\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": 18, "id": "2fcb1418", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 1000 }, "execution": { "iopub.execute_input": "2024-03-26T11:11:56.380003Z", "iopub.status.busy": "2024-03-26T11:11:56.379630Z", "iopub.status.idle": "2024-03-26T11:11:57.090034Z", "shell.execute_reply": "2024-03-26T11:11:57.088984Z" }, "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.725565, "end_time": "2024-03-26T11:11:57.092191", "exception": false, "start_time": "2024-03-26T11:11:56.366626", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Creating model of type \n", "[*] Embedding False True\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "['tvae'] 1\n" ] } ], "source": [ "from ml_utility_loss.loss_learning.estimator.model.pipeline import remove_non_model_params\n", "from ml_utility_loss.loss_learning.estimator.pipeline import create_model\n", "from ml_utility_loss.util import filter_dict, clear_memory\n", "\n", "clear_memory()\n", "\n", "params2 = remove_non_model_params(params)\n", "adapters = filter_dict(preprocessor.adapter_sizes, params[\"models\"])\n", "\n", "model = create_model(\n", " adapters=adapters,\n", " #Body=\"twin_encoder\",\n", " **params2,\n", ")\n", "#cf.apply_weight_standardization(model, n_last_layers_ignore=0)\n", "print(model.models, len(model.adapters))" ] }, { "cell_type": "code", "execution_count": 19, "id": "938f94fc", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T11:11:57.121474Z", "iopub.status.busy": "2024-03-26T11:11:57.121080Z", "iopub.status.idle": "2024-03-26T11:11:57.125954Z", "shell.execute_reply": "2024-03-26T11:11:57.124857Z" }, "papermill": { "duration": 0.021848, "end_time": "2024-03-26T11:11:57.128241", "exception": false, "start_time": "2024-03-26T11:11:57.106393", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "study_name=f\"{model_name}_{dataset_name}\"" ] }, { "cell_type": "code", "execution_count": 20, "id": "12fb613e", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T11:11:57.154680Z", "iopub.status.busy": "2024-03-26T11:11:57.154394Z", "iopub.status.idle": "2024-03-26T11:11:57.161826Z", "shell.execute_reply": "2024-03-26T11:11:57.160890Z" }, "papermill": { "duration": 0.022972, "end_time": "2024-03-26T11:11:57.163968", "exception": false, "start_time": "2024-03-26T11:11:57.140996", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "29729665" ] }, "execution_count": 20, "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": 21, "id": "bd386e57", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T11:11:57.190916Z", "iopub.status.busy": "2024-03-26T11:11:57.190592Z", "iopub.status.idle": "2024-03-26T11:11:57.301732Z", "shell.execute_reply": "2024-03-26T11:11:57.300619Z" }, "papermill": { "duration": 0.128142, "end_time": "2024-03-26T11:11:57.304509", "exception": false, "start_time": "2024-03-26T11:11:57.176367", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "========================================================================================================================\n", "Layer (type:depth-idx) Output Shape Param #\n", "========================================================================================================================\n", "MLUtilitySingle [2, 2648, 95] --\n", "├─Adapter: 1-1 [2, 2648, 95] --\n", "│ └─Sequential: 2-1 [2, 2648, 512] --\n", "│ │ └─FeedForward: 3-1 [2, 2648, 2048] --\n", "│ │ │ └─Linear: 4-1 [2, 2648, 2048] 196,608\n", "│ │ │ └─LeakyHardtanh: 4-2 [2, 2648, 2048] --\n", "│ │ └─FeedForward: 3-2 [2, 2648, 2048] --\n", "│ │ │ └─Linear: 4-3 [2, 2648, 2048] 4,196,352\n", "│ │ │ └─LeakyHardtanh: 4-4 [2, 2648, 2048] --\n", "│ │ └─FeedForward: 3-3 [2, 2648, 2048] --\n", "│ │ │ └─Linear: 4-5 [2, 2648, 2048] 4,196,352\n", "│ │ │ └─LeakyHardtanh: 4-6 [2, 2648, 2048] --\n", "│ │ └─FeedForward: 3-4 [2, 2648, 2048] --\n", "│ │ │ └─Linear: 4-7 [2, 2648, 2048] 4,196,352\n", "│ │ │ └─LeakyHardtanh: 4-8 [2, 2648, 2048] --\n", "│ │ └─FeedForward: 3-5 [2, 2648, 2048] --\n", "│ │ │ └─Linear: 4-9 [2, 2648, 2048] 4,196,352\n", "│ │ │ └─LeakyHardtanh: 4-10 [2, 2648, 2048] --\n", "│ │ └─FeedForward: 3-6 [2, 2648, 512] --\n", "│ │ │ └─Linear: 4-11 [2, 2648, 512] 1,049,088\n", "│ │ │ └─LeakyHardsigmoid: 4-12 [2, 2648, 512] --\n", "├─Adapter: 1-2 [2, 661, 95] (recursive)\n", "│ └─Sequential: 2-2 [2, 661, 512] (recursive)\n", "│ │ └─FeedForward: 3-7 [2, 661, 2048] (recursive)\n", "│ │ │ └─Linear: 4-13 [2, 661, 2048] (recursive)\n", "│ │ │ └─LeakyHardtanh: 4-14 [2, 661, 2048] --\n", "│ │ └─FeedForward: 3-8 [2, 661, 2048] (recursive)\n", "│ │ │ └─Linear: 4-15 [2, 661, 2048] (recursive)\n", "│ │ │ └─LeakyHardtanh: 4-16 [2, 661, 2048] --\n", "│ │ └─FeedForward: 3-9 [2, 661, 2048] (recursive)\n", "│ │ │ └─Linear: 4-17 [2, 661, 2048] (recursive)\n", "│ │ │ └─LeakyHardtanh: 4-18 [2, 661, 2048] --\n", "│ │ └─FeedForward: 3-10 [2, 661, 2048] (recursive)\n", "│ │ │ └─Linear: 4-19 [2, 661, 2048] (recursive)\n", "│ │ │ └─LeakyHardtanh: 4-20 [2, 661, 2048] --\n", "│ │ └─FeedForward: 3-11 [2, 661, 2048] (recursive)\n", "│ │ │ └─Linear: 4-21 [2, 661, 2048] (recursive)\n", "│ │ │ └─LeakyHardtanh: 4-22 [2, 661, 2048] --\n", "│ │ └─FeedForward: 3-12 [2, 661, 512] (recursive)\n", "│ │ │ └─Linear: 4-23 [2, 661, 512] (recursive)\n", "│ │ │ └─LeakyHardsigmoid: 4-24 [2, 661, 512] --\n", "├─TwinEncoder: 1-3 [2, 8192] --\n", "│ └─Encoder: 2-3 [2, 16, 512] --\n", "│ │ └─ModuleList: 3-14 -- (recursive)\n", "│ │ │ └─EncoderLayer: 4-25 [2, 2648, 512] --\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-1 [2, 2648, 512] --\n", "│ │ │ │ │ └─TensorInductionPoint: 6-1 [2, 32, 512] 16,384\n", "│ │ │ │ │ └─MultiHeadAttention: 6-2 [2, 32, 512] --\n", "│ │ │ │ │ │ └─Linear: 7-1 [2, 32, 512] 262,144\n", "│ │ │ │ │ │ └─Linear: 7-2 [2, 2648, 512] 262,144\n", "│ │ │ │ │ │ └─Linear: 7-3 [2, 2648, 512] 262,144\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-4 [2, 32, 32, 16] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-1 [2, 32, 32, 2648] --\n", "│ │ │ │ │ │ └─Linear: 7-5 [2, 32, 512] 262,656\n", "│ │ │ │ │ │ └─SELU: 7-6 [2, 32, 512] --\n", "│ │ │ │ │ └─MultiHeadAttention: 6-3 [2, 2648, 512] --\n", "│ │ │ │ │ │ └─Linear: 7-7 [2, 2648, 512] 262,144\n", "│ │ │ │ │ │ └─Linear: 7-8 [2, 32, 512] 262,144\n", "│ │ │ │ │ │ └─Linear: 7-9 [2, 32, 512] 262,144\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-10 [2, 32, 2648, 16] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-2 [2, 32, 2648, 32] --\n", "│ │ │ │ │ │ └─Linear: 7-11 [2, 2648, 512] 262,656\n", "│ │ │ │ │ │ └─SELU: 7-12 [2, 2648, 512] --\n", "│ │ │ │ └─DoubleFeedForward: 5-2 [2, 2648, 512] --\n", "│ │ │ │ │ └─Linear: 6-4 [2, 2648, 256] 131,328\n", "│ │ │ │ │ └─LeakyHardtanh: 6-5 [2, 2648, 256] --\n", "│ │ │ │ │ └─Linear: 6-6 [2, 2648, 512] 131,584\n", "│ │ │ └─EncoderLayer: 4-26 [2, 2648, 512] --\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-3 [2, 2648, 512] --\n", "│ │ │ │ │ └─TensorInductionPoint: 6-7 [2, 32, 512] 16,384\n", "│ │ │ │ │ └─MultiHeadAttention: 6-8 [2, 32, 512] --\n", "│ │ │ │ │ │ └─Linear: 7-13 [2, 32, 512] 262,144\n", "│ │ │ │ │ │ └─Linear: 7-14 [2, 2648, 512] 262,144\n", "│ │ │ │ │ │ └─Linear: 7-15 [2, 2648, 512] 262,144\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-16 [2, 32, 32, 16] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-3 [2, 32, 32, 2648] --\n", "│ │ │ │ │ │ └─Linear: 7-17 [2, 32, 512] 262,656\n", "│ │ │ │ │ │ └─SELU: 7-18 [2, 32, 512] --\n", "│ │ │ │ │ └─MultiHeadAttention: 6-9 [2, 2648, 512] --\n", "│ │ │ │ │ │ └─Linear: 7-19 [2, 2648, 512] 262,144\n", "│ │ │ │ │ │ └─Linear: 7-20 [2, 32, 512] 262,144\n", "│ │ │ │ │ │ └─Linear: 7-21 [2, 32, 512] 262,144\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-22 [2, 32, 2648, 16] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-4 [2, 32, 2648, 32] --\n", "│ │ │ │ │ │ └─Linear: 7-23 [2, 2648, 512] 262,656\n", "│ │ │ │ │ │ └─SELU: 7-24 [2, 2648, 512] --\n", "│ │ │ │ └─DoubleFeedForward: 5-4 [2, 2648, 512] --\n", "│ │ │ │ │ └─Linear: 6-10 [2, 2648, 256] 131,328\n", "│ │ │ │ │ └─LeakyHardtanh: 6-11 [2, 2648, 256] --\n", "│ │ │ │ │ └─Linear: 6-12 [2, 2648, 512] 131,584\n", "│ │ │ └─EncoderLayer: 4-27 [2, 2648, 512] --\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-5 [2, 2648, 512] --\n", "│ │ │ │ │ └─TensorInductionPoint: 6-13 [2, 32, 512] 16,384\n", "│ │ │ │ │ └─MultiHeadAttention: 6-14 [2, 32, 512] --\n", "│ │ │ │ │ │ └─Linear: 7-25 [2, 32, 512] 262,144\n", "│ │ │ │ │ │ └─Linear: 7-26 [2, 2648, 512] 262,144\n", "│ │ │ │ │ │ └─Linear: 7-27 [2, 2648, 512] 262,144\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-28 [2, 32, 32, 16] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-5 [2, 32, 32, 2648] --\n", "│ │ │ │ │ │ └─Linear: 7-29 [2, 32, 512] 262,656\n", "│ │ │ │ │ │ └─SELU: 7-30 [2, 32, 512] --\n", "│ │ │ │ │ └─MultiHeadAttention: 6-15 [2, 2648, 512] --\n", "│ │ │ │ │ │ └─Linear: 7-31 [2, 2648, 512] 262,144\n", "│ │ │ │ │ │ └─Linear: 7-32 [2, 32, 512] 262,144\n", "│ │ │ │ │ │ └─Linear: 7-33 [2, 32, 512] 262,144\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-34 [2, 32, 2648, 16] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-6 [2, 32, 2648, 32] --\n", "│ │ │ │ │ │ └─Linear: 7-35 [2, 2648, 512] 262,656\n", "│ │ │ │ │ │ └─SELU: 7-36 [2, 2648, 512] --\n", "│ │ │ │ └─DoubleFeedForward: 5-6 [2, 2648, 512] --\n", "│ │ │ │ │ └─Linear: 6-16 [2, 2648, 256] 131,328\n", "│ │ │ │ │ └─LeakyHardtanh: 6-17 [2, 2648, 256] --\n", "│ │ │ │ │ └─Linear: 6-18 [2, 2648, 512] 131,584\n", "│ │ │ └─EncoderLayer: 4-28 [2, 16, 512] --\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-7 [2, 2648, 512] --\n", "│ │ │ │ │ └─TensorInductionPoint: 6-19 [2, 32, 512] 16,384\n", "│ │ │ │ │ └─MultiHeadAttention: 6-20 [2, 32, 512] --\n", "│ │ │ │ │ │ └─Linear: 7-37 [2, 32, 512] 262,144\n", "│ │ │ │ │ │ └─Linear: 7-38 [2, 2648, 512] 262,144\n", "│ │ │ │ │ │ └─Linear: 7-39 [2, 2648, 512] 262,144\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-40 [2, 32, 32, 16] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-7 [2, 32, 32, 2648] --\n", "│ │ │ │ │ │ └─Linear: 7-41 [2, 32, 512] 262,656\n", "│ │ │ │ │ │ └─SELU: 7-42 [2, 32, 512] --\n", "│ │ │ │ │ └─MultiHeadAttention: 6-21 [2, 2648, 512] --\n", "│ │ │ │ │ │ └─Linear: 7-43 [2, 2648, 512] 262,144\n", "│ │ │ │ │ │ └─Linear: 7-44 [2, 32, 512] 262,144\n", "│ │ │ │ │ │ └─Linear: 7-45 [2, 32, 512] 262,144\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-46 [2, 32, 2648, 16] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-8 [2, 32, 2648, 32] --\n", "│ │ │ │ │ │ └─Linear: 7-47 [2, 2648, 512] 262,656\n", "│ │ │ │ │ │ └─SELU: 7-48 [2, 2648, 512] --\n", "│ │ │ │ └─DoubleFeedForward: 5-8 [2, 2648, 512] --\n", "│ │ │ │ │ └─Linear: 6-22 [2, 2648, 256] 131,328\n", "│ │ │ │ │ └─LeakyHardtanh: 6-23 [2, 2648, 256] --\n", "│ │ │ │ │ └─Linear: 6-24 [2, 2648, 512] 131,584\n", "│ │ │ │ └─PoolingByMultiheadAttention: 5-9 [2, 16, 512] --\n", "│ │ │ │ │ └─TensorInductionPoint: 6-25 [2, 16, 512] 8,192\n", "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-26 [2, 16, 512] --\n", "│ │ │ │ │ │ └─Linear: 7-49 [2, 16, 512] 262,144\n", "│ │ │ │ │ │ └─Linear: 7-50 [2, 2648, 512] 262,144\n", "│ │ │ │ │ │ └─Linear: 7-51 [2, 2648, 512] 262,144\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-52 [2, 32, 16, 16] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-9 [2, 32, 16, 2648] --\n", "│ │ │ │ │ │ └─Linear: 7-53 [2, 16, 512] 262,656\n", "│ │ │ │ │ │ └─SELU: 7-54 [2, 16, 512] --\n", "│ └─Encoder: 2-4 [2, 16, 512] (recursive)\n", "│ │ └─ModuleList: 3-14 -- (recursive)\n", "│ │ │ └─EncoderLayer: 4-29 [2, 661, 512] (recursive)\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-10 [2, 661, 512] (recursive)\n", "│ │ │ │ │ └─TensorInductionPoint: 6-27 [2, 32, 512] (recursive)\n", "│ │ │ │ │ └─MultiHeadAttention: 6-28 [2, 32, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-55 [2, 32, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-56 [2, 661, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-57 [2, 661, 512] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-58 [2, 32, 32, 16] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-10 [2, 32, 32, 661] --\n", "│ │ │ │ │ │ └─Linear: 7-59 [2, 32, 512] (recursive)\n", "│ │ │ │ │ │ └─SELU: 7-60 [2, 32, 512] --\n", "│ │ │ │ │ └─MultiHeadAttention: 6-29 [2, 661, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-61 [2, 661, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-62 [2, 32, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-63 [2, 32, 512] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-64 [2, 32, 661, 16] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-11 [2, 32, 661, 32] --\n", "│ │ │ │ │ │ └─Linear: 7-65 [2, 661, 512] (recursive)\n", "│ │ │ │ │ │ └─SELU: 7-66 [2, 661, 512] --\n", "│ │ │ │ └─DoubleFeedForward: 5-11 [2, 661, 512] (recursive)\n", "│ │ │ │ │ └─Linear: 6-30 [2, 661, 256] (recursive)\n", "│ │ │ │ │ └─LeakyHardtanh: 6-31 [2, 661, 256] --\n", "│ │ │ │ │ └─Linear: 6-32 [2, 661, 512] (recursive)\n", "│ │ │ └─EncoderLayer: 4-30 [2, 661, 512] (recursive)\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-12 [2, 661, 512] (recursive)\n", "│ │ │ │ │ └─TensorInductionPoint: 6-33 [2, 32, 512] (recursive)\n", "│ │ │ │ │ └─MultiHeadAttention: 6-34 [2, 32, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-67 [2, 32, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-68 [2, 661, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-69 [2, 661, 512] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-70 [2, 32, 32, 16] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-12 [2, 32, 32, 661] --\n", "│ │ │ │ │ │ └─Linear: 7-71 [2, 32, 512] (recursive)\n", "│ │ │ │ │ │ └─SELU: 7-72 [2, 32, 512] --\n", "│ │ │ │ │ └─MultiHeadAttention: 6-35 [2, 661, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-73 [2, 661, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-74 [2, 32, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-75 [2, 32, 512] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-76 [2, 32, 661, 16] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-13 [2, 32, 661, 32] --\n", "│ │ │ │ │ │ └─Linear: 7-77 [2, 661, 512] (recursive)\n", "│ │ │ │ │ │ └─SELU: 7-78 [2, 661, 512] --\n", "│ │ │ │ └─DoubleFeedForward: 5-13 [2, 661, 512] (recursive)\n", "│ │ │ │ │ └─Linear: 6-36 [2, 661, 256] (recursive)\n", "│ │ │ │ │ └─LeakyHardtanh: 6-37 [2, 661, 256] --\n", "│ │ │ │ │ └─Linear: 6-38 [2, 661, 512] (recursive)\n", "│ │ │ └─EncoderLayer: 4-31 [2, 661, 512] (recursive)\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-14 [2, 661, 512] (recursive)\n", "│ │ │ │ │ └─TensorInductionPoint: 6-39 [2, 32, 512] (recursive)\n", "│ │ │ │ │ └─MultiHeadAttention: 6-40 [2, 32, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-79 [2, 32, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-80 [2, 661, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-81 [2, 661, 512] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-82 [2, 32, 32, 16] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-14 [2, 32, 32, 661] --\n", "│ │ │ │ │ │ └─Linear: 7-83 [2, 32, 512] (recursive)\n", "│ │ │ │ │ │ └─SELU: 7-84 [2, 32, 512] --\n", "│ │ │ │ │ └─MultiHeadAttention: 6-41 [2, 661, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-85 [2, 661, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-86 [2, 32, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-87 [2, 32, 512] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-88 [2, 32, 661, 16] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-15 [2, 32, 661, 32] --\n", "│ │ │ │ │ │ └─Linear: 7-89 [2, 661, 512] (recursive)\n", "│ │ │ │ │ │ └─SELU: 7-90 [2, 661, 512] --\n", "│ │ │ │ └─DoubleFeedForward: 5-15 [2, 661, 512] (recursive)\n", "│ │ │ │ │ └─Linear: 6-42 [2, 661, 256] (recursive)\n", "│ │ │ │ │ └─LeakyHardtanh: 6-43 [2, 661, 256] --\n", "│ │ │ │ │ └─Linear: 6-44 [2, 661, 512] (recursive)\n", "│ │ │ └─EncoderLayer: 4-32 [2, 16, 512] (recursive)\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-16 [2, 661, 512] (recursive)\n", "│ │ │ │ │ └─TensorInductionPoint: 6-45 [2, 32, 512] (recursive)\n", "│ │ │ │ │ └─MultiHeadAttention: 6-46 [2, 32, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-91 [2, 32, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-92 [2, 661, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-93 [2, 661, 512] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-94 [2, 32, 32, 16] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-16 [2, 32, 32, 661] --\n", "│ │ │ │ │ │ └─Linear: 7-95 [2, 32, 512] (recursive)\n", "│ │ │ │ │ │ └─SELU: 7-96 [2, 32, 512] --\n", "│ │ │ │ │ └─MultiHeadAttention: 6-47 [2, 661, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-97 [2, 661, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-98 [2, 32, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-99 [2, 32, 512] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-100 [2, 32, 661, 16] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-17 [2, 32, 661, 32] --\n", "│ │ │ │ │ │ └─Linear: 7-101 [2, 661, 512] (recursive)\n", "│ │ │ │ │ │ └─SELU: 7-102 [2, 661, 512] --\n", "│ │ │ │ └─DoubleFeedForward: 5-17 [2, 661, 512] (recursive)\n", "│ │ │ │ │ └─Linear: 6-48 [2, 661, 256] (recursive)\n", "│ │ │ │ │ └─LeakyHardtanh: 6-49 [2, 661, 256] --\n", "│ │ │ │ │ └─Linear: 6-50 [2, 661, 512] (recursive)\n", "│ │ │ │ └─PoolingByMultiheadAttention: 5-18 [2, 16, 512] (recursive)\n", "│ │ │ │ │ └─TensorInductionPoint: 6-51 [2, 16, 512] (recursive)\n", "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-52 [2, 16, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-103 [2, 16, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-104 [2, 661, 512] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-105 [2, 661, 512] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-106 [2, 32, 16, 16] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-18 [2, 32, 16, 661] --\n", "│ │ │ │ │ │ └─Linear: 7-107 [2, 16, 512] (recursive)\n", "│ │ │ │ │ │ └─SELU: 7-108 [2, 16, 512] --\n", "├─Head: 1-4 [2] --\n", "│ └─Sequential: 2-5 [2, 1] --\n", "│ │ └─FeedForward: 3-15 [2, 128] --\n", "│ │ │ └─Linear: 4-33 [2, 128] 1,048,704\n", "│ │ │ └─LeakyHardsigmoid: 4-34 [2, 128] --\n", "│ │ └─FeedForward: 3-16 [2, 128] --\n", "│ │ │ └─Linear: 4-35 [2, 128] 16,512\n", "│ │ │ └─LeakyHardsigmoid: 4-36 [2, 128] --\n", "│ │ └─FeedForward: 3-17 [2, 128] --\n", "│ │ │ └─Linear: 4-37 [2, 128] 16,512\n", "│ │ │ └─LeakyHardsigmoid: 4-38 [2, 128] --\n", "│ │ └─FeedForward: 3-18 [2, 128] --\n", "│ │ │ └─Linear: 4-39 [2, 128] 16,512\n", "│ │ │ └─LeakyHardsigmoid: 4-40 [2, 128] --\n", "│ │ └─FeedForward: 3-19 [2, 128] --\n", "│ │ │ └─Linear: 4-41 [2, 128] 16,512\n", "│ │ │ └─LeakyHardsigmoid: 4-42 [2, 128] --\n", "│ │ └─FeedForward: 3-20 [2, 128] --\n", "│ │ │ └─Linear: 4-43 [2, 128] 16,512\n", "│ │ │ └─LeakyHardsigmoid: 4-44 [2, 128] --\n", "│ │ └─FeedForward: 3-21 [2, 1] --\n", "│ │ │ └─Linear: 4-45 [2, 1] 129\n", "│ │ │ └─LeakyHardsigmoid: 4-46 [2, 1] --\n", "========================================================================================================================\n", "Total params: 29,729,665\n", "Trainable params: 29,729,665\n", "Non-trainable params: 0\n", "Total mult-adds (M): 116.36\n", "========================================================================================================================\n", "Input size (MB): 2.51\n", "Forward/backward pass size (MB): 1231.11\n", "Params size (MB): 118.92\n", "Estimated Total Size (MB): 1352.55\n", "========================================================================================================================" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from torchinfo import summary\n", "\n", "role_model = params[\"fixed_role_model\"]\n", "s = test_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": 22, "id": "90576617", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T11:11:57.337664Z", "iopub.status.busy": "2024-03-26T11:11:57.337165Z", "iopub.status.idle": "2024-03-26T11:11:57.456906Z", "shell.execute_reply": "2024-03-26T11:11:57.455773Z" }, "papermill": { "duration": 0.139202, "end_time": "2024-03-26T11:11:57.459488", "exception": false, "start_time": "2024-03-26T11:11:57.320286", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import torch\n", "model.load_state_dict(torch.load(\"model.pt\"))" ] }, { "cell_type": "code", "execution_count": 23, "id": "2586ba0a", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T11:11:57.493782Z", "iopub.status.busy": "2024-03-26T11:11:57.492877Z", "iopub.status.idle": "2024-03-26T11:17:18.488500Z", "shell.execute_reply": "2024-03-26T11:17:18.487481Z" }, "papermill": { "duration": 321.015893, "end_time": "2024-03-26T11:17:18.491497", "exception": false, "start_time": "2024-03-26T11:11:57.475604", "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": 24, "id": "187137f6", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T11:17:18.525943Z", "iopub.status.busy": "2024-03-26T11:17:18.525457Z", "iopub.status.idle": "2024-03-26T11:17:18.551388Z", "shell.execute_reply": "2024-03-26T11:17:18.550375Z" }, "papermill": { "duration": 0.045615, "end_time": "2024-03-26T11:17:18.553726", "exception": false, "start_time": "2024-03-26T11:17:18.508111", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
avg_g_cos_lossavg_g_mag_lossavg_lossgrad_durationgrad_maegrad_mapegrad_rmsemean_pred_losspred_durationpred_maepred_mapepred_rmsepred_stdstd_losstotal_duration
tvae0.00.240.0043345.6806460.0617491.4894190.0965140.00027.2518550.039978256361.250.0658360.2199510.00002312.932501
\n", "
" ], "text/plain": [ " avg_g_cos_loss avg_g_mag_loss avg_loss grad_duration grad_mae \\\n", "tvae 0.0 0.24 0.004334 5.680646 0.061749 \n", "\n", " grad_mape grad_rmse mean_pred_loss pred_duration pred_mae \\\n", "tvae 1.489419 0.096514 0.0002 7.251855 0.039978 \n", "\n", " pred_mape pred_rmse pred_std std_loss total_duration \n", "tvae 256361.25 0.065836 0.219951 0.000023 12.932501 " ] }, "execution_count": 24, "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": 25, "id": "123d305b", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T11:17:18.584279Z", "iopub.status.busy": "2024-03-26T11:17:18.583917Z", "iopub.status.idle": "2024-03-26T11:17:19.017708Z", "shell.execute_reply": "2024-03-26T11:17:19.016530Z" }, "papermill": { "duration": 0.451632, "end_time": "2024-03-26T11:17:19.020161", "exception": false, "start_time": "2024-03-26T11:17:18.568529", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "from ml_utility_loss.util import clear_memory\n", "clear_memory()" ] }, { "cell_type": "code", "execution_count": 26, "id": "a3eecc2a", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T11:17:19.056001Z", "iopub.status.busy": "2024-03-26T11:17:19.055593Z", "iopub.status.idle": "2024-03-26T11:22:45.566345Z", "shell.execute_reply": "2024-03-26T11:22:45.565287Z" }, "papermill": { "duration": 326.532202, "end_time": "2024-03-26T11:22:45.569403", "exception": false, "start_time": "2024-03-26T11:17:19.037201", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Caching in ../../../../treatment/_cache_aug_test/tvae/all inf False\n", "Caching in ../../../../treatment/_cache_bs_test/tvae/all inf False\n", "Caching in ../../../../treatment/_cache_synth_test/tvae/all inf False\n" ] } ], "source": [ "#\"\"\"\n", "from ml_utility_loss.loss_learning.estimator.process import pred, pred_2\n", "from ml_utility_loss.util import stack_samples\n", "\n", "#samples = test_set[list(range(len(test_set)))]\n", "#y = {m: pred(model[m], s) for m, s in samples.items()}\n", "y = pred_2(model, test_set, batch_size=batch_size)\n", "#\"\"\"" ] }, { "cell_type": "code", "execution_count": 27, "id": "6ab51db8", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T11:22:45.601812Z", "iopub.status.busy": "2024-03-26T11:22:45.600920Z", "iopub.status.idle": "2024-03-26T11:22:45.623788Z", "shell.execute_reply": "2024-03-26T11:22:45.622973Z" }, "papermill": { "duration": 0.041149, "end_time": "2024-03-26T11:22:45.626043", "exception": false, "start_time": "2024-03-26T11:22:45.584894", "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": 28, "id": "d81a30f1", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T11:22:45.656657Z", "iopub.status.busy": "2024-03-26T11:22:45.656354Z", "iopub.status.idle": "2024-03-26T11:22:45.662239Z", "shell.execute_reply": "2024-03-26T11:22:45.661397Z" }, "papermill": { "duration": 0.023676, "end_time": "2024-03-26T11:22:45.664486", "exception": false, "start_time": "2024-03-26T11:22:45.640810", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'tvae': 0.46125430537475043}\n" ] } ], "source": [ "print({k: sum(v[\"pred\"])/len(v[\"pred\"]) for k, v in y.items()})" ] }, { "cell_type": "code", "execution_count": 29, "id": "3b3ff322", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T11:22:45.695427Z", "iopub.status.busy": "2024-03-26T11:22:45.694655Z", "iopub.status.idle": "2024-03-26T11:22:46.142681Z", "shell.execute_reply": "2024-03-26T11:22:46.141646Z" }, "papermill": { "duration": 0.466057, "end_time": "2024-03-26T11:22:46.144896", "exception": false, "start_time": "2024-03-26T11:22:45.678839", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from ml_utility_loss.loss_learning.visualization import plot_pred_density_2\n", "\n", "_ = plot_pred_density_2(y)" ] }, { "cell_type": "code", "execution_count": 30, "id": "e79e4b0f", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T11:22:46.176597Z", "iopub.status.busy": "2024-03-26T11:22:46.175805Z", "iopub.status.idle": "2024-03-26T11:22:46.528425Z", "shell.execute_reply": "2024-03-26T11:22:46.527476Z" }, "papermill": { "duration": 0.370709, "end_time": "2024-03-26T11:22:46.530583", "exception": false, "start_time": "2024-03-26T11:22:46.159874", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "image/png": "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geo+ehF9hzhWaATEymphwnin5iRKw1Fmh6O4UrWGCLCbTYRlOzHRNUtaUi2io0ePpjoOQRh1dScDNLe26mM5KZgx67NsSh4r50+hyG0TiShJSSWiadOmsXLlSn7xi18QCoVSHZMgjAp9VXVvreoUds08DjNudzaKLIn9ZklKKhHt3r2b+fPns27dOoqLi7n77rv561//murYBCFlVFXDH45jifswK6lZQ9RP32keokWUlKQS0cKFC9m4cSNNTU08++yzNDc3c+mllzJ37lyefPJJ2traUh2nIIxIMBpHVVVsidM7slP23N5QlF3NEY51BkQiStKIZs1MJhM333wzL774It/97nf5+OOPuf/++ykvL0+UgBWEdOCPxFDUMFYppq+qtrpS9tzBSJwdx8Oc8Ib1WTNNS9lzTxQjSkTvv/8+99xzDyUlJTz55JPcf//91NTU8Prrr9PU1MRNN92UqjgFYUT84fip1pDFAYo5Zc9ttyhEZX36XotHISZOoRmupKbvn3zySTZt2sShQ4e4/vrree6557j++uuRZT2vVVVVsXnzZiorK1MZqyAkLRSNY4n17bpP3dQ9gMOsoMomYrKZuKphivjBbEvpa2S6pBLRM888wx133MGaNWsoKSkZ8JrCwkJRHF9IG7NK3FywKAftSFZKZ8xAL8ZvMcm9tas1TBEfOPNS+hqZLqlE9Prrr1NRUZFoAfXRNI3GxkYqKiqwWCysXr06JUEKQiookW6QU98iAnBaFKKynWjcj10MWA9bUmNEU6dO5eTJk2fd3tHRQVVV1YiDEoRREerd3jEKichhMZ3abyYS0bAllYi0QWYFfD4fNpvoGwvp582PWtl/tJFAJJbyrhn01SWynzpoURiWYXXN1q1bB+ilDx5++GEcDkfivng8zo4dO1i4cGFKAxSEVKhp86G0n2RyiXlUWkSXTc9Htk3BeaxJtIiSMKxEtGfPHkBvEe3btw+LxZK4z2KxsGDBAu6///7URigII6RpGqFQGLMaxKJYU7+qGsh2WMCTA02SSERJGFYievPNNwG4/fbb2bhxI2536v9DBSHVgtE4SlTvLpktNjCN0vBB32keohTIsCU1a7Zp06ZUxyEIo8YX1je7mhUJ2e5JWUG003UFIhxpijCpO0ipWSSi4RpyIrr55pvZvHkzbrebm2+++ZzXvvTSSyMOTBBSJRDW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EC0iQRAMJxKRIAiGE4lIEATDiUQkCILhRCJKY8M9AffFF19k5syZ2Gw25s2bx//+7/+OUaTpYzjv2ebNm/UDEU77sNnOXf85k2zbto0bb7yR0tJSJEnilVdeOe9j3nrrLRYvXozVamXatGls3rw5JbGIRJSm+k7AfeSRR9i9ezcLFizgmmuuobW1dcDr33nnHb7whS9w5513smfPHlatWsWqVavYv3//GEdunOG+Z6CvGG5ubk581NfXj2HExvL7/SxYsICnn356SNfX1tZyww03sHLlSqqrq1m7di133XUXW7duHXkwmpCWlixZot17772Jr+PxuFZaWqpt2LBhwOs/97nPaTfccEO/25YuXardfffdoxpnOhnue7Zp0ybN4/GMUXTpDdBefvnlc17zwAMPaHPmzOl32y233KJdc801I3590SJKQ30n4F511VWJ2851Ai7Au+++2+96gGuuuWbQ6zNNMu8ZgM/nY/LkyZSXl3PTTTfx4YcfjkW449Jo/oyJRJSGznUCbktLy4CPaWlpGdb1mSaZ92zGjBk8++yzvPrqq/ziF79AVVWWL1/OsWPHxiLkcWewnzGv10swGBzRc4/r3feCMBLLli3rd37e8uXLmTVrFj/5yU/41re+ZWBkE49oEaWh4Z6AC1BcXDys6zNNMu/ZmcxmM4sWLeLjjz8ejRDHvcF+xtxuN3a7fUTPLRJRGkrmBNxly5b1ux7g9ddfnzAn5qbi1OB4PM6+ffsoKSkZrTDHtVH9GRvxcLcwKl544QXNarVqmzdv1g4cOKB99atf1bKzs7WWlhZN0zTttttu0x566KHE9du3b9dMJpP2ve99Tzt48KD2yCOPaGazWdu3b59R38KYG+579uijj2pbt27VampqtF27dmmf//znNZvNpn344YdGfQtjqqenR9uzZ4+2Z88eDdCefPJJbc+ePVp9fb2maZr20EMPabfddlvi+qNHj2oOh0P7p3/6J+3gwYPa008/rSmKor322msjjkUkojT2gx/8QKuoqNAsFou2ZMkS7b333kvcd/nll2urV6/ud/2vf/1r7YILLtAsFos2Z84c7fe///0YR2y84bxna9euTVxbVFSkXX/99dru3bsNiNoYb775pgac9dH3Hq1evVq7/PLLz3rMwoULNYvFok2ZMkXbtGlTSmIRZUAEQTCcGCMSBMFwIhEJgmA4kYgEQTCcSESCIBhOJCJBEAwnEpEgCIYTiUgQBMOJRCSMK5s3byY7Ozvx9b/+67+ycOHCxNdr1qxh1apVYx6XMDIiEQkDWrNmDZIk8bWvfe2s++69914kSWLNmjX9rk91AqisrOSpp57qd9stt9zC4cOHB33Mxo0b+5UvXbFiBWvXrk1pXELqiUQkDKq8vJwXXnihX62ZUCjEli1bqKioMCQmu91OYWHhoPd7PJ5+LSZhfBCJSBjU4sWLKS8v56WXXkrc9tJLL1FRUcGiRYtG9NwDtVRWrVqVaGWtWLGC+vp6/vEf/zFR2B7O7pqd6fSW2Zo1a3j77bfZuHFj4jlqa2uZNm0a3/ve9/o9rrq6GkmSRAkQg4hEJJzTHXfcwaZNmxJfP/vss9x+++2j/rovvfQSZWVlPPbYY4nC9sO1ceNGli1bxle+8pXEc1RUVJz1PQFs2rSJT37yk0ybNi1V34IwDCIRCef0pS99ib/85S/U19dTX1/P9u3b+dKXvjTqr5ubm4uiKLhcLoqLi5Mq8ObxeLBYLDgcjsRzKIrCmjVrOHToUOKooWg0ypYtW7jjjjtS/W0IQyRKxQrnVFBQwA033MDmzZvRNI0bbriB/Px8o8MakdLSUm644QaeffZZlixZwu9+9zvC4TCf/exnjQ5twhItIuG87rjjDjZv3szPf/7zlLUaZFnmzAo00Wg0Jc89FHfddVdiIH7Tpk3ccsstOByOMXt9oT+RiITzuvbaa4lEIkSjUa655pqUPGdBQUG/cZ94PH7WYZAWi4V4PD6i1xnsOa6//nqcTifPPPMMr732muiWGUx0zYTzUhSFgwcPJv49mO7ubqqrq/vdlpeXR3l5+VnXXnHFFaxbt47f//73TJ06lSeffJKurq5+11RWVrJt2zY+//nPY7Vak+oSVlZWsmPHDurq6sjKyiI3NxdZlhNjRevXr2f69OkTprZ3uhItImFI3G43brf7nNe89dZbLFq0qN/Ho48+OuC1d9xxB6tXr+bLX/4yl19+OVOmTGHlypX9rnnssceoq6tj6tSpFBQUJBX3/fffj6IozJ49m4KCAhoaGhL33XnnnUQikTGZBRTOTZSKFSasP//5z1x55ZU0NjaedXCgMLZEIhImnHA4TFtbG6tXr6a4uJjnn3/e6JAmPNE1EyacX/7yl0yePJmuri7+/d//3ehwBESLSBCENCBaRIIgGE4kIkEQDCcSkSAIhhOJSBAEw4lEJAiC4UQiEgTBcCIRCYJgOJGIBEEwnEhEgiAY7v8HI+HGvByWQjQAAAAASUVORK5CYII=", "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": 31, "id": "745adde1", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T11:22:46.563220Z", "iopub.status.busy": "2024-03-26T11:22:46.562550Z", "iopub.status.idle": "2024-03-26T11:22:46.823754Z", "shell.execute_reply": "2024-03-26T11:22:46.822807Z" }, "papermill": { "duration": 0.280379, "end_time": "2024-03-26T11:22:46.826245", "exception": false, "start_time": "2024-03-26T11:22:46.545866", "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": 32, "id": "eabe1bab", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T11:22:46.860128Z", "iopub.status.busy": "2024-03-26T11:22:46.859661Z", "iopub.status.idle": "2024-03-26T11:22:47.145077Z", "shell.execute_reply": "2024-03-26T11:22:47.144122Z" }, "papermill": { "duration": 0.305149, "end_time": "2024-03-26T11:22:47.147632", "exception": false, "start_time": "2024-03-26T11:22:46.842483", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAS8AAAEmCAYAAAAz0RYQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABSCUlEQVR4nO2deXxMZ/fAvzOTPbIiEYRYY6eWKC1aoqhSXX710ldRpapKpa2iSlVb2qJokZamK6VV1FulRe17CaW2EsSSRYSskklm7u+Pm5nMyDaTzJo8389nPu7cee6958qdM+c55zznKCRJkhAIBAInQ2lvAQQCgaA8COUlEAicEqG8BAKBUyKUl0AgcEqE8hIIBE6JUF4CgcApEcpLIBA4JUJ5CQQCp8TF3gLYGq1Wy40bN/Dx8UGhUNhbHIFAcA+SJJGRkUHt2rVRKku2r6qc8rpx4wahoaH2FkMgEJTB1atXqVu3bomfVznl5ePjA8j/Mb6+vnaWRiAQ3Et6ejqhoaH672pJVDnlpZsq+vr6CuUlEDgwZbl1hMNeIBA4JUJ5CQQCp0QoL4FA4JRUOZ+XKUiSRH5+PhqNxt6iCCyESqXCxcVFpMdUIoTyuge1Wk1CQgLZ2dn2FkVgYby8vAgJCcHNzc3eoggsgFBeBmi1Wi5duoRKpaJ27dq4ubmJX+pKgCRJqNVqbt68yaVLl2jSpEmpyY8Cy3NXrcHDVWnR75NQXgao1Wq0Wi2hoaF4eXnZWxyBBfH09MTV1ZUrV66gVqvx8PCwt0hVind/Pc2p62m8M7AFHeoHWuScQnkVg/hVrpyIv6t9uHY7m5/+ukq+VkJrwY4Z4q8pEAisytKdF8nXSjzQuDqdwixjdYFQXgKBwIrorC6Aib2aWvTcQnkJKg0jRoxg0KBB9hZDYMDSnRfJ08hWV0QDy1ldIJRXpeGhhx7i1VdftbcYAoGe63fuWs3qAqG8BA5GXl6evUUQWIilOy6Qp5Ho2sjyVhcI5VUmkiSRrc63y8vUZuYjRoxg165dLFq0CIVCgUKhoG7duixbtsxoXGxsLEqlkitXrgCwYMECWrdujbe3N6GhoYwbN47MzEyjY/bu3Uu3bt3w9PQkNDSUCRMmkJWVZZJcCQkJ9O/fH09PTxo0aMCqVasICwtj4cKF+jEKhYJly5YxcOBAvL29ef/999FoNIwaNYoGDRrg6elJeHg4ixYtMjq3RqMhKioKf39/qlevzuTJk03+/xJYn+t37vKj3upqYpVriFSJMribp6HFjN/tcu3T7/bBy63sP9GiRYs4f/48rVq14t133wVg/vz5rFq1ipdeekk/buXKlTzwwAPUr18fkFMHFi9eTIMGDYiLi2PcuHFMnjyZpUuXAnDx4kX69u3Le++9R0xMDDdv3mT8+PGMHz+er776qky5nnvuOVJSUti5cyeurq5ERUWRnJxcZNw777zD3LlzWbhwIS4uLmi1WurWrctPP/1E9erV2b9/P2PGjCEkJIRnnnlGf39ff/01MTExNG/enPnz57N+/Xp69uxZ9n+swOoYWl2dG1a3yjWE8qoE+Pn54ebmhpeXF7Vq1QLg2WefZf78+cTHx1OvXj20Wi2rV69m+vTp+uMMfWRhYWG89957jB07Vq+85syZw7PPPqsf16RJExYvXkyPHj1YtmxZqYmeZ8+eZdu2bRw5coSOHTsCsGLFCpo0KforPHToUEaOHGm0b9asWfrtBg0acODAAX788Ue98lq4cCFTp07lySefBCA6Oprff7fPj4zAmBs2sLpAKK8y8XRVcfrdPna7dnlp164dzZs3Z9WqVUyZMoVdu3aRnJzM//3f/+nHbNu2jTlz5nD27FnS09PJz88nJyeH7OxsvLy8OHHiBH///TcrV67UHyNJkn4ZVfPmzUu8/rlz53BxcaF9+/b6fY0bNyYgIKDIWJ1yM2TJkiXExMQQHx/P3bt3UavVtGvXDoC0tDQSEhLo3LmzfryLiwsdO3YUU0cHYOlO2erq0tB6VhcI5VUmCoXCpKmbI/Lss8/qldeqVavo27cv1avLD9Ply5d57LHHeOmll3j//fcJDAxk7969jBo1CrVajZeXF5mZmbz44otMmDChyLnr1atnMTm9vb2N3q9evZrXX3+d+fPn06VLF3x8fPj44485dOiQxa4psA437txlzZECqyvSelYXCOVVaXBzcytSwmfo0KFMnz6do0ePsnbtWqKjo/WfHT16FK1Wy/z58/XLZn788Uej49u3b8/p06dp3Lix2fKEh4eTn59PbGwsHTp0AODChQvcvn27zGP37dtH165dGTdunH7fxYsX9dt+fn6EhIRw6NAhunfvDkB+fj5Hjx41svQEtsfQ6rrfilYXiGhjpSEsLIxDhw5x+fJlUlJS0Gq1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JhIUFGS0z8XFhcDAwBK7dwNMmjSJrl278vjjj1tbRLMp7z0ZkpKSwuzZsxkzZow1RCzz2iV1YC9JfnM7sNua8tzTvbz55pvUrl27iJJ2doTyuocpU6agUChKfZ09e7Zc5964cSN//vknCxcutKzQZWDNezIkPT2d/v3706JFC955552KCy6oMHPnzmX16tWsX78eDw8Pe4tjUapcSZyyeO211xgxYkSpYxo2bEitWrVITk422p+fn09qamqJ08E///yTixcv4u/vb7T/qaeeolu3buzcubMCkpeMNe9JR0ZGBn379sXHx4f169fj6upaUbHNxhYd2G1Nee5Jx7x585g7dy7btm2jTZs21hTTPtjb6eas6Jzbf/31l37f77//XqpzOyEhQTp58qTRC5AWLVokxcXF2Ur0EinPPUmSJKWlpUn333+/1KNHDykrK8sWopZIRESENH78eP17jUYj1alTp1SH/WOPPWa0r0uXLg7nsDfnniRJkj788EPJ19dXOnDggC1EtAtCeVWAvn37Svfdd5906NAhae/evVKTJk2M0gquXbsmhYeHS4cOHSrxHDhQtFGSzL+ntLQ0qXPnzlLr1q2lCxcuSAkJCfpXfn6+zeVfvXq15O7uLn399dfS6dOnpTFjxkj+/v5SYmKiJEmSNGzYMGnKlCn68fv27ZNcXFykefPmSWfOnJFmzpzpkKkS5tzT3LlzJTc3N2nt2rVGf4+MjAx73YJVEMqrAty6dUsaMmSIVK1aNcnX11caOXKk0QNy6dIlCZB27NhR4jkcTXmZe087duyQgGJfly5dsss9fPrpp1K9evUkNzc3KSIiQjp48KD+sx49ekjDhw83Gv/jjz9KTZs2ldzc3KSWLVtKmzZtsrHEZWPOPdWvX7/Yv8fMmTNtL7gVESVxBAKBUyKijQKBwCkRyksgEDglQnkJBAKnRCgvgUDglAjlJRAInBKhvAQCgVMilJdAIHBKhPISCAROiVBeAodgxIgRxVa76Nu3r71FEzgooqqEwGHo27cvX331ldG+krpA5+XlFalcoVarcXNzM/u65T1OYF+E5SVwGNzd3alVq5bRKyAgAACFQsGyZcsYOHAg3t7evP/++7zzzju0a9eOFStW0KBBA329qvj4eB5//HGqVauGr68vzzzzjFFJmZKOEzgXQnkJnIZ33nmHJ554gpMnT/L8888DcOHCBX7++WfWrVvH8ePH0Wq1PP7446SmprJr1y62bt1KXFwcgwcPNjrXvccJnA8xbRQ4DL/++ivVqlUz2jdt2jSmTZsGwNChQxk5cqTR52q1mm+//ZaaNWsCsHXrVk6ePMmlS5cIDQ0F4Ntvv6Vly5YcOXKETp06FXucwPkQykvgMDz88MMsW7bMaJ9h0wjDxiA66tevb6SAzpw5Q2hoqF5xAbRo0QJ/f3/OnDmjV173HidwPoTyEjgM3t7eNG7cuNTPTdln6rUEzo3weQkqFc2bN+fq1atcvXpVv+/06dPcuXOHFi1a2FEygaURlpfAYcjNzS3SzsvFxYUaNWqYfI7IyEhat27Ns88+y8KFC8nPz2fcuHH06NGj2GmnwHkRlpfAYdiyZQshISFGrwcffNCscygUCn755RcCAgLo3r07kZGRNGzYkDVr1lhJaoG9EGWgBQKBUyIsL4FA4JQI5SUQCJwSobwEAoFTIpSXQCBwSoTyEggETolQXgKBwCkRyksgEDglQnkJBAKnRCgvgUDglAjlJRAInBKhvAQCgVMilJdAIHBK/h90ym0Q9zdQiQAAAABJRU5ErkJggg==", "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.016554, "end_time": "2024-03-26T11:22:47.180755", "exception": false, "start_time": "2024-03-26T11:22:47.164201", "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": 690.399603, "end_time": "2024-03-26T11:22:50.018645", "environment_variables": {}, "exception": null, "input_path": "eval/treatment/tvae/1/mlu-eval-load.ipynb", "output_path": "eval/treatment/tvae/1/mlu-eval-load.ipynb", "parameters": { "allow_same_prediction": true, "dataset": "treatment", "dataset_name": "treatment", "debug": false, "folder": "eval", "gp": true, "gp_multiply": true, "log_wandb": false, "param_index": 0, "path": "eval/treatment/tvae/1", "path_prefix": "../../../../", "random_seed": 1, "single_model": "tvae" }, "start_time": "2024-03-26T11:11:19.619042", "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 }