diff --git "a/contraceptive/tab_ddpm_concat/mlu-eval.ipynb" "b/contraceptive/tab_ddpm_concat/mlu-eval.ipynb" new file mode 100644--- /dev/null +++ "b/contraceptive/tab_ddpm_concat/mlu-eval.ipynb" @@ -0,0 +1,2291 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "982e76f5", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-23T05:04:21.629336Z", + "iopub.status.busy": "2024-03-23T05:04:21.628994Z", + "iopub.status.idle": "2024-03-23T05:04:21.663130Z", + "shell.execute_reply": "2024-03-23T05:04:21.662384Z" + }, + "papermill": { + "duration": 0.049429, + "end_time": "2024-03-23T05:04:21.665394", + "exception": false, + "start_time": "2024-03-23T05:04:21.615965", + "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-23T05:04:21.691608Z", + "iopub.status.busy": "2024-03-23T05:04:21.691206Z", + "iopub.status.idle": "2024-03-23T05:04:21.697898Z", + "shell.execute_reply": "2024-03-23T05:04:21.697089Z" + }, + "papermill": { + "duration": 0.022113, + "end_time": "2024-03-23T05:04:21.699856", + "exception": false, + "start_time": "2024-03-23T05:04:21.677743", + "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-23T05:04:21.723534Z", + "iopub.status.busy": "2024-03-23T05:04:21.723253Z", + "iopub.status.idle": "2024-03-23T05:04:21.727276Z", + "shell.execute_reply": "2024-03-23T05:04:21.726484Z" + }, + "papermill": { + "duration": 0.018099, + "end_time": "2024-03-23T05:04:21.729236", + "exception": false, + "start_time": "2024-03-23T05:04:21.711137", + "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-23T05:04:21.753343Z", + "iopub.status.busy": "2024-03-23T05:04:21.753062Z", + "iopub.status.idle": "2024-03-23T05:04:21.757108Z", + "shell.execute_reply": "2024-03-23T05:04:21.756385Z" + }, + "executionInfo": { + "elapsed": 678, + "status": "ok", + "timestamp": 1696841022168, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "ns5hFcVL2yvs", + "papermill": { + "duration": 0.018266, + "end_time": "2024-03-23T05:04:21.758957", + "exception": false, + "start_time": "2024-03-23T05:04:21.740691", + "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-23T05:04:21.783476Z", + "iopub.status.busy": "2024-03-23T05:04:21.783146Z", + "iopub.status.idle": "2024-03-23T05:04:21.788977Z", + "shell.execute_reply": "2024-03-23T05:04:21.788132Z" + }, + "papermill": { + "duration": 0.020768, + "end_time": "2024-03-23T05:04:21.790943", + "exception": false, + "start_time": "2024-03-23T05:04:21.770175", + "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": "813921ec", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-23T05:04:21.816694Z", + "iopub.status.busy": "2024-03-23T05:04:21.816369Z", + "iopub.status.idle": "2024-03-23T05:04:21.821371Z", + "shell.execute_reply": "2024-03-23T05:04:21.820530Z" + }, + "papermill": { + "duration": 0.019782, + "end_time": "2024-03-23T05:04:21.823201", + "exception": false, + "start_time": "2024-03-23T05:04:21.803419", + "status": "completed" + }, + "tags": [ + "injected-parameters" + ] + }, + "outputs": [], + "source": [ + "# Parameters\n", + "dataset = \"contraceptive\"\n", + "dataset_name = \"contraceptive\"\n", + "single_model = \"tab_ddpm_concat\"\n", + "gp = False\n", + "gp_multiply = False\n", + "random_seed = 3\n", + "debug = False\n", + "folder = \"eval\"\n", + "path_prefix = \"../../../../\"\n", + "path = \"eval/contraceptive/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.011191, + "end_time": "2024-03-23T05:04:21.845732", + "exception": false, + "start_time": "2024-03-23T05:04:21.834541", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "5f45b1d0", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-23T05:04:21.870203Z", + "iopub.status.busy": "2024-03-23T05:04:21.869483Z", + "iopub.status.idle": "2024-03-23T05:04:21.879301Z", + "shell.execute_reply": "2024-03-23T05:04:21.878432Z" + }, + "executionInfo": { + "elapsed": 7, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "UdvXYv3c3LXy", + "papermill": { + "duration": 0.024218, + "end_time": "2024-03-23T05:04:21.881253", + "exception": false, + "start_time": "2024-03-23T05:04:21.857035", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/kaggle/working\n", + "/kaggle/working/eval/contraceptive/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-23T05:04:21.905979Z", + "iopub.status.busy": "2024-03-23T05:04:21.905257Z", + "iopub.status.idle": "2024-03-23T05:04:23.968980Z", + "shell.execute_reply": "2024-03-23T05:04:23.967963Z" + }, + "papermill": { + "duration": 2.078671, + "end_time": "2024-03-23T05:04:23.971481", + "exception": false, + "start_time": "2024-03-23T05:04:21.892810", + "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-23T05:04:24.001446Z", + "iopub.status.busy": "2024-03-23T05:04:24.000945Z", + "iopub.status.idle": "2024-03-23T05:04:24.013907Z", + "shell.execute_reply": "2024-03-23T05:04:24.013083Z" + }, + "papermill": { + "duration": 0.02948, + "end_time": "2024-03-23T05:04:24.015902", + "exception": false, + "start_time": "2024-03-23T05:04:23.986422", + "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-23T05:04:24.040475Z", + "iopub.status.busy": "2024-03-23T05:04:24.040170Z", + "iopub.status.idle": "2024-03-23T05:04:24.047825Z", + "shell.execute_reply": "2024-03-23T05:04:24.046905Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "Vrl2QkoV3o_8", + "papermill": { + "duration": 0.022157, + "end_time": "2024-03-23T05:04:24.049871", + "exception": false, + "start_time": "2024-03-23T05:04:24.027714", + "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-23T05:04:24.075125Z", + "iopub.status.busy": "2024-03-23T05:04:24.074801Z", + "iopub.status.idle": "2024-03-23T05:04:24.175336Z", + "shell.execute_reply": "2024-03-23T05:04:24.174308Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "TilUuFk9vqMb", + "papermill": { + "duration": 0.116307, + "end_time": "2024-03-23T05:04:24.178232", + "exception": false, + "start_time": "2024-03-23T05:04:24.061925", + "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-23T05:04:24.208789Z", + "iopub.status.busy": "2024-03-23T05:04:24.208119Z", + "iopub.status.idle": "2024-03-23T05:04:29.151684Z", + "shell.execute_reply": "2024-03-23T05:04:29.150603Z" + }, + "executionInfo": { + "elapsed": 3113, + "status": "ok", + "timestamp": 1696841025277, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "7Abt8nStvr9Z", + "papermill": { + "duration": 4.962449, + "end_time": "2024-03-23T05:04:29.154200", + "exception": false, + "start_time": "2024-03-23T05:04:24.191751", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-03-23 05:04:26.617688: 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 05:04:26.617749: 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 05:04:26.619528: 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-23T05:04:29.181423Z", + "iopub.status.busy": "2024-03-23T05:04:29.180284Z", + "iopub.status.idle": "2024-03-23T05:04:29.186445Z", + "shell.execute_reply": "2024-03-23T05:04:29.185689Z" + }, + "papermill": { + "duration": 0.021155, + "end_time": "2024-03-23T05:04:29.188348", + "exception": false, + "start_time": "2024-03-23T05:04:29.167193", + "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-23T05:04:29.215147Z", + "iopub.status.busy": "2024-03-23T05:04:29.214438Z", + "iopub.status.idle": "2024-03-23T05:04:38.508662Z", + "shell.execute_reply": "2024-03-23T05:04:38.507453Z" + }, + "executionInfo": { + "elapsed": 20137, + "status": "ok", + "timestamp": 1696841045408, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "tbaguWxAvtPi", + "papermill": { + "duration": 9.310896, + "end_time": "2024-03-23T05:04:38.511484", + "exception": false, + "start_time": "2024-03-23T05:04:29.200588", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", + " warnings.warn(\n", + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:119: ConvergenceWarning: Number of distinct clusters (4) found smaller than n_clusters (10). Possibly due to duplicate points in X.\n", + " .fit(X)\n", + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:119: ConvergenceWarning: Number of distinct clusters (4) found smaller than n_clusters (10). Possibly due to duplicate points in X.\n", + " .fit(X)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", + " warnings.warn(\n", + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:119: ConvergenceWarning: Number of distinct clusters (4) found smaller than n_clusters (10). Possibly due to duplicate points in X.\n", + " .fit(X)\n" + ] + } + ], + "source": [ + "from ml_utility_loss.loss_learning.estimator.preprocessing import DataPreprocessor\n", + "\n", + "preprocessor = DataPreprocessor(\n", + " task,\n", + " target=target,\n", + " cat_features=cat_features,\n", + " mixed_features=mixed_features,\n", + " longtail_features=longtail_features,\n", + " integer_features=integer_features,\n", + " lct_ae_embedding_size=lct_ae_embedding_size,\n", + " lct_ae_params=lct_ae_params,\n", + " lct_ae=lct_ae,\n", + " tab_ddpm_normalization=tab_ddpm_normalization,\n", + " tab_ddpm_cat_encoding=tab_ddpm_cat_encoding,\n", + " tab_ddpm_y_policy=tab_ddpm_y_policy,\n", + " tab_ddpm_is_y_cond=tab_ddpm_is_y_cond,\n", + " realtabformer_embedding=rtf_embed,\n", + " realtabformer_params=rtf_params,\n", + ")\n", + "preprocessor.fit(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "a9c9b110", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2024-03-23T05:04:38.541045Z", + "iopub.status.busy": "2024-03-23T05:04:38.540681Z", + "iopub.status.idle": "2024-03-23T05:04:38.547632Z", + "shell.execute_reply": "2024-03-23T05:04:38.546771Z" + }, + "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.024359, + "end_time": "2024-03-23T05:04:38.550023", + "exception": false, + "start_time": "2024-03-23T05:04:38.525664", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'tvae': 46,\n", + " 'realtabformer': (24, 72, Embedding(72, 672), True),\n", + " 'lct_gan': 40,\n", + " 'tab_ddpm_concat': 10}" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "preprocessor.adapter_sizes" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "3cb9ed90", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-23T05:04:38.576002Z", + "iopub.status.busy": "2024-03-23T05:04:38.575642Z", + "iopub.status.idle": "2024-03-23T05:04:38.580702Z", + "shell.execute_reply": "2024-03-23T05:04:38.579793Z" + }, + "papermill": { + "duration": 0.020761, + "end_time": "2024-03-23T05:04:38.582699", + "exception": false, + "start_time": "2024-03-23T05:04:38.561938", + "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-23T05:04:38.609782Z", + "iopub.status.busy": "2024-03-23T05:04:38.608931Z", + "iopub.status.idle": "2024-03-23T05:04:39.112505Z", + "shell.execute_reply": "2024-03-23T05:04:39.111467Z" + }, + "papermill": { + "duration": 0.519352, + "end_time": "2024-03-23T05:04:39.114672", + "exception": false, + "start_time": "2024-03-23T05:04:38.595320", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../contraceptive/_cache_aug_test/tab_ddpm_concat/all inf False\n", + "../../../../ml-utility-loss/aug_test/contraceptive [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Caching in ../../../../contraceptive/_cache_bs_test/tab_ddpm_concat/all inf False\n", + "../../../../ml-utility-loss/bs_test/contraceptive [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Caching in ../../../../contraceptive/_cache_synth_test/tab_ddpm_concat/all inf False\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "../../../../ml-utility-loss/synthetics/contraceptive [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "1050\n" + ] + } + ], + "source": [ + "from ml_utility_loss.loss_learning.estimator.pipeline import load_dataset_4\n", + "\n", + "test_set = load_dataset_4(\n", + " dataset_dir=os.path.join(path_prefix, \"ml-utility-loss/\"),\n", + " dataset_name=dataset_name,\n", + " preprocessor=preprocessor,\n", + " model=single_model,\n", + " cache_dir=path_prefix,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "14ff8b40", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-23T05:04:39.144548Z", + "iopub.status.busy": "2024-03-23T05:04:39.143559Z", + "iopub.status.idle": "2024-03-23T05:04:39.480832Z", + "shell.execute_reply": "2024-03-23T05:04:39.479905Z" + }, + "executionInfo": { + "elapsed": 588, + "status": "ok", + "timestamp": 1696841049215, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "NgahtU1q9uLO", + "papermill": { + "duration": 0.354487, + "end_time": "2024-03-23T05:04:39.483055", + "exception": false, + "start_time": "2024-03-23T05:04:39.128568", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'Body': 'twin_encoder',\n", + " 'loss_balancer_meta': True,\n", + " 'loss_balancer_log': False,\n", + " 'loss_balancer_lbtw': False,\n", + " 'pma_skip_small': False,\n", + " 'isab_skip_small': False,\n", + " 'layer_norm': False,\n", + " 'pma_layer_norm': False,\n", + " 'attn_residual': True,\n", + " 'tf_n_layers_dec': False,\n", + " 'tf_isab_rank': 0,\n", + " 'tf_layer_norm': False,\n", + " 'tf_pma_start': -1,\n", + " 'head_n_seeds': 0,\n", + " 'tf_pma_low': 16,\n", + " 'dropout': 0,\n", + " 'combine_mode': 'diff_left',\n", + " 'tf_isab_mode': 'separate',\n", + " 'grad_loss_fn': torch.Tensor>,\n", + " 'single_model': True,\n", + " 'bias': True,\n", + " 'bias_final': True,\n", + " 'pma_ffn_mode': 'none',\n", + " 'patience': 10,\n", + " 'inds_init_mode': 'fixnorm',\n", + " 'grad_clip': 0.73,\n", + " 'gradient_penalty_mode': {'gradient_penalty': False,\n", + " 'calc_grad_m': False,\n", + " 'avg_non_role_model_m': False,\n", + " 'inverse_avg_non_role_model_m': False},\n", + " 'synth_data': 2,\n", + " 'bias_lr_mul': 1.0,\n", + " 'bias_weight_decay': 0.05,\n", + " 'head_activation': torch.nn.modules.activation.Softsign,\n", + " 'loss_balancer_beta': 0.67,\n", + " 'loss_balancer_r': 0.943,\n", + " 'tf_activation': torch.nn.modules.activation.Tanh,\n", + " 'dataset_size': 2048,\n", + " 'batch_size': 4,\n", + " 'epochs': 100,\n", + " 'lr_mul': 0.09,\n", + " 'n_warmup_steps': 100,\n", + " 'Optim': functools.partial(, amsgrad=True),\n", + " 'fixed_role_model': 'tab_ddpm_concat',\n", + " 'd_model': 256,\n", + " 'attn_activation': torch.nn.modules.activation.PReLU,\n", + " 'tf_d_inner': 512,\n", + " 'tf_n_layers_enc': 3,\n", + " 'tf_n_head': 32,\n", + " 'tf_activation_final': ml_utility_loss.activations.LeakyHardtanh,\n", + " 'ada_d_hid': 1024,\n", + " 'ada_n_layers': 9,\n", + " 'ada_activation': torch.nn.modules.activation.Softsign,\n", + " 'ada_activation_final': ml_utility_loss.activations.LeakyHardsigmoid,\n", + " 'head_d_hid': 256,\n", + " 'head_n_layers': 9,\n", + " 'head_n_head': 32,\n", + " 'head_activation_final': ml_utility_loss.activations.LeakyHardsigmoid,\n", + " 'models': ['tab_ddpm_concat'],\n", + " 'max_seconds': 3600,\n", + " 'tf_lora': False,\n", + " 'tf_num_inds': 128,\n", + " 'ada_n_seeds': 0,\n", + " 'gradient_penalty_kwargs': {'mag_loss': True,\n", + " 'mse_mag': False,\n", + " 'mag_corr': False,\n", + " 'seq_mag': False,\n", + " 'cos_loss': False,\n", + " 'mag_corr_kwargs': {'only_sign': False},\n", + " 'cos_loss_kwargs': {'only_sign': True, 'cos_matrix': False},\n", + " 'mse_mag_kwargs': {'target': 0.65, 'multiply': True, 'forgive_over': True}}}" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import ml_utility_loss.loss_learning.estimator.params2 as PARAMS\n", + "from ml_utility_loss.tuning import map_parameters\n", + "from ml_utility_loss.loss_learning.estimator.params.default import update_param_space, update_param_space_2\n", + "import wandb\n", + "\n", + "#\"\"\"\n", + "param_space = {\n", + " **getattr(PARAMS, dataset_name).PARAM_SPACE,\n", + "}\n", + "params = {\n", + " **getattr(PARAMS, dataset_name).BESTS[param_index],\n", + "}\n", + "if gp:\n", + " params[\"gradient_penalty_mode\"] = \"ALL\"\n", + " params[\"mse_mag\"] = True\n", + " if gp_multiply:\n", + " params[\"mse_mag_multiply\"] = True\n", + " #params[\"mse_mag_target\"] = 1.0\n", + " else:\n", + " params[\"mse_mag_multiply\"] = False\n", + " #params[\"mse_mag_target\"] = 0.1\n", + "else:\n", + " params[\"gradient_penalty_mode\"] = \"NONE\"\n", + " params[\"mse_mag\"] = False\n", + "params[\"single_model\"] = False\n", + "if models:\n", + " params[\"models\"] = models\n", + "if single_model:\n", + " params[\"fixed_role_model\"] = single_model\n", + " params[\"single_model\"] = True\n", + " params[\"models\"] = [single_model]\n", + "if params[\"fixed_role_model\"] == \"realtabformer\" and dataset_name == \"treatment\":\n", + " params[\"batch_size\"] = 2\n", + "params[\"max_seconds\"] = 3600\n", + "params[\"patience\"] = 10\n", + "params[\"epochs\"] = 100\n", + "if debug:\n", + " params[\"epochs\"] = 2\n", + "with open(\"params.json\", \"w\") as f:\n", + " json.dump(params, f)\n", + "params = map_parameters(params, param_space=param_space)\n", + "params" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "a48bd9e9", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-23T05:04:39.512547Z", + "iopub.status.busy": "2024-03-23T05:04:39.512183Z", + "iopub.status.idle": "2024-03-23T05:04:39.627133Z", + "shell.execute_reply": "2024-03-23T05:04:39.626206Z" + }, + "papermill": { + "duration": 0.132353, + "end_time": "2024-03-23T05:04:39.629484", + "exception": false, + "start_time": "2024-03-23T05:04:39.497131", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../contraceptive/_cache_aug_train/tab_ddpm_concat/all inf False\n", + "split df ratio is 0\n", + "../../../../ml-utility-loss/aug_train/contraceptive [400, 0]\n", + "Caching in ../../../../contraceptive/_cache_aug_val/tab_ddpm_concat/all inf False\n", + "split df ratio is 1\n", + "../../../../ml-utility-loss/aug_val/contraceptive [0, 200]\n", + "Caching in ../../../../contraceptive/_cache_bs_train/tab_ddpm_concat/all inf False\n", + "split df ratio is 0\n", + "../../../../ml-utility-loss/bs_train/contraceptive [100, 0]\n", + "Caching in ../../../../contraceptive/_cache_bs_val/tab_ddpm_concat/all inf False\n", + "split df ratio is 1\n", + "../../../../ml-utility-loss/bs_val/contraceptive [0, 50]\n", + "Caching in ../../../../contraceptive/_cache_synth/tab_ddpm_concat/all inf False\n", + "Splitting without random!\n", + "Split with reverse index!\n", + "../../../../ml-utility-loss/synthetics/contraceptive [400, 200]\n", + "[900, 450]\n", + "[900, 450]\n" + ] + } + ], + "source": [ + "train_set, val_set = datasetsn(model=params[\"fixed_role_model\"], synth_data=params[\"synth_data\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "2fcb1418", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "execution": { + "iopub.execute_input": "2024-03-23T05:04:39.660099Z", + "iopub.status.busy": "2024-03-23T05:04:39.659223Z", + "iopub.status.idle": "2024-03-23T05:04:40.129666Z", + "shell.execute_reply": "2024-03-23T05:04:40.128573Z" + }, + "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.487633, + "end_time": "2024-03-23T05:04:40.131872", + "exception": false, + "start_time": "2024-03-23T05:04:39.644239", + "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-23T05:04:40.162151Z", + "iopub.status.busy": "2024-03-23T05:04:40.161734Z", + "iopub.status.idle": "2024-03-23T05:04:40.166284Z", + "shell.execute_reply": "2024-03-23T05:04:40.165331Z" + }, + "papermill": { + "duration": 0.022852, + "end_time": "2024-03-23T05:04:40.168893", + "exception": false, + "start_time": "2024-03-23T05:04:40.146041", + "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-23T05:04:40.196772Z", + "iopub.status.busy": "2024-03-23T05:04:40.196158Z", + "iopub.status.idle": "2024-03-23T05:04:40.203527Z", + "shell.execute_reply": "2024-03-23T05:04:40.202609Z" + }, + "papermill": { + "duration": 0.023357, + "end_time": "2024-03-23T05:04:40.205581", + "exception": false, + "start_time": "2024-03-23T05:04:40.182224", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "11858440" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def count_parameters(model):\n", + " return sum(p.numel() for p in model.parameters() if p.requires_grad)\n", + "\n", + "count_parameters(model)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "bd386e57", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-23T05:04:40.234725Z", + "iopub.status.busy": "2024-03-23T05:04:40.233809Z", + "iopub.status.idle": "2024-03-23T05:04:40.315887Z", + "shell.execute_reply": "2024-03-23T05:04:40.314947Z" + }, + "papermill": { + "duration": 0.099156, + "end_time": "2024-03-23T05:04:40.318529", + "exception": false, + "start_time": "2024-03-23T05:04:40.219373", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "========================================================================================================================\n", + "Layer (type:depth-idx) Output Shape Param #\n", + "========================================================================================================================\n", + "MLUtilitySingle [2, 1179, 10] --\n", + "├─Adapter: 1-1 [2, 1179, 10] --\n", + "│ └─Sequential: 2-1 [2, 1179, 256] --\n", + "│ │ └─FeedForward: 3-1 [2, 1179, 1024] --\n", + "│ │ │ └─Linear: 4-1 [2, 1179, 1024] 11,264\n", + "│ │ │ └─Softsign: 4-2 [2, 1179, 1024] --\n", + "│ │ └─FeedForward: 3-2 [2, 1179, 1024] --\n", + "│ │ │ └─Linear: 4-3 [2, 1179, 1024] 1,049,600\n", + "│ │ │ └─Softsign: 4-4 [2, 1179, 1024] --\n", + "│ │ └─FeedForward: 3-3 [2, 1179, 1024] --\n", + "│ │ │ └─Linear: 4-5 [2, 1179, 1024] 1,049,600\n", + "│ │ │ └─Softsign: 4-6 [2, 1179, 1024] --\n", + "│ │ └─FeedForward: 3-4 [2, 1179, 1024] --\n", + "│ │ │ └─Linear: 4-7 [2, 1179, 1024] 1,049,600\n", + "│ │ │ └─Softsign: 4-8 [2, 1179, 1024] --\n", + "│ │ └─FeedForward: 3-5 [2, 1179, 1024] --\n", + "│ │ │ └─Linear: 4-9 [2, 1179, 1024] 1,049,600\n", + "│ │ │ └─Softsign: 4-10 [2, 1179, 1024] --\n", + "│ │ └─FeedForward: 3-6 [2, 1179, 1024] --\n", + "│ │ │ └─Linear: 4-11 [2, 1179, 1024] 1,049,600\n", + "│ │ │ └─Softsign: 4-12 [2, 1179, 1024] --\n", + "│ │ └─FeedForward: 3-7 [2, 1179, 1024] --\n", + "│ │ │ └─Linear: 4-13 [2, 1179, 1024] 1,049,600\n", + "│ │ │ └─Softsign: 4-14 [2, 1179, 1024] --\n", + "│ │ └─FeedForward: 3-8 [2, 1179, 1024] --\n", + "│ │ │ └─Linear: 4-15 [2, 1179, 1024] 1,049,600\n", + "│ │ │ └─Softsign: 4-16 [2, 1179, 1024] --\n", + "│ │ └─FeedForward: 3-9 [2, 1179, 256] --\n", + "│ │ │ └─Linear: 4-17 [2, 1179, 256] 262,400\n", + "│ │ │ └─LeakyHardsigmoid: 4-18 [2, 1179, 256] --\n", + "├─Adapter: 1-2 [2, 294, 10] (recursive)\n", + "│ └─Sequential: 2-2 [2, 294, 256] (recursive)\n", + "│ │ └─FeedForward: 3-10 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-19 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Softsign: 4-20 [2, 294, 1024] --\n", + "│ │ └─FeedForward: 3-11 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-21 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Softsign: 4-22 [2, 294, 1024] --\n", + "│ │ └─FeedForward: 3-12 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-23 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Softsign: 4-24 [2, 294, 1024] --\n", + "│ │ └─FeedForward: 3-13 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-25 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Softsign: 4-26 [2, 294, 1024] --\n", + "│ │ └─FeedForward: 3-14 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-27 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Softsign: 4-28 [2, 294, 1024] --\n", + "│ │ └─FeedForward: 3-15 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-29 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Softsign: 4-30 [2, 294, 1024] --\n", + "│ │ └─FeedForward: 3-16 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-31 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Softsign: 4-32 [2, 294, 1024] --\n", + "│ │ └─FeedForward: 3-17 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Linear: 4-33 [2, 294, 1024] (recursive)\n", + "│ │ │ └─Softsign: 4-34 [2, 294, 1024] --\n", + "│ │ └─FeedForward: 3-18 [2, 294, 256] (recursive)\n", + "│ │ │ └─Linear: 4-35 [2, 294, 256] (recursive)\n", + "│ │ │ └─LeakyHardsigmoid: 4-36 [2, 294, 256] --\n", + "├─TwinEncoder: 1-3 [2, 4096] --\n", + "│ └─Encoder: 2-3 [2, 16, 256] --\n", + "│ │ └─ModuleList: 3-20 -- (recursive)\n", + "│ │ │ └─EncoderLayer: 4-37 [2, 1179, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-1 [2, 1179, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-1 [2, 128, 256] 32,768\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-2 [2, 128, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-1 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-2 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-3 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-4 [2, 32, 128, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-1 [2, 32, 128, 1179] --\n", + "│ │ │ │ │ │ └─Linear: 7-5 [2, 128, 256] 65,792\n", + "│ │ │ │ │ │ └─PReLU: 7-6 [2, 128, 256] 1\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-3 [2, 1179, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-7 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-8 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-9 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-10 [2, 32, 1179, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-2 [2, 32, 1179, 128] --\n", + "│ │ │ │ │ │ └─Linear: 7-11 [2, 1179, 256] 65,792\n", + "│ │ │ │ │ │ └─PReLU: 7-12 [2, 1179, 256] 1\n", + "│ │ │ │ └─DoubleFeedForward: 5-2 [2, 1179, 256] --\n", + "│ │ │ │ │ └─Linear: 6-4 [2, 1179, 512] 131,584\n", + "│ │ │ │ │ └─Tanh: 6-5 [2, 1179, 512] --\n", + "│ │ │ │ │ └─Linear: 6-6 [2, 1179, 256] 131,328\n", + "│ │ │ └─EncoderLayer: 4-38 [2, 1179, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-3 [2, 1179, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-7 [2, 128, 256] 32,768\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-8 [2, 128, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-13 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-14 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-15 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-16 [2, 32, 128, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-3 [2, 32, 128, 1179] --\n", + "│ │ │ │ │ │ └─Linear: 7-17 [2, 128, 256] 65,792\n", + "│ │ │ │ │ │ └─PReLU: 7-18 [2, 128, 256] 1\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-9 [2, 1179, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-19 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-20 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-21 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-22 [2, 32, 1179, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-4 [2, 32, 1179, 128] --\n", + "│ │ │ │ │ │ └─Linear: 7-23 [2, 1179, 256] 65,792\n", + "│ │ │ │ │ │ └─PReLU: 7-24 [2, 1179, 256] 1\n", + "│ │ │ │ └─DoubleFeedForward: 5-4 [2, 1179, 256] --\n", + "│ │ │ │ │ └─Linear: 6-10 [2, 1179, 512] 131,584\n", + "│ │ │ │ │ └─Tanh: 6-11 [2, 1179, 512] --\n", + "│ │ │ │ │ └─Linear: 6-12 [2, 1179, 256] 131,328\n", + "│ │ │ └─EncoderLayer: 4-39 [2, 16, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-5 [2, 1179, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-13 [2, 128, 256] 32,768\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-14 [2, 128, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-25 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-26 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-27 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-28 [2, 32, 128, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-5 [2, 32, 128, 1179] --\n", + "│ │ │ │ │ │ └─Linear: 7-29 [2, 128, 256] 65,792\n", + "│ │ │ │ │ │ └─PReLU: 7-30 [2, 128, 256] 1\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-15 [2, 1179, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-31 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-32 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-33 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-34 [2, 32, 1179, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-6 [2, 32, 1179, 128] --\n", + "│ │ │ │ │ │ └─Linear: 7-35 [2, 1179, 256] 65,792\n", + "│ │ │ │ │ │ └─PReLU: 7-36 [2, 1179, 256] 1\n", + "│ │ │ │ └─DoubleFeedForward: 5-6 [2, 1179, 256] --\n", + "│ │ │ │ │ └─Linear: 6-16 [2, 1179, 512] 131,584\n", + "│ │ │ │ │ └─LeakyHardtanh: 6-17 [2, 1179, 512] --\n", + "│ │ │ │ │ └─Linear: 6-18 [2, 1179, 256] 131,328\n", + "│ │ │ │ └─PoolingByMultiheadAttention: 5-7 [2, 16, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-19 [2, 16, 256] 4,096\n", + "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-20 [2, 16, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-37 [2, 16, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-38 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-39 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-40 [2, 32, 16, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-7 [2, 32, 16, 1179] --\n", + "│ │ │ │ │ │ └─Linear: 7-41 [2, 16, 256] 65,792\n", + "│ │ │ │ │ │ └─PReLU: 7-42 [2, 16, 256] 1\n", + "│ └─Encoder: 2-4 [2, 16, 256] (recursive)\n", + "│ │ └─ModuleList: 3-20 -- (recursive)\n", + "│ │ │ └─EncoderLayer: 4-40 [2, 294, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-8 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-21 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-22 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-43 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-44 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-45 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-46 [2, 32, 128, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-8 [2, 32, 128, 294] --\n", + "│ │ │ │ │ │ └─Linear: 7-47 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─PReLU: 7-48 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-23 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-49 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-50 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-51 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-52 [2, 32, 294, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-9 [2, 32, 294, 128] --\n", + "│ │ │ │ │ │ └─Linear: 7-53 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─PReLU: 7-54 [2, 294, 256] (recursive)\n", + "│ │ │ │ └─DoubleFeedForward: 5-9 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-24 [2, 294, 512] (recursive)\n", + "│ │ │ │ │ └─Tanh: 6-25 [2, 294, 512] --\n", + "│ │ │ │ │ └─Linear: 6-26 [2, 294, 256] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-41 [2, 294, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-10 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-27 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-28 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-55 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-56 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-57 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-58 [2, 32, 128, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-10 [2, 32, 128, 294] --\n", + "│ │ │ │ │ │ └─Linear: 7-59 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─PReLU: 7-60 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-29 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-61 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-62 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-63 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-64 [2, 32, 294, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-11 [2, 32, 294, 128] --\n", + "│ │ │ │ │ │ └─Linear: 7-65 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─PReLU: 7-66 [2, 294, 256] (recursive)\n", + "│ │ │ │ └─DoubleFeedForward: 5-11 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-30 [2, 294, 512] (recursive)\n", + "│ │ │ │ │ └─Tanh: 6-31 [2, 294, 512] --\n", + "│ │ │ │ │ └─Linear: 6-32 [2, 294, 256] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-42 [2, 16, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-12 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-33 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-34 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-67 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-68 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-69 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-70 [2, 32, 128, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-12 [2, 32, 128, 294] --\n", + "│ │ │ │ │ │ └─Linear: 7-71 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─PReLU: 7-72 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-35 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-73 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-74 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-75 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-76 [2, 32, 294, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-13 [2, 32, 294, 128] --\n", + "│ │ │ │ │ │ └─Linear: 7-77 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─PReLU: 7-78 [2, 294, 256] (recursive)\n", + "│ │ │ │ └─DoubleFeedForward: 5-13 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-36 [2, 294, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardtanh: 6-37 [2, 294, 512] --\n", + "│ │ │ │ │ └─Linear: 6-38 [2, 294, 256] (recursive)\n", + "│ │ │ │ └─PoolingByMultiheadAttention: 5-14 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-39 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-40 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-79 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-80 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-81 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-82 [2, 32, 16, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-14 [2, 32, 16, 294] --\n", + "│ │ │ │ │ │ └─Linear: 7-83 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─PReLU: 7-84 [2, 16, 256] (recursive)\n", + "├─Head: 1-4 [2] --\n", + "│ └─Sequential: 2-5 [2, 1] --\n", + "│ │ └─FeedForward: 3-21 [2, 256] --\n", + "│ │ │ └─Linear: 4-43 [2, 256] 1,048,832\n", + "│ │ │ └─Softsign: 4-44 [2, 256] --\n", + "│ │ └─FeedForward: 3-22 [2, 256] --\n", + "│ │ │ └─Linear: 4-45 [2, 256] 65,792\n", + "│ │ │ └─Softsign: 4-46 [2, 256] --\n", + "│ │ └─FeedForward: 3-23 [2, 256] --\n", + "│ │ │ └─Linear: 4-47 [2, 256] 65,792\n", + "│ │ │ └─Softsign: 4-48 [2, 256] --\n", + "│ │ └─FeedForward: 3-24 [2, 256] --\n", + "│ │ │ └─Linear: 4-49 [2, 256] 65,792\n", + "│ │ │ └─Softsign: 4-50 [2, 256] --\n", + "│ │ └─FeedForward: 3-25 [2, 256] --\n", + "│ │ │ └─Linear: 4-51 [2, 256] 65,792\n", + "│ │ │ └─Softsign: 4-52 [2, 256] --\n", + "│ │ └─FeedForward: 3-26 [2, 256] --\n", + "│ │ │ └─Linear: 4-53 [2, 256] 65,792\n", + "│ │ │ └─Softsign: 4-54 [2, 256] --\n", + "│ │ └─FeedForward: 3-27 [2, 256] --\n", + "│ │ │ └─Linear: 4-55 [2, 256] 65,792\n", + "│ │ │ └─Softsign: 4-56 [2, 256] --\n", + "│ │ └─FeedForward: 3-28 [2, 256] --\n", + "│ │ │ └─Linear: 4-57 [2, 256] 65,792\n", + "│ │ �� └─Softsign: 4-58 [2, 256] --\n", + "│ │ └─FeedForward: 3-29 [2, 1] --\n", + "│ │ │ └─Linear: 4-59 [2, 1] 257\n", + "│ │ │ └─LeakyHardsigmoid: 4-60 [2, 1] --\n", + "========================================================================================================================\n", + "Total params: 11,858,440\n", + "Trainable params: 11,858,440\n", + "Non-trainable params: 0\n", + "Total mult-adds (M): 44.00\n", + "========================================================================================================================\n", + "Input size (MB): 0.12\n", + "Forward/backward pass size (MB): 375.40\n", + "Params size (MB): 47.43\n", + "Estimated Total Size (MB): 422.95\n", + "========================================================================================================================" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from torchinfo import summary\n", + "\n", + "role_model = params[\"fixed_role_model\"]\n", + "s = train_set[0][role_model]\n", + "summary(model[role_model], input_size=((2, *s[0].shape), (2, *s[1].shape)), depth=9) # 8 max" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "0f42c4d1", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-23T05:04:40.350454Z", + "iopub.status.busy": "2024-03-23T05:04:40.350086Z", + "iopub.status.idle": "2024-03-23T06:11:47.496586Z", + "shell.execute_reply": "2024-03-23T06:11:47.495631Z" + }, + "papermill": { + "duration": 4027.180957, + "end_time": "2024-03-23T06:11:47.514491", + "exception": false, + "start_time": "2024-03-23T05:04:40.333534", + "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.02347481836991695, 'avg_role_model_std_loss': 0.5124517322441693, 'avg_role_model_mean_pred_loss': 0.002339297849103639, '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.02347481836991695, 'n_size': 900, 'n_batch': 225, 'duration': 223.80061292648315, 'duration_batch': 0.9946693907843696, 'duration_size': 0.2486673476960924, 'avg_pred_std': 0.13361252259876993}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.008576864742596323, 'avg_role_model_std_loss': 0.43590039322429097, 'avg_role_model_mean_pred_loss': 0.0002531669465378804, '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.008576864742596323, 'n_size': 450, 'n_batch': 113, 'duration': 98.30213046073914, 'duration_batch': 0.8699303580596384, 'duration_size': 0.21844917880164252, 'avg_pred_std': 0.06112736243490888}\n", + "Epoch 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.008378146543917763, 'avg_role_model_std_loss': 0.5896725166847361, 'avg_role_model_mean_pred_loss': 0.00015907265293133425, '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.008378146543917763, 'n_size': 900, 'n_batch': 225, 'duration': 223.44736337661743, 'duration_batch': 0.9930993927849664, 'duration_size': 0.2482748481962416, 'avg_pred_std': 0.10096969366073609}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.004039558287994522, 'avg_role_model_std_loss': 1.381628237529861, 'avg_role_model_mean_pred_loss': 3.3886849553694544e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.004039558287994522, 'n_size': 450, 'n_batch': 113, 'duration': 98.5942611694336, 'duration_batch': 0.8725155855702088, 'duration_size': 0.21909835815429687, 'avg_pred_std': 0.052547984426857625}\n", + "Epoch 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.010694745298888949, 'avg_role_model_std_loss': 0.8260207763179106, 'avg_role_model_mean_pred_loss': 0.00029481776721037526, '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.010694745298888949, 'n_size': 900, 'n_batch': 225, 'duration': 222.78780055046082, 'duration_batch': 0.9901680024464925, 'duration_size': 0.24754200061162313, 'avg_pred_std': 0.10044084888158573}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.006571635709972017, 'avg_role_model_std_loss': 0.6343476063295598, 'avg_role_model_mean_pred_loss': 7.651879237107392e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.006571635709972017, 'n_size': 450, 'n_batch': 113, 'duration': 98.61985659599304, 'duration_batch': 0.8727420937698499, 'duration_size': 0.21915523687998453, 'avg_pred_std': 0.0684763636147455}\n", + "Epoch 3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.007882197938549022, 'avg_role_model_std_loss': 0.5442602433114256, 'avg_role_model_mean_pred_loss': 0.00010187150954560703, '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.007882197938549022, 'n_size': 900, 'n_batch': 225, 'duration': 222.28374481201172, 'duration_batch': 0.9879277547200521, 'duration_size': 0.24698193868001303, 'avg_pred_std': 0.10185433081868622}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.010345627184336384, 'avg_role_model_std_loss': 0.40530077661136166, 'avg_role_model_mean_pred_loss': 0.00020547013780565572, '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.010345627184336384, 'n_size': 450, 'n_batch': 113, 'duration': 97.98167514801025, 'duration_batch': 0.8670944703363739, 'duration_size': 0.21773705588446723, 'avg_pred_std': 0.0684052016874528}\n", + "Epoch 4\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.004765987225756463, 'avg_role_model_std_loss': 0.33747415092830846, 'avg_role_model_mean_pred_loss': 4.3614522179710367e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.004765987225756463, 'n_size': 900, 'n_batch': 225, 'duration': 222.1056261062622, 'duration_batch': 0.987136116027832, 'duration_size': 0.246784029006958, 'avg_pred_std': 0.10019376738617818}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.004264881536364555, 'avg_role_model_std_loss': 1.3016880564829196, 'avg_role_model_mean_pred_loss': 2.9635327498389935e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.004264881536364555, 'n_size': 450, 'n_batch': 113, 'duration': 99.50796246528625, 'duration_batch': 0.880601437745896, 'duration_size': 0.2211288054784139, 'avg_pred_std': 0.06006413273538042}\n", + "Epoch 5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.004931693592548577, 'avg_role_model_std_loss': 0.49496390551068475, 'avg_role_model_mean_pred_loss': 4.218088193112541e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.004931693592548577, 'n_size': 900, 'n_batch': 225, 'duration': 224.20910120010376, 'duration_batch': 0.9964848942226834, 'duration_size': 0.24912122355567085, 'avg_pred_std': 0.0999689629011684}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.004869184112176299, 'avg_role_model_std_loss': 3.0701807380044164, 'avg_role_model_mean_pred_loss': 3.4871858414750014e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.004869184112176299, 'n_size': 450, 'n_batch': 113, 'duration': 98.850257396698, 'duration_batch': 0.8747810389088319, 'duration_size': 0.21966723865932888, 'avg_pred_std': 0.057760195345082116}\n", + "Epoch 6\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.004765996111996679, 'avg_role_model_std_loss': 0.4421812962271803, 'avg_role_model_mean_pred_loss': 3.558628672912029e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.004765996111996679, 'n_size': 900, 'n_batch': 225, 'duration': 223.28885769844055, 'duration_batch': 0.9923949231041802, 'duration_size': 0.24809873077604505, 'avg_pred_std': 0.10080746096455388}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.004297750624181289, 'avg_role_model_std_loss': 2.2529975814067793, 'avg_role_model_mean_pred_loss': 3.2225562565454145e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.004297750624181289, 'n_size': 450, 'n_batch': 113, 'duration': 98.77103543281555, 'duration_batch': 0.8740799595824386, 'duration_size': 0.21949118985070123, 'avg_pred_std': 0.05614519555768641}\n", + "Epoch 7\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0035699382384255943, 'avg_role_model_std_loss': 0.3529214430276707, 'avg_role_model_mean_pred_loss': 1.8523309853427525e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0035699382384255943, 'n_size': 900, 'n_batch': 225, 'duration': 222.1509132385254, 'duration_batch': 0.987337392171224, 'duration_size': 0.246834348042806, 'avg_pred_std': 0.10173722859472037}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0035803620515636996, 'avg_role_model_std_loss': 2.1854055460992443, 'avg_role_model_mean_pred_loss': 2.0855983310910675e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0035803620515636996, 'n_size': 450, 'n_batch': 113, 'duration': 98.14665222167969, 'duration_batch': 0.8685544444396432, 'duration_size': 0.21810367160373265, 'avg_pred_std': 0.05454383128058923}\n", + "Epoch 8\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0035860408845150636, 'avg_role_model_std_loss': 0.2396017117707293, 'avg_role_model_mean_pred_loss': 2.2730216006070548e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0035860408845150636, 'n_size': 900, 'n_batch': 225, 'duration': 221.9519350528717, 'duration_batch': 0.9864530446794298, 'duration_size': 0.24661326116985746, 'avg_pred_std': 0.10408703482813306}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0036512146290624513, 'avg_role_model_std_loss': 1.5390193092272952, 'avg_role_model_mean_pred_loss': 3.486896375240715e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0036512146290624513, 'n_size': 450, 'n_batch': 113, 'duration': 98.24018931388855, 'duration_batch': 0.8693822063175978, 'duration_size': 0.2183115318086412, 'avg_pred_std': 0.0619035135116016}\n", + "Epoch 9\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0029799208378406346, 'avg_role_model_std_loss': 0.2575948480180224, 'avg_role_model_mean_pred_loss': 1.6468858607504945e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0029799208378406346, 'n_size': 900, 'n_batch': 225, 'duration': 222.18345999717712, 'duration_batch': 0.9874820444318984, 'duration_size': 0.2468705111079746, 'avg_pred_std': 0.10268474409770634}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.00386869330644711, 'avg_role_model_std_loss': 2.897202919005004, 'avg_role_model_mean_pred_loss': 3.095258879357379e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.00386869330644711, 'n_size': 450, 'n_batch': 113, 'duration': 98.27193331718445, 'duration_batch': 0.8696631267007473, 'duration_size': 0.21838207403818766, 'avg_pred_std': 0.06031067110495065}\n", + "Epoch 10\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.002677944270108128, 'avg_role_model_std_loss': 0.2724713624029512, 'avg_role_model_mean_pred_loss': 1.7092457439067723e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.002677944270108128, 'n_size': 900, 'n_batch': 225, 'duration': 222.04818081855774, 'duration_batch': 0.9868808036380344, 'duration_size': 0.2467202009095086, 'avg_pred_std': 0.10342358542606235}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.002709867898762847, 'avg_role_model_std_loss': 3.8843037776192246, 'avg_role_model_mean_pred_loss': 8.260416360805687e-06, '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.002709867898762847, 'n_size': 450, 'n_batch': 113, 'duration': 98.23442721366882, 'duration_batch': 0.8693312142802551, 'duration_size': 0.21829872714148627, 'avg_pred_std': 0.045337541868489865}\n", + "Epoch 11\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0024496534266250417, 'avg_role_model_std_loss': 0.241057577306981, 'avg_role_model_mean_pred_loss': 9.327678098924875e-06, '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.0024496534266250417, 'n_size': 900, 'n_batch': 225, 'duration': 221.71574759483337, 'duration_batch': 0.9854033226437039, 'duration_size': 0.24635083066092597, 'avg_pred_std': 0.10465546546503901}\n", + "Time out: 3768.357307434082/3600\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval loss {'role_model': 'tab_ddpm_concat', 'n_size': 1050, 'n_batch': 263, 'role_model_metrics': {'avg_loss': 0.002562793581552493, 'avg_g_mag_loss': 0.04073966250407536, 'avg_g_cos_loss': 0.008872987412878067, 'pred_duration': 3.948948383331299, 'grad_duration': 12.55395245552063, 'total_duration': 16.50290083885193, 'pred_std': 0.10244974493980408, 'std_loss': 0.00610949145630002, 'mean_pred_loss': 6.7261853473610245e-06, 'pred_rmse': 0.05062403902411461, 'pred_mae': 0.03746151924133301, 'pred_mape': 0.11356884986162186, 'grad_rmse': 0.04399764537811279, 'grad_mae': 0.03127303719520569, 'grad_mape': 0.8461189866065979}, '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.002562793581552493, 'avg_g_mag_loss': 0.04073966250407536, 'avg_g_cos_loss': 0.008872987412878067, 'avg_pred_duration': 3.948948383331299, 'avg_grad_duration': 12.55395245552063, 'avg_total_duration': 16.50290083885193, 'avg_pred_std': 0.10244974493980408, 'avg_std_loss': 0.00610949145630002, 'avg_mean_pred_loss': 6.7261853473610245e-06}, 'min_metrics': {'avg_loss': 0.002562793581552493, 'avg_g_mag_loss': 0.04073966250407536, 'avg_g_cos_loss': 0.008872987412878067, 'pred_duration': 3.948948383331299, 'grad_duration': 12.55395245552063, 'total_duration': 16.50290083885193, 'pred_std': 0.10244974493980408, 'std_loss': 0.00610949145630002, 'mean_pred_loss': 6.7261853473610245e-06, 'pred_rmse': 0.05062403902411461, 'pred_mae': 0.03746151924133301, 'pred_mape': 0.11356884986162186, 'grad_rmse': 0.04399764537811279, 'grad_mae': 0.03127303719520569, 'grad_mape': 0.8461189866065979}, 'model_metrics': {'tab_ddpm_concat': {'avg_loss': 0.002562793581552493, 'avg_g_mag_loss': 0.04073966250407536, 'avg_g_cos_loss': 0.008872987412878067, 'pred_duration': 3.948948383331299, 'grad_duration': 12.55395245552063, 'total_duration': 16.50290083885193, 'pred_std': 0.10244974493980408, 'std_loss': 0.00610949145630002, 'mean_pred_loss': 6.7261853473610245e-06, 'pred_rmse': 0.05062403902411461, 'pred_mae': 0.03746151924133301, 'pred_mape': 0.11356884986162186, 'grad_rmse': 0.04399764537811279, 'grad_mae': 0.03127303719520569, 'grad_mape': 0.8461189866065979}}}\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-23T06:11:47.549770Z", + "iopub.status.busy": "2024-03-23T06:11:47.549391Z", + "iopub.status.idle": "2024-03-23T06:11:47.553901Z", + "shell.execute_reply": "2024-03-23T06:11:47.553001Z" + }, + "papermill": { + "duration": 0.024518, + "end_time": "2024-03-23T06:11:47.555978", + "exception": false, + "start_time": "2024-03-23T06:11:47.531460", + "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-23T06:11:47.588382Z", + "iopub.status.busy": "2024-03-23T06:11:47.588078Z", + "iopub.status.idle": "2024-03-23T06:11:47.684253Z", + "shell.execute_reply": "2024-03-23T06:11:47.683423Z" + }, + "papermill": { + "duration": 0.115126, + "end_time": "2024-03-23T06:11:47.686601", + "exception": false, + "start_time": "2024-03-23T06:11:47.571475", + "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-23T06:11:47.721771Z", + "iopub.status.busy": "2024-03-23T06:11:47.721405Z", + "iopub.status.idle": "2024-03-23T06:11:48.001514Z", + "shell.execute_reply": "2024-03-23T06:11:48.000578Z" + }, + "papermill": { + "duration": 0.299913, + "end_time": "2024-03-23T06:11:48.003551", + "exception": false, + "start_time": "2024-03-23T06:11:47.703638", + "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-23T06:11:48.039593Z", + "iopub.status.busy": "2024-03-23T06:11:48.039236Z", + "iopub.status.idle": "2024-03-23T06:16:08.303401Z", + "shell.execute_reply": "2024-03-23T06:16:08.302174Z" + }, + "papermill": { + "duration": 260.284912, + "end_time": "2024-03-23T06:16:08.306020", + "exception": false, + "start_time": "2024-03-23T06:11:48.021108", + "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-23T06:16:08.343916Z", + "iopub.status.busy": "2024-03-23T06:16:08.343316Z", + "iopub.status.idle": "2024-03-23T06:16:08.364777Z", + "shell.execute_reply": "2024-03-23T06:16:08.363869Z" + }, + "papermill": { + "duration": 0.04325, + "end_time": "2024-03-23T06:16:08.367118", + "exception": false, + "start_time": "2024-03-23T06:16:08.323868", + "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.0092950.0442240.00256312.520720.0312730.8461190.0439980.0000073.9416030.0374620.1135690.0506240.102450.00610916.462322
\n", + "
" + ], + "text/plain": [ + " avg_g_cos_loss avg_g_mag_loss avg_loss grad_duration \\\n", + "tab_ddpm_concat 0.009295 0.044224 0.002563 12.52072 \n", + "\n", + " grad_mae grad_mape grad_rmse mean_pred_loss \\\n", + "tab_ddpm_concat 0.031273 0.846119 0.043998 0.000007 \n", + "\n", + " pred_duration pred_mae pred_mape pred_rmse pred_std \\\n", + "tab_ddpm_concat 3.941603 0.037462 0.113569 0.050624 0.10245 \n", + "\n", + " std_loss total_duration \n", + "tab_ddpm_concat 0.006109 16.462322 " + ] + }, + "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-23T06:16:08.405034Z", + "iopub.status.busy": "2024-03-23T06:16:08.404241Z", + "iopub.status.idle": "2024-03-23T06:16:08.777407Z", + "shell.execute_reply": "2024-03-23T06:16:08.776483Z" + }, + "papermill": { + "duration": 0.393214, + "end_time": "2024-03-23T06:16:08.779613", + "exception": false, + "start_time": "2024-03-23T06:16:08.386399", + "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-23T06:16:08.815397Z", + "iopub.status.busy": "2024-03-23T06:16:08.815075Z", + "iopub.status.idle": "2024-03-23T06:20:38.512427Z", + "shell.execute_reply": "2024-03-23T06:20:38.511395Z" + }, + "papermill": { + "duration": 269.718079, + "end_time": "2024-03-23T06:20:38.515093", + "exception": false, + "start_time": "2024-03-23T06:16:08.797014", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../contraceptive/_cache_aug_test/tab_ddpm_concat/all inf False\n", + "Caching in ../../../../contraceptive/_cache_bs_test/tab_ddpm_concat/all inf False\n", + "Caching in ../../../../contraceptive/_cache_synth_test/tab_ddpm_concat/all inf False\n" + ] + } + ], + "source": [ + "#\"\"\"\n", + "from ml_utility_loss.loss_learning.estimator.process import pred, pred_2\n", + "from ml_utility_loss.util import stack_samples\n", + "\n", + "#samples = test_set[list(range(len(test_set)))]\n", + "#y = {m: pred(model[m], s) for m, s in samples.items()}\n", + "y = pred_2(model, test_set, batch_size=batch_size)\n", + "#\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "6ab51db8", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-23T06:20:38.551763Z", + "iopub.status.busy": "2024-03-23T06:20:38.551407Z", + "iopub.status.idle": "2024-03-23T06:20:38.578575Z", + "shell.execute_reply": "2024-03-23T06:20:38.577590Z" + }, + "papermill": { + "duration": 0.048154, + "end_time": "2024-03-23T06:20:38.580791", + "exception": false, + "start_time": "2024-03-23T06:20:38.532637", + "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-23T06:20:38.615312Z", + "iopub.status.busy": "2024-03-23T06:20:38.614988Z", + "iopub.status.idle": "2024-03-23T06:20:38.620736Z", + "shell.execute_reply": "2024-03-23T06:20:38.619807Z" + }, + "papermill": { + "duration": 0.02595, + "end_time": "2024-03-23T06:20:38.622954", + "exception": false, + "start_time": "2024-03-23T06:20:38.597004", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'tab_ddpm_concat': 0.38102179209391274}\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-23T06:20:38.659411Z", + "iopub.status.busy": "2024-03-23T06:20:38.659091Z", + "iopub.status.idle": "2024-03-23T06:20:39.094482Z", + "shell.execute_reply": "2024-03-23T06:20:39.093517Z" + }, + "papermill": { + "duration": 0.456354, + "end_time": "2024-03-23T06:20:39.096686", + "exception": false, + "start_time": "2024-03-23T06:20:38.640332", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from ml_utility_loss.loss_learning.visualization import plot_pred_density_2\n", + "\n", + "_ = plot_pred_density_2(y)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "e79e4b0f", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-23T06:20:39.133445Z", + "iopub.status.busy": "2024-03-23T06:20:39.132486Z", + "iopub.status.idle": "2024-03-23T06:20:39.510502Z", + "shell.execute_reply": "2024-03-23T06:20:39.509528Z" + }, + "papermill": { + "duration": 0.399071, + "end_time": "2024-03-23T06:20:39.512831", + "exception": false, + "start_time": "2024-03-23T06:20:39.113760", + "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-23T06:20:39.550838Z", + "iopub.status.busy": "2024-03-23T06:20:39.550491Z", + "iopub.status.idle": "2024-03-23T06:20:39.714961Z", + "shell.execute_reply": "2024-03-23T06:20:39.713679Z" + }, + "papermill": { + "duration": 0.187903, + "end_time": "2024-03-23T06:20:39.719018", + "exception": false, + "start_time": "2024-03-23T06:20:39.531115", + "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-23T06:20:39.767779Z", + "iopub.status.busy": "2024-03-23T06:20:39.767403Z", + "iopub.status.idle": "2024-03-23T06:20:40.001958Z", + "shell.execute_reply": "2024-03-23T06:20:40.000950Z" + }, + "papermill": { + "duration": 0.256086, + "end_time": "2024-03-23T06:20:40.003981", + "exception": false, + "start_time": "2024-03-23T06:20:39.747895", + "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.019542, + "end_time": "2024-03-23T06:20:40.042905", + "exception": false, + "start_time": "2024-03-23T06:20:40.023363", + "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": 4582.628319, + "end_time": "2024-03-23T06:20:42.786532", + "environment_variables": {}, + "exception": null, + "input_path": "eval/contraceptive/tab_ddpm_concat/3/mlu-eval.ipynb", + "output_path": "eval/contraceptive/tab_ddpm_concat/3/mlu-eval.ipynb", + "parameters": { + "allow_same_prediction": true, + "dataset": "contraceptive", + "dataset_name": "contraceptive", + "debug": false, + "folder": "eval", + "gp": false, + "gp_multiply": false, + "log_wandb": false, + "param_index": 0, + "path": "eval/contraceptive/tab_ddpm_concat/3", + "path_prefix": "../../../../", + "random_seed": 3, + "single_model": "tab_ddpm_concat" + }, + "start_time": "2024-03-23T05:04:20.158213", + "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