diff --git "a/insurance/realtabformer/mlu-eval.ipynb" "b/insurance/realtabformer/mlu-eval.ipynb" new file mode 100644--- /dev/null +++ "b/insurance/realtabformer/mlu-eval.ipynb" @@ -0,0 +1,2483 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "982e76f5", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T03:25:01.857264Z", + "iopub.status.busy": "2024-02-29T03:25:01.856891Z", + "iopub.status.idle": "2024-02-29T03:25:01.890331Z", + "shell.execute_reply": "2024-02-29T03:25:01.889589Z" + }, + "papermill": { + "duration": 0.048361, + "end_time": "2024-02-29T03:25:01.892459", + "exception": false, + "start_time": "2024-02-29T03:25:01.844098", + "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-02-29T03:25:01.917713Z", + "iopub.status.busy": "2024-02-29T03:25:01.917353Z", + "iopub.status.idle": "2024-02-29T03:25:01.924131Z", + "shell.execute_reply": "2024-02-29T03:25:01.923341Z" + }, + "papermill": { + "duration": 0.021362, + "end_time": "2024-02-29T03:25:01.926002", + "exception": false, + "start_time": "2024-02-29T03:25:01.904640", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'\\n%cd /kaggle/working\\n#!git clone https://github.com/R-N/ml-utility-loss\\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\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-02-29T03:25:01.949739Z", + "iopub.status.busy": "2024-02-29T03:25:01.949480Z", + "iopub.status.idle": "2024-02-29T03:25:01.953512Z", + "shell.execute_reply": "2024-02-29T03:25:01.952662Z" + }, + "papermill": { + "duration": 0.01793, + "end_time": "2024-02-29T03:25:01.955392", + "exception": false, + "start_time": "2024-02-29T03:25:01.937462", + "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-02-29T03:25:01.978702Z", + "iopub.status.busy": "2024-02-29T03:25:01.978452Z", + "iopub.status.idle": "2024-02-29T03:25:01.982360Z", + "shell.execute_reply": "2024-02-29T03:25:01.981528Z" + }, + "executionInfo": { + "elapsed": 678, + "status": "ok", + "timestamp": 1696841022168, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "ns5hFcVL2yvs", + "papermill": { + "duration": 0.017982, + "end_time": "2024-02-29T03:25:01.984356", + "exception": false, + "start_time": "2024-02-29T03:25:01.966374", + "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-02-29T03:25:02.007975Z", + "iopub.status.busy": "2024-02-29T03:25:02.007696Z", + "iopub.status.idle": "2024-02-29T03:25:02.013065Z", + "shell.execute_reply": "2024-02-29T03:25:02.012245Z" + }, + "papermill": { + "duration": 0.019231, + "end_time": "2024-02-29T03:25:02.014959", + "exception": false, + "start_time": "2024-02-29T03:25:01.995728", + "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" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "3033c0c1", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T03:25:02.039775Z", + "iopub.status.busy": "2024-02-29T03:25:02.039504Z", + "iopub.status.idle": "2024-02-29T03:25:02.044079Z", + "shell.execute_reply": "2024-02-29T03:25:02.043286Z" + }, + "papermill": { + "duration": 0.019104, + "end_time": "2024-02-29T03:25:02.045988", + "exception": false, + "start_time": "2024-02-29T03:25:02.026884", + "status": "completed" + }, + "tags": [ + "injected-parameters" + ] + }, + "outputs": [], + "source": [ + "# Parameters\n", + "dataset = \"insurance\"\n", + "dataset_name = \"insurance\"\n", + "single_model = \"realtabformer\"\n", + "gp = False\n", + "gp_multiply = False\n", + "random_seed = 4\n", + "debug = False\n", + "folder = \"eval\"\n", + "path_prefix = \"../../../../\"\n", + "path = \"eval/insurance/realtabformer/4\"\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bd7c02d6", + "metadata": { + "papermill": { + "duration": 0.010933, + "end_time": "2024-02-29T03:25:02.068115", + "exception": false, + "start_time": "2024-02-29T03:25:02.057182", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "5f45b1d0", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T03:25:02.092690Z", + "iopub.status.busy": "2024-02-29T03:25:02.091857Z", + "iopub.status.idle": "2024-02-29T03:25:02.101551Z", + "shell.execute_reply": "2024-02-29T03:25:02.100705Z" + }, + "executionInfo": { + "elapsed": 7, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "UdvXYv3c3LXy", + "papermill": { + "duration": 0.024106, + "end_time": "2024-02-29T03:25:02.103499", + "exception": false, + "start_time": "2024-02-29T03:25:02.079393", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/kaggle/working\n", + "/kaggle/working/eval/insurance/realtabformer/4\n" + ] + } + ], + "source": [ + "from pathlib import Path\n", + "import os\n", + "\n", + "%cd /kaggle/working/\n", + "\n", + "if path is None:\n", + " path = os.path.join(folder, dataset_name, single_model, random_seed)\n", + "Path(path).mkdir(parents=True, exist_ok=True)\n", + "\n", + "%cd {path}" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "f85bf540", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T03:25:02.130001Z", + "iopub.status.busy": "2024-02-29T03:25:02.129041Z", + "iopub.status.idle": "2024-02-29T03:25:04.463979Z", + "shell.execute_reply": "2024-02-29T03:25:04.463041Z" + }, + "papermill": { + "duration": 2.350744, + "end_time": "2024-02-29T03:25:04.466209", + "exception": false, + "start_time": "2024-02-29T03:25:02.115465", + "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-02-29T03:25:04.493130Z", + "iopub.status.busy": "2024-02-29T03:25:04.492731Z", + "iopub.status.idle": "2024-02-29T03:25:04.504576Z", + "shell.execute_reply": "2024-02-29T03:25:04.503859Z" + }, + "papermill": { + "duration": 0.027796, + "end_time": "2024-02-29T03:25:04.506594", + "exception": false, + "start_time": "2024-02-29T03:25:04.478798", + "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-02-29T03:25:04.531337Z", + "iopub.status.busy": "2024-02-29T03:25:04.530963Z", + "iopub.status.idle": "2024-02-29T03:25:04.538581Z", + "shell.execute_reply": "2024-02-29T03:25:04.537836Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "Vrl2QkoV3o_8", + "papermill": { + "duration": 0.021716, + "end_time": "2024-02-29T03:25:04.540474", + "exception": false, + "start_time": "2024-02-29T03:25:04.518758", + "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-02-29T03:25:04.564099Z", + "iopub.status.busy": "2024-02-29T03:25:04.563831Z", + "iopub.status.idle": "2024-02-29T03:25:04.666778Z", + "shell.execute_reply": "2024-02-29T03:25:04.665966Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "TilUuFk9vqMb", + "papermill": { + "duration": 0.117235, + "end_time": "2024-02-29T03:25:04.668965", + "exception": false, + "start_time": "2024-02-29T03:25:04.551730", + "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-02-29T03:25:04.694614Z", + "iopub.status.busy": "2024-02-29T03:25:04.694338Z", + "iopub.status.idle": "2024-02-29T03:25:09.370745Z", + "shell.execute_reply": "2024-02-29T03:25:09.369937Z" + }, + "executionInfo": { + "elapsed": 3113, + "status": "ok", + "timestamp": 1696841025277, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "7Abt8nStvr9Z", + "papermill": { + "duration": 4.691753, + "end_time": "2024-02-29T03:25:09.373186", + "exception": false, + "start_time": "2024-02-29T03:25:04.681433", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-02-29 03:25:06.968899: 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-02-29 03:25:06.968960: 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-02-29 03:25:06.970732: 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-02-29T03:25:09.399216Z", + "iopub.status.busy": "2024-02-29T03:25:09.398614Z", + "iopub.status.idle": "2024-02-29T03:25:09.405928Z", + "shell.execute_reply": "2024-02-29T03:25:09.405188Z" + }, + "papermill": { + "duration": 0.022272, + "end_time": "2024-02-29T03:25:09.407850", + "exception": false, + "start_time": "2024-02-29T03:25:09.385578", + "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-02-29T03:25:09.435072Z", + "iopub.status.busy": "2024-02-29T03:25:09.434254Z", + "iopub.status.idle": "2024-02-29T03:25:18.244653Z", + "shell.execute_reply": "2024-02-29T03:25:18.243385Z" + }, + "executionInfo": { + "elapsed": 20137, + "status": "ok", + "timestamp": 1696841045408, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "tbaguWxAvtPi", + "papermill": { + "duration": 8.826767, + "end_time": "2024-02-29T03:25:18.247128", + "exception": false, + "start_time": "2024-02-29T03:25:09.420361", + "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": [ + "\r", + " 0%| | 0/1 [00:00 torch.Tensor>,\n", + " 'single_model': True,\n", + " 'bias': True,\n", + " 'bias_final': True,\n", + " 'pma_ffn_mode': 'shared',\n", + " 'patience': 10,\n", + " 'inds_init_mode': 'fixnorm',\n", + " 'grad_clip': 0.7,\n", + " 'head_final_mul': 'identity',\n", + " 'gradient_penalty_mode': {'gradient_penalty': False,\n", + " 'calc_grad_m': False,\n", + " 'avg_non_role_model_m': False,\n", + " 'inverse_avg_non_role_model_m': False},\n", + " 'synth_data': 2,\n", + " 'dataset_size': 2048,\n", + " 'batch_size': 8,\n", + " 'epochs': 100,\n", + " 'n_warmup_steps': 100,\n", + " 'Optim': torch_optimizer.diffgrad.DiffGrad,\n", + " 'loss_balancer_beta': 0.79,\n", + " 'loss_balancer_r': 0.95,\n", + " 'fixed_role_model': 'realtabformer',\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': ['realtabformer'],\n", + " 'max_seconds': 3600,\n", + " 'tf_lora': False,\n", + " 'tf_num_inds': 32,\n", + " 'ada_n_seeds': 0,\n", + " 'gradient_penalty_kwargs': {'mag_loss': True,\n", + " 'mse_mag': False,\n", + " 'mag_corr': False,\n", + " 'seq_mag': False,\n", + " 'cos_loss': False,\n", + " 'mag_corr_kwargs': {'only_sign': False},\n", + " 'cos_loss_kwargs': {'only_sign': True, 'cos_matrix': False},\n", + " 'mse_mag_kwargs': {'target': 0.1, 'multiply': True}}}" + ] + }, + "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).BEST,\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-02-29T03:25:18.763729Z", + "iopub.status.busy": "2024-02-29T03:25:18.763015Z", + "iopub.status.idle": "2024-02-29T03:25:18.834082Z", + "shell.execute_reply": "2024-02-29T03:25:18.833159Z" + }, + "papermill": { + "duration": 0.08788, + "end_time": "2024-02-29T03:25:18.836089", + "exception": false, + "start_time": "2024-02-29T03:25:18.748209", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "load_dataset_3_factory 2\n", + "Caching in ../../../../insurance/_cache/realtabformer/all inf False\n", + "Splitting without random!\n", + "Split with reverse index!\n", + "../../../../ml-utility-loss/datasets_2/insurance [80, 20]\n", + "Caching in ../../../../insurance/_cache4/realtabformer/all inf False\n", + "Splitting without random!\n", + "Split with reverse index!\n", + "../../../../ml-utility-loss/datasets_4/insurance [80, 20]\n", + "Caching in ../../../../insurance/_cache5/realtabformer/all inf False\n", + "Splitting without random!\n", + "Split with reverse index!\n", + "../../../../ml-utility-loss/datasets_5/insurance [160, 40]\n", + "[320, 80]\n", + "[320, 80]\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-02-29T03:25:18.865541Z", + "iopub.status.busy": "2024-02-29T03:25:18.865251Z", + "iopub.status.idle": "2024-02-29T03:25:19.308543Z", + "shell.execute_reply": "2024-02-29T03:25:19.307591Z" + }, + "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.460649, + "end_time": "2024-02-29T03:25:19.310570", + "exception": false, + "start_time": "2024-02-29T03:25:18.849921", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Creating model of type \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[*] Embedding True True\n", + "['realtabformer'] 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-02-29T03:25:19.340277Z", + "iopub.status.busy": "2024-02-29T03:25:19.339956Z", + "iopub.status.idle": "2024-02-29T03:25:19.344065Z", + "shell.execute_reply": "2024-02-29T03:25:19.343340Z" + }, + "papermill": { + "duration": 0.021386, + "end_time": "2024-02-29T03:25:19.345840", + "exception": false, + "start_time": "2024-02-29T03:25:19.324454", + "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-02-29T03:25:19.373004Z", + "iopub.status.busy": "2024-02-29T03:25:19.372710Z", + "iopub.status.idle": "2024-02-29T03:25:19.379941Z", + "shell.execute_reply": "2024-02-29T03:25:19.379078Z" + }, + "papermill": { + "duration": 0.022893, + "end_time": "2024-02-29T03:25:19.381812", + "exception": false, + "start_time": "2024-02-29T03:25:19.358919", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "10420892" + ] + }, + "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-02-29T03:25:19.409201Z", + "iopub.status.busy": "2024-02-29T03:25:19.408894Z", + "iopub.status.idle": "2024-02-29T03:25:19.503585Z", + "shell.execute_reply": "2024-02-29T03:25:19.502633Z" + }, + "papermill": { + "duration": 0.11087, + "end_time": "2024-02-29T03:25:19.505798", + "exception": false, + "start_time": "2024-02-29T03:25:19.394928", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "========================================================================================================================\n", + "Layer (type:depth-idx) Output Shape Param #\n", + "========================================================================================================================\n", + "MLUtilitySingle [2, 1071, 15200] --\n", + "├─Adapter: 1-1 [2, 1071, 15200] --\n", + "│ └─Embedding: 2-1 [2, 1071, 19, 800] (440,800)\n", + "│ └─TensorInductionPoint: 2-2 [19, 1] 19\n", + "│ └─Sequential: 2-3 [2, 1071, 256] --\n", + "│ │ └─FeedForward: 3-1 [2, 1071, 1024] --\n", + "│ │ │ └─Linear: 4-1 [2, 1071, 1024] 820,224\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, 15200] (recursive)\n", + "│ └─Embedding: 2-4 [2, 267, 19, 800] (recursive)\n", + "│ └─TensorInductionPoint: 2-5 [19, 1] (recursive)\n", + "│ └─Sequential: 2-6 [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-7 [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-8 [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-9 [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: 10,861,692\n", + "Trainable params: 10,420,892\n", + "Non-trainable params: 440,800\n", + "Total mult-adds (M): 43.07\n", + "========================================================================================================================\n", + "Input size (MB): 0.20\n", + "Forward/backward pass size (MB): 632.89\n", + "Params size (MB): 43.45\n", + "Estimated Total Size (MB): 676.54\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-02-29T03:25:19.536409Z", + "iopub.status.busy": "2024-02-29T03:25:19.536066Z", + "iopub.status.idle": "2024-02-29T03:37:37.107344Z", + "shell.execute_reply": "2024-02-29T03:37:37.106378Z" + }, + "papermill": { + "duration": 737.605486, + "end_time": "2024-02-29T03:37:37.126175", + "exception": false, + "start_time": "2024-02-29T03:25:19.520689", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: Tracking run with wandb version 0.16.3\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: W&B syncing is set to \u001b[1m`offline`\u001b[0m in this directory. \n", + "\u001b[34m\u001b[1mwandb\u001b[0m: Run \u001b[1m`wandb online`\u001b[0m or set \u001b[1mWANDB_MODE=online\u001b[0m to enable cloud syncing.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "g_loss_mul 0.1\n", + "Epoch 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.06551592258038, 'avg_role_model_std_loss': 3.8791051520893234, 'avg_role_model_mean_pred_loss': 0.03416722755192225, '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.06551592258038, 'n_size': 320, 'n_batch': 40, 'duration': 41.27148151397705, 'duration_batch': 1.0317870378494263, 'duration_size': 0.12897337973117828, 'avg_pred_std': 0.12673317359294742}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0045693422085605565, 'avg_role_model_std_loss': 0.18476937365267077, 'avg_role_model_mean_pred_loss': 6.355656341838767e-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.0045693422085605565, 'n_size': 80, 'n_batch': 10, 'duration': 8.436395406723022, 'duration_batch': 0.8436395406723023, 'duration_size': 0.10545494258403779, 'avg_pred_std': 0.08324137404561043}\n", + "Epoch 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0037559630061878126, 'avg_role_model_std_loss': 1.925213829313543, 'avg_role_model_mean_pred_loss': 3.748016030745149e-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.0037559630061878126, 'n_size': 320, 'n_batch': 40, 'duration': 40.829859256744385, 'duration_batch': 1.0207464814186096, 'duration_size': 0.1275933101773262, 'avg_pred_std': 0.09227103746379725}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0010763755642983596, 'avg_role_model_std_loss': 0.15519529518205671, 'avg_role_model_mean_pred_loss': 2.772719910471011e-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.0010763755642983596, 'n_size': 80, 'n_batch': 10, 'duration': 8.419125080108643, 'duration_batch': 0.8419125080108643, 'duration_size': 0.10523906350135803, 'avg_pred_std': 0.09969702027738095}\n", + "Epoch 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0023816580101993167, 'avg_role_model_std_loss': 3.9052163640380853, 'avg_role_model_mean_pred_loss': 1.0410949786183142e-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.0023816580101993167, 'n_size': 320, 'n_batch': 40, 'duration': 41.17148947715759, 'duration_batch': 1.0292872369289399, 'duration_size': 0.12866090461611748, 'avg_pred_std': 0.08443290112772957}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.010231703845784068, 'avg_role_model_std_loss': 24.354415035247804, 'avg_role_model_mean_pred_loss': 2.082776591478819e-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.010231703845784068, 'n_size': 80, 'n_batch': 10, 'duration': 8.513915061950684, 'duration_batch': 0.8513915061950683, 'duration_size': 0.10642393827438354, 'avg_pred_std': 0.01369248509290628}\n", + "Epoch 3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.005280107025464531, 'avg_role_model_std_loss': 12.423834150836047, 'avg_role_model_mean_pred_loss': 1.5615434550020346e-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.005280107025464531, 'n_size': 320, 'n_batch': 40, 'duration': 41.08780074119568, 'duration_batch': 1.027195018529892, 'duration_size': 0.1283993773162365, 'avg_pred_std': 0.06296185727987905}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0026845919943298212, 'avg_role_model_std_loss': 1.0221173237751728, 'avg_role_model_mean_pred_loss': 4.954857529959611e-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.0026845919943298212, 'n_size': 80, 'n_batch': 10, 'duration': 8.557486295700073, 'duration_batch': 0.8557486295700073, 'duration_size': 0.10696857869625091, 'avg_pred_std': 0.06754178307019174}\n", + "Epoch 4\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.001628522769169649, 'avg_role_model_std_loss': 0.9669525724625203, 'avg_role_model_mean_pred_loss': 2.4910537018897618e-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.001628522769169649, 'n_size': 320, 'n_batch': 40, 'duration': 41.08520555496216, 'duration_batch': 1.027130138874054, 'duration_size': 0.12839126735925674, 'avg_pred_std': 0.08523798966780305}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0011392909364076331, 'avg_role_model_std_loss': 0.8447293579599318, 'avg_role_model_mean_pred_loss': 8.642555209048553e-07, '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.0011392909364076331, 'n_size': 80, 'n_batch': 10, 'duration': 8.54101276397705, 'duration_batch': 0.8541012763977051, 'duration_size': 0.10676265954971313, 'avg_pred_std': 0.07724661021493376}\n", + "Epoch 5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0006698742679873248, 'avg_role_model_std_loss': 0.5631417240535356, 'avg_role_model_mean_pred_loss': 1.3532459000285823e-07, '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.0006698742679873248, 'n_size': 320, 'n_batch': 40, 'duration': 41.17172598838806, 'duration_batch': 1.0292931497097015, 'duration_size': 0.1286616437137127, 'avg_pred_std': 0.09377104000886902}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.00028418309084372596, 'avg_role_model_std_loss': 0.9654686861199593, 'avg_role_model_mean_pred_loss': 6.203523792436271e-08, '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.00028418309084372596, 'n_size': 80, 'n_batch': 10, 'duration': 8.475411891937256, 'duration_batch': 0.8475411891937256, 'duration_size': 0.1059426486492157, 'avg_pred_std': 0.08174715298227966}\n", + "Epoch 6\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.00026526139699853955, 'avg_role_model_std_loss': 0.0404354411696886, 'avg_role_model_mean_pred_loss': 5.110972021091231e-08, '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.00026526139699853955, 'n_size': 320, 'n_batch': 40, 'duration': 41.210866928100586, 'duration_batch': 1.0302716732025146, 'duration_size': 0.12878395915031432, 'avg_pred_std': 0.1002270121127367}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0003043986107513774, 'avg_role_model_std_loss': 0.7276606579284817, 'avg_role_model_mean_pred_loss': 4.158757311856221e-08, '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.0003043986107513774, 'n_size': 80, 'n_batch': 10, 'duration': 8.365734815597534, 'duration_batch': 0.8365734815597534, 'duration_size': 0.10457168519496918, 'avg_pred_std': 0.08551097614690661}\n", + "Epoch 7\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.00033921911108336644, 'avg_role_model_std_loss': 0.04215667733975863, 'avg_role_model_mean_pred_loss': 2.0074933999580934e-07, '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.00033921911108336644, 'n_size': 320, 'n_batch': 40, 'duration': 41.27673935890198, 'duration_batch': 1.0319184839725495, 'duration_size': 0.12898981049656869, 'avg_pred_std': 0.09141667010262608}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0003641421761130914, 'avg_role_model_std_loss': 2.5711033316561953, 'avg_role_model_mean_pred_loss': 8.640791372971357e-08, '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.0003641421761130914, 'n_size': 80, 'n_batch': 10, 'duration': 8.418156147003174, 'duration_batch': 0.8418156147003174, 'duration_size': 0.10522695183753968, 'avg_pred_std': 0.07711024282034487}\n", + "Epoch 8\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.00027859737192557075, 'avg_role_model_std_loss': 0.6936592234017018, 'avg_role_model_mean_pred_loss': 1.7161798243723202e-08, '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.00027859737192557075, 'n_size': 320, 'n_batch': 40, 'duration': 40.9585645198822, 'duration_batch': 1.0239641129970551, 'duration_size': 0.1279955141246319, 'avg_pred_std': 0.09465919948415831}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.00026416685177537146, 'avg_role_model_std_loss': 2.1159255215665325, 'avg_role_model_mean_pred_loss': 2.42559791252539e-08, '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.00026416685177537146, 'n_size': 80, 'n_batch': 10, 'duration': 8.478416442871094, 'duration_batch': 0.8478416442871094, 'duration_size': 0.10598020553588867, 'avg_pred_std': 0.07725258702412248}\n", + "Epoch 9\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.00025029900834852017, 'avg_role_model_std_loss': 0.03145681113393835, 'avg_role_model_mean_pred_loss': 3.047866507614738e-08, '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.00025029900834852017, 'n_size': 320, 'n_batch': 40, 'duration': 40.887590169906616, 'duration_batch': 1.0221897542476654, 'duration_size': 0.12777371928095818, 'avg_pred_std': 0.0979282318148762}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.00020534966315608472, 'avg_role_model_std_loss': 2.1954285900741297, 'avg_role_model_mean_pred_loss': 7.391519909029712e-09, '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.00020534966315608472, 'n_size': 80, 'n_batch': 10, 'duration': 8.422897815704346, 'duration_batch': 0.8422897815704345, 'duration_size': 0.10528622269630432, 'avg_pred_std': 0.08292618948034942}\n", + "Epoch 10\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.00018911582246801119, 'avg_role_model_std_loss': 0.10153866822858788, 'avg_role_model_mean_pred_loss': 1.738624569006149e-08, '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.00018911582246801119, 'n_size': 320, 'n_batch': 40, 'duration': 41.04085445404053, 'duration_batch': 1.0260213613510132, 'duration_size': 0.12825267016887665, 'avg_pred_std': 0.09834078068379312}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.00036368721775943414, 'avg_role_model_std_loss': 2.7509145542862825, 'avg_role_model_mean_pred_loss': 1.876272959222547e-08, '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.00036368721775943414, 'n_size': 80, 'n_batch': 10, 'duration': 8.390719890594482, 'duration_batch': 0.8390719890594482, 'duration_size': 0.10488399863243103, 'avg_pred_std': 0.07442375177051871}\n", + "Epoch 11\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.00028841259018008714, 'avg_role_model_std_loss': 0.5210410886732475, 'avg_role_model_mean_pred_loss': 1.396120100700081e-07, '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.00028841259018008714, 'n_size': 320, 'n_batch': 40, 'duration': 40.944926261901855, 'duration_batch': 1.0236231565475464, 'duration_size': 0.1279528945684433, 'avg_pred_std': 0.09693868652684615}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0009965902085241397, 'avg_role_model_std_loss': 2.239691164344549, 'avg_role_model_mean_pred_loss': 6.967871311047701e-08, '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.0009965902085241397, 'n_size': 80, 'n_batch': 10, 'duration': 8.430182218551636, 'duration_batch': 0.8430182218551636, 'duration_size': 0.10537727773189545, 'avg_pred_std': 0.06215766463428736}\n", + "Epoch 12\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0009654337161919102, 'avg_role_model_std_loss': 0.6124627925846198, 'avg_role_model_mean_pred_loss': 8.020637164636666e-07, '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.0009654337161919102, 'n_size': 320, 'n_batch': 40, 'duration': 41.00464582443237, 'duration_batch': 1.0251161456108093, 'duration_size': 0.12813951820135117, 'avg_pred_std': 0.09093999108299614}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: - 0.000 MB of 0.000 MB uploaded\r" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0008928512179409154, 'avg_role_model_std_loss': 1.408968701583035, 'avg_role_model_mean_pred_loss': 4.1629629343731264e-08, '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.0008928512179409154, 'n_size': 80, 'n_batch': 10, 'duration': 8.480279445648193, 'duration_batch': 0.8480279445648193, 'duration_size': 0.10600349307060242, 'avg_pred_std': 0.06699345875531434}\n", + "Stopped False\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: \n", + "\u001b[34m\u001b[1mwandb\u001b[0m: Run history:\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_loss_test ▄▂█▃▂▁▁▁▁▁▁▂▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_loss_train █▁▁▂▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_embed_loss_test ▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_embed_loss_train ▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_cos_loss_test ▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_cos_loss_train ▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_mag_loss_test ▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_mag_loss_train ▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_pred_std_test ▇█▁▅▆▇▇▆▆▇▆▅▅\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_pred_std_train █▄▃▁▃▄▅▄▄▅▅▅▄\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_cos_loss_test ▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_cos_loss_train ▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_mag_loss_test ▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_mag_loss_train ▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_loss_test ▄▂█▃▂▁▁▁▁▁▁▂▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_loss_train █▁▁▂▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_mean_pred_loss_test █▁▃▂▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_mean_pred_loss_train █▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_std_loss_test ▁▁█▁▁▁▁▂▂▂▂▂▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_std_loss_train ▃▂▃█▂▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_batch_test ▄▃▆█▇▅▁▃▅▃▂▃▅\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_batch_train █▁▆▅▅▆▇█▃▂▄▃▄\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_size_test ▄▃▆█▇▅▁▃▅▃▂▃▅\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_size_train █▁▆▅▅▆▇█▃▂▄▃▄\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_test ▄▃▆█▇▅▁▃▅▃▂▃▅\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_train █▁▆▅▅▆▇█▃▂▄▃▄\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: n_batch_test ▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: n_batch_train ▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: n_size_test ▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: n_size_train ▁▁▁▁▁▁▁▁▁▁▁▁▁\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: \n", + "\u001b[34m\u001b[1mwandb\u001b[0m: Run summary:\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_loss_test 0.00089\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_loss_train 0.00097\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_embed_loss_test 0.0\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_embed_loss_train 0.0\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_cos_loss_test 0.0\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_cos_loss_train 0.0\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_mag_loss_test 0.0\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_mag_loss_train 0.0\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_pred_std_test 0.06699\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_pred_std_train 0.09094\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_cos_loss_test 0.0\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_cos_loss_train 0.0\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_mag_loss_test 0.0\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_mag_loss_train 0.0\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_loss_test 0.00089\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_loss_train 0.00097\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_mean_pred_loss_test 0.0\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_mean_pred_loss_train 0.0\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_std_loss_test 1.40897\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_std_loss_train 0.61246\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_batch_test 0.84803\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_batch_train 1.02512\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_size_test 0.106\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_size_train 0.12814\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_test 8.48028\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: duration_train 41.00465\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: n_batch_test 10\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: n_batch_train 40\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: n_size_test 80\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: n_size_train 320\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: \n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: You can sync this run to the cloud by running:\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[1mwandb sync /kaggle/working/eval/insurance/realtabformer/4/wandb/offline-run-20240229_032521-mpqsh2g2\u001b[0m\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: Find logs at: \u001b[35m\u001b[1m./wandb/offline-run-20240229_032521-mpqsh2g2/logs\u001b[0m\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval loss {'role_model': 'realtabformer', 'n_size': 399, 'n_batch': 50, 'role_model_metrics': {'avg_loss': 0.0011680080120791366, 'avg_g_mag_loss': 0.015933245898626762, 'avg_g_cos_loss': 0.024182093322725223, 'pred_duration': 2.114567995071411, 'grad_duration': 1.6933445930480957, 'total_duration': 3.807912588119507, 'pred_std': 0.16980430483818054, 'std_loss': 0.00019665305444505066, 'mean_pred_loss': 1.955350626303698e-06, 'pred_rmse': 0.03417613357305527, 'pred_mae': 0.02439017966389656, 'pred_mape': 0.45029589533805847, 'grad_rmse': 0.42980626225471497, 'grad_mae': 0.22907406091690063, 'grad_mape': 3.4890403747558594}, '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.0011680080120791366, 'avg_g_mag_loss': 0.015933245898626762, 'avg_g_cos_loss': 0.024182093322725223, 'avg_pred_duration': 2.114567995071411, 'avg_grad_duration': 1.6933445930480957, 'avg_total_duration': 3.807912588119507, 'avg_pred_std': 0.16980430483818054, 'avg_std_loss': 0.00019665305444505066, 'avg_mean_pred_loss': 1.955350626303698e-06}, 'min_metrics': {'avg_loss': 0.0011680080120791366, 'avg_g_mag_loss': 0.015933245898626762, 'avg_g_cos_loss': 0.024182093322725223, 'pred_duration': 2.114567995071411, 'grad_duration': 1.6933445930480957, 'total_duration': 3.807912588119507, 'pred_std': 0.16980430483818054, 'std_loss': 0.00019665305444505066, 'mean_pred_loss': 1.955350626303698e-06, 'pred_rmse': 0.03417613357305527, 'pred_mae': 0.02439017966389656, 'pred_mape': 0.45029589533805847, 'grad_rmse': 0.42980626225471497, 'grad_mae': 0.22907406091690063, 'grad_mape': 3.4890403747558594}, 'model_metrics': {'realtabformer': {'avg_loss': 0.0011680080120791366, 'avg_g_mag_loss': 0.015933245898626762, 'avg_g_cos_loss': 0.024182093322725223, 'pred_duration': 2.114567995071411, 'grad_duration': 1.6933445930480957, 'total_duration': 3.807912588119507, 'pred_std': 0.16980430483818054, 'std_loss': 0.00019665305444505066, 'mean_pred_loss': 1.955350626303698e-06, 'pred_rmse': 0.03417613357305527, 'pred_mae': 0.02439017966389656, 'pred_mape': 0.45029589533805847, 'grad_rmse': 0.42980626225471497, 'grad_mae': 0.22907406091690063, 'grad_mape': 3.4890403747558594}}}\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", + "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=False,\n", + " wandb=wandb,\n", + " study_name=study_name,\n", + " **params\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "9b514a07", + "metadata": { + "execution": { + "iopub.execute_input": "2024-02-29T03:37:37.163535Z", + "iopub.status.busy": "2024-02-29T03:37:37.162754Z", + "iopub.status.idle": "2024-02-29T03:37:37.167538Z", + "shell.execute_reply": "2024-02-29T03:37:37.166628Z" + }, + "papermill": { + "duration": 0.025748, + "end_time": "2024-02-29T03:37:37.169465", + "exception": false, + "start_time": "2024-02-29T03:37:37.143717", + "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-02-29T03:37:37.203346Z", + "iopub.status.busy": "2024-02-29T03:37:37.203033Z", + "iopub.status.idle": "2024-02-29T03:37:37.493921Z", + "shell.execute_reply": "2024-02-29T03:37:37.493097Z" + }, + "papermill": { + "duration": 0.310748, + "end_time": "2024-02-29T03:37:37.496412", + "exception": false, + "start_time": "2024-02-29T03:37:37.185664", + "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-02-29T03:37:37.533210Z", + "iopub.status.busy": "2024-02-29T03:37:37.532890Z", + "iopub.status.idle": "2024-02-29T03:37:37.801376Z", + "shell.execute_reply": "2024-02-29T03:37:37.800486Z" + }, + "papermill": { + "duration": 0.289623, + "end_time": "2024-02-29T03:37:37.803375", + "exception": false, + "start_time": "2024-02-29T03:37:37.513752", + "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-02-29T03:37:37.841975Z", + "iopub.status.busy": "2024-02-29T03:37:37.841686Z", + "iopub.status.idle": "2024-02-29T03:38:24.155443Z", + "shell.execute_reply": "2024-02-29T03:38:24.154410Z" + }, + "papermill": { + "duration": 46.336522, + "end_time": "2024-02-29T03:38:24.157916", + "exception": false, + "start_time": "2024-02-29T03:37:37.821394", + "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-02-29T03:38:24.196181Z", + "iopub.status.busy": "2024-02-29T03:38:24.195314Z", + "iopub.status.idle": "2024-02-29T03:38:24.214970Z", + "shell.execute_reply": "2024-02-29T03:38:24.214178Z" + }, + "papermill": { + "duration": 0.040598, + "end_time": "2024-02-29T03:38:24.216824", + "exception": false, + "start_time": "2024-02-29T03:38:24.176226", + "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
realtabformer0.0141680.022180.0011681.6954430.2290763.4890890.4298050.0000022.115530.024390.4502940.0341760.1698040.0001973.810973
\n", + "
" + ], + "text/plain": [ + " avg_g_cos_loss avg_g_mag_loss avg_loss grad_duration \\\n", + "realtabformer 0.014168 0.02218 0.001168 1.695443 \n", + "\n", + " grad_mae grad_mape grad_rmse mean_pred_loss pred_duration \\\n", + "realtabformer 0.229076 3.489089 0.429805 0.000002 2.11553 \n", + "\n", + " pred_mae pred_mape pred_rmse pred_std std_loss \\\n", + "realtabformer 0.02439 0.450294 0.034176 0.169804 0.000197 \n", + "\n", + " total_duration \n", + "realtabformer 3.810973 " + ] + }, + "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-02-29T03:38:24.251404Z", + "iopub.status.busy": "2024-02-29T03:38:24.251124Z", + "iopub.status.idle": "2024-02-29T03:38:24.701499Z", + "shell.execute_reply": "2024-02-29T03:38:24.700698Z" + }, + "papermill": { + "duration": 0.470067, + "end_time": "2024-02-29T03:38:24.703615", + "exception": false, + "start_time": "2024-02-29T03:38:24.233548", + "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-02-29T03:38:24.742762Z", + "iopub.status.busy": "2024-02-29T03:38:24.742464Z", + "iopub.status.idle": "2024-02-29T03:39:15.523040Z", + "shell.execute_reply": "2024-02-29T03:39:15.522252Z" + }, + "papermill": { + "duration": 50.803335, + "end_time": "2024-02-29T03:39:15.525562", + "exception": false, + "start_time": "2024-02-29T03:38:24.722227", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../insurance/_cache_test/realtabformer/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-02-29T03:39:15.564540Z", + "iopub.status.busy": "2024-02-29T03:39:15.563736Z", + "iopub.status.idle": "2024-02-29T03:39:15.580811Z", + "shell.execute_reply": "2024-02-29T03:39:15.579915Z" + }, + "papermill": { + "duration": 0.038805, + "end_time": "2024-02-29T03:39:15.582884", + "exception": false, + "start_time": "2024-02-29T03:39:15.544079", + "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-02-29T03:39:15.618738Z", + "iopub.status.busy": "2024-02-29T03:39:15.618475Z", + "iopub.status.idle": "2024-02-29T03:39:15.623912Z", + "shell.execute_reply": "2024-02-29T03:39:15.623082Z" + }, + "papermill": { + "duration": 0.026041, + "end_time": "2024-02-29T03:39:15.625930", + "exception": false, + "start_time": "2024-02-29T03:39:15.599889", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'realtabformer': 0.05701854543726574}\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-02-29T03:39:15.661043Z", + "iopub.status.busy": "2024-02-29T03:39:15.660794Z", + "iopub.status.idle": "2024-02-29T03:39:15.995914Z", + "shell.execute_reply": "2024-02-29T03:39:15.995006Z" + }, + "papermill": { + "duration": 0.355249, + "end_time": "2024-02-29T03:39:15.998047", + "exception": false, + "start_time": "2024-02-29T03:39:15.642798", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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aXKK5v2rqKg47vfM4Yhyxxklep2LLrpIjR49Wq1atUq99957qry8XM2ePbvD10ydOlXddNNNat++fZFHfX19D5U4cZ5++mlls9nUY489pr744gt10003qczMTHXgwIE2j//ggw+U2WxWv/jFL9SmTZvU//zP/yir1ao2btzYwyVPDtG+f8uXL1cZGRmtfs/2798f1TUllHqZTZs2KUCtXbs28twrr7yiNE1Te/bsafd1U6dOVd///vd7oITJZeLEieqWW26JfB0KhVRxcbFaunRpm8dfffXV6pJLLmn13KRJk9TNN9/creVMVtG+f8uXL1cul6tL15TmWy/z0UcfkZmZyfjx4yPPTZ8+HZPJxOrVqzt87ZNPPklubi4jR45k8eLFuN3u7i5uQvn9ftavX8/06dMjz5lMJqZPn85HH33U5ms++uijVscDXHjhhe0efzKL5f0DaGpqYsCAAZSUlHDFFVfwxRdfRHXdXj0hty/av38/+fn5rZ6zWCxkZ2ezf//+dl937bXXMmDAAIqLi9mwYQN33HEHmzdv5vnnn+/uIidMtDswg/H+tnV8R+/tySqW92/YsGE89thjjBo1ivr6en75y19y5pln8sUXX3R68ryEUpK48847+fnPf97hMV9++WXM51+wYEHk89NOO42ioiLOP/98tm/fzuDBg2M+rxBHmzx5cqs9G88880xGjBjBI488wo9//ONOnUNCKUn88Ic/ZN68eR0eM2jQIAoLC6murm71fDAY5PDhw23uKtyeSZMmAbBt27aTNpSi3YEZoLCwMKrjT2axvH/HslqtjB07lm3btnX6utKnlCTy8vIYPnx4hw+bzcbkyZOpq6tj/fr1kde+/fbb6LoeCZrO+PTTTwEoKiqK94+SNGLZgXny5Mmtjgd44403+uSOzfHYwToUCrFx48bofs+61E0uEuKiiy5SY8eOVatXr1bvv/++GjJkSKshAbt371bDhg1Tq1evVkoptW3bNnXvvfeqdevWqR07dqgXX3xRDRo0SJ1zzjmJ+hF6zNNPP63sdruqqKhQmzZtUgsWLFCZmZmR29Tf+c531J133hk5/oMPPlAWi0X98pe/VF9++aW66667+vyQgGjev3vuuUe99tpravv27Wr9+vXqmmuuUQ6HQ33xxRedvqaEUi9UU1OjZs+erdLS0lRGRoa64YYbVGNjY+T7O3bsUIB65513lFJK7dq1S51zzjkqOztb2e12VV5erv77v/+7T4xTUkqphx9+WJWWliqbzaYmTpyoVq1aFfne1KlT1dy5c1sd/8wzz6ihQ4cqm82mTj31VPXSSy/1cImTSzTv3+233x45tqCgQF188cXq448/jup6snSJECKpSJ+SECKpSCgJIZKKhJIQIqlIKAkhkoqEkhAiqUgoCSGSioSSECKpSCgJIZKKhJLoVSoqKsjMzIx8fffddzNmzJjI1/PmzWPmzJk9Xi4RPxJKok3z5s1rdx3vW265BU3TWq1q0B1hMHDgQB588MFWz337299my5Yt7b7moYceoqKiIvL1tGnTuP322+NaLtG9JJREu0pKSnj66afxeDyR57xeL0899RSlpaUJKZPT6TxukbujuVyuVjUp0ftIKIl2nX766ZSUlLRanfL555+ntLSUsWPHduncbdVgZs6cGal9TZs2jcrKSn7wgx9EdsWA45tvxzq6xjZv3jzeffddHnroocg5duzYQXl5Ob/85S9bve7TTz9F07So1v0R3UNCSXToxhtvZPny5ZGvH3vsMW644YZuv+7zzz9P//79uffee9m3bx/79u2L+hwPPfQQkydP5qabboqco7S09LifCWD58uWcc845lJeXx+tHEDGSUBIduv7663n//feprKyksrKSDz74gOuvv77br5udnY3ZbCY9PZ3CwsKYVn50uVzYbDZSUlIi5zCbzcybN4/NmzdH9i8LBAI89dRT3HjjjfH+MUQMZDlc0aG8vDwuueQSKioqUEpxySWXkJubm+hidUlxcTGXXHIJjz32GBMnTuRf//oXPp+PWbNmJbpoAqkpiU648cYbqaio4PHHH49bbcJkMnHsUl6BQCAu5+6M+fPnRzrxly9fzre//W1SUlJ67PqifRJK4oQuuugi/H4/gUCACy+8MC7nzMvLa9VPFAqF+Pzzz1sdY7PZCIVCXbpOe+e4+OKLSU1NZdmyZbz66qvSdEsi0nwTJ2Q2myPbO5nN5naPq6+vj2xI0CInJ4eSkpLjjj3vvPNYuHAhL730EoMHD+aBBx6grq6u1TEDBw5k5cqVXHPNNdjt9piajQMHDmT16tXs3LmTtLQ0srOzMZlMkb6lxYsXM2TIkD65MUCykpqS6JSMjAwyMjI6PGbFihWMHTu21eOee+5p89gbb7yRuXPnMmfOHKZOncqgQYM499xzWx1z7733snPnTgYPHkxeXl5M5V60aBFms5lTTjmFvLw8du3aFfned7/7Xfx+f4/cTRSdJ2t0iz7rvffe4/zzz6eqquq4XWBF4kgoiT7H5/Nx8OBB5s6dS2FhIU8++WSiiySOIs030ef89a9/ZcCAAdTV1fGLX/wi0cURx5CakhAiqUhNSQiRVCSUhBBJRUJJCJFUJJSEEElFQkkIkVQklIQQSUVCSQiRVCSUhBBJ5f8DXGvBgTPmhUIAAAAASUVORK5CYII=", + "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-02-29T03:39:16.036478Z", + "iopub.status.busy": "2024-02-29T03:39:16.036182Z", + "iopub.status.idle": "2024-02-29T03:39:16.379067Z", + "shell.execute_reply": "2024-02-29T03:39:16.378175Z" + }, + "papermill": { + "duration": 0.364322, + "end_time": "2024-02-29T03:39:16.381233", + "exception": false, + "start_time": "2024-02-29T03:39:16.016911", + "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-02-29T03:39:16.421404Z", + "iopub.status.busy": "2024-02-29T03:39:16.420676Z", + "iopub.status.idle": "2024-02-29T03:39:16.646712Z", + "shell.execute_reply": "2024-02-29T03:39:16.645882Z" + }, + "papermill": { + "duration": 0.248502, + "end_time": "2024-02-29T03:39:16.648701", + "exception": false, + "start_time": "2024-02-29T03:39:16.400199", + "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-02-29T03:39:16.689117Z", + "iopub.status.busy": "2024-02-29T03:39:16.688351Z", + "iopub.status.idle": "2024-02-29T03:39:16.978503Z", + "shell.execute_reply": "2024-02-29T03:39:16.977621Z" + }, + "papermill": { + "duration": 0.312537, + "end_time": "2024-02-29T03:39:16.980494", + "exception": false, + "start_time": "2024-02-29T03:39:16.667957", + "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.020752, + "end_time": "2024-02-29T03:39:17.021389", + "exception": false, + "start_time": "2024-02-29T03:39:17.000637", + "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": 859.308783, + "end_time": "2024-02-29T03:39:19.761275", + "environment_variables": {}, + "exception": null, + "input_path": "eval/insurance/realtabformer/4/mlu-eval.ipynb", + "output_path": "eval/insurance/realtabformer/4/mlu-eval.ipynb", + "parameters": { + "dataset": "insurance", + "dataset_name": "insurance", + "debug": false, + "folder": "eval", + "gp": false, + "gp_multiply": false, + "path": "eval/insurance/realtabformer/4", + "path_prefix": "../../../../", + "random_seed": 4, + "single_model": "realtabformer" + }, + "start_time": "2024-02-29T03:25:00.452492", + "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