{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "982e76f5", "metadata": { "execution": { "iopub.execute_input": "2024-03-01T09:07:56.338469Z", "iopub.status.busy": "2024-03-01T09:07:56.338121Z", "iopub.status.idle": "2024-03-01T09:07:56.372428Z", "shell.execute_reply": "2024-03-01T09:07:56.371512Z" }, "papermill": { "duration": 0.049508, "end_time": "2024-03-01T09:07:56.374820", "exception": false, "start_time": "2024-03-01T09:07:56.325312", "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-01T09:07:56.403990Z", "iopub.status.busy": "2024-03-01T09:07:56.403100Z", "iopub.status.idle": "2024-03-01T09:07:56.412062Z", "shell.execute_reply": "2024-03-01T09:07:56.411069Z" }, "papermill": { "duration": 0.026577, "end_time": "2024-03-01T09:07:56.414227", "exception": false, "start_time": "2024-03-01T09:07:56.387650", "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-03-01T09:07:56.441828Z", "iopub.status.busy": "2024-03-01T09:07:56.441456Z", "iopub.status.idle": "2024-03-01T09:07:56.446308Z", "shell.execute_reply": "2024-03-01T09:07:56.445341Z" }, "papermill": { "duration": 0.021682, "end_time": "2024-03-01T09:07:56.448533", "exception": false, "start_time": "2024-03-01T09:07:56.426851", "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-01T09:07:56.475086Z", "iopub.status.busy": "2024-03-01T09:07:56.474797Z", "iopub.status.idle": "2024-03-01T09:07:56.479421Z", "shell.execute_reply": "2024-03-01T09:07:56.478371Z" }, "executionInfo": { "elapsed": 678, "status": "ok", "timestamp": 1696841022168, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "ns5hFcVL2yvs", "papermill": { "duration": 0.021034, "end_time": "2024-03-01T09:07:56.481637", "exception": false, "start_time": "2024-03-01T09:07:56.460603", "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-01T09:07:56.510323Z", "iopub.status.busy": "2024-03-01T09:07:56.509980Z", "iopub.status.idle": "2024-03-01T09:07:56.516453Z", "shell.execute_reply": "2024-03-01T09:07:56.515542Z" }, "papermill": { "duration": 0.023343, "end_time": "2024-03-01T09:07:56.518756", "exception": false, "start_time": "2024-03-01T09:07:56.495413", "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" ] }, { "cell_type": "code", "execution_count": 6, "id": "faef7c07", "metadata": { "execution": { "iopub.execute_input": "2024-03-01T09:07:56.547738Z", "iopub.status.busy": "2024-03-01T09:07:56.547348Z", "iopub.status.idle": "2024-03-01T09:07:56.552780Z", "shell.execute_reply": "2024-03-01T09:07:56.551757Z" }, "papermill": { "duration": 0.023159, "end_time": "2024-03-01T09:07:56.555149", "exception": false, "start_time": "2024-03-01T09:07:56.531990", "status": "completed" }, "tags": [ "injected-parameters" ] }, "outputs": [], "source": [ "# Parameters\n", "dataset = \"contraceptive\"\n", "dataset_name = \"contraceptive\"\n", "single_model = \"realtabformer\"\n", "gp = False\n", "gp_multiply = False\n", "random_seed = 3\n", "debug = False\n", "folder = \"eval\"\n", "path_prefix = \"../../../../\"\n", "path = \"eval/contraceptive/realtabformer/3\"\n", "param_index = 2\n" ] }, { "cell_type": "code", "execution_count": null, "id": "bd7c02d6", "metadata": { "papermill": { "duration": 0.013015, "end_time": "2024-03-01T09:07:56.581179", "exception": false, "start_time": "2024-03-01T09:07:56.568164", "status": "completed" }, "tags": [] }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 7, "id": "5f45b1d0", "metadata": { "execution": { "iopub.execute_input": "2024-03-01T09:07:56.607237Z", "iopub.status.busy": "2024-03-01T09:07:56.606900Z", "iopub.status.idle": "2024-03-01T09:07:56.616814Z", "shell.execute_reply": "2024-03-01T09:07:56.616022Z" }, "executionInfo": { "elapsed": 7, "status": "ok", "timestamp": 1696841022169, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "UdvXYv3c3LXy", "papermill": { "duration": 0.025043, "end_time": "2024-03-01T09:07:56.618854", "exception": false, "start_time": "2024-03-01T09:07:56.593811", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/kaggle/working\n", "/kaggle/working/eval/contraceptive/realtabformer/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-01T09:07:56.645717Z", "iopub.status.busy": "2024-03-01T09:07:56.645378Z", "iopub.status.idle": "2024-03-01T09:07:58.858292Z", "shell.execute_reply": "2024-03-01T09:07:58.857375Z" }, "papermill": { "duration": 2.22873, "end_time": "2024-03-01T09:07:58.860317", "exception": false, "start_time": "2024-03-01T09:07:56.631587", "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-01T09:07:58.884811Z", "iopub.status.busy": "2024-03-01T09:07:58.884308Z", "iopub.status.idle": "2024-03-01T09:07:58.895711Z", "shell.execute_reply": "2024-03-01T09:07:58.894678Z" }, "papermill": { "duration": 0.025785, "end_time": "2024-03-01T09:07:58.897772", "exception": false, "start_time": "2024-03-01T09:07:58.871987", "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-01T09:07:58.922747Z", "iopub.status.busy": "2024-03-01T09:07:58.922238Z", "iopub.status.idle": "2024-03-01T09:07:58.929493Z", "shell.execute_reply": "2024-03-01T09:07:58.928757Z" }, "executionInfo": { "elapsed": 6, "status": "ok", "timestamp": 1696841022169, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "Vrl2QkoV3o_8", "papermill": { "duration": 0.021647, "end_time": "2024-03-01T09:07:58.931696", "exception": false, "start_time": "2024-03-01T09:07:58.910049", "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-01T09:07:58.958947Z", "iopub.status.busy": "2024-03-01T09:07:58.958666Z", "iopub.status.idle": "2024-03-01T09:07:59.060750Z", "shell.execute_reply": "2024-03-01T09:07:59.059835Z" }, "executionInfo": { "elapsed": 6, "status": "ok", "timestamp": 1696841022169, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "TilUuFk9vqMb", "papermill": { "duration": 0.118212, "end_time": "2024-03-01T09:07:59.063105", "exception": false, "start_time": "2024-03-01T09:07:58.944893", "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-01T09:07:59.087774Z", "iopub.status.busy": "2024-03-01T09:07:59.087278Z", "iopub.status.idle": "2024-03-01T09:08:03.766937Z", "shell.execute_reply": "2024-03-01T09:08:03.766114Z" }, "executionInfo": { "elapsed": 3113, "status": "ok", "timestamp": 1696841025277, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "7Abt8nStvr9Z", "papermill": { "duration": 4.694674, "end_time": "2024-03-01T09:08:03.769395", "exception": false, "start_time": "2024-03-01T09:07:59.074721", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2024-03-01 09:08:01.341406: 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-01 09:08:01.341469: 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-01 09:08:01.343143: 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-01T09:08:03.795981Z", "iopub.status.busy": "2024-03-01T09:08:03.795367Z", "iopub.status.idle": "2024-03-01T09:08:03.801326Z", "shell.execute_reply": "2024-03-01T09:08:03.800622Z" }, "papermill": { "duration": 0.021111, "end_time": "2024-03-01T09:08:03.803263", "exception": false, "start_time": "2024-03-01T09:08:03.782152", "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-01T09:08:03.827480Z", "iopub.status.busy": "2024-03-01T09:08:03.827161Z", "iopub.status.idle": "2024-03-01T09:08:12.049493Z", "shell.execute_reply": "2024-03-01T09:08:12.048459Z" }, "executionInfo": { "elapsed": 20137, "status": "ok", "timestamp": 1696841045408, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "tbaguWxAvtPi", "papermill": { "duration": 8.237193, "end_time": "2024-03-01T09:08:12.051943", "exception": false, "start_time": "2024-03-01T09:08:03.814750", "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" ] }, { "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.775,\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': 2,\n", " 'epochs': 100,\n", " 'lr_mul': 0.075,\n", " 'n_warmup_steps': 100,\n", " 'Optim': functools.partial(, amsgrad=True),\n", " 'loss_balancer_beta': 0.675,\n", " 'loss_balancer_r': 0.95,\n", " 'fixed_role_model': 'realtabformer',\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': ml_utility_loss.activations.LeakyHardtanh,\n", " 'tf_activation_final': ml_utility_loss.activations.LeakyHardtanh,\n", " 'ada_d_hid': 1024,\n", " 'ada_n_layers': 8,\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': torch.nn.modules.activation.ReLU6,\n", " 'head_activation_final': ml_utility_loss.activations.LeakyHardsigmoid,\n", " 'models': ['realtabformer'],\n", " 'max_seconds': 3600,\n", " 'tf_lora': False,\n", " 'tf_num_inds': 64,\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': False}}}" ] }, "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-01T09:08:12.567977Z", "iopub.status.busy": "2024-03-01T09:08:12.567646Z", "iopub.status.idle": "2024-03-01T09:08:12.646794Z", "shell.execute_reply": "2024-03-01T09:08:12.645795Z" }, "papermill": { "duration": 0.095394, "end_time": "2024-03-01T09:08:12.649237", "exception": false, "start_time": "2024-03-01T09:08:12.553843", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "load_dataset_3_factory 2\n", "Caching in ../../../../contraceptive/_cache/realtabformer/all inf False\n", "Splitting without random!\n", "Split with reverse index!\n", "../../../../ml-utility-loss/datasets_2/contraceptive [80, 20]\n", "Caching in ../../../../contraceptive/_cache4/realtabformer/all inf False\n", "Splitting without random!\n", "Split with reverse index!\n", "../../../../ml-utility-loss/datasets_4/contraceptive [80, 20]\n", "Caching in ../../../../contraceptive/_cache5/realtabformer/all inf False\n", "Splitting without random!\n", "Split with reverse index!\n", "../../../../ml-utility-loss/datasets_5/contraceptive [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-03-01T09:08:12.680189Z", "iopub.status.busy": "2024-03-01T09:08:12.679291Z", "iopub.status.idle": "2024-03-01T09:08:13.186481Z", "shell.execute_reply": "2024-03-01T09:08:13.185534Z" }, "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.525003, "end_time": "2024-03-01T09:08:13.189040", "exception": false, "start_time": "2024-03-01T09:08:12.664037", "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-03-01T09:08:13.225847Z", "iopub.status.busy": "2024-03-01T09:08:13.225030Z", "iopub.status.idle": "2024-03-01T09:08:13.229918Z", "shell.execute_reply": "2024-03-01T09:08:13.229020Z" }, "papermill": { "duration": 0.023528, "end_time": "2024-03-01T09:08:13.231899", "exception": false, "start_time": "2024-03-01T09:08:13.208371", "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-01T09:08:13.263727Z", "iopub.status.busy": "2024-03-01T09:08:13.262850Z", "iopub.status.idle": "2024-03-01T09:08:13.272486Z", "shell.execute_reply": "2024-03-01T09:08:13.271126Z" }, "papermill": { "duration": 0.03102, "end_time": "2024-03-01T09:08:13.275530", "exception": false, "start_time": "2024-03-01T09:08:13.244510", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "10911264" ] }, "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-01T09:08:13.310953Z", "iopub.status.busy": "2024-03-01T09:08:13.310566Z", "iopub.status.idle": "2024-03-01T09:08:13.401012Z", "shell.execute_reply": "2024-03-01T09:08:13.400073Z" }, "papermill": { "duration": 0.109543, "end_time": "2024-03-01T09:08:13.403229", "exception": false, "start_time": "2024-03-01T09:08:13.293686", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "========================================================================================================================\n", "Layer (type:depth-idx) Output Shape Param #\n", "========================================================================================================================\n", "MLUtilitySingle [2, 1179, 16128] --\n", "├─Adapter: 1-1 [2, 1179, 16128] --\n", "│ └─Embedding: 2-1 [2, 1179, 24, 672] (48,384)\n", "│ └─TensorInductionPoint: 2-2 [24, 1] 24\n", "│ └─Sequential: 2-3 [2, 1179, 256] --\n", "│ │ └─FeedForward: 3-1 [2, 1179, 1024] --\n", "│ │ │ └─Linear: 4-1 [2, 1179, 1024] 689,152\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, 256] --\n", "│ │ │ └─Linear: 4-15 [2, 1179, 256] 262,400\n", "│ │ │ └─LeakyHardsigmoid: 4-16 [2, 1179, 256] --\n", "├─Adapter: 1-2 [2, 294, 16128] (recursive)\n", "│ └─Embedding: 2-4 [2, 294, 24, 672] (recursive)\n", "│ └─TensorInductionPoint: 2-5 [24, 1] (recursive)\n", "│ └─Sequential: 2-6 [2, 294, 256] (recursive)\n", "│ │ └─FeedForward: 3-9 [2, 294, 1024] (recursive)\n", "│ │ │ └─Linear: 4-17 [2, 294, 1024] (recursive)\n", "│ │ │ └─Softsign: 4-18 [2, 294, 1024] --\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, 256] (recursive)\n", "│ │ │ └─Linear: 4-31 [2, 294, 256] (recursive)\n", "│ │ │ └─LeakyHardsigmoid: 4-32 [2, 294, 256] --\n", "├─TwinEncoder: 1-3 [2, 2048] --\n", "│ └─Encoder: 2-7 [2, 8, 256] --\n", "│ │ └─ModuleList: 3-18 -- (recursive)\n", "│ │ │ └─EncoderLayer: 4-33 [2, 1179, 256] --\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-1 [2, 1179, 256] --\n", "│ │ │ │ │ └─TensorInductionPoint: 6-1 [2, 64, 256] 16,384\n", "│ │ │ │ │ └─MultiHeadAttention: 6-2 [2, 64, 256] --\n", "│ │ │ │ │ │ └─Linear: 7-1 [2, 64, 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, 64, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-1 [2, 32, 64, 1179] --\n", "│ │ │ │ │ │ └─Linear: 7-5 [2, 64, 256] 65,792\n", "│ │ │ │ │ │ └─PReLU: 7-6 [2, 64, 256] 1\n", "│ │ │ │ │ └─MultiHeadAttention: 6-3 [2, 1179, 256] --\n", "│ │ │ │ │ │ └─Linear: 7-7 [2, 1179, 256] 65,536\n", "│ │ │ │ │ │ └─Linear: 7-8 [2, 64, 256] 65,536\n", "│ │ │ │ │ │ └─Linear: 7-9 [2, 64, 256] 65,536\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-10 [2, 32, 1179, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-2 [2, 32, 1179, 64] --\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", "│ │ │ │ │ └─LeakyHardtanh: 6-5 [2, 1179, 512] --\n", "│ │ │ │ │ └─Linear: 6-6 [2, 1179, 256] 131,328\n", "│ │ │ └─EncoderLayer: 4-34 [2, 1179, 256] --\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-3 [2, 1179, 256] --\n", "│ │ │ │ │ └─TensorInductionPoint: 6-7 [2, 64, 256] 16,384\n", "│ │ │ │ │ └─MultiHeadAttention: 6-8 [2, 64, 256] --\n", "│ │ │ │ │ │ └─Linear: 7-13 [2, 64, 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, 64, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-3 [2, 32, 64, 1179] --\n", "│ │ │ │ │ │ └─Linear: 7-17 [2, 64, 256] 65,792\n", "│ │ │ │ │ │ └─PReLU: 7-18 [2, 64, 256] 1\n", "│ │ │ │ │ └─MultiHeadAttention: 6-9 [2, 1179, 256] --\n", "│ │ │ │ │ │ └─Linear: 7-19 [2, 1179, 256] 65,536\n", "│ │ │ │ │ │ └─Linear: 7-20 [2, 64, 256] 65,536\n", "│ │ │ │ │ │ └─Linear: 7-21 [2, 64, 256] 65,536\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-22 [2, 32, 1179, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-4 [2, 32, 1179, 64] --\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", "│ │ │ │ │ └─LeakyHardtanh: 6-11 [2, 1179, 512] --\n", "│ │ │ │ │ └─Linear: 6-12 [2, 1179, 256] 131,328\n", "│ │ │ └─EncoderLayer: 4-35 [2, 8, 256] --\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-5 [2, 1179, 256] --\n", "│ │ │ │ │ └─TensorInductionPoint: 6-13 [2, 64, 256] 16,384\n", "│ │ │ │ │ └─MultiHeadAttention: 6-14 [2, 64, 256] --\n", "│ │ │ │ │ │ └─Linear: 7-25 [2, 64, 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, 64, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-5 [2, 32, 64, 1179] --\n", "│ │ │ │ │ │ └─Linear: 7-29 [2, 64, 256] 65,792\n", "│ │ │ │ │ │ └─PReLU: 7-30 [2, 64, 256] 1\n", "│ │ │ │ │ └─MultiHeadAttention: 6-15 [2, 1179, 256] --\n", "│ │ │ │ │ │ └─Linear: 7-31 [2, 1179, 256] 65,536\n", "│ │ │ │ │ │ └─Linear: 7-32 [2, 64, 256] 65,536\n", "│ │ │ │ │ │ └─Linear: 7-33 [2, 64, 256] 65,536\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-34 [2, 32, 1179, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-6 [2, 32, 1179, 64] --\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, 8, 256] --\n", "│ │ │ │ │ └─TensorInductionPoint: 6-19 [2, 8, 256] 2,048\n", "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-20 [2, 8, 256] --\n", "│ │ │ │ │ │ └─Linear: 7-37 [2, 8, 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, 8, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-7 [2, 32, 8, 1179] --\n", "│ │ │ │ │ │ └─Linear: 7-41 [2, 8, 256] 65,792\n", "│ │ │ │ │ │ └─PReLU: 7-42 [2, 8, 256] 1\n", "│ │ │ │ └─DoubleFeedForward: 5-8 [2, 8, 256] (recursive)\n", "│ │ │ │ │ └─Linear: 6-21 [2, 8, 512] (recursive)\n", "│ │ │ │ │ └─LeakyHardtanh: 6-22 [2, 8, 512] --\n", "│ │ │ │ │ └─Linear: 6-23 [2, 8, 256] (recursive)\n", "│ └─Encoder: 2-8 [2, 8, 256] (recursive)\n", "│ │ └─ModuleList: 3-18 -- (recursive)\n", "│ │ │ └─EncoderLayer: 4-36 [2, 294, 256] (recursive)\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-9 [2, 294, 256] (recursive)\n", "│ │ │ │ │ └─TensorInductionPoint: 6-24 [2, 64, 256] (recursive)\n", "│ │ │ │ │ └─MultiHeadAttention: 6-25 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-43 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-44 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-45 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-46 [2, 32, 64, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-8 [2, 32, 64, 294] --\n", "│ │ │ │ │ │ └─Linear: 7-47 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─PReLU: 7-48 [2, 64, 256] (recursive)\n", "│ │ │ │ │ └─MultiHeadAttention: 6-26 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-49 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-50 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-51 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-52 [2, 32, 294, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-9 [2, 32, 294, 64] --\n", "│ │ │ │ │ │ └─Linear: 7-53 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─PReLU: 7-54 [2, 294, 256] (recursive)\n", "│ │ │ │ └─DoubleFeedForward: 5-10 [2, 294, 256] (recursive)\n", "│ │ │ │ │ └─Linear: 6-27 [2, 294, 512] (recursive)\n", "│ │ │ │ │ └─LeakyHardtanh: 6-28 [2, 294, 512] --\n", "│ │ │ │ │ └─Linear: 6-29 [2, 294, 256] (recursive)\n", "│ │ │ └─EncoderLayer: 4-37 [2, 294, 256] (recursive)\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-11 [2, 294, 256] (recursive)\n", "│ │ │ │ │ └─TensorInductionPoint: 6-30 [2, 64, 256] (recursive)\n", "│ │ │ │ │ └─MultiHeadAttention: 6-31 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-55 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-56 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-57 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-58 [2, 32, 64, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-10 [2, 32, 64, 294] --\n", "│ │ │ │ │ │ └─Linear: 7-59 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─PReLU: 7-60 [2, 64, 256] (recursive)\n", "│ │ │ │ │ └─MultiHeadAttention: 6-32 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-61 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-62 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-63 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-64 [2, 32, 294, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-11 [2, 32, 294, 64] --\n", "│ │ │ │ │ │ └─Linear: 7-65 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─PReLU: 7-66 [2, 294, 256] (recursive)\n", "│ │ │ │ └─DoubleFeedForward: 5-12 [2, 294, 256] (recursive)\n", "│ │ │ │ │ └─Linear: 6-33 [2, 294, 512] (recursive)\n", "│ │ │ │ │ └─LeakyHardtanh: 6-34 [2, 294, 512] --\n", "│ │ │ │ │ └─Linear: 6-35 [2, 294, 256] (recursive)\n", "│ │ │ └─EncoderLayer: 4-38 [2, 8, 256] (recursive)\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-13 [2, 294, 256] (recursive)\n", "│ │ │ │ │ └─TensorInductionPoint: 6-36 [2, 64, 256] (recursive)\n", "│ │ │ │ │ └─MultiHeadAttention: 6-37 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-67 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-68 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-69 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-70 [2, 32, 64, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-12 [2, 32, 64, 294] --\n", "│ │ │ │ │ │ └─Linear: 7-71 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─PReLU: 7-72 [2, 64, 256] (recursive)\n", "│ │ │ │ │ └─MultiHeadAttention: 6-38 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-73 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-74 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-75 [2, 64, 256] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-76 [2, 32, 294, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-13 [2, 32, 294, 64] --\n", "│ │ │ │ │ │ └─Linear: 7-77 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─PReLU: 7-78 [2, 294, 256] (recursive)\n", "│ │ │ │ └─DoubleFeedForward: 5-14 [2, 294, 256] (recursive)\n", "│ │ │ │ │ └─Linear: 6-39 [2, 294, 512] (recursive)\n", "│ │ │ │ │ └─LeakyHardtanh: 6-40 [2, 294, 512] --\n", "│ │ │ │ │ └─Linear: 6-41 [2, 294, 256] (recursive)\n", "│ │ │ │ └─PoolingByMultiheadAttention: 5-15 [2, 8, 256] (recursive)\n", "│ │ │ │ │ └─TensorInductionPoint: 6-42 [2, 8, 256] (recursive)\n", "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-43 [2, 8, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-79 [2, 8, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-80 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-81 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-82 [2, 32, 8, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-14 [2, 32, 8, 294] --\n", "│ │ │ │ │ │ └─Linear: 7-83 [2, 8, 256] (recursive)\n", "│ │ │ │ │ │ └─PReLU: 7-84 [2, 8, 256] (recursive)\n", "│ │ │ │ └─DoubleFeedForward: 5-16 [2, 8, 256] (recursive)\n", "│ │ │ │ │ └─Linear: 6-44 [2, 8, 512] (recursive)\n", "│ │ │ │ │ └─LeakyHardtanh: 6-45 [2, 8, 512] --\n", "│ │ │ │ │ └─Linear: 6-46 [2, 8, 256] (recursive)\n", "├─Head: 1-4 [2] --\n", "│ └─Sequential: 2-9 [2, 1] --\n", "│ │ └─FeedForward: 3-19 [2, 256] --\n", "│ │ │ └─Linear: 4-39 [2, 256] 524,544\n", "│ │ │ └─ReLU6: 4-40 [2, 256] --\n", "│ │ └─FeedForward: 3-20 [2, 256] --\n", "│ │ │ └─Linear: 4-41 [2, 256] 65,792\n", "│ │ │ └─ReLU6: 4-42 [2, 256] --\n", "│ │ └─FeedForward: 3-21 [2, 256] --\n", "│ │ │ └─Linear: 4-43 [2, 256] 65,792\n", "│ │ │ └─ReLU6: 4-44 [2, 256] --\n", "│ │ └─FeedForward: 3-22 [2, 256] --\n", "│ │ │ └─Linear: 4-45 [2, 256] 65,792\n", "│ │ │ └─ReLU6: 4-46 [2, 256] --\n", "│ │ └─FeedForward: 3-23 [2, 256] --\n", "│ │ │ └─Linear: 4-47 [2, 256] 65,792\n", "│ │ │ └─ReLU6: 4-48 [2, 256] --\n", "│ │ └─FeedForward: 3-24 [2, 256] --\n", "│ │ │ └─Linear: 4-49 [2, 256] 65,792\n", "│ │ │ └─ReLU6: 4-50 [2, 256] --\n", "│ │ └─FeedForward: 3-25 [2, 256] --\n", "│ │ │ └─Linear: 4-51 [2, 256] 65,792\n", "│ │ │ └─ReLU6: 4-52 [2, 256] --\n", "│ │ └─FeedForward: 3-26 [2, 256] --\n", "│ │ │ └─Linear: 4-53 [2, 256] 65,792\n", "│ │ │ └─ReLU6: 4-54 [2, 256] --\n", "│ │ └─FeedForward: 3-27 [2, 1] --\n", "│ │ │ └─Linear: 4-55 [2, 1] 257\n", "│ │ │ └─LeakyHardsigmoid: 4-56 [2, 1] --\n", "========================================================================================================================\n", "Total params: 10,959,648\n", "Trainable params: 10,911,264\n", "Non-trainable params: 48,384\n", "Total mult-adds (M): 42.71\n", "========================================================================================================================\n", "Input size (MB): 0.28\n", "Forward/backward pass size (MB): 721.87\n", "Params size (MB): 43.84\n", "Estimated Total Size (MB): 765.99\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-01T09:08:13.434509Z", "iopub.status.busy": "2024-03-01T09:08:13.434148Z", "iopub.status.idle": "2024-03-01T10:12:35.609452Z", "shell.execute_reply": "2024-03-01T10:12:35.608422Z" }, "papermill": { "duration": 3862.193385, "end_time": "2024-03-01T10:12:35.611608", "exception": false, "start_time": "2024-03-01T09:08:13.418223", "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.015214953777865503, 'avg_role_model_std_loss': 3.156637710683768, 'avg_role_model_mean_pred_loss': 0.0015362251463382382, '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.015214953777865503, 'n_size': 320, 'n_batch': 160, 'duration': 150.5653796195984, 'duration_batch': 0.9410336226224899, 'duration_size': 0.47051681131124495, 'avg_pred_std': 0.06246557859708446}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0029828296956111444, 'avg_role_model_std_loss': 3.72726428431983, 'avg_role_model_mean_pred_loss': 7.1439977092975506e-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.0029828296956111444, 'n_size': 80, 'n_batch': 40, 'duration': 35.29301643371582, 'duration_batch': 0.8823254108428955, 'duration_size': 0.44116270542144775, 'avg_pred_std': 0.017451438040006907}\n", "Epoch 1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.005820814266519392, 'avg_role_model_std_loss': 3.788629152714401, 'avg_role_model_mean_pred_loss': 0.00012637018700479842, '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.005820814266519392, 'n_size': 320, 'n_batch': 160, 'duration': 151.99716687202454, 'duration_batch': 0.9499822929501534, 'duration_size': 0.4749911464750767, 'avg_pred_std': 0.054377025530902755}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.003795744390345135, 'avg_role_model_std_loss': 4.469785842269539, 'avg_role_model_mean_pred_loss': 2.3026626298489063e-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.003795744390345135, 'n_size': 80, 'n_batch': 40, 'duration': 35.12023663520813, 'duration_batch': 0.8780059158802033, 'duration_size': 0.43900295794010163, 'avg_pred_std': 0.025538454634443042}\n", "Epoch 2\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.003438323737486826, 'avg_role_model_std_loss': 2.1381948816152487, 'avg_role_model_mean_pred_loss': 2.1238802406123302e-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.003438323737486826, 'n_size': 320, 'n_batch': 160, 'duration': 151.25162959098816, 'duration_batch': 0.945322684943676, 'duration_size': 0.472661342471838, 'avg_pred_std': 0.059417175995986324}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0027740994402847717, 'avg_role_model_std_loss': 3.3004495511856193, 'avg_role_model_mean_pred_loss': 8.8964574990494e-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.0027740994402847717, 'n_size': 80, 'n_batch': 40, 'duration': 35.27286076545715, 'duration_batch': 0.8818215191364288, 'duration_size': 0.4409107595682144, 'avg_pred_std': 0.02031386639282573}\n", "Epoch 3\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.003000541084111319, 'avg_role_model_std_loss': 1.2077899141461088, 'avg_role_model_mean_pred_loss': 1.181568532097677e-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.003000541084111319, 'n_size': 320, 'n_batch': 160, 'duration': 151.62242531776428, 'duration_batch': 0.9476401582360268, 'duration_size': 0.4738200791180134, 'avg_pred_std': 0.0704218547190976}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.003368616230500265, 'avg_role_model_std_loss': 3.7329810831716825, 'avg_role_model_mean_pred_loss': 2.0277994416362245e-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.003368616230500265, 'n_size': 80, 'n_batch': 40, 'duration': 35.269885778427124, 'duration_batch': 0.8817471444606781, 'duration_size': 0.4408735722303391, 'avg_pred_std': 0.022317990543524503}\n", "Epoch 4\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0021543572441999003, 'avg_role_model_std_loss': 2.36580728989997, 'avg_role_model_mean_pred_loss': 3.905246718544086e-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.0021543572441999003, 'n_size': 320, 'n_batch': 160, 'duration': 151.42908096313477, 'duration_batch': 0.9464317560195923, 'duration_size': 0.47321587800979614, 'avg_pred_std': 0.06814513673386387}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0023375894830166997, 'avg_role_model_std_loss': 3.1858106834027735, 'avg_role_model_mean_pred_loss': 5.140880977472922e-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.0023375894830166997, 'n_size': 80, 'n_batch': 40, 'duration': 35.21497082710266, 'duration_batch': 0.8803742706775666, 'duration_size': 0.4401871353387833, 'avg_pred_std': 0.022702036050031894}\n", "Epoch 5\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0020639134972753937, 'avg_role_model_std_loss': 1.8771122450190234, 'avg_role_model_mean_pred_loss': 4.7617895551466114e-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.0020639134972753937, 'n_size': 320, 'n_batch': 160, 'duration': 150.65398001670837, 'duration_batch': 0.9415873751044274, 'duration_size': 0.4707936875522137, 'avg_pred_std': 0.06839547897311604}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.002713540389231639, 'avg_role_model_std_loss': 2.751661246550566, 'avg_role_model_mean_pred_loss': 8.476993637529517e-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.002713540389231639, 'n_size': 80, 'n_batch': 40, 'duration': 35.15806221961975, 'duration_batch': 0.8789515554904938, 'duration_size': 0.4394757777452469, 'avg_pred_std': 0.0216164964978816}\n", "Epoch 6\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.001974041026574014, 'avg_role_model_std_loss': 2.6116740645130543, 'avg_role_model_mean_pred_loss': 4.903630427295745e-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.001974041026574014, 'n_size': 320, 'n_batch': 160, 'duration': 150.98297429084778, 'duration_batch': 0.9436435893177986, 'duration_size': 0.4718217946588993, 'avg_pred_std': 0.06690819428837073}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0026584940679640567, 'avg_role_model_std_loss': 2.928696505277807, 'avg_role_model_mean_pred_loss': 1.0981135633864048e-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.0026584940679640567, 'n_size': 80, 'n_batch': 40, 'duration': 34.98962068557739, 'duration_batch': 0.8747405171394348, 'duration_size': 0.4373702585697174, 'avg_pred_std': 0.028631291013152805}\n", "Epoch 7\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0017634188792953864, 'avg_role_model_std_loss': 1.5246528687675955, 'avg_role_model_mean_pred_loss': 4.08627352063845e-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.0017634188792953864, 'n_size': 320, 'n_batch': 160, 'duration': 151.10478925704956, 'duration_batch': 0.9444049328565598, 'duration_size': 0.4722024664282799, 'avg_pred_std': 0.06988477217641957}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0025102962197934174, 'avg_role_model_std_loss': 3.828912246527557, 'avg_role_model_mean_pred_loss': 9.336235920053004e-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.0025102962197934174, 'n_size': 80, 'n_batch': 40, 'duration': 35.14225649833679, 'duration_batch': 0.8785564124584198, 'duration_size': 0.4392782062292099, 'avg_pred_std': 0.025317877356610553}\n", "Epoch 8\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0017970734881543216, 'avg_role_model_std_loss': 1.9675439566956825, 'avg_role_model_mean_pred_loss': 4.507927208244523e-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.0017970734881543216, 'n_size': 320, 'n_batch': 160, 'duration': 151.0646207332611, 'duration_batch': 0.9441538795828819, 'duration_size': 0.47207693979144094, 'avg_pred_std': 0.06440023747350096}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0029548812297832683, 'avg_role_model_std_loss': 2.1843356087258696, 'avg_role_model_mean_pred_loss': 1.6957902914016554e-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.0029548812297832683, 'n_size': 80, 'n_batch': 40, 'duration': 35.090479135513306, 'duration_batch': 0.8772619783878326, 'duration_size': 0.4386309891939163, 'avg_pred_std': 0.028445404235390014}\n", "Epoch 9\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0016425128245685983, 'avg_role_model_std_loss': 2.024512654822502, 'avg_role_model_mean_pred_loss': 3.285046532060373e-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.0016425128245685983, 'n_size': 320, 'n_batch': 160, 'duration': 150.84772562980652, 'duration_batch': 0.9427982851862907, 'duration_size': 0.47139914259314536, 'avg_pred_std': 0.0747756733842209}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.002334522669548278, 'avg_role_model_std_loss': 2.7116857997084027, 'avg_role_model_mean_pred_loss': 6.992434950987836e-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.002334522669548278, 'n_size': 80, 'n_batch': 40, 'duration': 35.245197772979736, 'duration_batch': 0.8811299443244934, 'duration_size': 0.4405649721622467, 'avg_pred_std': 0.026337641538702883}\n", "Epoch 10\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0016268517200273892, 'avg_role_model_std_loss': 1.4290221301512553, 'avg_role_model_mean_pred_loss': 2.7465491623539574e-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.0016268517200273892, 'n_size': 320, 'n_batch': 160, 'duration': 150.6063461303711, 'duration_batch': 0.9412896633148193, 'duration_size': 0.47064483165740967, 'avg_pred_std': 0.07696705762027704}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0022422952166834876, 'avg_role_model_std_loss': 3.8237469222483185, 'avg_role_model_mean_pred_loss': 4.734226487249082e-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.0022422952166834876, 'n_size': 80, 'n_batch': 40, 'duration': 35.0414342880249, 'duration_batch': 0.8760358572006226, 'duration_size': 0.4380179286003113, 'avg_pred_std': 0.02215462920921709}\n", "Epoch 11\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.001684735846095009, 'avg_role_model_std_loss': 1.8539249592111176, 'avg_role_model_mean_pred_loss': 3.617836458871815e-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.001684735846095009, 'n_size': 320, 'n_batch': 160, 'duration': 151.0113205909729, 'duration_batch': 0.9438207536935806, 'duration_size': 0.4719103768467903, 'avg_pred_std': 0.06602817026396224}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0023927180209284415, 'avg_role_model_std_loss': 1.9305211880035131, 'avg_role_model_mean_pred_loss': 8.37876484468536e-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.0023927180209284415, 'n_size': 80, 'n_batch': 40, 'duration': 35.019232988357544, 'duration_batch': 0.8754808247089386, 'duration_size': 0.4377404123544693, 'avg_pred_std': 0.02876366543350741}\n", "Epoch 12\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.001648270361597781, 'avg_role_model_std_loss': 1.466464621800828, 'avg_role_model_mean_pred_loss': 3.6850406459681182e-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.001648270361597781, 'n_size': 320, 'n_batch': 160, 'duration': 150.67579007148743, 'duration_batch': 0.9417236879467964, 'duration_size': 0.4708618439733982, 'avg_pred_std': 0.07282405201085566}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0024106145921905407, 'avg_role_model_std_loss': 1.8117562619359986, 'avg_role_model_mean_pred_loss': 8.840941997867446e-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.0024106145921905407, 'n_size': 80, 'n_batch': 40, 'duration': 35.25731110572815, 'duration_batch': 0.8814327776432037, 'duration_size': 0.44071638882160186, 'avg_pred_std': 0.028296888258773835}\n", "Epoch 13\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0014949767563791738, 'avg_role_model_std_loss': 2.0110324508543216, 'avg_role_model_mean_pred_loss': 2.594263938809541e-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.0014949767563791738, 'n_size': 320, 'n_batch': 160, 'duration': 150.59481382369995, 'duration_batch': 0.9412175863981247, 'duration_size': 0.47060879319906235, 'avg_pred_std': 0.07127468679950652}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0034006003257673, 'avg_role_model_std_loss': 2.3089766705088124, 'avg_role_model_mean_pred_loss': 2.330103268749495e-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.0034006003257673, 'n_size': 80, 'n_batch': 40, 'duration': 35.14684081077576, 'duration_batch': 0.8786710202693939, 'duration_size': 0.43933551013469696, 'avg_pred_std': 0.03264807362284046}\n", "Epoch 14\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0014807669692402214, 'avg_role_model_std_loss': 1.486915388038304, 'avg_role_model_mean_pred_loss': 2.468103663008994e-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.0014807669692402214, 'n_size': 320, 'n_batch': 160, 'duration': 150.8731460571289, 'duration_batch': 0.9429571628570557, 'duration_size': 0.47147858142852783, 'avg_pred_std': 0.06568786399493547}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.002275905742408213, 'avg_role_model_std_loss': 2.4593560876942546, 'avg_role_model_mean_pred_loss': 5.3657121410810585e-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.002275905742408213, 'n_size': 80, 'n_batch': 40, 'duration': 35.17850923538208, 'duration_batch': 0.879462730884552, 'duration_size': 0.439731365442276, 'avg_pred_std': 0.028419802509597504}\n", "Epoch 15\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0013959772029608075, 'avg_role_model_std_loss': 1.5552767487895864, 'avg_role_model_mean_pred_loss': 2.032669835160851e-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.0013959772029608075, 'n_size': 320, 'n_batch': 160, 'duration': 145.97118186950684, 'duration_batch': 0.9123198866844178, 'duration_size': 0.4561599433422089, 'avg_pred_std': 0.0743303620764891}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0021730058373577777, 'avg_role_model_std_loss': 3.265071701107611, 'avg_role_model_mean_pred_loss': 5.249506042540042e-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.0021730058373577777, 'n_size': 80, 'n_batch': 40, 'duration': 32.64319920539856, 'duration_batch': 0.816079980134964, 'duration_size': 0.408039990067482, 'avg_pred_std': 0.02472462045188877}\n", "Epoch 16\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0013986327389147845, 'avg_role_model_std_loss': 1.0404113516639566, 'avg_role_model_mean_pred_loss': 2.472861648920811e-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.0013986327389147845, 'n_size': 320, 'n_batch': 160, 'duration': 142.02302479743958, 'duration_batch': 0.8876439049839974, 'duration_size': 0.4438219524919987, 'avg_pred_std': 0.0766021506049583}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0021833765216797475, 'avg_role_model_std_loss': 1.9410757024995746, 'avg_role_model_mean_pred_loss': 5.971337235900851e-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.0021833765216797475, 'n_size': 80, 'n_batch': 40, 'duration': 33.03069186210632, 'duration_batch': 0.8257672965526581, 'duration_size': 0.41288364827632906, 'avg_pred_std': 0.029009606450563295}\n", "Epoch 17\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0013606195244022957, 'avg_role_model_std_loss': 1.2219324406304888, 'avg_role_model_mean_pred_loss': 2.558043809543567e-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.0013606195244022957, 'n_size': 320, 'n_batch': 160, 'duration': 142.88847541809082, 'duration_batch': 0.8930529713630676, 'duration_size': 0.4465264856815338, 'avg_pred_std': 0.07105417825841868}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0025992857859819195, 'avg_role_model_std_loss': 4.460525457162658, 'avg_role_model_mean_pred_loss': 1.0201318598324071e-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.0025992857859819195, 'n_size': 80, 'n_batch': 40, 'duration': 32.683080196380615, 'duration_batch': 0.8170770049095154, 'duration_size': 0.4085385024547577, 'avg_pred_std': 0.02676110131196765}\n", "Epoch 18\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0013010777075521673, 'avg_role_model_std_loss': 0.9639209467314742, 'avg_role_model_mean_pred_loss': 2.0914453604690185e-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.0013010777075521673, 'n_size': 320, 'n_batch': 160, 'duration': 141.19299387931824, 'duration_batch': 0.882456211745739, 'duration_size': 0.4412281058728695, 'avg_pred_std': 0.07996181348535174}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0021221282840997446, 'avg_role_model_std_loss': 2.53250820556988, 'avg_role_model_mean_pred_loss': 6.020639418136131e-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.0021221282840997446, 'n_size': 80, 'n_batch': 40, 'duration': 32.62534475326538, 'duration_batch': 0.8156336188316345, 'duration_size': 0.40781680941581727, 'avg_pred_std': 0.028227102017262952}\n", "Epoch 19\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": [ "Train loss {'avg_role_model_loss': 0.0013113658649871241, 'avg_role_model_std_loss': 1.157548566752187, 'avg_role_model_mean_pred_loss': 2.71372324170595e-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.0013113658649871241, 'n_size': 320, 'n_batch': 160, 'duration': 141.17731380462646, 'duration_batch': 0.8823582112789154, 'duration_size': 0.4411791056394577, 'avg_pred_std': 0.06990279755846132}\n", "Time out: 3691.47634100914/3600\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.00212\n", "\u001b[34m\u001b[1mwandb\u001b[0m: avg_loss_train 0.0013\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.02823\n", "\u001b[34m\u001b[1mwandb\u001b[0m: avg_pred_std_train 0.07996\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.00212\n", "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_loss_train 0.0013\n", "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_mean_pred_loss_test 1e-05\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 2.53251\n", "\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_std_loss_train 0.96392\n", "\u001b[34m\u001b[1mwandb\u001b[0m: duration_batch_test 0.81563\n", "\u001b[34m\u001b[1mwandb\u001b[0m: duration_batch_train 0.88246\n", "\u001b[34m\u001b[1mwandb\u001b[0m: duration_size_test 0.40782\n", "\u001b[34m\u001b[1mwandb\u001b[0m: duration_size_train 0.44123\n", "\u001b[34m\u001b[1mwandb\u001b[0m: duration_test 32.62534\n", "\u001b[34m\u001b[1mwandb\u001b[0m: duration_train 141.19299\n", "\u001b[34m\u001b[1mwandb\u001b[0m: n_batch_test 40\n", "\u001b[34m\u001b[1mwandb\u001b[0m: n_batch_train 160\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/contraceptive/realtabformer/3/wandb/offline-run-20240301_090815-dmvtx8gf\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-20240301_090815-dmvtx8gf/logs\u001b[0m\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/opt/conda/lib/python3.10/site-packages/ml_utility_loss/loss_learning/estimator/process.py:348: UserWarning: cov(): degrees of freedom is <= 0 (Triggered internally at ../aten/src/ATen/native/Correlation.cpp:100.)\n", " corr_mat = torch.corrcoef(stack)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Eval loss {'role_model': 'realtabformer', 'n_size': 399, 'n_batch': 200, 'role_model_metrics': {'avg_loss': 0.001492384186390257, 'avg_g_mag_loss': nan, 'avg_g_cos_loss': 0.009758013392212732, 'pred_duration': 4.686195373535156, 'grad_duration': 2.4317636489868164, 'total_duration': 7.117959022521973, 'pred_std': 0.05503244325518608, 'std_loss': 0.021272432059049606, 'mean_pred_loss': 1.4633540104114218e-06, 'pred_rmse': 0.0386313833296299, 'pred_mae': 0.030890200287103653, 'pred_mape': 0.07129626721143723, 'grad_rmse': 0.24003435671329498, 'grad_mae': 0.11075862497091293, 'grad_mape': 1.6372917890548706}, '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.001492384186390257, 'avg_g_mag_loss': nan, 'avg_g_cos_loss': 0.009758013392212732, 'avg_pred_duration': 4.686195373535156, 'avg_grad_duration': 2.4317636489868164, 'avg_total_duration': 7.117959022521973, 'avg_pred_std': 0.05503244325518608, 'avg_std_loss': 0.021272432059049606, 'avg_mean_pred_loss': 1.4633540104114218e-06}, 'min_metrics': {'avg_loss': 0.001492384186390257, 'avg_g_mag_loss': nan, 'avg_g_cos_loss': 0.009758013392212732, 'pred_duration': 4.686195373535156, 'grad_duration': 2.4317636489868164, 'total_duration': 7.117959022521973, 'pred_std': 0.05503244325518608, 'std_loss': 0.021272432059049606, 'mean_pred_loss': 1.4633540104114218e-06, 'pred_rmse': 0.0386313833296299, 'pred_mae': 0.030890200287103653, 'pred_mape': 0.07129626721143723, 'grad_rmse': 0.24003435671329498, 'grad_mae': 0.11075862497091293, 'grad_mape': 1.6372917890548706}, 'model_metrics': {'realtabformer': {'avg_loss': 0.001492384186390257, 'avg_g_mag_loss': nan, 'avg_g_cos_loss': 0.009758013392212732, 'pred_duration': 4.686195373535156, 'grad_duration': 2.4317636489868164, 'total_duration': 7.117959022521973, 'pred_std': 0.05503244325518608, 'std_loss': 0.021272432059049606, 'mean_pred_loss': 1.4633540104114218e-06, 'pred_rmse': 0.0386313833296299, 'pred_mae': 0.030890200287103653, 'pred_mape': 0.07129626721143723, 'grad_rmse': 0.24003435671329498, 'grad_mae': 0.11075862497091293, 'grad_mape': 1.6372917890548706}}}\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-03-01T10:12:35.651891Z", "iopub.status.busy": "2024-03-01T10:12:35.651152Z", "iopub.status.idle": "2024-03-01T10:12:35.655515Z", "shell.execute_reply": "2024-03-01T10:12:35.654755Z" }, "papermill": { "duration": 0.026966, "end_time": "2024-03-01T10:12:35.657479", "exception": false, "start_time": "2024-03-01T10:12:35.630513", "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-01T10:12:35.693775Z", "iopub.status.busy": "2024-03-01T10:12:35.693180Z", "iopub.status.idle": "2024-03-01T10:12:35.985277Z", "shell.execute_reply": "2024-03-01T10:12:35.984429Z" }, "papermill": { "duration": 0.312743, "end_time": "2024-03-01T10:12:35.987715", "exception": false, "start_time": "2024-03-01T10:12:35.674972", "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-01T10:12:36.026081Z", "iopub.status.busy": "2024-03-01T10:12:36.025721Z", "iopub.status.idle": "2024-03-01T10:12:36.311184Z", "shell.execute_reply": "2024-03-01T10:12:36.310203Z" }, "papermill": { "duration": 0.307179, "end_time": "2024-03-01T10:12:36.313430", "exception": false, "start_time": "2024-03-01T10:12:36.006251", "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-01T10:12:36.353226Z", "iopub.status.busy": "2024-03-01T10:12:36.352847Z", "iopub.status.idle": "2024-03-01T10:15:26.520418Z", "shell.execute_reply": "2024-03-01T10:15:26.519620Z" }, "papermill": { "duration": 170.189982, "end_time": "2024-03-01T10:15:26.522913", "exception": false, "start_time": "2024-03-01T10:12:36.332931", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/opt/conda/lib/python3.10/site-packages/ml_utility_loss/loss_learning/estimator/process.py:348: UserWarning: cov(): degrees of freedom is <= 0 (Triggered internally at ../aten/src/ATen/native/Correlation.cpp:100.)\n", " corr_mat = torch.corrcoef(stack)\n" ] } ], "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-01T10:15:26.563076Z", "iopub.status.busy": "2024-03-01T10:15:26.562348Z", "iopub.status.idle": "2024-03-01T10:15:26.584238Z", "shell.execute_reply": "2024-03-01T10:15:26.583326Z" }, "papermill": { "duration": 0.043931, "end_time": "2024-03-01T10:15:26.586215", "exception": false, "start_time": "2024-03-01T10:15:26.542284", "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.015449NaN0.0014922.4465780.1107591.6372920.2400340.0000014.6983030.030890.0712960.0386310.0550320.0212727.144881
\n", "
" ], "text/plain": [ " avg_g_cos_loss avg_g_mag_loss avg_loss grad_duration \\\n", "realtabformer 0.015449 NaN 0.001492 2.446578 \n", "\n", " grad_mae grad_mape grad_rmse mean_pred_loss pred_duration \\\n", "realtabformer 0.110759 1.637292 0.240034 0.000001 4.698303 \n", "\n", " pred_mae pred_mape pred_rmse pred_std std_loss \\\n", "realtabformer 0.03089 0.071296 0.038631 0.055032 0.021272 \n", "\n", " total_duration \n", "realtabformer 7.144881 " ] }, "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-01T10:15:26.624013Z", "iopub.status.busy": "2024-03-01T10:15:26.623759Z", "iopub.status.idle": "2024-03-01T10:15:27.007626Z", "shell.execute_reply": "2024-03-01T10:15:27.006640Z" }, "papermill": { "duration": 0.404864, "end_time": "2024-03-01T10:15:27.009710", "exception": false, "start_time": "2024-03-01T10:15:26.604846", "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-01T10:15:27.049664Z", "iopub.status.busy": "2024-03-01T10:15:27.049319Z", "iopub.status.idle": "2024-03-01T10:18:31.321002Z", "shell.execute_reply": "2024-03-01T10:18:31.320085Z" }, "papermill": { "duration": 184.310461, "end_time": "2024-03-01T10:18:31.339969", "exception": false, "start_time": "2024-03-01T10:15:27.029508", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Caching in ../../../../contraceptive/_cache_test/realtabformer/all inf False\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/opt/conda/lib/python3.10/site-packages/ml_utility_loss/loss_learning/estimator/process.py:348: UserWarning: cov(): degrees of freedom is <= 0 (Triggered internally at ../aten/src/ATen/native/Correlation.cpp:100.)\n", " corr_mat = torch.corrcoef(stack)\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-01T10:18:31.379114Z", "iopub.status.busy": "2024-03-01T10:18:31.378787Z", "iopub.status.idle": "2024-03-01T10:18:31.395719Z", "shell.execute_reply": "2024-03-01T10:18:31.394853Z" }, "papermill": { "duration": 0.038625, "end_time": "2024-03-01T10:18:31.397591", "exception": false, "start_time": "2024-03-01T10:18:31.358966", "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-01T10:18:31.436477Z", "iopub.status.busy": "2024-03-01T10:18:31.436203Z", "iopub.status.idle": "2024-03-01T10:18:31.441158Z", "shell.execute_reply": "2024-03-01T10:18:31.440312Z" }, "papermill": { "duration": 0.027315, "end_time": "2024-03-01T10:18:31.443082", "exception": false, "start_time": "2024-03-01T10:18:31.415767", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'realtabformer': 0.4290029579087308}\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-01T10:18:31.483385Z", "iopub.status.busy": "2024-03-01T10:18:31.482777Z", "iopub.status.idle": "2024-03-01T10:18:31.813548Z", "shell.execute_reply": "2024-03-01T10:18:31.812612Z" }, "papermill": { "duration": 0.352957, "end_time": "2024-03-01T10:18:31.815561", "exception": false, "start_time": "2024-03-01T10:18:31.462604", "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-01T10:18:31.857102Z", "iopub.status.busy": "2024-03-01T10:18:31.856683Z", "iopub.status.idle": "2024-03-01T10:18:32.222650Z", "shell.execute_reply": "2024-03-01T10:18:32.221779Z" }, "papermill": { "duration": 0.389174, "end_time": "2024-03-01T10:18:32.224694", "exception": false, "start_time": "2024-03-01T10:18:31.835520", "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-01T10:18:32.265970Z", "iopub.status.busy": "2024-03-01T10:18:32.265684Z", "iopub.status.idle": "2024-03-01T10:18:32.479903Z", "shell.execute_reply": "2024-03-01T10:18:32.478895Z" }, "papermill": { "duration": 0.237404, "end_time": "2024-03-01T10:18:32.482074", "exception": false, "start_time": "2024-03-01T10:18:32.244670", "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-01T10:18:32.525075Z", "iopub.status.busy": "2024-03-01T10:18:32.524768Z", "iopub.status.idle": "2024-03-01T10:18:32.727276Z", "shell.execute_reply": "2024-03-01T10:18:32.726378Z" }, "papermill": { "duration": 0.226259, "end_time": "2024-03-01T10:18:32.729379", "exception": false, "start_time": "2024-03-01T10:18:32.503120", "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.020919, "end_time": "2024-03-01T10:18:32.771285", "exception": false, "start_time": "2024-03-01T10:18:32.750366", "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": 4240.608803, "end_time": "2024-03-01T10:18:35.514598", "environment_variables": {}, "exception": null, "input_path": "eval/contraceptive/realtabformer/3/mlu-eval.ipynb", "output_path": "eval/contraceptive/realtabformer/3/mlu-eval.ipynb", "parameters": { "dataset": "contraceptive", "dataset_name": "contraceptive", "debug": false, "folder": "eval", "gp": false, "gp_multiply": false, "param_index": 2, "path": "eval/contraceptive/realtabformer/3", "path_prefix": "../../../../", "random_seed": 3, "single_model": "realtabformer" }, "start_time": "2024-03-01T09:07:54.905795", "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 }