diff --git "a/insurance/tab_ddpm_concat/mlu-eval.ipynb" "b/insurance/tab_ddpm_concat/mlu-eval.ipynb" new file mode 100644--- /dev/null +++ "b/insurance/tab_ddpm_concat/mlu-eval.ipynb" @@ -0,0 +1,2413 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "982e76f5", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-23T02:43:21.416336Z", + "iopub.status.busy": "2024-03-23T02:43:21.415927Z", + "iopub.status.idle": "2024-03-23T02:43:21.449367Z", + "shell.execute_reply": "2024-03-23T02:43:21.448672Z" + }, + "papermill": { + "duration": 0.049244, + "end_time": "2024-03-23T02:43:21.451376", + "exception": false, + "start_time": "2024-03-23T02:43:21.402132", + "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-23T02:43:21.477099Z", + "iopub.status.busy": "2024-03-23T02:43:21.476294Z", + "iopub.status.idle": "2024-03-23T02:43:21.483018Z", + "shell.execute_reply": "2024-03-23T02:43:21.482186Z" + }, + "papermill": { + "duration": 0.021722, + "end_time": "2024-03-23T02:43:21.485015", + "exception": false, + "start_time": "2024-03-23T02:43:21.463293", + "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-23T02:43:21.508289Z", + "iopub.status.busy": "2024-03-23T02:43:21.507988Z", + "iopub.status.idle": "2024-03-23T02:43:21.511920Z", + "shell.execute_reply": "2024-03-23T02:43:21.511189Z" + }, + "papermill": { + "duration": 0.017649, + "end_time": "2024-03-23T02:43:21.513722", + "exception": false, + "start_time": "2024-03-23T02:43:21.496073", + "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-23T02:43:21.536975Z", + "iopub.status.busy": "2024-03-23T02:43:21.536705Z", + "iopub.status.idle": "2024-03-23T02:43:21.540551Z", + "shell.execute_reply": "2024-03-23T02:43:21.539745Z" + }, + "executionInfo": { + "elapsed": 678, + "status": "ok", + "timestamp": 1696841022168, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "ns5hFcVL2yvs", + "papermill": { + "duration": 0.017667, + "end_time": "2024-03-23T02:43:21.542525", + "exception": false, + "start_time": "2024-03-23T02:43:21.524858", + "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-23T02:43:21.565424Z", + "iopub.status.busy": "2024-03-23T02:43:21.565183Z", + "iopub.status.idle": "2024-03-23T02:43:21.570712Z", + "shell.execute_reply": "2024-03-23T02:43:21.569865Z" + }, + "papermill": { + "duration": 0.019222, + "end_time": "2024-03-23T02:43:21.572651", + "exception": false, + "start_time": "2024-03-23T02:43:21.553429", + "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": "04e127fc", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-23T02:43:21.597281Z", + "iopub.status.busy": "2024-03-23T02:43:21.597006Z", + "iopub.status.idle": "2024-03-23T02:43:21.601689Z", + "shell.execute_reply": "2024-03-23T02:43:21.600943Z" + }, + "papermill": { + "duration": 0.019065, + "end_time": "2024-03-23T02:43:21.603536", + "exception": false, + "start_time": "2024-03-23T02:43:21.584471", + "status": "completed" + }, + "tags": [ + "injected-parameters" + ] + }, + "outputs": [], + "source": [ + "# Parameters\n", + "dataset = \"insurance\"\n", + "dataset_name = \"insurance\"\n", + "single_model = \"tab_ddpm_concat\"\n", + "gp = True\n", + "gp_multiply = True\n", + "random_seed = 3\n", + "debug = False\n", + "folder = \"eval\"\n", + "path_prefix = \"../../../../\"\n", + "path = \"eval/insurance/tab_ddpm_concat/3\"\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.01087, + "end_time": "2024-03-23T02:43:21.625568", + "exception": false, + "start_time": "2024-03-23T02:43:21.614698", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "5f45b1d0", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-23T02:43:21.648463Z", + "iopub.status.busy": "2024-03-23T02:43:21.648209Z", + "iopub.status.idle": "2024-03-23T02:43:21.657226Z", + "shell.execute_reply": "2024-03-23T02:43:21.656431Z" + }, + "executionInfo": { + "elapsed": 7, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "UdvXYv3c3LXy", + "papermill": { + "duration": 0.022549, + "end_time": "2024-03-23T02:43:21.659004", + "exception": false, + "start_time": "2024-03-23T02:43:21.636455", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/kaggle/working\n", + "/kaggle/working/eval/insurance/tab_ddpm_concat/3\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-23T02:43:21.682468Z", + "iopub.status.busy": "2024-03-23T02:43:21.682207Z", + "iopub.status.idle": "2024-03-23T02:43:23.669777Z", + "shell.execute_reply": "2024-03-23T02:43:23.668713Z" + }, + "papermill": { + "duration": 2.001732, + "end_time": "2024-03-23T02:43:23.672143", + "exception": false, + "start_time": "2024-03-23T02:43:21.670411", + "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-23T02:43:23.699630Z", + "iopub.status.busy": "2024-03-23T02:43:23.699077Z", + "iopub.status.idle": "2024-03-23T02:43:23.713239Z", + "shell.execute_reply": "2024-03-23T02:43:23.712333Z" + }, + "papermill": { + "duration": 0.030141, + "end_time": "2024-03-23T02:43:23.715333", + "exception": false, + "start_time": "2024-03-23T02:43:23.685192", + "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-23T02:43:23.744201Z", + "iopub.status.busy": "2024-03-23T02:43:23.743897Z", + "iopub.status.idle": "2024-03-23T02:43:23.751617Z", + "shell.execute_reply": "2024-03-23T02:43:23.750857Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "Vrl2QkoV3o_8", + "papermill": { + "duration": 0.022187, + "end_time": "2024-03-23T02:43:23.753794", + "exception": false, + "start_time": "2024-03-23T02:43:23.731607", + "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-23T02:43:23.778747Z", + "iopub.status.busy": "2024-03-23T02:43:23.778484Z", + "iopub.status.idle": "2024-03-23T02:43:23.873632Z", + "shell.execute_reply": "2024-03-23T02:43:23.872697Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "TilUuFk9vqMb", + "papermill": { + "duration": 0.109645, + "end_time": "2024-03-23T02:43:23.875814", + "exception": false, + "start_time": "2024-03-23T02:43:23.766169", + "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-23T02:43:23.901793Z", + "iopub.status.busy": "2024-03-23T02:43:23.901508Z", + "iopub.status.idle": "2024-03-23T02:43:28.468900Z", + "shell.execute_reply": "2024-03-23T02:43:28.467933Z" + }, + "executionInfo": { + "elapsed": 3113, + "status": "ok", + "timestamp": 1696841025277, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "7Abt8nStvr9Z", + "papermill": { + "duration": 4.583327, + "end_time": "2024-03-23T02:43:28.471403", + "exception": false, + "start_time": "2024-03-23T02:43:23.888076", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-03-23 02:43:26.147756: 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-23 02:43:26.147815: 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-23 02:43:26.149466: 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-23T02:43:28.496516Z", + "iopub.status.busy": "2024-03-23T02:43:28.495935Z", + "iopub.status.idle": "2024-03-23T02:43:28.502497Z", + "shell.execute_reply": "2024-03-23T02:43:28.501772Z" + }, + "papermill": { + "duration": 0.021058, + "end_time": "2024-03-23T02:43:28.504307", + "exception": false, + "start_time": "2024-03-23T02:43:28.483249", + "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-23T02:43:28.529659Z", + "iopub.status.busy": "2024-03-23T02:43:28.529381Z", + "iopub.status.idle": "2024-03-23T02:43:36.715273Z", + "shell.execute_reply": "2024-03-23T02:43:36.714194Z" + }, + "executionInfo": { + "elapsed": 20137, + "status": "ok", + "timestamp": 1696841045408, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "tbaguWxAvtPi", + "papermill": { + "duration": 8.200979, + "end_time": "2024-03-23T02:43:36.717518", + "exception": false, + "start_time": "2024-03-23T02:43:28.516539", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", + " warnings.warn(\n", + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:119: ConvergenceWarning: Number of distinct clusters (6) found smaller than n_clusters (10). Possibly due to duplicate points in X.\n", + " .fit(X)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/sklearn/preprocessing/_encoders.py:868: FutureWarning: `sparse` was renamed to `sparse_output` in version 1.2 and will be removed in 1.4. `sparse_output` is ignored unless you leave `sparse` to its default value.\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "from ml_utility_loss.loss_learning.estimator.preprocessing import DataPreprocessor\n", + "\n", + "preprocessor = DataPreprocessor(\n", + " task,\n", + " target=target,\n", + " cat_features=cat_features,\n", + " mixed_features=mixed_features,\n", + " longtail_features=longtail_features,\n", + " integer_features=integer_features,\n", + " lct_ae_embedding_size=lct_ae_embedding_size,\n", + " lct_ae_params=lct_ae_params,\n", + " lct_ae=lct_ae,\n", + " tab_ddpm_normalization=tab_ddpm_normalization,\n", + " tab_ddpm_cat_encoding=tab_ddpm_cat_encoding,\n", + " tab_ddpm_y_policy=tab_ddpm_y_policy,\n", + " tab_ddpm_is_y_cond=tab_ddpm_is_y_cond,\n", + " realtabformer_embedding=rtf_embed,\n", + " realtabformer_params=rtf_params,\n", + ")\n", + "preprocessor.fit(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "a9c9b110", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2024-03-23T02:43:36.745175Z", + "iopub.status.busy": "2024-03-23T02:43:36.744856Z", + "iopub.status.idle": "2024-03-23T02:43:36.751481Z", + "shell.execute_reply": "2024-03-23T02:43:36.750608Z" + }, + "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.022855, + "end_time": "2024-03-23T02:43:36.753275", + "exception": false, + "start_time": "2024-03-23T02:43:36.730420", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'tvae': 36,\n", + " 'realtabformer': (19, 551, Embedding(551, 800), True),\n", + " 'lct_gan': 29,\n", + " 'tab_ddpm_concat': 12}" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "preprocessor.adapter_sizes" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "3cb9ed90", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-23T02:43:36.777638Z", + "iopub.status.busy": "2024-03-23T02:43:36.777388Z", + "iopub.status.idle": "2024-03-23T02:43:36.782020Z", + "shell.execute_reply": "2024-03-23T02:43:36.781186Z" + }, + "papermill": { + "duration": 0.018973, + "end_time": "2024-03-23T02:43:36.783868", + "exception": false, + "start_time": "2024-03-23T02:43:36.764895", + "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-23T02:43:36.808459Z", + "iopub.status.busy": "2024-03-23T02:43:36.808193Z", + "iopub.status.idle": "2024-03-23T02:43:37.246567Z", + "shell.execute_reply": "2024-03-23T02:43:37.245650Z" + }, + "papermill": { + "duration": 0.453098, + "end_time": "2024-03-23T02:43:37.248594", + "exception": false, + "start_time": "2024-03-23T02:43:36.795496", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../insurance/_cache_aug_test/tab_ddpm_concat/all inf False\n", + "../../../../ml-utility-loss/aug_test/insurance [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Caching in ../../../../insurance/_cache_bs_test/tab_ddpm_concat/all inf False\n", + "../../../../ml-utility-loss/bs_test/insurance [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Caching in ../../../../insurance/_cache_synth_test/tab_ddpm_concat/all inf False\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "../../../../ml-utility-loss/synthetics/insurance [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "1050\n" + ] + } + ], + "source": [ + "from ml_utility_loss.loss_learning.estimator.pipeline import load_dataset_4\n", + "\n", + "test_set = load_dataset_4(\n", + " dataset_dir=os.path.join(path_prefix, \"ml-utility-loss/\"),\n", + " dataset_name=dataset_name,\n", + " preprocessor=preprocessor,\n", + " model=single_model,\n", + " cache_dir=path_prefix,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "14ff8b40", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-23T02:43:37.277295Z", + "iopub.status.busy": "2024-03-23T02:43:37.276943Z", + "iopub.status.idle": "2024-03-23T02:43:37.593531Z", + "shell.execute_reply": "2024-03-23T02:43:37.592656Z" + }, + "executionInfo": { + "elapsed": 588, + "status": "ok", + "timestamp": 1696841049215, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "NgahtU1q9uLO", + "papermill": { + "duration": 0.33287, + "end_time": "2024-03-23T02:43:37.595617", + "exception": false, + "start_time": "2024-03-23T02:43:37.262747", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'Body': 'twin_encoder',\n", + " 'loss_balancer_meta': True,\n", + " 'loss_balancer_log': False,\n", + " 'loss_balancer_lbtw': False,\n", + " 'pma_skip_small': False,\n", + " 'isab_skip_small': False,\n", + " 'layer_norm': False,\n", + " 'pma_layer_norm': False,\n", + " 'attn_residual': True,\n", + " 'tf_n_layers_dec': False,\n", + " 'tf_isab_rank': 0,\n", + " 'tf_layer_norm': False,\n", + " 'tf_pma_start': -1,\n", + " 'head_n_seeds': 0,\n", + " 'tf_pma_low': 16,\n", + " 'dropout': 0,\n", + " 'combine_mode': 'diff_left',\n", + " 'tf_isab_mode': 'separate',\n", + " 'grad_loss_fn': torch.Tensor>,\n", + " 'single_model': True,\n", + " 'bias': True,\n", + " 'bias_final': True,\n", + " 'pma_ffn_mode': 'shared',\n", + " 'patience': 10,\n", + " 'inds_init_mode': 'fixnorm',\n", + " 'grad_clip': 0.7,\n", + " 'head_final_mul': 'identity',\n", + " 'gradient_penalty_mode': {'gradient_penalty': 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.79,\n", + " 'loss_balancer_r': 0.95,\n", + " 'dataset_size': 2048,\n", + " 'batch_size': 8,\n", + " 'epochs': 100,\n", + " 'n_warmup_steps': 100,\n", + " 'Optim': torch_optimizer.diffgrad.DiffGrad,\n", + " 'fixed_role_model': 'tab_ddpm_concat',\n", + " 'd_model': 256,\n", + " 'attn_activation': torch.nn.modules.activation.LeakyReLU,\n", + " 'tf_d_inner': 512,\n", + " 'tf_n_layers_enc': 4,\n", + " 'tf_n_head': 64,\n", + " 'tf_activation': ml_utility_loss.activations.LeakyHardsigmoid,\n", + " 'tf_activation_final': ml_utility_loss.activations.LeakyHardsigmoid,\n", + " 'ada_d_hid': 1024,\n", + " 'ada_n_layers': 7,\n", + " 'ada_activation': torch.nn.modules.activation.ReLU,\n", + " 'ada_activation_final': torch.nn.modules.activation.Softsign,\n", + " 'head_d_hid': 128,\n", + " 'head_n_layers': 9,\n", + " 'head_n_head': 64,\n", + " 'head_activation': torch.nn.modules.activation.PReLU,\n", + " 'head_activation_final': torch.nn.modules.activation.Softsign,\n", + " 'models': ['tab_ddpm_concat'],\n", + " 'max_seconds': 3600,\n", + " 'tf_lora': False,\n", + " 'tf_num_inds': 32,\n", + " 'ada_n_seeds': 0,\n", + " 'gradient_penalty_kwargs': {'mag_loss': True,\n", + " 'mse_mag': 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.1, 'multiply': True, 'forgive_over': True}}}" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import ml_utility_loss.loss_learning.estimator.params2 as PARAMS\n", + "from ml_utility_loss.tuning import map_parameters\n", + "from ml_utility_loss.loss_learning.estimator.params.default import update_param_space, update_param_space_2\n", + "import wandb\n", + "\n", + "#\"\"\"\n", + "param_space = {\n", + " **getattr(PARAMS, dataset_name).PARAM_SPACE,\n", + "}\n", + "params = {\n", + " **getattr(PARAMS, dataset_name).BESTS[param_index],\n", + "}\n", + "if gp:\n", + " params[\"gradient_penalty_mode\"] = \"ALL\"\n", + " params[\"mse_mag\"] = True\n", + " if gp_multiply:\n", + " params[\"mse_mag_multiply\"] = True\n", + " #params[\"mse_mag_target\"] = 1.0\n", + " else:\n", + " params[\"mse_mag_multiply\"] = False\n", + " #params[\"mse_mag_target\"] = 0.1\n", + "else:\n", + " params[\"gradient_penalty_mode\"] = \"NONE\"\n", + " params[\"mse_mag\"] = False\n", + "params[\"single_model\"] = False\n", + "if models:\n", + " params[\"models\"] = models\n", + "if single_model:\n", + " params[\"fixed_role_model\"] = single_model\n", + " params[\"single_model\"] = True\n", + " params[\"models\"] = [single_model]\n", + "if params[\"fixed_role_model\"] == \"realtabformer\" and dataset_name == \"treatment\":\n", + " params[\"batch_size\"] = 2\n", + "params[\"max_seconds\"] = 3600\n", + "params[\"patience\"] = 10\n", + "params[\"epochs\"] = 100\n", + "if debug:\n", + " params[\"epochs\"] = 2\n", + "with open(\"params.json\", \"w\") as f:\n", + " json.dump(params, f)\n", + "params = map_parameters(params, param_space=param_space)\n", + "params" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "a48bd9e9", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-23T02:43:37.623311Z", + "iopub.status.busy": "2024-03-23T02:43:37.622970Z", + "iopub.status.idle": "2024-03-23T02:43:37.724473Z", + "shell.execute_reply": "2024-03-23T02:43:37.723596Z" + }, + "papermill": { + "duration": 0.117602, + "end_time": "2024-03-23T02:43:37.726479", + "exception": false, + "start_time": "2024-03-23T02:43:37.608877", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../insurance/_cache_aug_train/tab_ddpm_concat/all inf False\n", + "split df ratio is 0\n", + "../../../../ml-utility-loss/aug_train/insurance [400, 0]\n", + "Caching in ../../../../insurance/_cache_aug_val/tab_ddpm_concat/all inf False\n", + "split df ratio is 1\n", + "../../../../ml-utility-loss/aug_val/insurance [0, 200]\n", + "Caching in ../../../../insurance/_cache_bs_train/tab_ddpm_concat/all inf False\n", + "split df ratio is 0\n", + "../../../../ml-utility-loss/bs_train/insurance [100, 0]\n", + "Caching in ../../../../insurance/_cache_bs_val/tab_ddpm_concat/all inf False\n", + "split df ratio is 1\n", + "../../../../ml-utility-loss/bs_val/insurance [0, 50]\n", + "Caching in ../../../../insurance/_cache_synth/tab_ddpm_concat/all inf False\n", + "Splitting without random!\n", + "Split with reverse index!\n", + "../../../../ml-utility-loss/synthetics/insurance [400, 200]\n", + "[900, 450]\n", + "[900, 450]\n" + ] + } + ], + "source": [ + "train_set, val_set = datasetsn(model=params[\"fixed_role_model\"], synth_data=params[\"synth_data\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "2fcb1418", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "execution": { + "iopub.execute_input": "2024-03-23T02:43:37.753954Z", + "iopub.status.busy": "2024-03-23T02:43:37.753678Z", + "iopub.status.idle": "2024-03-23T02:43:38.163608Z", + "shell.execute_reply": "2024-03-23T02:43:38.162714Z" + }, + "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.426011, + "end_time": "2024-03-23T02:43:38.165654", + "exception": false, + "start_time": "2024-03-23T02:43:37.739643", + "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-23T02:43:38.194496Z", + "iopub.status.busy": "2024-03-23T02:43:38.193448Z", + "iopub.status.idle": "2024-03-23T02:43:38.198024Z", + "shell.execute_reply": "2024-03-23T02:43:38.197317Z" + }, + "papermill": { + "duration": 0.020725, + "end_time": "2024-03-23T02:43:38.199881", + "exception": false, + "start_time": "2024-03-23T02:43:38.179156", + "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-23T02:43:38.226177Z", + "iopub.status.busy": "2024-03-23T02:43:38.225477Z", + "iopub.status.idle": "2024-03-23T02:43:38.232402Z", + "shell.execute_reply": "2024-03-23T02:43:38.231573Z" + }, + "papermill": { + "duration": 0.022101, + "end_time": "2024-03-23T02:43:38.234226", + "exception": false, + "start_time": "2024-03-23T02:43:38.212125", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "9613961" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def count_parameters(model):\n", + " return sum(p.numel() for p in model.parameters() if p.requires_grad)\n", + "\n", + "count_parameters(model)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "bd386e57", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-23T02:43:38.261068Z", + "iopub.status.busy": "2024-03-23T02:43:38.260433Z", + "iopub.status.idle": "2024-03-23T02:43:38.349346Z", + "shell.execute_reply": "2024-03-23T02:43:38.348499Z" + }, + "papermill": { + "duration": 0.104146, + "end_time": "2024-03-23T02:43:38.351163", + "exception": false, + "start_time": "2024-03-23T02:43:38.247017", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "========================================================================================================================\n", + "Layer (type:depth-idx) Output Shape Param #\n", + "========================================================================================================================\n", + "MLUtilitySingle [2, 1071, 12] --\n", + "├─Adapter: 1-1 [2, 1071, 12] --\n", + "│ └─Sequential: 2-1 [2, 1071, 256] --\n", + "│ │ └─FeedForward: 3-1 [2, 1071, 1024] --\n", + "│ │ │ └─Linear: 4-1 [2, 1071, 1024] 13,312\n", + "│ │ │ └─ReLU: 4-2 [2, 1071, 1024] --\n", + "│ │ └─FeedForward: 3-2 [2, 1071, 1024] --\n", + "│ │ │ └─Linear: 4-3 [2, 1071, 1024] 1,049,600\n", + "│ │ │ └─ReLU: 4-4 [2, 1071, 1024] --\n", + "│ │ └─FeedForward: 3-3 [2, 1071, 1024] --\n", + "│ │ │ └─Linear: 4-5 [2, 1071, 1024] 1,049,600\n", + "│ │ │ └─ReLU: 4-6 [2, 1071, 1024] --\n", + "│ │ └─FeedForward: 3-4 [2, 1071, 1024] --\n", + "│ │ │ └─Linear: 4-7 [2, 1071, 1024] 1,049,600\n", + "│ │ │ └─ReLU: 4-8 [2, 1071, 1024] --\n", + "│ │ └─FeedForward: 3-5 [2, 1071, 1024] --\n", + "│ │ │ └─Linear: 4-9 [2, 1071, 1024] 1,049,600\n", + "│ │ │ └─ReLU: 4-10 [2, 1071, 1024] --\n", + "│ │ └─FeedForward: 3-6 [2, 1071, 1024] --\n", + "│ │ │ └─Linear: 4-11 [2, 1071, 1024] 1,049,600\n", + "│ │ │ └─ReLU: 4-12 [2, 1071, 1024] --\n", + "│ │ └─FeedForward: 3-7 [2, 1071, 256] --\n", + "│ │ │ └─Linear: 4-13 [2, 1071, 256] 262,400\n", + "│ │ │ └─Softsign: 4-14 [2, 1071, 256] --\n", + "├─Adapter: 1-2 [2, 267, 12] (recursive)\n", + "│ └─Sequential: 2-2 [2, 267, 256] (recursive)\n", + "│ │ └─FeedForward: 3-8 [2, 267, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-15 [2, 267, 1024] (recursive)\n", + "│ │ │ └─ReLU: 4-16 [2, 267, 1024] --\n", + "│ │ └─FeedForward: 3-9 [2, 267, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-17 [2, 267, 1024] (recursive)\n", + "│ │ │ └─ReLU: 4-18 [2, 267, 1024] --\n", + "│ │ └─FeedForward: 3-10 [2, 267, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-19 [2, 267, 1024] (recursive)\n", + "│ │ │ └─ReLU: 4-20 [2, 267, 1024] --\n", + "│ │ └─FeedForward: 3-11 [2, 267, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-21 [2, 267, 1024] (recursive)\n", + "│ │ │ └─ReLU: 4-22 [2, 267, 1024] --\n", + "│ │ └─FeedForward: 3-12 [2, 267, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-23 [2, 267, 1024] (recursive)\n", + "│ │ │ └─ReLU: 4-24 [2, 267, 1024] --\n", + "│ │ └─FeedForward: 3-13 [2, 267, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-25 [2, 267, 1024] (recursive)\n", + "│ │ │ └─ReLU: 4-26 [2, 267, 1024] --\n", + "│ │ └─FeedForward: 3-14 [2, 267, 256] (recursive)\n", + "│ │ │ └─Linear: 4-27 [2, 267, 256] (recursive)\n", + "│ │ │ └─Softsign: 4-28 [2, 267, 256] --\n", + "├─TwinEncoder: 1-3 [2, 4096] --\n", + "│ └─Encoder: 2-3 [2, 16, 256] --\n", + "│ │ └─ModuleList: 3-16 -- (recursive)\n", + "│ │ │ ���─EncoderLayer: 4-29 [2, 1071, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-1 [2, 1071, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-1 [2, 32, 256] 8,192\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-2 [2, 32, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-1 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-2 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-3 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-4 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-1 [2, 64, 32, 1071] --\n", + "│ │ │ │ │ │ └─Linear: 7-5 [2, 32, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-6 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-3 [2, 1071, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-7 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-8 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-9 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-10 [2, 64, 1071, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-2 [2, 64, 1071, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-11 [2, 1071, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-12 [2, 1071, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-2 [2, 1071, 256] --\n", + "│ │ │ │ │ └─Linear: 6-4 [2, 1071, 512] 131,584\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-5 [2, 1071, 512] --\n", + "│ │ │ │ │ └─Linear: 6-6 [2, 1071, 256] 131,328\n", + "│ │ │ └─EncoderLayer: 4-30 [2, 1071, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-3 [2, 1071, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-7 [2, 32, 256] 8,192\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-8 [2, 32, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-13 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-14 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-15 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-16 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-3 [2, 64, 32, 1071] --\n", + "│ │ │ │ │ │ └─Linear: 7-17 [2, 32, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-18 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-9 [2, 1071, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-19 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-20 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-21 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-22 [2, 64, 1071, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-4 [2, 64, 1071, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-23 [2, 1071, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-24 [2, 1071, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-4 [2, 1071, 256] --\n", + "│ │ │ │ │ └─Linear: 6-10 [2, 1071, 512] 131,584\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-11 [2, 1071, 512] --\n", + "│ │ │ │ │ └─Linear: 6-12 [2, 1071, 256] 131,328\n", + "│ │ │ └─EncoderLayer: 4-31 [2, 1071, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-5 [2, 1071, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-13 [2, 32, 256] 8,192\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-14 [2, 32, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-25 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-26 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-27 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-28 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-5 [2, 64, 32, 1071] --\n", + "│ │ │ │ │ │ └─Linear: 7-29 [2, 32, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-30 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-15 [2, 1071, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-31 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-32 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-33 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-34 [2, 64, 1071, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-6 [2, 64, 1071, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-35 [2, 1071, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-36 [2, 1071, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-6 [2, 1071, 256] --\n", + "│ │ │ │ │ └─Linear: 6-16 [2, 1071, 512] 131,584\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-17 [2, 1071, 512] --\n", + "│ │ │ │ │ └─Linear: 6-18 [2, 1071, 256] 131,328\n", + "│ │ │ └─EncoderLayer: 4-32 [2, 16, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-7 [2, 1071, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-19 [2, 32, 256] 8,192\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-20 [2, 32, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-37 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-38 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-39 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-40 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-7 [2, 64, 32, 1071] --\n", + "│ │ │ │ │ │ └─Linear: 7-41 [2, 32, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-42 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-21 [2, 1071, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-43 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-44 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-45 [2, 32, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-46 [2, 64, 1071, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-8 [2, 64, 1071, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-47 [2, 1071, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-48 [2, 1071, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-8 [2, 1071, 256] --\n", + "│ │ │ │ │ └─Linear: 6-22 [2, 1071, 512] 131,584\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-23 [2, 1071, 512] --\n", + "│ │ │ │ │ └─Linear: 6-24 [2, 1071, 256] 131,328\n", + "│ │ │ │ └─PoolingByMultiheadAttention: 5-9 [2, 16, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-25 [2, 16, 256] 4,096\n", + "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-26 [2, 16, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-49 [2, 16, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-50 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-51 [2, 1071, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-52 [2, 64, 16, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-9 [2, 64, 16, 1071] --\n", + "│ │ │ │ │ │ └─Linear: 7-53 [2, 16, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-54 [2, 16, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-10 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-27 [2, 16, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-28 [2, 16, 512] --\n", + "│ │ │ │ │ └─Linear: 6-29 [2, 16, 256] (recursive)\n", + "│ └─Encoder: 2-4 [2, 16, 256] (recursive)\n", + "│ │ └─ModuleList: 3-16 -- (recursive)\n", + "│ │ │ └─EncoderLayer: 4-33 [2, 267, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-11 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-30 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-31 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-55 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-56 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-57 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-58 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-10 [2, 64, 32, 267] --\n", + "│ │ │ │ │ │ └─Linear: 7-59 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-60 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-32 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-61 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-62 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-63 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-64 [2, 64, 267, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-11 [2, 64, 267, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-65 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-66 [2, 267, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-12 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-33 [2, 267, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-34 [2, 267, 512] --\n", + "│ │ │ │ │ └─Linear: 6-35 [2, 267, 256] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-34 [2, 267, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-13 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-36 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-37 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-67 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-68 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-69 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-70 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-12 [2, 64, 32, 267] --\n", + "│ │ │ │ │ │ └─Linear: 7-71 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-72 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-38 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-73 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-74 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-75 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-76 [2, 64, 267, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-13 [2, 64, 267, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-77 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-78 [2, 267, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-14 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-39 [2, 267, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-40 [2, 267, 512] --\n", + "│ │ │ │ │ └─Linear: 6-41 [2, 267, 256] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-35 [2, 267, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-15 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-42 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-43 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-79 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-80 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-81 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-82 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-14 [2, 64, 32, 267] --\n", + "│ │ │ │ │ │ └─Linear: 7-83 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-84 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-44 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-85 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-86 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-87 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-88 [2, 64, 267, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-15 [2, 64, 267, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-89 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-90 [2, 267, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-16 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-45 [2, 267, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-46 [2, 267, 512] --\n", + "│ │ │ │ │ └─Linear: 6-47 [2, 267, 256] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-36 [2, 16, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-17 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-48 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-49 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-91 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-92 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-93 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-94 [2, 64, 32, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-16 [2, 64, 32, 267] --\n", + "│ │ │ │ │ │ └─Linear: 7-95 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-96 [2, 32, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-50 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-97 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-98 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-99 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-100 [2, 64, 267, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-17 [2, 64, 267, 32] --\n", + "│ │ │ │ │ │ └─Linear: 7-101 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-102 [2, 267, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-18 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-51 [2, 267, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-52 [2, 267, 512] --\n", + "│ │ │ │ │ └─Linear: 6-53 [2, 267, 256] (recursive)\n", + "│ │ │ │ └─PoolingByMultiheadAttention: 5-19 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-54 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-55 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-103 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-104 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-105 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-106 [2, 64, 16, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-18 [2, 64, 16, 267] --\n", + "│ │ │ │ │ │ └─Linear: 7-107 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyReLU: 7-108 [2, 16, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-20 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-56 [2, 16, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-57 [2, 16, 512] --\n", + "│ │ │ │ │ └─Linear: 6-58 [2, 16, 256] (recursive)\n", + "├─Head: 1-4 [2] --\n", + "│ └─Sequential: 2-5 [2, 1] --\n", + "│ │ └─FeedForward: 3-17 [2, 128] --\n", + "│ │ │ └─Linear: 4-37 [2, 128] 524,416\n", + "│ │ │ └─PReLU: 4-38 [2, 128] 1\n", + "│ │ └─FeedForward: 3-18 [2, 128] --\n", + "│ │ │ └─Linear: 4-39 [2, 128] 16,512\n", + "│ │ │ └─PReLU: 4-40 [2, 128] 1\n", + "│ │ └─FeedForward: 3-19 [2, 128] --\n", + "│ │ │ └─Linear: 4-41 [2, 128] 16,512\n", + "│ │ │ └─PReLU: 4-42 [2, 128] 1\n", + "│ │ └─FeedForward: 3-20 [2, 128] --\n", + "│ │ │ └─Linear: 4-43 [2, 128] 16,512\n", + "│ │ │ └─PReLU: 4-44 [2, 128] 1\n", + "│ │ └─FeedForward: 3-21 [2, 128] --\n", + "│ │ │ └─Linear: 4-45 [2, 128] 16,512\n", + "│ │ │ └─PReLU: 4-46 [2, 128] 1\n", + "│ │ └─FeedForward: 3-22 [2, 128] --\n", + "│ │ │ └─Linear: 4-47 [2, 128] 16,512\n", + "│ │ │ └─PReLU: 4-48 [2, 128] 1\n", + "│ │ └─FeedForward: 3-23 [2, 128] --\n", + "│ │ │ └─Linear: 4-49 [2, 128] 16,512\n", + "│ │ │ └─PReLU: 4-50 [2, 128] 1\n", + "│ │ └─FeedForward: 3-24 [2, 128] --\n", + "│ │ │ └─Linear: 4-51 [2, 128] 16,512\n", + "│ │ │ └─PReLU: 4-52 [2, 128] 1\n", + "│ │ └─FeedForward: 3-25 [2, 1] --\n", + "│ │ │ └─Linear: 4-53 [2, 1] 129\n", + "│ │ │ └─Softsign: 4-54 [2, 1] --\n", + "========================================================================================================================\n", + "Total params: 9,613,961\n", + "Trainable params: 9,613,961\n", + "Non-trainable params: 0\n", + "Total mult-adds (M): 38.08\n", + "========================================================================================================================\n", + "Input size (MB): 0.13\n", + "Forward/backward pass size (MB): 307.49\n", + "Params size (MB): 38.46\n", + "Estimated Total Size (MB): 346.07\n", + "========================================================================================================================" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from torchinfo import summary\n", + "\n", + "role_model = params[\"fixed_role_model\"]\n", + "s = train_set[0][role_model]\n", + "summary(model[role_model], input_size=((2, *s[0].shape), (2, *s[1].shape)), depth=9) # 8 max" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "0f42c4d1", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-23T02:43:38.381420Z", + "iopub.status.busy": "2024-03-23T02:43:38.381120Z", + "iopub.status.idle": "2024-03-23T03:35:44.027515Z", + "shell.execute_reply": "2024-03-23T03:35:44.026454Z" + }, + "papermill": { + "duration": 3125.685603, + "end_time": "2024-03-23T03:35:44.051068", + "exception": false, + "start_time": "2024-03-23T02:43:38.365465", + "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.03592884845203823, 'avg_role_model_std_loss': 7.2996755396477075, 'avg_role_model_mean_pred_loss': 0.009430593892273626, 'avg_role_model_g_mag_loss': 0.007427950899711706, '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.09437693562669058, 'n_size': 900, 'n_batch': 113, 'duration': 140.96822214126587, 'duration_batch': 1.2475063906306714, 'duration_size': 0.15663135793473987, 'avg_pred_std': 0.05326718922737425}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.014524129554629325, 'avg_role_model_std_loss': 4.156348642464237, 'avg_role_model_mean_pred_loss': 0.0009876720450387843, '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.014524129554629325, 'n_size': 450, 'n_batch': 57, 'duration': 44.241886377334595, 'duration_batch': 0.7761734452163964, 'duration_size': 0.09831530306074354, 'avg_pred_std': 0.03724088621113384}\n", + "Epoch 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.014371616853814986, 'avg_role_model_std_loss': 6.227466808899376, 'avg_role_model_mean_pred_loss': 0.00030516517503158583, 'avg_role_model_g_mag_loss': 6.165503883999514e-05, '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.2792855604737997, 'n_size': 900, 'n_batch': 113, 'duration': 141.62208795547485, 'duration_batch': 1.2532928137652641, 'duration_size': 0.15735787550608318, 'avg_pred_std': 0.03787480419155507}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.01340457120962027, 'avg_role_model_std_loss': 5.29680332468604, 'avg_role_model_mean_pred_loss': 0.0002864654652569243, '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.01340457120962027, 'n_size': 450, 'n_batch': 57, 'duration': 45.41609525680542, 'duration_batch': 0.7967736009965863, 'duration_size': 0.10092465612623426, 'avg_pred_std': 0.030410112535352248}\n", + "Epoch 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.01384979708948069, 'avg_role_model_std_loss': 7.497149070959221, 'avg_role_model_mean_pred_loss': 0.00021502181714296655, 'avg_role_model_g_mag_loss': 1.949448532994009e-05, '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.11678517651847667, 'n_size': 900, 'n_batch': 113, 'duration': 143.15943694114685, 'duration_batch': 1.2668976720455474, 'duration_size': 0.15906604104571873, 'avg_pred_std': 0.033135497126629394}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.014283642331914355, 'avg_role_model_std_loss': 5.459189098905386, 'avg_role_model_mean_pred_loss': 0.0005690211627043279, '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.014283642331914355, 'n_size': 450, 'n_batch': 57, 'duration': 46.33096122741699, 'duration_batch': 0.8128238811827543, 'duration_size': 0.1029576916164822, 'avg_pred_std': 0.026298031341611294}\n", + "Epoch 3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013210438237422042, 'avg_role_model_std_loss': 6.6640938428891605, 'avg_role_model_mean_pred_loss': 0.00014334700532385921, 'avg_role_model_g_mag_loss': 4.62662972798474e-06, '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.2998970259560479, 'n_size': 900, 'n_batch': 113, 'duration': 146.3652093410492, 'duration_batch': 1.2952673393013203, 'duration_size': 0.16262801037894356, 'avg_pred_std': 0.03572286798132468}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.013382001433314548, 'avg_role_model_std_loss': 4.643842804434571, 'avg_role_model_mean_pred_loss': 0.00048086737289648024, '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.013382001433314548, 'n_size': 450, 'n_batch': 57, 'duration': 47.94945430755615, 'duration_batch': 0.8412184966237921, 'duration_size': 0.10655434290568033, 'avg_pred_std': 0.029577646339148805}\n", + "Epoch 4\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013310110395153363, 'avg_role_model_std_loss': 6.041971506328766, 'avg_role_model_mean_pred_loss': 0.00019507275757620039, '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.013310110395153363, 'n_size': 900, 'n_batch': 113, 'duration': 143.80060958862305, 'duration_batch': 1.2725717662710003, 'duration_size': 0.15977845509847005, 'avg_pred_std': 0.038453474558428326}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.013661402131223844, 'avg_role_model_std_loss': 4.1234811326556935, 'avg_role_model_mean_pred_loss': 0.00045455218989546767, '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.013661402131223844, 'n_size': 450, 'n_batch': 57, 'duration': 45.394694089889526, 'duration_batch': 0.7963981419278864, 'duration_size': 0.10087709797753228, 'avg_pred_std': 0.0333288926100195}\n", + "Epoch 5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013588898373353812, 'avg_role_model_std_loss': 7.486738423658624, 'avg_role_model_mean_pred_loss': 0.0002779256184064716, 'avg_role_model_g_mag_loss': 0.00022828346642199903, '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.08210628287142349, 'n_size': 900, 'n_batch': 113, 'duration': 141.604829788208, 'duration_batch': 1.2531400866213098, 'duration_size': 0.15733869976467557, 'avg_pred_std': 0.03336982285620364}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.015309163269638602, 'avg_role_model_std_loss': 11.10999310352408, 'avg_role_model_mean_pred_loss': 0.0006529700210521443, '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.015309163269638602, 'n_size': 450, 'n_batch': 57, 'duration': 45.059311866760254, 'duration_batch': 0.7905142432764957, 'duration_size': 0.10013180414835612, 'avg_pred_std': 0.01890142163948009}\n", + "Epoch 6\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.01360072170642929, 'avg_role_model_std_loss': 9.74690950918578, 'avg_role_model_mean_pred_loss': 0.0002635270801760223, 'avg_role_model_g_mag_loss': 9.69009121440144e-06, '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': 3.451531191302153, 'n_size': 900, 'n_batch': 113, 'duration': 140.73290538787842, 'duration_batch': 1.2454239414856496, 'duration_size': 0.15636989487542047, 'avg_pred_std': 0.029921204000052097}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.013079761469271034, 'avg_role_model_std_loss': 5.622179901249935, 'avg_role_model_mean_pred_loss': 0.00037308515279698264, '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.013079761469271034, 'n_size': 450, 'n_batch': 57, 'duration': 43.94645428657532, 'duration_batch': 0.7709904260802687, 'duration_size': 0.09765878730350071, 'avg_pred_std': 0.024666702521866875}\n", + "Epoch 7\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013433132627978921, 'avg_role_model_std_loss': 7.019836858438262, 'avg_role_model_mean_pred_loss': 0.0001345649655801632, 'avg_role_model_g_mag_loss': 2.2781116680966485e-05, '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.16974145690082676, 'n_size': 900, 'n_batch': 113, 'duration': 139.68711066246033, 'duration_batch': 1.2361691209067285, 'duration_size': 0.15520790073606702, 'avg_pred_std': 0.034294621425524224}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.013359390444432696, 'avg_role_model_std_loss': 5.3989552207959495, 'avg_role_model_mean_pred_loss': 0.00037170510294370413, '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.013359390444432696, 'n_size': 450, 'n_batch': 57, 'duration': 44.08630442619324, 'duration_batch': 0.7734439373016357, 'duration_size': 0.09796956539154053, 'avg_pred_std': 0.028002551381002393}\n", + "Epoch 8\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013708434053179291, 'avg_role_model_std_loss': 8.164382093871072, 'avg_role_model_mean_pred_loss': 0.00011137482917280241, 'avg_role_model_g_mag_loss': 0.0002664083573553297, '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.02415950643726521, 'n_size': 900, 'n_batch': 113, 'duration': 140.14124727249146, 'duration_batch': 1.2401880289601013, 'duration_size': 0.15571249696943495, 'avg_pred_std': 0.03384085310688984}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.013566718476617503, 'avg_role_model_std_loss': 6.5259337021869435, 'avg_role_model_mean_pred_loss': 0.00033163626410593374, '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.013566718476617503, 'n_size': 450, 'n_batch': 57, 'duration': 43.685551166534424, 'duration_batch': 0.766413178360253, 'duration_size': 0.09707900259229872, 'avg_pred_std': 0.027984272067745525}\n", + "Epoch 9\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013571654115286139, 'avg_role_model_std_loss': 8.742722461416001, 'avg_role_model_mean_pred_loss': 0.0003018974633938696, 'avg_role_model_g_mag_loss': 1.6721362351543374e-05, '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.027267425186518167, 'n_size': 900, 'n_batch': 113, 'duration': 140.09695625305176, 'duration_batch': 1.2397960730358564, 'duration_size': 0.15566328472561305, 'avg_pred_std': 0.030262669457732577}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.01325964125830473, 'avg_role_model_std_loss': 5.029873872576148, 'avg_role_model_mean_pred_loss': 0.00043549182230303055, '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.01325964125830473, 'n_size': 450, 'n_batch': 57, 'duration': 43.787155866622925, 'duration_batch': 0.7681957169582969, 'duration_size': 0.09730479081471761, 'avg_pred_std': 0.025762035086620273}\n", + "Epoch 10\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.014379269344628685, 'avg_role_model_std_loss': 7.366559921767701, 'avg_role_model_mean_pred_loss': 0.00037252366738006987, 'avg_role_model_g_mag_loss': 0.0003263944470220142, '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.017774089858867227, 'n_size': 900, 'n_batch': 113, 'duration': 142.94084358215332, 'duration_batch': 1.2649632175411798, 'duration_size': 0.1588231595357259, 'avg_pred_std': 0.035403397502954556}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.013996612014921589, 'avg_role_model_std_loss': 7.5169032518093255, 'avg_role_model_mean_pred_loss': 0.0005061832475970126, '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.013996612014921589, 'n_size': 450, 'n_batch': 57, 'duration': 46.45759129524231, 'duration_batch': 0.8150454613200405, 'duration_size': 0.10323909176720514, 'avg_pred_std': 0.02128785624773356}\n", + "Epoch 11\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013456141208298505, 'avg_role_model_std_loss': 8.885624297614187, 'avg_role_model_mean_pred_loss': 0.0001408637665720865, 'avg_role_model_g_mag_loss': 6.312208974526988e-06, '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.12043976681565659, 'n_size': 900, 'n_batch': 113, 'duration': 140.75263118743896, 'duration_batch': 1.2455985060835306, 'duration_size': 0.15639181243048775, 'avg_pred_std': 0.03045645008374632}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.015452116089096914, 'avg_role_model_std_loss': 10.887882433234672, 'avg_role_model_mean_pred_loss': 0.0007382755149755995, '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.015452116089096914, 'n_size': 450, 'n_batch': 57, 'duration': 44.30102300643921, 'duration_batch': 0.7772109299375299, 'duration_size': 0.09844671779208714, 'avg_pred_std': 0.015029358677566051}\n", + "Epoch 12\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013939871930827697, 'avg_role_model_std_loss': 10.302565499742524, 'avg_role_model_mean_pred_loss': 0.00030740466281282784, 'avg_role_model_g_mag_loss': 1.2590549886226655e-06, '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.05802687374461028, 'n_size': 900, 'n_batch': 113, 'duration': 140.6320457458496, 'duration_batch': 1.244531378281855, 'duration_size': 0.15625782860649956, 'avg_pred_std': 0.026154642290048366}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.013364347005262971, 'avg_role_model_std_loss': 4.240572321283827, 'avg_role_model_mean_pred_loss': 0.0003598822188279074, '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.013364347005262971, 'n_size': 450, 'n_batch': 57, 'duration': 44.313255310058594, 'duration_batch': 0.777425531755414, 'duration_size': 0.0984739006890191, 'avg_pred_std': 0.03320887988727344}\n", + "Epoch 13\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013616377720609307, 'avg_role_model_std_loss': 7.797813521520289, 'avg_role_model_mean_pred_loss': 0.0002454437854082967, 'avg_role_model_g_mag_loss': 8.744494782553778e-05, '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.013847984937537047, 'n_size': 900, 'n_batch': 113, 'duration': 141.74561762809753, 'duration_batch': 1.2543859967088278, 'duration_size': 0.15749513069788615, 'avg_pred_std': 0.03314163033084004}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.014651317608594481, 'avg_role_model_std_loss': 6.794933559461737, 'avg_role_model_mean_pred_loss': 0.0006282155579800827, '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.014651317608594481, 'n_size': 450, 'n_batch': 57, 'duration': 47.70662569999695, 'duration_batch': 0.8369583456139815, 'duration_size': 0.10601472377777099, 'avg_pred_std': 0.02225242922768781}\n", + "Epoch 14\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013695524584295021, 'avg_role_model_std_loss': 8.25407733499283, 'avg_role_model_mean_pred_loss': 0.00019777481913188744, 'avg_role_model_g_mag_loss': 1.3750431502962278e-05, '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.021342603873668445, 'n_size': 900, 'n_batch': 113, 'duration': 142.06192708015442, 'duration_batch': 1.2571851953995967, 'duration_size': 0.157846585644616, 'avg_pred_std': 0.03127054079328623}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.013534503092782365, 'avg_role_model_std_loss': 4.2766512755933626, 'avg_role_model_mean_pred_loss': 0.00026410735567626234, '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.013534503092782365, 'n_size': 450, 'n_batch': 57, 'duration': 44.758880853652954, 'duration_batch': 0.7852435237482974, 'duration_size': 0.09946417967478434, 'avg_pred_std': 0.03563740865833927}\n", + "Epoch 15\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013962997518893745, 'avg_role_model_std_loss': 8.13189057305249, 'avg_role_model_mean_pred_loss': 0.00029005304642092415, 'avg_role_model_g_mag_loss': 2.4200141843822267e-05, '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.015241746428526111, 'n_size': 900, 'n_batch': 113, 'duration': 141.51434302330017, 'duration_batch': 1.252339318790267, 'duration_size': 0.15723815891477796, 'avg_pred_std': 0.03115090290166899}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.013381186781658066, 'avg_role_model_std_loss': 5.749990332730752, 'avg_role_model_mean_pred_loss': 0.0003508059210490602, '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.013381186781658066, 'n_size': 450, 'n_batch': 57, 'duration': 44.66229581832886, 'duration_batch': 0.7835490494443659, 'duration_size': 0.09924954626295301, 'avg_pred_std': 0.027999498015433028}\n", + "Stopped False\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval loss {'role_model': 'tab_ddpm_concat', 'n_size': 1050, 'n_batch': 132, 'role_model_metrics': {'avg_loss': 0.019623516283574557, 'avg_g_mag_loss': nan, 'avg_g_cos_loss': 0.006512481076056464, 'pred_duration': 2.325235366821289, 'grad_duration': 6.460307598114014, 'total_duration': 8.785542964935303, 'pred_std': 0.03438406065106392, 'std_loss': 1.4360365867614746, 'mean_pred_loss': 9.540035534882918e-06, 'pred_rmse': 0.14008395373821259, 'pred_mae': 0.09191913157701492, 'pred_mape': 4.1357741355896, 'grad_rmse': 0.1400328129529953, 'grad_mae': 0.0917934775352478, 'grad_mape': 0.9963167309761047}, '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.019623516283574557, 'avg_g_mag_loss': nan, 'avg_g_cos_loss': 0.006512481076056464, 'avg_pred_duration': 2.325235366821289, 'avg_grad_duration': 6.460307598114014, 'avg_total_duration': 8.785542964935303, 'avg_pred_std': 0.03438406065106392, 'avg_std_loss': 1.4360365867614746, 'avg_mean_pred_loss': 9.540035534882918e-06}, 'min_metrics': {'avg_loss': 0.019623516283574557, 'avg_g_mag_loss': nan, 'avg_g_cos_loss': 0.006512481076056464, 'pred_duration': 2.325235366821289, 'grad_duration': 6.460307598114014, 'total_duration': 8.785542964935303, 'pred_std': 0.03438406065106392, 'std_loss': 1.4360365867614746, 'mean_pred_loss': 9.540035534882918e-06, 'pred_rmse': 0.14008395373821259, 'pred_mae': 0.09191913157701492, 'pred_mape': 4.1357741355896, 'grad_rmse': 0.1400328129529953, 'grad_mae': 0.0917934775352478, 'grad_mape': 0.9963167309761047}, 'model_metrics': {'tab_ddpm_concat': {'avg_loss': 0.019623516283574557, 'avg_g_mag_loss': nan, 'avg_g_cos_loss': 0.006512481076056464, 'pred_duration': 2.325235366821289, 'grad_duration': 6.460307598114014, 'total_duration': 8.785542964935303, 'pred_std': 0.03438406065106392, 'std_loss': 1.4360365867614746, 'mean_pred_loss': 9.540035534882918e-06, 'pred_rmse': 0.14008395373821259, 'pred_mae': 0.09191913157701492, 'pred_mape': 4.1357741355896, 'grad_rmse': 0.1400328129529953, 'grad_mae': 0.0917934775352478, 'grad_mape': 0.9963167309761047}}}\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-23T03:35:44.087866Z", + "iopub.status.busy": "2024-03-23T03:35:44.087216Z", + "iopub.status.idle": "2024-03-23T03:35:44.091777Z", + "shell.execute_reply": "2024-03-23T03:35:44.090708Z" + }, + "papermill": { + "duration": 0.025693, + "end_time": "2024-03-23T03:35:44.094065", + "exception": false, + "start_time": "2024-03-23T03:35:44.068372", + "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-23T03:35:44.127678Z", + "iopub.status.busy": "2024-03-23T03:35:44.127393Z", + "iopub.status.idle": "2024-03-23T03:35:44.224252Z", + "shell.execute_reply": "2024-03-23T03:35:44.223005Z" + }, + "papermill": { + "duration": 0.118083, + "end_time": "2024-03-23T03:35:44.228259", + "exception": false, + "start_time": "2024-03-23T03:35:44.110176", + "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-23T03:35:44.273179Z", + "iopub.status.busy": "2024-03-23T03:35:44.272668Z", + "iopub.status.idle": "2024-03-23T03:35:44.602463Z", + "shell.execute_reply": "2024-03-23T03:35:44.601470Z" + }, + "papermill": { + "duration": 0.3522, + "end_time": "2024-03-23T03:35:44.604985", + "exception": false, + "start_time": "2024-03-23T03:35:44.252785", + "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-23T03:35:44.647935Z", + "iopub.status.busy": "2024-03-23T03:35:44.647646Z", + "iopub.status.idle": "2024-03-23T03:37:44.837644Z", + "shell.execute_reply": "2024-03-23T03:37:44.836611Z" + }, + "papermill": { + "duration": 120.211589, + "end_time": "2024-03-23T03:37:44.840418", + "exception": false, + "start_time": "2024-03-23T03:35:44.628829", + "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-23T03:37:44.878032Z", + "iopub.status.busy": "2024-03-23T03:37:44.877126Z", + "iopub.status.idle": "2024-03-23T03:37:44.897480Z", + "shell.execute_reply": "2024-03-23T03:37:44.896521Z" + }, + "papermill": { + "duration": 0.041068, + "end_time": "2024-03-23T03:37:44.899482", + "exception": false, + "start_time": "2024-03-23T03:37:44.858414", + "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.0057880.5310540.0196246.4554210.0917930.9963170.1400330.000012.3248640.0919194.1357740.1400840.0343841.4360368.780286
\n", + "
" + ], + "text/plain": [ + " avg_g_cos_loss avg_g_mag_loss avg_loss grad_duration \\\n", + "tab_ddpm_concat 0.005788 0.531054 0.019624 6.455421 \n", + "\n", + " grad_mae grad_mape grad_rmse mean_pred_loss \\\n", + "tab_ddpm_concat 0.091793 0.996317 0.140033 0.00001 \n", + "\n", + " pred_duration pred_mae pred_mape pred_rmse pred_std \\\n", + "tab_ddpm_concat 2.324864 0.091919 4.135774 0.140084 0.034384 \n", + "\n", + " std_loss total_duration \n", + "tab_ddpm_concat 1.436036 8.780286 " + ] + }, + "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-23T03:37:44.934076Z", + "iopub.status.busy": "2024-03-23T03:37:44.933591Z", + "iopub.status.idle": "2024-03-23T03:37:45.289624Z", + "shell.execute_reply": "2024-03-23T03:37:45.288736Z" + }, + "papermill": { + "duration": 0.375632, + "end_time": "2024-03-23T03:37:45.291662", + "exception": false, + "start_time": "2024-03-23T03:37:44.916030", + "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-23T03:37:45.331457Z", + "iopub.status.busy": "2024-03-23T03:37:45.330721Z", + "iopub.status.idle": "2024-03-23T03:39:53.403787Z", + "shell.execute_reply": "2024-03-23T03:39:53.402854Z" + }, + "papermill": { + "duration": 128.096926, + "end_time": "2024-03-23T03:39:53.406736", + "exception": false, + "start_time": "2024-03-23T03:37:45.309810", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../insurance/_cache_aug_test/tab_ddpm_concat/all inf False\n", + "Caching in ../../../../insurance/_cache_bs_test/tab_ddpm_concat/all inf False\n", + "Caching in ../../../../insurance/_cache_synth_test/tab_ddpm_concat/all inf False\n" + ] + } + ], + "source": [ + "#\"\"\"\n", + "from ml_utility_loss.loss_learning.estimator.process import pred, pred_2\n", + "from ml_utility_loss.util import stack_samples\n", + "\n", + "#samples = test_set[list(range(len(test_set)))]\n", + "#y = {m: pred(model[m], s) for m, s in samples.items()}\n", + "y = pred_2(model, test_set, batch_size=batch_size)\n", + "#\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "6ab51db8", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-23T03:39:53.448532Z", + "iopub.status.busy": "2024-03-23T03:39:53.448107Z", + "iopub.status.idle": "2024-03-23T03:39:53.477479Z", + "shell.execute_reply": "2024-03-23T03:39:53.476588Z" + }, + "papermill": { + "duration": 0.050432, + "end_time": "2024-03-23T03:39:53.479608", + "exception": false, + "start_time": "2024-03-23T03:39:53.429176", + "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-23T03:39:53.515188Z", + "iopub.status.busy": "2024-03-23T03:39:53.514910Z", + "iopub.status.idle": "2024-03-23T03:39:53.520273Z", + "shell.execute_reply": "2024-03-23T03:39:53.519406Z" + }, + "papermill": { + "duration": 0.025524, + "end_time": "2024-03-23T03:39:53.522187", + "exception": false, + "start_time": "2024-03-23T03:39:53.496663", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'tab_ddpm_concat': 0.040662367926644426}\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-23T03:39:53.559534Z", + "iopub.status.busy": "2024-03-23T03:39:53.558799Z", + "iopub.status.idle": "2024-03-23T03:39:53.970683Z", + "shell.execute_reply": "2024-03-23T03:39:53.969499Z" + }, + "papermill": { + "duration": 0.433224, + "end_time": "2024-03-23T03:39:53.972960", + "exception": false, + "start_time": "2024-03-23T03:39:53.539736", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAATgAAAE8CAYAAABU7q18AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABFz0lEQVR4nO3deVwTd/4/8NckIQdXADkCyqUoWC8oKsWtRatf0bpWate11FbwqN2tfm3L2l9rd+vZ/dJLq61Wd/tdoW6r7fa71l5Wa6nHWq/iXWtVKILKrRDuQJLP748hAyEJlzkgvJ+PRx5hZj4zeQ+Yt5+Z+RwcY4yBEEKckMjRARBCiK1QgiOEOC1KcIQQp0UJjhDitCjBEUKcFiU4QojTogRHCHFalOAIIU6LEhwhxGlRgiMAgLCwMPz2t7+16WdwHIfVq1d3WG716tXgOM6msZC+gRKckzh27BhWr16NyspKR4dCeoH33nsPmZmZjg7D5ijBOYljx45hzZo1lOBIp1CCI4SQXo4SnBNYvXo1XnjhBQBAeHg4OI4Dx3G4fv06MjIy8OCDD8Lf3x8ymQz33HMPtm7davFY3377LaKjoyGXy3HPPfdg9+7dXY5Ho9Hg+eefh5+fHzw8PPDwww/j5s2bZssePXoUY8aMgVwux6BBg/C3v/3NbDmO47B06VJ89NFHiIyMhFwuR2xsLI4cOWLyu+A4DlevXsUTTzwBpVIJPz8/vPLKK2CM4caNG5g5cyY8PT2hUqmwfv36Lp8fAHzzzTdISEiAh4cHPD09MWbMGOzcudOozKefforY2FgoFAr4+vriiSeewK1bt4zKpKamwt3dHbdu3UJSUhLc3d3h5+eH5cuXQ6fTGZXV6/XYtGkTRowYAblcDj8/P0ydOhXZ2dlCmc78vcPCwnDp0iUcPnxY+LcyYcKEbv0eejxGer3z58+z5ORkBoC9/fbb7J///Cf75z//yWpqatiYMWNYamoqe/vtt9m7777LpkyZwgCwzZs3Gx0jNDSUDRkyhHl5ebGXXnqJbdiwgY0YMYKJRCL27bffdimeJ554ggFgjz/+ONu8eTObNWsWGzlyJAPAVq1aJZS7cOECUygULCQkhKWnp7N169axgIAAoWxrANjw4cOZr68vW7t2LXv99ddZaGgoUygU7OLFi0K5VatWMQAsOjqaJScns/fee49Nnz6dAWAbNmxgkZGR7I9//CN777332G9+8xsGgB0+fLhL55eRkcE4jmPDhw9nf/3rX9mWLVvYokWL2JNPPmlUBgAbM2YMe/vtt9lLL73EFAoFCwsLYxUVFUK5lJQUJpfL2bBhw9iCBQvY1q1b2aOPPsoAsPfee8/oc1NTUxkANm3aNLZx40b21ltvsZkzZ7J3331XKNOZv/dnn33GBgwYwKKiooR/K139G/cWlOCcxJtvvskAsLy8PKP1dXV1JmUTExPZwIEDjdaFhoYyAOzf//63sE6tVrPAwEAWExPT6TjOnTvHALBnnnnGaP3jjz9ukuCSkpKYXC5n+fn5wrqff/6ZicViswkOAMvOzhbW5efnM7lczh555BFhnSHBLV68WFin1WrZgAEDGMdx7LXXXhPWV1RUMIVCwVJSUjp9fpWVlczDw4PFxcWx+vp6o216vZ4xxlhjYyPz9/dnw4cPNyrz1VdfMQBs5cqVwrqUlBQGgK1du9boWDExMSw2NlZY/v777xkAtmzZMpOYDJ/LWOf/3sOGDWMJCQmdOOPejS5RnZxCoRB+VqvVKC8vR0JCAn799Veo1WqjskFBQXjkkUeEZU9PT8ybNw9nz55FcXFxpz5v7969AIBly5YZrX/uueeMlnU6Hfbv34+kpCSEhIQI64cOHYrExESzx46Pj0dsbKywHBISgpkzZ2L//v0ml3OLFi0SfhaLxRg9ejQYY1i4cKGw3svLC5GRkfj11187dW4AcODAAVRXV+Oll16CXC432mZo2pKdnY3S0lI888wzRmWmT5+OqKgofP311ybH/cMf/mC0PH78eKO4/v3vf4PjOKxatcpk39ZNarry9+4LKME5uR9++AGTJ0+Gm5sbvLy84Ofnh5dffhkATP7BR0REmLQ/GzJkCADg+vXrnfq8/Px8iEQiDBo0yGh9ZGSk0XJZWRnq6+sxePBgk2O0LWtgruyQIUNQV1eHsrIyo/WtkyYAKJVKyOVy+Pr6mqyvqKiwfEJt5ObmAgCGDx9usUx+fj4A8+cRFRUlbDcw3E9rzdvb2yiu3NxcBAUFwcfHp934uvL37gskjg6A2E5ubi4mTZqEqKgobNiwAcHBwZBKpdi7dy/efvtt6PV6R4doM2KxuFPrAIA5eNR+S3F1VV/+e1tCCc5JmGv5/+WXX0Kj0eCLL74wqtEcPHjQ7DFycnLAGDM61tWrVwHwT946IzQ0FHq9Hrm5uUY1mCtXrhiV8/Pzg0KhwLVr10yO0basgbmyV69ehaurq0kNyFYMNdOffvoJERERZsuEhoYC4M/jwQcfNNp25coVYXtXP3f//v24c+eOxVpcV/7efaWnCF2iOgk3NzcAMGroa6gZtK6hqNVqZGRkmD1GYWEhPvvsM2G5qqoKO3bsQHR0NFQqVafimDZtGgDgnXfeMVq/ceNGo2WxWIzExETs2bMHBQUFwvrLly9j//79Zo99/PhxnDlzRli+ceMGPv/8c0yZMsVqtaCOTJkyBR4eHkhPT0dDQ4PRNsPvefTo0fD398e2bdug0WiE7d988w0uX76M6dOnd/lzH330UTDGsGbNGpNths/tyt/bzc2tTzQKpxqckzDcfP/zn/+Mxx57DC4uLnjggQcglUoxY8YMPP3006ipqcH7778Pf39/FBUVmRxjyJAhWLhwIX788UcEBARg+/btKCkpsZgQzYmOjkZycjLee+89qNVqjBs3DllZWcjJyTEpu2bNGuzbtw/jx4/HM888A61Wi3fffRfDhg3DhQsXTMoPHz4ciYmJWLZsGWQyGd577z3hOPbi6emJt99+G4sWLcKYMWPw+OOPw9vbG+fPn0ddXR0++OADuLi44PXXX8f8+fORkJCA5ORklJSUYNOmTQgLC8Pzzz/f5c+dOHEinnzySbzzzju4du0apk6dCr1ej//85z+YOHEili5diilTpnT67x0bG4utW7fi1VdfRUREBPz9/U1qm07BcQ9wibWtW7eO9e/fn4lEIqHJyBdffMFGjhzJ5HI5CwsLY6+//jrbvn27SZOS0NBQNn36dLZ//342cuRIJpPJWFRUFPv000+7HEd9fT1btmwZ69evH3Nzc2MzZsxgN27cMGkmwhhjhw8fZrGxsUwqlbKBAweybdu2CU09WgPAlixZwj788EM2ePBgJpPJWExMDDt48KBROcO+ZWVlRutTUlKYm5ubSawJCQls2LBhXT7HL774go0bN44pFArm6enJxo4dy3bt2mVU5pNPPmExMTFMJpMxHx8fNnfuXHbz5s1OxWXud6DVatmbb77JoqKimFQqZX5+fmzatGns9OnTRnF15u9dXFzMpk+fzjw8PBgAp20ywjFG86KSno/jOCxZsgSbN292dCikF6F7cIQQp0X34EinddTYV6FQQKlU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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-23T03:39:54.013488Z", + "iopub.status.busy": "2024-03-23T03:39:54.013180Z", + "iopub.status.idle": "2024-03-23T03:39:54.383834Z", + "shell.execute_reply": "2024-03-23T03:39:54.382764Z" + }, + "papermill": { + "duration": 0.393386, + "end_time": "2024-03-23T03:39:54.386070", + "exception": false, + "start_time": "2024-03-23T03:39:53.992684", + "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-23T03:39:54.426106Z", + "iopub.status.busy": "2024-03-23T03:39:54.425239Z", + "iopub.status.idle": "2024-03-23T03:39:54.654904Z", + "shell.execute_reply": "2024-03-23T03:39:54.654132Z" + }, + "papermill": { + "duration": 0.251927, + "end_time": "2024-03-23T03:39:54.656807", + "exception": false, + "start_time": "2024-03-23T03:39:54.404880", + "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-23T03:39:54.696305Z", + "iopub.status.busy": "2024-03-23T03:39:54.695984Z", + "iopub.status.idle": "2024-03-23T03:39:54.983368Z", + "shell.execute_reply": "2024-03-23T03:39:54.982462Z" + }, + "papermill": { + "duration": 0.309516, + "end_time": "2024-03-23T03:39:54.985337", + "exception": false, + "start_time": "2024-03-23T03:39:54.675821", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#\"\"\"\n", + "from ml_utility_loss.loss_learning.visualization import plot_grad, plot_grad_2, plot_grad_3\n", + "import matplotlib.pyplot as plt\n", + "\n", + "#plot_grad_2(y, model.models)\n", + "for m in model.models:\n", + " ym = y[m]\n", + " fig, ax = plt.subplots()\n", + " plot_grad_3(ym[\"error\"], ym[\"grad\"], name=f\"{m}_grad\", fig=fig, ax=ax)\n", + "#\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "54c0e9f3", + "metadata": { + "papermill": { + "duration": 0.019191, + "end_time": "2024-03-23T03:39:55.023918", + "exception": false, + "start_time": "2024-03-23T03:39:55.004727", + "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": 3397.729204, + "end_time": "2024-03-23T03:39:57.766335", + "environment_variables": {}, + "exception": null, + "input_path": "eval/insurance/tab_ddpm_concat/3/mlu-eval.ipynb", + "output_path": "eval/insurance/tab_ddpm_concat/3/mlu-eval.ipynb", + "parameters": { + "allow_same_prediction": true, + "dataset": "insurance", + "dataset_name": "insurance", + "debug": false, + "folder": "eval", + "gp": true, + "gp_multiply": true, + "log_wandb": false, + "param_index": 0, + "path": "eval/insurance/tab_ddpm_concat/3", + "path_prefix": "../../../../", + "random_seed": 3, + "single_model": "tab_ddpm_concat" + }, + "start_time": "2024-03-23T02:43:20.037131", + "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