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,2380 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "982e76f5", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-26T10:27:28.970567Z", + "iopub.status.busy": "2024-03-26T10:27:28.970244Z", + "iopub.status.idle": "2024-03-26T10:27:29.002576Z", + "shell.execute_reply": "2024-03-26T10:27:29.001726Z" + }, + "papermill": { + "duration": 0.046868, + "end_time": "2024-03-26T10:27:29.004446", + "exception": false, + "start_time": "2024-03-26T10:27:28.957578", + "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-26T10:27:29.030111Z", + "iopub.status.busy": "2024-03-26T10:27:29.029784Z", + "iopub.status.idle": "2024-03-26T10:27:29.036163Z", + "shell.execute_reply": "2024-03-26T10:27:29.035356Z" + }, + "papermill": { + "duration": 0.021686, + "end_time": "2024-03-26T10:27:29.038051", + "exception": false, + "start_time": "2024-03-26T10:27:29.016365", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'\\n%cd /kaggle/working\\n#!git clone https://github.com/R-N/ml-utility-loss --depth=1 --single-branch --branch=main\\n%cd ml-utility-loss\\n!git pull\\n#!pip install .\\n!pip install . --no-deps --force-reinstall --upgrade\\n#'" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\"\"\"\n", + "%cd /kaggle/working\n", + "#!git clone https://github.com/R-N/ml-utility-loss --depth=1 --single-branch --branch=main\n", + "%cd ml-utility-loss\n", + "!git pull\n", + "#!pip install .\n", + "!pip install . --no-deps --force-reinstall --upgrade\n", + "#\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "5ae30f5c", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-26T10:27:29.061299Z", + "iopub.status.busy": "2024-03-26T10:27:29.061035Z", + "iopub.status.idle": "2024-03-26T10:27:29.064995Z", + "shell.execute_reply": "2024-03-26T10:27:29.064198Z" + }, + "papermill": { + "duration": 0.017664, + "end_time": "2024-03-26T10:27:29.066814", + "exception": false, + "start_time": "2024-03-26T10:27:29.049150", + "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-26T10:27:29.090252Z", + "iopub.status.busy": "2024-03-26T10:27:29.089982Z", + "iopub.status.idle": "2024-03-26T10:27:29.093679Z", + "shell.execute_reply": "2024-03-26T10:27:29.092858Z" + }, + "executionInfo": { + "elapsed": 678, + "status": "ok", + "timestamp": 1696841022168, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "ns5hFcVL2yvs", + "papermill": { + "duration": 0.017585, + "end_time": "2024-03-26T10:27:29.095560", + "exception": false, + "start_time": "2024-03-26T10:27:29.077975", + "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-26T10:27:29.118593Z", + "iopub.status.busy": "2024-03-26T10:27:29.118322Z", + "iopub.status.idle": "2024-03-26T10:27:29.123628Z", + "shell.execute_reply": "2024-03-26T10:27:29.122788Z" + }, + "papermill": { + "duration": 0.019157, + "end_time": "2024-03-26T10:27:29.125713", + "exception": false, + "start_time": "2024-03-26T10:27:29.106556", + "status": "completed" + }, + "tags": [ + "parameters" + ] + }, + "outputs": [], + "source": [ + "#Parameters\n", + "import os\n", + "\n", + "path_prefix = \"../../../../\"\n", + "\n", + "dataset_dir = os.path.join(path_prefix, \"ml-utility-loss/datasets\")\n", + "dataset_name = \"treatment\"\n", + "model_name=\"ml_utility_2\"\n", + "models = [\"tvae\", \"realtabformer\", \"lct_gan\", \"tab_ddpm_concat\"]\n", + "single_model = \"lct_gan\"\n", + "random_seed = 42\n", + "gp = True\n", + "gp_multiply = True\n", + "folder = \"eval\"\n", + "debug = False\n", + "path = None\n", + "param_index = 0\n", + "allow_same_prediction = True\n", + "log_wandb = False" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "c296c826", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-26T10:27:29.151783Z", + "iopub.status.busy": "2024-03-26T10:27:29.151046Z", + "iopub.status.idle": "2024-03-26T10:27:29.156204Z", + "shell.execute_reply": "2024-03-26T10:27:29.155397Z" + }, + "papermill": { + "duration": 0.020121, + "end_time": "2024-03-26T10:27:29.158086", + "exception": false, + "start_time": "2024-03-26T10:27:29.137965", + "status": "completed" + }, + "tags": [ + "injected-parameters" + ] + }, + "outputs": [], + "source": [ + "# Parameters\n", + "dataset = \"insurance\"\n", + "dataset_name = \"insurance\"\n", + "single_model = \"realtabformer\"\n", + "gp = True\n", + "gp_multiply = True\n", + "random_seed = 2\n", + "debug = False\n", + "folder = \"eval\"\n", + "path_prefix = \"../../../../\"\n", + "path = \"eval/insurance/realtabformer/2\"\n", + "param_index = 0\n", + "allow_same_prediction = True\n", + "log_wandb = False\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bd7c02d6", + "metadata": { + "papermill": { + "duration": 0.011484, + "end_time": "2024-03-26T10:27:29.180527", + "exception": false, + "start_time": "2024-03-26T10:27:29.169043", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "5f45b1d0", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-26T10:27:29.205158Z", + "iopub.status.busy": "2024-03-26T10:27:29.204916Z", + "iopub.status.idle": "2024-03-26T10:27:29.213862Z", + "shell.execute_reply": "2024-03-26T10:27:29.213156Z" + }, + "executionInfo": { + "elapsed": 7, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "UdvXYv3c3LXy", + "papermill": { + "duration": 0.02275, + "end_time": "2024-03-26T10:27:29.215725", + "exception": false, + "start_time": "2024-03-26T10:27:29.192975", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/kaggle/working\n", + "/kaggle/working/eval/insurance/realtabformer/2\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-26T10:27:29.239058Z", + "iopub.status.busy": "2024-03-26T10:27:29.238803Z", + "iopub.status.idle": "2024-03-26T10:27:31.237484Z", + "shell.execute_reply": "2024-03-26T10:27:31.236423Z" + }, + "papermill": { + "duration": 2.01271, + "end_time": "2024-03-26T10:27:31.239635", + "exception": false, + "start_time": "2024-03-26T10:27:29.226925", + "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-26T10:27:31.267367Z", + "iopub.status.busy": "2024-03-26T10:27:31.265675Z", + "iopub.status.idle": "2024-03-26T10:27:31.278502Z", + "shell.execute_reply": "2024-03-26T10:27:31.277826Z" + }, + "papermill": { + "duration": 0.028043, + "end_time": "2024-03-26T10:27:31.280357", + "exception": false, + "start_time": "2024-03-26T10:27:31.252314", + "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-26T10:27:31.304668Z", + "iopub.status.busy": "2024-03-26T10:27:31.303985Z", + "iopub.status.idle": "2024-03-26T10:27:31.311383Z", + "shell.execute_reply": "2024-03-26T10:27:31.310356Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "Vrl2QkoV3o_8", + "papermill": { + "duration": 0.021363, + "end_time": "2024-03-26T10:27:31.313340", + "exception": false, + "start_time": "2024-03-26T10:27:31.291977", + "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-26T10:27:31.337349Z", + "iopub.status.busy": "2024-03-26T10:27:31.337067Z", + "iopub.status.idle": "2024-03-26T10:27:31.427868Z", + "shell.execute_reply": "2024-03-26T10:27:31.426991Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "TilUuFk9vqMb", + "papermill": { + "duration": 0.104998, + "end_time": "2024-03-26T10:27:31.429929", + "exception": false, + "start_time": "2024-03-26T10:27:31.324931", + "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-26T10:27:31.456316Z", + "iopub.status.busy": "2024-03-26T10:27:31.456033Z", + "iopub.status.idle": "2024-03-26T10:27:36.058454Z", + "shell.execute_reply": "2024-03-26T10:27:36.057694Z" + }, + "executionInfo": { + "elapsed": 3113, + "status": "ok", + "timestamp": 1696841025277, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "7Abt8nStvr9Z", + "papermill": { + "duration": 4.617929, + "end_time": "2024-03-26T10:27:36.060923", + "exception": false, + "start_time": "2024-03-26T10:27:31.442994", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-03-26 10:27:33.638251: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:9261] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", + "2024-03-26 10:27:33.638308: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:607] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", + "2024-03-26 10:27:33.639841: 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-26T10:27:36.085770Z", + "iopub.status.busy": "2024-03-26T10:27:36.085187Z", + "iopub.status.idle": "2024-03-26T10:27:36.091876Z", + "shell.execute_reply": "2024-03-26T10:27:36.091187Z" + }, + "papermill": { + "duration": 0.021044, + "end_time": "2024-03-26T10:27:36.093742", + "exception": false, + "start_time": "2024-03-26T10:27:36.072698", + "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-26T10:27:36.120288Z", + "iopub.status.busy": "2024-03-26T10:27:36.119967Z", + "iopub.status.idle": "2024-03-26T10:27:45.134416Z", + "shell.execute_reply": "2024-03-26T10:27:45.133420Z" + }, + "executionInfo": { + "elapsed": 20137, + "status": "ok", + "timestamp": 1696841045408, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "tbaguWxAvtPi", + "papermill": { + "duration": 9.031105, + "end_time": "2024-03-26T10:27:45.136927", + "exception": false, + "start_time": "2024-03-26T10:27:36.105822", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", + " warnings.warn(\n", + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:119: ConvergenceWarning: Number of distinct clusters (6) found smaller than n_clusters (10). Possibly due to duplicate points in X.\n", + " .fit(X)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/sklearn/preprocessing/_encoders.py:868: FutureWarning: `sparse` was renamed to `sparse_output` in version 1.2 and will be removed in 1.4. `sparse_output` is ignored unless you leave `sparse` to its default value.\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "from ml_utility_loss.loss_learning.estimator.preprocessing import DataPreprocessor\n", + "\n", + "preprocessor = DataPreprocessor(\n", + " task,\n", + " target=target,\n", + " cat_features=cat_features,\n", + " mixed_features=mixed_features,\n", + " longtail_features=longtail_features,\n", + " integer_features=integer_features,\n", + " lct_ae_embedding_size=lct_ae_embedding_size,\n", + " lct_ae_params=lct_ae_params,\n", + " lct_ae=lct_ae,\n", + " tab_ddpm_normalization=tab_ddpm_normalization,\n", + " tab_ddpm_cat_encoding=tab_ddpm_cat_encoding,\n", + " tab_ddpm_y_policy=tab_ddpm_y_policy,\n", + " tab_ddpm_is_y_cond=tab_ddpm_is_y_cond,\n", + " realtabformer_embedding=rtf_embed,\n", + " realtabformer_params=rtf_params,\n", + ")\n", + "preprocessor.fit(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "a9c9b110", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2024-03-26T10:27:45.166700Z", + "iopub.status.busy": "2024-03-26T10:27:45.165898Z", + "iopub.status.idle": "2024-03-26T10:27:45.172799Z", + "shell.execute_reply": "2024-03-26T10:27:45.171962Z" + }, + "executionInfo": { + "elapsed": 13, + "status": "ok", + "timestamp": 1696841045411, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "OxUH_GBEv2qK", + "outputId": "76464c90-3baf-4bdc-a955-6f4fddc16b9c", + "papermill": { + "duration": 0.024084, + "end_time": "2024-03-26T10:27:45.174609", + "exception": false, + "start_time": "2024-03-26T10:27:45.150525", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'tvae': 36,\n", + " 'realtabformer': (19, 551, Embedding(551, 800), True),\n", + " 'lct_gan': 29,\n", + " 'tab_ddpm_concat': 12}" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "preprocessor.adapter_sizes" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "3cb9ed90", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-26T10:27:45.199812Z", + "iopub.status.busy": "2024-03-26T10:27:45.199535Z", + "iopub.status.idle": "2024-03-26T10:27:45.204048Z", + "shell.execute_reply": "2024-03-26T10:27:45.203222Z" + }, + "papermill": { + "duration": 0.019129, + "end_time": "2024-03-26T10:27:45.205947", + "exception": false, + "start_time": "2024-03-26T10:27:45.186818", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "from ml_utility_loss.loss_learning.estimator.pipeline import load_dataset_3_factory\n", + "\n", + "datasetsn = load_dataset_3_factory(\n", + " dataset_dir=os.path.join(path_prefix, \"ml-utility-loss/\"),\n", + " dataset_name=dataset_name,\n", + " preprocessor=preprocessor,\n", + " cache_dir=path_prefix,\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "ad1eb833", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-26T10:27:45.230708Z", + "iopub.status.busy": "2024-03-26T10:27:45.230416Z", + "iopub.status.idle": "2024-03-26T10:27:45.294080Z", + "shell.execute_reply": "2024-03-26T10:27:45.293221Z" + }, + "papermill": { + "duration": 0.078268, + "end_time": "2024-03-26T10:27:45.295981", + "exception": false, + "start_time": "2024-03-26T10:27:45.217713", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../insurance/_cache_aug_test/realtabformer/all inf False\n", + "../../../../ml-utility-loss/aug_test/insurance 0\n", + "Caching in ../../../../insurance/_cache_bs_test/realtabformer/all inf False\n", + "../../../../ml-utility-loss/bs_test/insurance 0\n", + "Caching in ../../../../insurance/_cache_synth_test/realtabformer/all inf False\n", + "../../../../ml-utility-loss/synthetics/insurance 600\n", + "600\n" + ] + } + ], + "source": [ + "from ml_utility_loss.loss_learning.estimator.pipeline import load_dataset_4\n", + "\n", + "test_set = load_dataset_4(\n", + " dataset_dir=os.path.join(path_prefix, \"ml-utility-loss/\"),\n", + " dataset_name=dataset_name,\n", + " preprocessor=preprocessor,\n", + " model=single_model,\n", + " cache_dir=path_prefix,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "14ff8b40", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-26T10:27:45.322410Z", + "iopub.status.busy": "2024-03-26T10:27:45.322150Z", + "iopub.status.idle": "2024-03-26T10:27:45.648502Z", + "shell.execute_reply": "2024-03-26T10:27:45.647651Z" + }, + "executionInfo": { + "elapsed": 588, + "status": "ok", + "timestamp": 1696841049215, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "NgahtU1q9uLO", + "papermill": { + "duration": 0.341991, + "end_time": "2024-03-26T10:27:45.650563", + "exception": false, + "start_time": "2024-03-26T10:27:45.308572", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'Body': 'twin_encoder',\n", + " 'loss_balancer_meta': True,\n", + " 'loss_balancer_log': False,\n", + " 'loss_balancer_lbtw': False,\n", + " 'pma_skip_small': False,\n", + " 'isab_skip_small': False,\n", + " 'layer_norm': False,\n", + " 'pma_layer_norm': False,\n", + " 'attn_residual': True,\n", + " 'tf_n_layers_dec': False,\n", + " 'tf_isab_rank': 0,\n", + " 'tf_layer_norm': False,\n", + " 'tf_pma_start': -1,\n", + " 'head_n_seeds': 0,\n", + " 'tf_pma_low': 16,\n", + " 'dropout': 0,\n", + " 'combine_mode': 'diff_left',\n", + " 'tf_isab_mode': 'separate',\n", + " 'grad_loss_fn': torch.Tensor>,\n", + " 'single_model': True,\n", + " 'bias': True,\n", + " 'bias_final': True,\n", + " 'pma_ffn_mode': 'none',\n", + " 'patience': 10,\n", + " 'inds_init_mode': 'fixnorm',\n", + " 'grad_clip': 0.77,\n", + " 'head_final_mul': 'identity',\n", + " 'gradient_penalty_mode': {'gradient_penalty': True,\n", + " 'forward_once': False,\n", + " 'calc_grad_m': False,\n", + " 'avg_non_role_model_m': False,\n", + " 'inverse_avg_non_role_model_m': False},\n", + " 'synth_data': 2,\n", + " 'bias_lr_mul': 1.0,\n", + " 'bias_weight_decay': 0.05,\n", + " 'loss_balancer_beta': 0.75,\n", + " 'loss_balancer_r': 0.95,\n", + " 'dataset_size': 2048,\n", + " 'batch_size': 8,\n", + " 'epochs': 100,\n", + " 'n_warmup_steps': 100,\n", + " 'Optim': torch_optimizer.diffgrad.DiffGrad,\n", + " 'fixed_role_model': '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': torch.nn.modules.activation.ReLU6,\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.RReLU,\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': True,\n", + " 'mag_corr': False,\n", + " 'seq_mag': False,\n", + " 'cos_loss': False,\n", + " 'mag_corr_kwargs': {'only_sign': False},\n", + " 'cos_loss_kwargs': {'only_sign': True, 'cos_matrix': False},\n", + " 'mse_mag_kwargs': {'target': 0.1, 'multiply': True, 'forgive_over': True}}}" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import ml_utility_loss.loss_learning.estimator.params2 as PARAMS\n", + "from ml_utility_loss.tuning import map_parameters\n", + "from ml_utility_loss.loss_learning.estimator.params.default import update_param_space, update_param_space_2\n", + "import wandb\n", + "\n", + "#\"\"\"\n", + "param_space = {\n", + " **getattr(PARAMS, dataset_name).PARAM_SPACE,\n", + "}\n", + "# params = {\n", + "# **getattr(PARAMS, dataset_name).BESTS[param_index],\n", + "# }\n", + "params = getattr(PARAMS, dataset_name).BEST_DICT[gp][gp_multiply][single_model]\n", + "params = {\n", + " **getattr(PARAMS, dataset_name).DEFAULTS,\n", + " **params,\n", + "}\n", + "if isinstance(params, (list, tuple)):\n", + " params = params[param_index]\n", + "if gp:\n", + " params[\"gradient_penalty_mode\"] = \"ALL\"\n", + " params[\"mse_mag\"] = True\n", + " if gp_multiply:\n", + " params[\"mse_mag_multiply\"] = True\n", + " #params[\"mse_mag_target\"] = 1.0\n", + " else:\n", + " params[\"mse_mag_multiply\"] = False\n", + " #params[\"mse_mag_target\"] = 0.1\n", + "else:\n", + " params[\"gradient_penalty_mode\"] = \"NONE\"\n", + " params[\"mse_mag\"] = False\n", + "params[\"single_model\"] = False\n", + "if models:\n", + " params[\"models\"] = models\n", + "if single_model:\n", + " params[\"fixed_role_model\"] = single_model\n", + " params[\"single_model\"] = True\n", + " params[\"models\"] = [single_model]\n", + "if params[\"fixed_role_model\"] == \"realtabformer\" and dataset_name == \"treatment\":\n", + " params[\"batch_size\"] = 2\n", + "params[\"max_seconds\"] = 3600\n", + "params[\"patience\"] = 10\n", + "params[\"epochs\"] = 100\n", + "if debug:\n", + " params[\"epochs\"] = 2\n", + "with open(\"params.json\", \"w\") as f:\n", + " json.dump(params, f)\n", + "params = map_parameters(params, param_space=param_space)\n", + "params" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "a48bd9e9", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-26T10:27:45.676533Z", + "iopub.status.busy": "2024-03-26T10:27:45.676248Z", + "iopub.status.idle": "2024-03-26T10:27:45.782685Z", + "shell.execute_reply": "2024-03-26T10:27:45.781738Z" + }, + "papermill": { + "duration": 0.121755, + "end_time": "2024-03-26T10:27:45.784854", + "exception": false, + "start_time": "2024-03-26T10:27:45.663099", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../insurance/_cache_aug_train/realtabformer/all inf False\n", + "split df ratio is 0\n", + "../../../../ml-utility-loss/aug_train/insurance [400, 0]\n", + "Caching in ../../../../insurance/_cache_aug_val/realtabformer/all inf False\n", + "split df ratio is 1\n", + "../../../../ml-utility-loss/aug_val/insurance [0, 200]\n", + "Caching in ../../../../insurance/_cache_bs_train/realtabformer/all inf False\n", + "split df ratio is 0\n", + "../../../../ml-utility-loss/bs_train/insurance [100, 0]\n", + "Caching in ../../../../insurance/_cache_bs_val/realtabformer/all inf False\n", + "split df ratio is 1\n", + "../../../../ml-utility-loss/bs_val/insurance [0, 50]\n", + "Caching in ../../../../insurance/_cache_synth/realtabformer/all inf False\n", + "Splitting without random!\n", + "Split with reverse index!\n", + "../../../../ml-utility-loss/synthetics/insurance [400, 200]\n", + "[900, 450]\n", + "[900, 450]\n" + ] + } + ], + "source": [ + "train_set, val_set = datasetsn(model=params[\"fixed_role_model\"], synth_data=params[\"synth_data\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "2fcb1418", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "execution": { + "iopub.execute_input": "2024-03-26T10:27:45.815299Z", + "iopub.status.busy": "2024-03-26T10:27:45.814981Z", + "iopub.status.idle": "2024-03-26T10:27:46.290921Z", + "shell.execute_reply": "2024-03-26T10:27:46.289890Z" + }, + "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.495672, + "end_time": "2024-03-26T10:27:46.294905", + "exception": false, + "start_time": "2024-03-26T10:27:45.799233", + "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-26T10:27:46.358247Z", + "iopub.status.busy": "2024-03-26T10:27:46.357815Z", + "iopub.status.idle": "2024-03-26T10:27:46.362748Z", + "shell.execute_reply": "2024-03-26T10:27:46.361668Z" + }, + "papermill": { + "duration": 0.04274, + "end_time": "2024-03-26T10:27:46.366019", + "exception": false, + "start_time": "2024-03-26T10:27:46.323279", + "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-26T10:27:46.426791Z", + "iopub.status.busy": "2024-03-26T10:27:46.425797Z", + "iopub.status.idle": "2024-03-26T10:27:46.434168Z", + "shell.execute_reply": "2024-03-26T10:27:46.433168Z" + }, + "papermill": { + "duration": 0.046946, + "end_time": "2024-03-26T10:27:46.437142", + "exception": false, + "start_time": "2024-03-26T10:27:46.390196", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "10420884" + ] + }, + "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-26T10:27:46.484952Z", + "iopub.status.busy": "2024-03-26T10:27:46.484384Z", + "iopub.status.idle": "2024-03-26T10:27:46.574362Z", + "shell.execute_reply": "2024-03-26T10:27:46.573512Z" + }, + "papermill": { + "duration": 0.107656, + "end_time": "2024-03-26T10:27:46.576226", + "exception": false, + "start_time": "2024-03-26T10:27:46.468570", + "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", + "│ │ │ │ │ └─ReLU6: 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", + "│ │ │ │ │ └─ReLU6: 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", + "│ │ │ │ │ └─ReLU6: 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", + "│ └─Encoder: 2-8 [2, 16, 256] (recursive)\n", + "│ │ └─ModuleList: 3-16 -- (recursive)\n", + "│ │ │ └─EncoderLayer: 4-33 [2, 267, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-10 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-27 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-28 [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-29 [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-11 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-30 [2, 267, 512] (recursive)\n", + "│ │ │ │ │ └─ReLU6: 6-31 [2, 267, 512] --\n", + "│ │ │ │ │ └─Linear: 6-32 [2, 267, 256] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-34 [2, 267, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-12 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-33 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-34 [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-35 [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-13 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-36 [2, 267, 512] (recursive)\n", + "│ │ │ │ │ └─ReLU6: 6-37 [2, 267, 512] --\n", + "│ │ │ │ │ └─Linear: 6-38 [2, 267, 256] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-35 [2, 267, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-14 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-39 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-40 [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-41 [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-15 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-42 [2, 267, 512] (recursive)\n", + "│ │ │ │ │ └─ReLU6: 6-43 [2, 267, 512] --\n", + "│ │ │ │ │ └─Linear: 6-44 [2, 267, 256] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-36 [2, 16, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-16 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-45 [2, 32, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-46 [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-47 [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-17 [2, 267, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-48 [2, 267, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardsigmoid: 6-49 [2, 267, 512] --\n", + "│ │ │ │ │ └─Linear: 6-50 [2, 267, 256] (recursive)\n", + "│ │ │ │ └─PoolingByMultiheadAttention: 5-18 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-51 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-52 [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", + "├─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", + "│ │ │ └─RReLU: 4-38 [2, 128] --\n", + "│ │ └─FeedForward: 3-18 [2, 128] --\n", + "│ │ │ └─Linear: 4-39 [2, 128] 16,512\n", + "│ │ │ └─RReLU: 4-40 [2, 128] --\n", + "│ │ └─FeedForward: 3-19 [2, 128] --\n", + "│ │ │ └─Linear: 4-41 [2, 128] 16,512\n", + "│ │ │ └─RReLU: 4-42 [2, 128] --\n", + "│ │ └─FeedForward: 3-20 [2, 128] --\n", + "│ │ │ └─Linear: 4-43 [2, 128] 16,512\n", + "│ │ │ └─RReLU: 4-44 [2, 128] --\n", + "│ │ └─FeedForward: 3-21 [2, 128] --\n", + "│ │ │ └─Linear: 4-45 [2, 128] 16,512\n", + "│ │ │ └─RReLU: 4-46 [2, 128] --\n", + "│ │ └─FeedForward: 3-22 [2, 128] --\n", + "│ │ │ └─Linear: 4-47 [2, 128] 16,512\n", + "│ │ │ └─RReLU: 4-48 [2, 128] --\n", + "│ │ └─FeedForward: 3-23 [2, 128] --\n", + "│ │ │ └─Linear: 4-49 [2, 128] 16,512\n", + "│ │ │ └─RReLU: 4-50 [2, 128] --\n", + "│ │ └─FeedForward: 3-24 [2, 128] --\n", + "│ │ │ └─Linear: 4-51 [2, 128] 16,512\n", + "│ │ │ └─RReLU: 4-52 [2, 128] --\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,684\n", + "Trainable params: 10,420,884\n", + "Non-trainable params: 440,800\n", + "Total mult-adds (M): 42.02\n", + "========================================================================================================================\n", + "Input size (MB): 0.20\n", + "Forward/backward pass size (MB): 632.48\n", + "Params size (MB): 43.45\n", + "Estimated Total Size (MB): 676.13\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-26T10:27:46.606144Z", + "iopub.status.busy": "2024-03-26T10:27:46.605870Z", + "iopub.status.idle": "2024-03-26T11:15:05.472852Z", + "shell.execute_reply": "2024-03-26T11:15:05.471922Z" + }, + "papermill": { + "duration": 2838.900302, + "end_time": "2024-03-26T11:15:05.490822", + "exception": false, + "start_time": "2024-03-26T10:27:46.590520", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3 datasets [900, 450, 600]\n", + "Creating model of type \n", + "[*] Embedding True True\n", + "g_loss_mul 0.1\n", + "Epoch 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.06546703377635114, 'avg_role_model_std_loss': 0.2411056103362887, 'avg_role_model_mean_pred_loss': 0.017943341929830138, 'avg_role_model_g_mag_loss': 15.073662688997057, '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.06770005301468902, 'n_size': 900, 'n_batch': 113, 'duration': 153.185537815094, 'duration_batch': 1.3556242284521591, 'duration_size': 0.1702061531278822, 'avg_pred_std': 0.19871398358218437}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.021130030669478907, 'avg_role_model_std_loss': 0.19607622416553663, 'avg_role_model_mean_pred_loss': 0.004915828111867692, '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.021130030669478907, 'n_size': 450, 'n_batch': 57, 'duration': 44.15434193611145, 'duration_batch': 0.7746375778265167, 'duration_size': 0.09812075985802544, 'avg_pred_std': 0.08530344322258443}\n", + "Epoch 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.013551225868674617, 'avg_role_model_std_loss': 0.425866672638608, 'avg_role_model_mean_pred_loss': 0.0008923178030537808, 'avg_role_model_g_mag_loss': 3.086364604102241, '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.014007968114585512, 'n_size': 900, 'n_batch': 113, 'duration': 153.67027974128723, 'duration_batch': 1.3599139800113915, 'duration_size': 0.17074475526809693, 'avg_pred_std': 0.11838984252077288}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.00839744051038805, 'avg_role_model_std_loss': 0.15208790417410342, 'avg_role_model_mean_pred_loss': 0.0025543556639753243, '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.00839744051038805, 'n_size': 450, 'n_batch': 57, 'duration': 49.47366642951965, 'duration_batch': 0.8679590601670114, 'duration_size': 0.10994148095448812, 'avg_pred_std': 0.07164400266973596}\n", + "Epoch 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.006413812188871412, 'avg_role_model_std_loss': 0.4138342716928963, 'avg_role_model_mean_pred_loss': 0.00027937432812316876, 'avg_role_model_g_mag_loss': 1.2699479508399962, '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.006606090834312555, 'n_size': 900, 'n_batch': 113, 'duration': 148.70240354537964, 'duration_batch': 1.315950473852917, 'duration_size': 0.1652248928281996, 'avg_pred_std': 0.10096772389272146}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.004124537513190363, 'avg_role_model_std_loss': 0.06340608278020754, 'avg_role_model_mean_pred_loss': 7.95078217205811e-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.004124537513190363, 'n_size': 450, 'n_batch': 57, 'duration': 46.079535722732544, 'duration_batch': 0.8084129074163604, 'duration_size': 0.10239896827273899, 'avg_pred_std': 0.08735310192334286}\n", + "Epoch 3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.004092327245485245, 'avg_role_model_std_loss': 0.39121937074457336, 'avg_role_model_mean_pred_loss': 0.00015605472596730313, 'avg_role_model_g_mag_loss': 0.8052064700921376, '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.004214407260684917, 'n_size': 900, 'n_batch': 113, 'duration': 151.17974090576172, 'duration_batch': 1.337873813325325, 'duration_size': 0.1679774898952908, 'avg_pred_std': 0.09381394159147698}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0034038320787820138, 'avg_role_model_std_loss': 0.17477164815838414, 'avg_role_model_mean_pred_loss': 3.0920931797607425e-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.0034038320787820138, 'n_size': 450, 'n_batch': 57, 'duration': 44.10925340652466, 'duration_batch': 0.7738465509916607, 'duration_size': 0.09802056312561035, 'avg_pred_std': 0.06855134886542433}\n", + "Epoch 4\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0029089865246270264, 'avg_role_model_std_loss': 0.3532221096504087, 'avg_role_model_mean_pred_loss': 3.6831276020658194e-05, 'avg_role_model_g_mag_loss': 0.6396473573313819, '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.003004638084805467, 'n_size': 900, 'n_batch': 113, 'duration': 148.33039927482605, 'duration_batch': 1.3126584006621775, 'duration_size': 0.16481155474980672, 'avg_pred_std': 0.0951092214018634}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.002712128226024409, 'avg_role_model_std_loss': 0.18766189036889222, 'avg_role_model_mean_pred_loss': 0.00010364639543665517, '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.002712128226024409, 'n_size': 450, 'n_batch': 57, 'duration': 43.69719195365906, 'duration_batch': 0.7666174026957729, 'duration_size': 0.09710487100813124, 'avg_pred_std': 0.07099823879176065}\n", + "Epoch 5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0025865390710532667, 'avg_role_model_std_loss': 0.28755133922778336, 'avg_role_model_mean_pred_loss': 5.002069715601034e-05, 'avg_role_model_g_mag_loss': 0.5206181814935472, '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.0026650355748521785, 'n_size': 900, 'n_batch': 113, 'duration': 149.53471994400024, 'duration_batch': 1.3233161056991172, 'duration_size': 0.16614968882666695, 'avg_pred_std': 0.09785628467138889}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.004123696400783956, 'avg_role_model_std_loss': 0.10052104216206098, 'avg_role_model_mean_pred_loss': 0.00014860794093957944, '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.004123696400783956, 'n_size': 450, 'n_batch': 57, 'duration': 45.542537689208984, 'duration_batch': 0.7989918892843682, 'duration_size': 0.10120563930935329, 'avg_pred_std': 0.07634249809933336}\n", + "Epoch 6\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0021268636879782812, 'avg_role_model_std_loss': 0.31098353265446677, 'avg_role_model_mean_pred_loss': 8.022330904053045e-06, 'avg_role_model_g_mag_loss': 0.46527117974228327, '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.0021964997161800664, 'n_size': 900, 'n_batch': 113, 'duration': 154.0214467048645, 'duration_batch': 1.3630216522554381, 'duration_size': 0.17113494078318278, 'avg_pred_std': 0.09568176698351724}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.002951748826243501, 'avg_role_model_std_loss': 0.10900051805550315, 'avg_role_model_mean_pred_loss': 5.319740680752188e-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.002951748826243501, 'n_size': 450, 'n_batch': 57, 'duration': 45.68478465080261, 'duration_batch': 0.801487450014081, 'duration_size': 0.10152174366845025, 'avg_pred_std': 0.07844465254119744}\n", + "Epoch 7\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0016828670411551784, 'avg_role_model_std_loss': 0.2405022908817118, 'avg_role_model_mean_pred_loss': 1.4838149498900283e-05, 'avg_role_model_g_mag_loss': 0.41218649297952653, '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.0017432555771018897, 'n_size': 900, 'n_batch': 113, 'duration': 148.98203325271606, 'duration_batch': 1.3184250730328855, 'duration_size': 0.16553559250301786, 'avg_pred_std': 0.09567539716980099}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0022270536331375802, 'avg_role_model_std_loss': 0.2691560960501106, 'avg_role_model_mean_pred_loss': 1.237651391853007e-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.0022270536331375802, 'n_size': 450, 'n_batch': 57, 'duration': 44.04278039932251, 'duration_batch': 0.772680357882851, 'duration_size': 0.0978728453318278, 'avg_pred_std': 0.06789644183836092}\n", + "Epoch 8\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0012292804241102809, 'avg_role_model_std_loss': 0.17017161006335066, 'avg_role_model_mean_pred_loss': 4.924689298776446e-06, 'avg_role_model_g_mag_loss': 0.3241997027397156, '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.0012760602385969832, 'n_size': 900, 'n_batch': 113, 'duration': 148.87872958183289, 'duration_batch': 1.3175108812551584, 'duration_size': 0.16542081064648098, 'avg_pred_std': 0.09586640849577642}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.002435751861194149, 'avg_role_model_std_loss': 0.36038146253469866, 'avg_role_model_mean_pred_loss': 3.095573820521539e-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.002435751861194149, 'n_size': 450, 'n_batch': 57, 'duration': 47.944602489471436, 'duration_batch': 0.8411333770082708, 'duration_size': 0.1065435610877143, 'avg_pred_std': 0.07143153931604486}\n", + "Epoch 9\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0011144688440577334, 'avg_role_model_std_loss': 0.1618615282109625, 'avg_role_model_mean_pred_loss': 8.490755512877918e-06, 'avg_role_model_g_mag_loss': 0.3029045389427079, '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.0011581761015178119, 'n_size': 900, 'n_batch': 113, 'duration': 153.11266350746155, 'duration_batch': 1.354979323074881, 'duration_size': 0.17012518167495727, 'avg_pred_std': 0.0970211002349326}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.002127645400275166, 'avg_role_model_std_loss': 0.5217206840770483, 'avg_role_model_mean_pred_loss': 1.6785784667897965e-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.002127645400275166, 'n_size': 450, 'n_batch': 57, 'duration': 45.5362389087677, 'duration_batch': 0.7988813843643456, 'duration_size': 0.10119164201948377, 'avg_pred_std': 0.07289726209924802}\n", + "Epoch 10\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.001183760426776846, 'avg_role_model_std_loss': 0.12453773899971259, 'avg_role_model_mean_pred_loss': 4.877423153579243e-06, 'avg_role_model_g_mag_loss': 0.3282844849758678, '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.001230810873934792, 'n_size': 900, 'n_batch': 113, 'duration': 151.34659552574158, 'duration_batch': 1.3393504028826688, 'duration_size': 0.16816288391749065, 'avg_pred_std': 0.09647954430068488}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.002083526839996921, 'avg_role_model_std_loss': 0.7386151516803023, 'avg_role_model_mean_pred_loss': 3.646810097101981e-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.002083526839996921, 'n_size': 450, 'n_batch': 57, 'duration': 45.06990456581116, 'duration_batch': 0.7907000801019501, 'duration_size': 0.10015534347958036, 'avg_pred_std': 0.06614154230868607}\n", + "Epoch 11\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0009753633572189655, 'avg_role_model_std_loss': 0.18075985179538961, 'avg_role_model_mean_pred_loss': 2.4574399071989697e-06, 'avg_role_model_g_mag_loss': 0.3026174498928918, '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.0010182713146140384, 'n_size': 900, 'n_batch': 113, 'duration': 153.43047070503235, 'duration_batch': 1.3577917761507288, 'duration_size': 0.17047830078336929, 'avg_pred_std': 0.09725009125813974}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0027126917298947876, 'avg_role_model_std_loss': 0.44140643616923336, 'avg_role_model_mean_pred_loss': 4.97356319702471e-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.0027126917298947876, 'n_size': 450, 'n_batch': 57, 'duration': 46.485644578933716, 'duration_batch': 0.8155376241918195, 'duration_size': 0.10330143239763048, 'avg_pred_std': 0.060076543326048476}\n", + "Epoch 12\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0009962741199544527, 'avg_role_model_std_loss': 0.1213041851699925, 'avg_role_model_mean_pred_loss': 2.6763202339177273e-06, 'avg_role_model_g_mag_loss': 0.2919425904419687, '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.0010380058418700678, 'n_size': 900, 'n_batch': 113, 'duration': 150.9032688140869, 'duration_batch': 1.3354271576467869, 'duration_size': 0.16767029868231878, 'avg_pred_std': 0.09730801442885294}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.002843431096148884, 'avg_role_model_std_loss': 0.4800476854505124, 'avg_role_model_mean_pred_loss': 3.743590894896127e-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.002843431096148884, 'n_size': 450, 'n_batch': 57, 'duration': 47.381882190704346, 'duration_batch': 0.8312610910649885, 'duration_size': 0.10529307153489854, 'avg_pred_std': 0.05945909781414166}\n", + "Epoch 13\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0009301258288420892, 'avg_role_model_std_loss': 0.13480907791556043, 'avg_role_model_mean_pred_loss': 4.767580377660616e-06, 'avg_role_model_g_mag_loss': 0.26487836490074795, '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.0009680978746877776, 'n_size': 900, 'n_batch': 113, 'duration': 152.54639387130737, 'duration_batch': 1.3499680873567024, 'duration_size': 0.16949599319034153, 'avg_pred_std': 0.09505416518819015}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0015452833087571587, 'avg_role_model_std_loss': 0.7066929681970184, 'avg_role_model_mean_pred_loss': 1.9704139299798997e-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.0015452833087571587, 'n_size': 450, 'n_batch': 57, 'duration': 45.19634485244751, 'duration_batch': 0.7929183307446932, 'duration_size': 0.1004363218943278, 'avg_pred_std': 0.06895738166119707}\n", + "Stopped False\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval loss {'role_model': 'realtabformer', 'n_size': 600, 'n_batch': 75, 'role_model_metrics': {'avg_loss': 0.0008848744352386954, 'avg_g_mag_loss': 0.007162825414042118, 'avg_g_cos_loss': 6.385196543609103e-05, 'pred_duration': 3.0819342136383057, 'grad_duration': 0.6160187721252441, 'total_duration': 3.69795298576355, 'pred_std': 0.15960799157619476, 'std_loss': 0.0007001429912634194, 'mean_pred_loss': 3.047596464966773e-06, 'pred_rmse': 0.02974683977663517, 'pred_mae': 0.019926337525248528, 'pred_mape': 0.7107431888580322, 'grad_rmse': 0.6675140261650085, 'grad_mae': 0.2900869846343994, 'grad_mape': 11.930258750915527}, '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.0008848744352386954, 'avg_g_mag_loss': 0.007162825414042118, 'avg_g_cos_loss': 6.385196543609103e-05, 'avg_pred_duration': 3.0819342136383057, 'avg_grad_duration': 0.6160187721252441, 'avg_total_duration': 3.69795298576355, 'avg_pred_std': 0.15960799157619476, 'avg_std_loss': 0.0007001429912634194, 'avg_mean_pred_loss': 3.047596464966773e-06}, 'min_metrics': {'avg_loss': 0.0008848744352386954, 'avg_g_mag_loss': 0.007162825414042118, 'avg_g_cos_loss': 6.385196543609103e-05, 'pred_duration': 3.0819342136383057, 'grad_duration': 0.6160187721252441, 'total_duration': 3.69795298576355, 'pred_std': 0.15960799157619476, 'std_loss': 0.0007001429912634194, 'mean_pred_loss': 3.047596464966773e-06, 'pred_rmse': 0.02974683977663517, 'pred_mae': 0.019926337525248528, 'pred_mape': 0.7107431888580322, 'grad_rmse': 0.6675140261650085, 'grad_mae': 0.2900869846343994, 'grad_mape': 11.930258750915527}, 'model_metrics': {'realtabformer': {'avg_loss': 0.0008848744352386954, 'avg_g_mag_loss': 0.007162825414042118, 'avg_g_cos_loss': 6.385196543609103e-05, 'pred_duration': 3.0819342136383057, 'grad_duration': 0.6160187721252441, 'total_duration': 3.69795298576355, 'pred_std': 0.15960799157619476, 'std_loss': 0.0007001429912634194, 'mean_pred_loss': 3.047596464966773e-06, 'pred_rmse': 0.02974683977663517, 'pred_mae': 0.019926337525248528, 'pred_mape': 0.7107431888580322, 'grad_rmse': 0.6675140261650085, 'grad_mae': 0.2900869846343994, 'grad_mape': 11.930258750915527}}}\n" + ] + } + ], + "source": [ + "import torch\n", + "from ml_utility_loss.loss_learning.estimator.pipeline import train, train_2\n", + "from ml_utility_loss.loss_learning.estimator.process_simple import train_epoch, eval as _eval\n", + "from ml_utility_loss.params import GradientPenaltyMode\n", + "from ml_utility_loss.util import clear_memory\n", + "import time\n", + "#torch.autograd.set_detect_anomaly(True)\n", + "\n", + "del model\n", + "clear_memory()\n", + "\n", + "#opt = params[\"Optim\"](model.parameters())\n", + "loss = train_2(\n", + " [train_set, val_set, test_set],\n", + " preprocessor=preprocessor,\n", + " #whole_model=model,\n", + " #optim=opt,\n", + " log_dir=\"logs\",\n", + " checkpoint_dir=\"checkpoints\",\n", + " verbose=True,\n", + " allow_same_prediction=allow_same_prediction,\n", + " wandb=wandb if log_wandb else None,\n", + " study_name=study_name,\n", + " **params\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "9b514a07", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-26T11:15:05.525518Z", + "iopub.status.busy": "2024-03-26T11:15:05.524799Z", + "iopub.status.idle": "2024-03-26T11:15:05.529569Z", + "shell.execute_reply": "2024-03-26T11:15:05.528755Z" + }, + "papermill": { + "duration": 0.024368, + "end_time": "2024-03-26T11:15:05.531493", + "exception": false, + "start_time": "2024-03-26T11:15:05.507125", + "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-26T11:15:05.564275Z", + "iopub.status.busy": "2024-03-26T11:15:05.563808Z", + "iopub.status.idle": "2024-03-26T11:15:05.647782Z", + "shell.execute_reply": "2024-03-26T11:15:05.646925Z" + }, + "papermill": { + "duration": 0.102813, + "end_time": "2024-03-26T11:15:05.650147", + "exception": false, + "start_time": "2024-03-26T11:15:05.547334", + "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-26T11:15:05.685221Z", + "iopub.status.busy": "2024-03-26T11:15:05.684927Z", + "iopub.status.idle": "2024-03-26T11:15:05.959554Z", + "shell.execute_reply": "2024-03-26T11:15:05.958496Z" + }, + "papermill": { + "duration": 0.294548, + "end_time": "2024-03-26T11:15:05.961515", + "exception": false, + "start_time": "2024-03-26T11:15:05.666967", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAASQAAAEUCAYAAACCg0tBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA5cklEQVR4nO3de1xUdf4/8Nfch+twk5shaIKYIBQKYamZrGhqYW0QP1fMr2n11dYkzXAV3G2/0c2NSr+5uqX23UhyK3dXXYpIu4EQ4DWV1FBIHS4qAwyXgZnP74/DHBgZcAZhZmDez8fjPJg5533OfAaZt5/zmc9FwBhjIIQQGyC0dgEIIUSPEhIhxGZQQiKE2AxKSIQQm0EJiRBiMyghEUJsBiUkQojNoIRECLEZlJAIITZDbO0CDASdTocrV67AxcUFAoHA2sUhhNyEMYbGxkb4+/tDKOyjHsT6YcuWLSwwMJDJZDIWHR3NioqK+oz/5JNP2Lhx45hMJmNhYWHswIEDBscBGN1ef/11k8pTVVXV6zVoo40229mqqqr6/CybXUPKyclBamoqtm3bhpiYGGRlZSE+Ph7l5eXw9vbuEV9QUIDk5GRkZmZi3rx5yM7ORkJCAsrKyhAWFgYAuHr1qsE5//nPf7B06VI89thjJpXJxcUFAFBVVQVXV1dz3xIhZJA1NDQgICCA/6z2RtBZQzFZTEwMJk+ejC1btgDgbpcCAgLw3HPP4aWXXuoRn5SUBLVajf379/P77r33XkRGRmLbtm1GXyMhIQGNjY3Iz883qUwNDQ1QKBRQqVSUkAixQaZ+Rs1q1NZoNCgtLUVcXFzXBYRCxMXFobCw0Og5hYWFBvEAEB8f32t8dXU1Dhw4gKVLl/Zajra2NjQ0NBhshJChz6yEVFdXB61WCx8fH4P9Pj4+UCqVRs9RKpVmxe/evRsuLi549NFHey1HZmYmFAoFvwUEBJjzNgghNsrmvvb/4IMPsHDhQsjl8l5j0tLSoFKp+K2qqsqCJSSEDBazGrW9vLwgEolQXV1tsL+6uhq+vr5Gz/H19TU5/rvvvkN5eTlycnL6LIdMJoNMJjOn6KQPWq0W7e3t1i4GGcIkEglEItFtX8eshCSVShEVFYX8/HwkJCQA4Bq18/PzsXLlSqPnxMbGIj8/H88//zy/Ly8vD7GxsT1i33//fURFRSEiIsKcYpF+YoxBqVSivr7e2kUhw4Cbmxt8fX1vqy+g2V/7p6amYvHixZg0aRKio6ORlZUFtVqNJUuWAABSUlIwcuRIZGZmAgBWrVqF6dOnY/PmzZg7dy727NmDkpISbN++3eC6DQ0N2Lt3LzZv3tzvN0PMo09G3t7ecHR0pE6lpF8YY2hubkZNTQ0AwM/Pr9/XMjshJSUloba2Funp6VAqlYiMjERubi7fcF1ZWWnQE3PKlCnIzs7Ghg0bsH79egQHB2Pfvn18HyS9PXv2gDGG5OTkfr+ZW+nQ6nDisgq1jW2YdZePXX8AtVotn4w8PT2tXRwyxDk4OAAAampq4O3t3e/bN7P7IdkiU/s4tGi0GJ+eCwA4sWkWXOUSSxXR5rS2tqKiogJBQUH8HxMht6OlpQUXL17E6NGje3wpNSj9kIY6B6kILjKuUljT0Gbl0tgGe64lkoE1EH9LdpWQAGCEK/ftXG0jJSRCbI39JSRnLiHVNLZauSSEkJvZXULyduXubamGRPpLIBBg37591i7GgNq0aRMiIyOtXQw7TEgudMtGhr5du3bBzc1twK63Zs0akwezD6ZhMUGbOUa46G/ZKCGR4U+j0UAqld4yztnZGc7OzhYoUd+ohkR4jDE0azosvpnb8yQ3Nxf3338/3Nzc4OnpiXnz5uHChQsAuH5v69atM4ivra2FRCLBt99+C4Cbf2vu3LlwcHDA6NGjkZ2djaCgIGRlZfXr93by5Ek8+OCDcHBwgKenJ5YvX46mpib++OHDhxEdHQ0nJye4ubnhvvvuw6VLlwAAx48fx4wZM+Di4gJXV1dERUWhpKSkz9c7fPgwlixZApVKBYFAAIFAgE2bNgEAgoKC8PLLLyMlJQWurq5Yvnw5AGDdunUICQmBo6MjxowZg40bNxoMF7r5lu3JJ59EQkIC3nzzTfj5+cHT0xMrVqwY9CFGdldD8nbh2pCoUbunlnYt7kr/wuKve/pP8XCUmv6nqFarkZqaiokTJ6KpqQnp6elYsGABjh07hoULF+L111/Hq6++yn8NnZOTA39/f0ydOhUAN5qgrq4Ohw8fhkQiQWpqKt/L2FxqtRrx8fGIjY3Fjz/+iJqaGjz11FNYuXIldu3ahY6ODiQkJGDZsmX4+OOPodFoUFxczJdt4cKFuPvuu/Hee+9BJBLh2LFjkEj67h83ZcoUZGVlIT09HeXl5QBgULt58803kZ6ejoyMDH6fi4sLdu3aBX9/f5w8eRLLli2Di4sLXnzxxV5f59ChQ/Dz88OhQ4dw/vx5JCUlITIyEsuWLevX78oUdpeQ6JZt6Lt5JtEPPvgAI0aMwOnTp5GYmIjnn38e33//PZ+AsrOzkZycDIFAgLNnz+Krr77Cjz/+iEmTJgEA/va3vyE4OLhfZcnOzkZrays+/PBDODk5AQC2bNmC+fPn47XXXoNEIoFKpcK8efNw5513AgDGjx/Pn19ZWYm1a9ciNDQUAEwqh1QqhUKhgEAgMDpI/cEHH8QLL7xgsG/Dhg3846CgIKxZswZ79uzpMyG5u7tjy5YtEIlECA0Nxdy5c5Gfn08JaSDpb9nqm9vR1qGFTHz7I5SHCweJCKf/FG+V1zXHuXPnkJ6ejqKiItTV1UGn0wHgPtxhYWGYNWsWPvroI0ydOhUVFRUoLCzEX//6VwBAeXk5xGIx7rnnHv56Y8eOhbu7e7/KfubMGURERPDJCADuu+8+6HQ6lJeXY9q0aXjyyScRHx+P3/zmN4iLi0NiYiI/3is1NRVPPfUU/u///g9xcXF4/PHH+cTVX/pE211OTg7eeecdXLhwAU1NTejo6Ljl7KoTJkwwGALi5+eHkydP3lbZbsXu2pDcHCWQiLjqcl2TxsqlsS0CgQCOUrHFN3N7+M6fPx/Xr1/Hjh07UFRUhKKiIgBcAy7A3Qb94x//QHt7O7KzsxEeHo7w8PAB/32ZaufOnSgsLMSUKVOQk5ODkJAQHDlyBADXdvPTTz9h7ty5+Prrr3HXXXfh888/v63X654cAW7W1oULF+Khhx7C/v37cfToUfzhD3/gf1+9ufnWUSAQ8Ml/sNhdQhIIBF2dIxuoHWmouXbtGsrLy7FhwwbMnDkT48ePx40bNwxiHnnkEbS2tiI3NxfZ2dlYuHAhf2zcuHHo6OjA0aNH+X3nz5/vcQ1TjR8/HsePH4dareb3/fDDDxAKhRg3bhy/7+6770ZaWhoKCgoQFhaG7Oxs/lhISAhWr16NL7/8Eo8++ih27tx5y9eVSqXQarUmlbGgoACBgYH4wx/+gEmTJiE4OJhvVLc1dpeQAGAEdY4cstzd3eHp6Ynt27fj/Pnz+Prrr5GammoQ4+TkhISEBGzcuBFnzpwxmEEiNDQUcXFxWL58OYqLi3H06FEsX74cDg4O/RqLpZ/ddPHixTh16hQOHTqE5557DosWLYKPjw8qKiqQlpaGwsJCXLp0CV9++SXOnTuH8ePHo6WlBStXrsThw4dx6dIl/PDDD/jxxx8N2ph6ExQUhKamJuTn56Ourg7Nzc29xgYHB6OyshJ79uzBhQsX8M4779x2LWyw2GdCcqaG7aFKKBRiz549KC0tRVhYGFavXo033nijR9zChQtx/PhxTJ06FaNGjTI49uGHH8LHxwfTpk3DggUL+G+c+po2uTeOjo744osvcP36dUyePBm//e1vMXPmTH5VHkdHR5w9exaPPfYYQkJCsHz5cqxYsQJPP/00RCIRrl27hpSUFISEhCAxMRFz5szBH//4x1u+7pQpU/DMM88gKSkJI0aMwOuvv95r7MMPP4zVq1dj5cqViIyMREFBATZu3Gj2e7UEu5p+RG/95yeRXVSJVTODsfo3IRYooe3RTz9ibKoIe/Prr78iICAAX331FWbOnGnt4gxZff1NmfoZtbtv2YCub9qohmSfvv76azQ1NSE8PBxXr17Fiy++iKCgIEybNs3aRbN79nnLxvfWpkZte9Te3o7169djwoQJWLBgAUaMGMF3kvzoo4/4YRQ3bxMmTLBYGefMmdNrOV555RWLlcPS7LSGRI3a9iw+Ph7x8cb7Wz388MOIiYkxeuxWPagH0t/+9je0tLQYPebh4WGxclianSYkumUjxrm4uNxy/XlLGDlypLWLYBV2fsvWBp1uyLfpEzJs9Cshbd26FUFBQZDL5YiJiUFxcXGf8Xv37kVoaCjkcjnCw8Nx8ODBHjFnzpzBww8/DIVCAScnJ0yePBmVlZX9Kd4teXV+7d+hY6hvoQUSCbEVZieknJwcpKamIiMjA2VlZYiIiEB8fHyvo6ULCgqQnJyMpUuX4ujRo0hISEBCQgJOnTrFx1y4cAH3338/QkNDcfjwYZw4cQIbN24ctK+jpWIh3B259gAa9U+IDWFmio6OZitWrOCfa7Va5u/vzzIzM43GJyYmsrlz5xrsi4mJYU8//TT/PCkpif3ud78ztyg8lUrFADCVSmXyObP+8g0LXLeffVNe0+/XHcpaWlrY6dOnWUtLi7WLQoaJvv6mTP2MmlVD0mg0KC0tRVxcHL9PKBQiLi4OhYWFRs8pLCw0iAe4bzn08TqdDgcOHEBISAji4+Ph7e2NmJiYPucsbmtrQ0NDg8FmLm9afYQQm2NWQqqrq4NWq+VXqdXz8fGBUqk0eo5SqewzvqamBk1NTXj11Vcxe/ZsfPnll1iwYAEeffRRfPPNN0avmZmZCYVCwW8BAQHmvA0ANHyE9N9wnOTfVlj9Wzb9dAaPPPIIVq9ejcjISLz00kuYN28etm3bZvSctLQ0qFQqfquqqjL7dWl9NjKUDfQk/wA3Na5AIEB9ff2AXtccZvVD8vLygkgkQnV1tcH+6upqozPXAYCvr2+f8V5eXhCLxbjrrrsMYsaPH4/vv//e6DVlMhlkMpk5Re+BprIlxPaYVUOSSqWIiooyWC5Fp9MhPz8fsbGxRs+JjY3tsbxKXl4eHy+VSjF58mR+bmC9n3/+GYGBgeYUzyw0la0RjAEateU3muR/wCb5b2trw5o1azBy5Eg4OTkhJiYGhw8f5s+9dOkS5s+fD3d3dzg5OWHChAk4ePAgLl68iBkzZgDgpngRCAR48skn+/X7uB1m99ROTU3F4sWLMWnSJERHRyMrKwtqtRpLliwBwE2gPnLkSGRmZgIAVq1ahenTp2Pz5s2YO3cu9uzZg5KSEmzfvp2/5tq1a5GUlIRp06ZhxowZyM3Nxb///W+DX+RA0/fWrqOE1KW9GXjF3/Kvu/4KIHW6dVwnmuS/90n+V65cidOnT2PPnj3w9/fH559/jtmzZ+PkyZMIDg7GihUroNFo8O2338LJyQmnT5+Gs7MzAgIC8Omnn+Kxxx5DeXk5XF1d4eDg0K/fye0wOyElJSWhtrYW6enpUCqViIyMRG5uLt9wXVlZCaGwq+I1ZcoUZGdnY8OGDVi/fj2Cg4Oxb98+hIWF8TELFizAtm3bkJmZid///vcYN24cPv30U9x///0D8BaNoxrS0EWT/Buf5L+yshI7d+5EZWUl/P25/1jWrFmD3Nxc7Ny5E6+88goqKyvx2GOP8VP6jhkzhj9fP0bO29t7wNunTDZYfRIsqT/9kBpaNCxw3X4WuG4/U7e1D2LpbJPRPiM6HWNtTZbfdDqzyv7zzz+zJ554go0ePZq5uLgwJycnBoAdOHCAMcbYQw89xPdz++WXXxgAduLECcYYY/v27WNisZhptVqDa7q7u7O33nrLpNcHwD7//HPGGGOrV69mDzzwgMHx+vp6BoB98803jDHGnnzySSaTydi8efNYVlYWu3LlCh+bkZHBxGIxmzlzJsvMzGTnz583qQw7d+5kCoXCYN/+/fsZAObk5GSwicVilpiYyBhjbMeOHUwsFrMpU6aw9PR0dvz4cf78Q4cOMQDsxo0bJpXhZhbvhzScOMvE/GoX9E1bJ4GAu3Wy9EaT/A/IJP9NTU0QiUQoLS3FsWPH+O3MmTN4++23AQBPPfUUfvnlFyxatAgnT57EpEmT8O677w7Ye71ddpuQBAIB3bYNQTTJP8fYJP933303tFotampqMHbsWIOt+61dQEAAnnnmGXz22Wd44YUXsGPHDv6aAExePGAw2G1CArpNQ9JACWmooEn+OcYm+Q8JCcHChQuRkpKCzz77DBUVFSguLkZmZiYOHDgAAHj++efxxRdfoKKiAmVlZTh06BD/eoGBgRAIBNi/fz9qa2sNvim0mH7dLNqY/rQhMcbYs38vYYHr9rOd3/8ySCWzXUN5LFteXh4bP348k8lkbOLEiezw4cMG7TqMMXbw4EEGgE2bNq3H+VeuXGFz5sxhMpmMBQYGsuzsbObt7c22bdtm0uvf/FonTpxgM2bMYHK5nHl4eLBly5axxsZGxhhjSqWSJSQkMD8/PyaVSllgYCBLT09nWq2WtbW1sSeeeIIFBAQwqVTK/P392cqVK03+N3nmmWeYp6cnA8AyMjIYY4xpNBqWnp7OgoKCmEQiYX5+fmzBggV8G9rKlSvZnXfeyWQyGRsxYgRbtGgRq6ur46/5pz/9ifn6+jKBQMAWL15sUjn0BqINyS4n+dfL+Ocp7C68hP9+4E68ODt0EEtoe2iS/y40yf/AoEn+b5M3rc9ml2iSf9tl121I1Khtn2iSf9tl1zUkSkj2iSb5t112nZC8XWjEPzFEk/xbF92yAbimbkOHVmfl0ljHMPhOg9iIgfhbsuuE5Okkg1DADTa/ptZYuzgWpb/9aG5utnJJyHCh/1u6nVtbu75lEwkF8HKWoaaxDbWNbfBxtZ+vv0UiEdzc3PhR7o6Ojv3qGEgIYwzNzc2oqamBm5sbRCJRv69l1wkJ4G7bahrbOidqU1i7OBalH07Q36k3COnOzc2t14kaTWX3CcnbRYafYJ8N2wKBAH5+fvD29kZ7O61PR/pPIpHcVs1IjxKSfipbOx7PJhKJBuSPiZDbZdeN2gD1RSLElth9QqL12QixHZSQ+BoSrT5CiLXZfUKiWzZCbIfdJyR9o3ZtYxv1WibEyuw+IelrSG0dOjS0dli5NITYt34lpK1btyIoKAhyuRwxMTEoLi7uM37v3r0IDQ2FXC5HeHg4Dh48aHD8ySef5Be802+zZ8/uT9HMJpeI4CLnej/UUjsSIVZldkLKyclBamoqMjIyUFZWhoiICMTHx/fa27egoADJyclYunQpjh49ioSEBCQkJODUqVMGcbNnz8bVq1f57eOPP+7fO+oHb2pHIsQmmJ2Q/vKXv2DZsmVYsmQJ7rrrLmzbtg2Ojo744IMPjMa//fbbmD17NtauXYvx48fj5Zdfxj333IMtW7YYxMlkMvj6+vKbu7t7r2Voa2tDQ0ODwXY7RtA0JITYBLMSkkajQWlpKeLi4rouIBQiLi4OhYWFRs8pLCw0iAe4CbJujj98+DC8vb0xbtw4PPvss7h27Vqv5cjMzIRCoeC3gIAAc95GD90btgkh1mNWQqqrq4NWq+WXzdbz8fGBUqk0eo5Sqbxl/OzZs/Hhhx8iPz8fr732Gr755hvMmTOn1/Wh0tLSoFKp+K2qqsqct9ED3bIRYhtsYizbE088wT8ODw/HxIkTceedd+Lw4cNGV4GQyWSQyWQD9vp8X6QGatQmxJrMqiF5eXlBJBKhurraYH91dXWv0w74+vqaFQ8AY8aMgZeXF86fP29O8fqNHz7SRDUkQqzJrIQklUoRFRWF/Px8fp9Op0N+fj5iY2ONnhMbG2sQDwB5eXm9xgPcOlnXrl2Dn5+fOcXrNxrxT4htMPtbttTUVOzYsQO7d+/GmTNn8Oyzz0KtVmPJkiUAgJSUFKSlpfHxq1atQm5uLjZv3oyzZ89i06ZNKCkpwcqVKwEATU1NWLt2LY4cOYKLFy8iPz8fjzzyCMaOHdvryhADjYaPEGIbzG5DSkpKQm1tLdLT06FUKhEZGYnc3Fy+4bqyshJCYVeemzJlCrKzs7FhwwasX78ewcHB2LdvH8LCwgBwc/GcOHECu3fvRn19Pfz9/TFr1iy8/PLLA9pO1Bd9o7aqpR1tHVrIxDQ3ECHWYNdLaesxxjBuQy40Wh2+XzcDd7g7DkIpCbFfpn5G7X4sG8BN5Uq3bYRYHyWkTtRbmxDro4TUiWpIhFgfJaROtKw2IdZHCalT13g26q1NiLVQQurUNXyEakiEWAslpE78LRsNHyHEaighddKPZ6MaEiHWQwmpk/6Wra6pDTrdkO8rSsiQRAmpk5czl5A6dAw3mjVWLg0h9okSUieJSAgPJykA6otEiLVQQuqG+iIRYl2UkLqh3tqEWBclpG66EhJ1jiTEGighdUOrjxBiXZSQuqHVRwixLkpI3fBTkFDnSEKsghJSNzR8hBDrooTUDa3PRoh1UULqxtuVa9RWa7RQt3VYuTSE2J9+JaStW7ciKCgIcrkcMTExKC4u7jN+7969CA0NhVwuR3h4OA4ePNhr7DPPPAOBQICsrKz+FO22OMvEcJRyK47QN22EWJ7ZCSknJwepqanIyMhAWVkZIiIiEB8fj5qaGqPxBQUFSE5OxtKlS3H06FEkJCQgISEBp06d6hH7+eef48iRI/D39zf/nQwQ6hxJiPWYnZD+8pe/YNmyZViyZAnuuusubNu2DY6Ojvjggw+Mxr/99tuYPXs21q5di/Hjx+Pll1/GPffcgy1bthjEXb58Gc899xw++ugjSCSS/r2bAUDDRwixHrMSkkajQWlpKeLi4rouIBQiLi4OhYWFRs8pLCw0iAeA+Ph4g3idTodFixZh7dq1mDBhwi3L0dbWhoaGBoNtoPDLalNvbUIszqyEVFdXB61Wy69Sq+fj4wOlUmn0HKVSecv41157DWKxGL///e9NKkdmZiYUCgW/BQQEmPM2+kS3bIRYj9W/ZSstLcXbb7+NXbt2QSAQmHROWloaVCoVv1VVVQ1YeWh9NkKsx6yE5OXlBZFIhOrqaoP91dXV8PX1NXqOr69vn/HfffcdampqMGrUKIjFYojFYly6dAkvvPACgoKCjF5TJpPB1dXVYBsoNHyEEOsxKyFJpVJERUUhPz+f36fT6ZCfn4/Y2Fij58TGxhrEA0BeXh4fv2jRIpw4cQLHjh3jN39/f6xduxZffPGFue/ntlHnSEKsR2zuCampqVi8eDEmTZqE6OhoZGVlQa1WY8mSJQCAlJQUjBw5EpmZmQCAVatWYfr06di8eTPmzp2LPXv2oKSkBNu3bwcAeHp6wtPT0+A1JBIJfH19MW7cuNt9f2bTN2rX0fARQizO7ISUlJSE2tpapKenQ6lUIjIyErm5uXzDdWVlJYTCrorXlClTkJ2djQ0bNmD9+vUIDg7Gvn37EBYWNnDvYgDpa0jX1Bp0aHUQi6zezEaI3RAwxob8EhsNDQ1QKBRQqVS33Z6k0zEEb/gPtDqGI2kz4auQD1ApCbFfpn5G6b//mwiFAng5c5P90zdthFgWJSQjaCpbQqyDEpIRNJUtIdZBCckI6otEiHVQQjKCbtkIsQ5KSEbQiH9CrIMSkhEj+BH/lJAIsSRKSEZ0DR+hhESIJVFCMqL76iPDoN8oIUMGJSQj9DUkTYcODS002T8hlkIJyQi5RARXOTfMr7aJvmkjxFIoIfVCvyQStSMRYjmUkHoxwpk6RxJiaZSQeuHtSn2RCLE0Ski98Kbe2oRYHCWkXtDqI4RYHiWkXtCIf0IsjxJSL2jEPyGWRwmpF7T6CCGWRwmpF/pbtobWDrS2a61cGkLsAyWkXrg6iCEVc78eakcixDL6lZC2bt2KoKAgyOVyxMTEoLi4uM/4vXv3IjQ0FHK5HOHh4Th48KDB8U2bNiE0NBROTk5wd3dHXFwcioqK+lO0ASMQCPjOkbW0RhshFmF2QsrJyUFqaioyMjJQVlaGiIgIxMfHo6amxmh8QUEBkpOTsXTpUhw9ehQJCQlISEjAqVOn+JiQkBBs2bIFJ0+exPfff4+goCDMmjULtbW1/X9nA0DfOZKGjxBiIcxM0dHRbMWKFfxzrVbL/P39WWZmptH4xMRENnfuXIN9MTEx7Omnn+71NVQqFQPAvvrqK6PHW1tbmUql4reqqioGgKlUKnPfTp+W7f6RBa7bzz4sqBjQ6xJib/Sf6Vt9Rs2qIWk0GpSWliIuLo7fJxQKERcXh8LCQqPnFBYWGsQDQHx8fK/xGo0G27dvh0KhQEREhNGYzMxMKBQKfgsICDDnbZiMho8QYllmJaS6ujpotVp+2Ww9Hx8fKJVKo+colUqT4vfv3w9nZ2fI5XK89dZbyMvLg5eXl9FrpqWlQaVS8VtVVZU5b8Nk3jSVLSEWJbZ2AfRmzJiBY8eOoa6uDjt27EBiYiKKiorg7e3dI1Ymk0Emkw16mWj4CCGWZVYNycvLCyKRCNXV1Qb7q6ur4evra/QcX19fk+KdnJwwduxY3HvvvXj//fchFovx/vvvm1O8AUerjxBiWWYlJKlUiqioKOTn5/P7dDod8vPzERsba/Sc2NhYg3gAyMvL6zW++3Xb2qybCLpu2ai3NiGWYPYtW2pqKhYvXoxJkyYhOjoaWVlZUKvVWLJkCQAgJSUFI0eORGZmJgBg1apVmD59OjZv3oy5c+diz549KCkpwfbt2wEAarUa//M//4OHH34Yfn5+qKurw9atW3H58mU8/vjjA/hWzae/Zatr0kCnYxAKBVYtDyHDndkJKSkpCbW1tUhPT4dSqURkZCRyc3P5huvKykoIhV0VrylTpiA7OxsbNmzA+vXrERwcjH379iEsLAwAIBKJcPbsWezevRt1dXXw9PTE5MmT8d1332HChAkD9Db7x9NZCoEA0OoYrjdr4OU8+O1WhNgzAWNDf52fhoYGKBQKqFQquLq6Dui1o17OwzW1Bgd/PxV3+Q/stQmxF6Z+Rmks2y2McKHhI4RYCiWkW+hafYQatgkZbJSQboFWHyHEcigh3QINHyHEcigh3QJ1jiTEcigh3cIIWg6JEIuhhHQLtPoIIZZDCekWaIAtIZZDCekW9G1IzRot1G0dVi4NIcMbJaRbcJKJ4SQVAaBaEiGDjRKSCWiNNkIsgxKSCfiGbRo+QsigooRkghG0+gghFkEJyQQ0fIQQy6CEZAIaPkKIZVBCMgFNZUuIZVBCMsEIGs9GiEVQQjIBDbAlxDLsMyGZOWuvvoZ0Ta1Bu1Y3GCUihMDeElJTLXBgDfDBbLOSkoejFOLOFUeuNWkGq3SE2L1+JaStW7ciKCgIcrkcMTExKC4u7jN+7969CA0NhVwuR3h4OA4ePMgfa29vx7p16xAeHg4nJyf4+/sjJSUFV65c6U/R+iaWAsc+AqqOAFVFJp8mFAr4FUeoYZuQwWN2QsrJyUFqaioyMjJQVlaGiIgIxMfHo6amxmh8QUEBkpOTsXTpUhw9ehQJCQlISEjAqVOnAADNzc0oKyvDxo0bUVZWhs8++wzl5eV4+OGHb++dGSNXAGGPco9LPjDr1K7hI9SORMigYWaKjo5mK1as4J9rtVrm7+/PMjMzjcYnJiayuXPnGuyLiYlhTz/9dK+vUVxczACwS5cumVQmlUrFADCVSnXr4F9LGMtwZexPIxhrqjPp+owx9l87i1nguv0su8i0MhFCupj6GTWrhqTRaFBaWoq4uDh+n1AoRFxcHAoLC42eU1hYaBAPAPHx8b3GA4BKpYJAIICbm5vR421tbWhoaDDYTOZ/D+AXAWjbgOPZJp/mTcNHCBl0ZiWkuro6aLVafpVaPR8fHyiVSqPnKJVKs+JbW1uxbt06JCcn97qgXGZmJhQKBb8FBASY/iYEAmDSf3GPS3YCOtO+NRtBbUiEDDqb+patvb0diYmJYIzhvffe6zUuLS0NKpWK36qqqsx7obDfAlIX4PoF4OK3Jp0ywpWmsiVksJmVkLy8vCASiVBdXW2wv7q6Gr6+vkbP8fX1NSlen4wuXbqEvLy8PpfblclkcHV1NdjMInMGIpK4xyU7TTrFm6ayJWTQmZWQpFIpoqKikJ+fz+/T6XTIz89HbGys0XNiY2MN4gEgLy/PIF6fjM6dO4evvvoKnp6e5hSrf6KWcD/P7gcaq/uOBQ0fIcQSzL5lS01NxY4dO7B7926cOXMGzz77LNRqNZYs4T7gKSkpSEtL4+NXrVqF3NxcbN68GWfPnsWmTZtQUlKClStXAuCS0W9/+1uUlJTgo48+glarhVKphFKphEYziJ0QfcOAgBhA1wEc/b9bhncfPsLM7OlNCDGN2NwTkpKSUFtbi/T0dCiVSkRGRiI3N5dvuK6srIRQ2JXnpkyZguzsbGzYsAHr169HcHAw9u3bh7CwMADA5cuX8a9//QsAEBkZafBahw4dwgMPPNDPt2aCqCVcB8nS3cD9qwGhqNdQfcdIjVYHVUs73Bylg1cuQuyUgA2D/+4bGhqgUCigUqnMa09qbwE2hwKt9cD/2wuEzOozPOKPX0LV0o681dMQ7ONye4UmxI6Y+hm1qW/ZLE7iAEQu5B6b0HObGrYJGVz2nZAAYFJn4/a5L4D6vrsP0LLahAwuSkhewUDQVIDpgLIP+wyleZEIGVyUkICunttlHwLa9l7DvDs7R9LwEUIGByUkAAidBziNAJqUwM+5vYbR6iOEDC5KSAA3T9Ldv+Me99G4TauPEDK4KCHp3bMYgAC48DVw/RejIdSoTcjgooSk5zEaGDuTe1y6y2gINWoTMrgoIXWnb9w++nego2fSGdG5PltDawda27WWLBkhdoESUnfB8YCLP9B8DTjz7x6HXeViSMXcr4xqSYQMPEpI3YnEQNRi7rGRxm2BQEC9tQkZRJSQbnZPCiAQAZd+AGrLexz26eyLdLTyhqVLRsiwRwnpZq7+wLg53GMjk7fNn+gHANj85c+oqFNbsmSEDHuUkIzRT952PBvQNBscSokNQuwYT7S0a7E65xg6aCVbQgYMJSRj7nwQcBsFtKqAnz43OCQUCrA5MQIucjGOVdVj66ELViokIcMPJSRjhMKuWpKRxm1/Nwf8OYGbYO6dr8/hWFW9BQtHyPBFCak3d/8OEEqAyyXA1eM9Dj8c4Y95E/2g1TGszjmGZk2HFQpJyPBCCak3zt7A+PncYyON2wKBAP+TEA5fVzkq6tR45eAZCxeQkOGHElJf9D23T+4F2hp7HFY4SrA5MQIA8PcjlTh0tsaSpSNk2KGE1Jeg+wHPYEDTxCUlI+4b64X/um80AGDtP07gWhN1mCSkvygh9aX7sts/fgD0sh7Ci7PHIdjbGXVNbUj77CQtk0RIP/UrIW3duhVBQUGQy+WIiYlBcXFxn/F79+5FaGgo5HI5wsPDcfDgQYPjn332GWbNmgVPT08IBAIcO3asP8UaHBFPACIZUH0SuFxqNEQuESHriUhIRAJ8eboae0t/tXAhCRkezE5IOTk5SE1NRUZGBsrKyhAREYH4+HjU1BhvPykoKEBycjKWLl2Ko0ePIiEhAQkJCTh16hQfo1arcf/99+O1117r/zsZLI4eQNij3OM+Jm+b4K9A6m/GAQD++K+fUHmtuddYQohxZq/LFhMTg8mTJ2PLli0AuKW0AwIC8Nxzz+Gll17qEZ+UlAS1Wo39+/fz++69915ERkZi27ZtBrEXL17E6NGjcfTo0R6LRnbX1taGtrautpqGhgYEBASYvy6bqaqKgfd/A4jlwAtnAQd3o2FaHUPy9iMovngdkwLdkfN0LERCwcCXh5AhZlDWZdNoNCgtLUVcXFzXBYRCxMXFobCw0Og5hYWFBvEAEB8f32u8KTIzM6FQKPgtICCg39cyyR2TAZ8woKMVOL6n1zBRZy9uZ5kYJZduYNs31IubEHOYlZDq6uqg1Wr5ZbP1fHx8oFQqjZ6jVCrNijdFWloaVCoVv1VV9b2e2m0TCLrWbyvpvXEbAAI8HLHp4QkAgLfyfsapy6rBLRshw8iQ/JZNJpPB1dXVYBt04YmAxAmo+5mbmqQPj90zErMn+KJDx/B8zjGaXZIQE5mVkLy8vCASiVBdXW2wv7q6Gr6+vkbP8fX1NSveZsldgYmPc4+N9NzuTiAQ4JVHwzHCRYbzNU149T9nLVBAQoY+sxKSVCpFVFQU8vPz+X06nQ75+fmIjY01ek5sbKxBPADk5eX1Gm/T9H2STv8TUF3uM9TDSYo3fjsRALCr4CK+O1c72KUjZMgz+5YtNTUVO3bswO7du3HmzBk8++yzUKvVWLKEa2NJSUlBWloaH79q1Srk5uZi8+bNOHv2LDZt2oSSkhKsXLmSj7l+/TqOHTuG06dPAwDKy8tx7Nix22pnGhR+EcDISYCuHfggHlCe7DP8gXHeWHRvIABgzd7jqG/WWKKUhAxdrB/effddNmrUKCaVSll0dDQ7cuQIf2z69Ols8eLFBvGffPIJCwkJYVKplE2YMIEdOHDA4PjOnTsZgB5bRkaGSeVRqVQMAFOpVP15O+apO8/Y23czluHK2J/9GDv97z7Dm9s62Iw3D7HAdfvZf/+9lOl0usEvIyE2xtTPqNn9kGyRqX0cBkzLDWDvk8Avh7nnD24Apq7hvo0z4sSv9Xj0fwvQoWN4KykCC+6+Y/DLSIgNGZR+SKSTgzuw8FMg5hnu+dd/Bj5dCrS3GA2feIcbfj8zGACQvu8n/HqDenETYgwlpP4SiYE5rwHzsgChGDj1KbBzDtBwxWj4fz9wJ+4e5YbGtg688MlxaHVDvmJKyICjhHS7Ji0BUv4JOHgAV44C22cYHYQrFgnxVmIkHKUiFFVcx7IPS1BGSykRYoAS0kAIuh9Y9jUwYjzQpAR2PgSc/EfPMC8nvPxIGAQC4OuzNXj0fwuQ+NdCHDpbQ1OWEIJ+DK61RRZv1O5NawPw2TLg51zu+dQXgBkbuEUDujlX3Yi/fvsL/nnsMtq13K9/nI8Lnp4+BvMj/CER0f8TZHgx9TNKCWmg6bRA/p+AH7K45+PmAo9uB2TOPUKvqlrwwfcVyC6qhFrDDS/xV8ixdOoYPDE5AE4ysQULTsjgoYRkbcf3AP96DtBquJkCnsgG3AONhqpa2vH3I5ew84eLqOucAlfhIEFKbCAWTwmCl7PMkiUnZMBRQrIFVT8Ce/4foK4BHD2BpI+AwN6HzLS2a/FZ2WXs+O4XfplumViIxyfdgWVTxyDQ08lSJSdkQFFCshWqX4GPkwHlCW6dt3l/Ae5J6fMUrY7hy5+U2PbNBRz/lZu+RCgA5oT74ZlpdyL8DoUlSk7IgKGEZEs0amDfs9ygXAC497+5nt2OHr327gYAxhiO/HIdf/32Ag6Xdw3OvW+sJx6PCsDk0R4Y6eYw2KXvSdMMNF4F3IMAocjyr0+GHEpItkanA759HTic2bVPpgA8RgMeY7r9HAO4jwZcfA2S1ZmrDdj+7S/41/ErBp0q/RVyTArywOQgd0wK8kCIj8vAT5ur0wHVp4ALX3NbZSHXNiZ1Bu6YBATEAAHR3Myacqq9kZ4oIdmqn/YBX2UANy72HSdx5BKTx2iDZHVV5IcPf+pAwS83cOpKQ48e3y5yMaIC3TE5yAOTAt0REeAGuaQftZhGJXDhEJeAfjkEqG+aPkUo4WY9MCAAvMdzySkghts8xvRZCyT2gRKSrWtvAW5cAq7/wm03Kroe11cBrI9ZJkVSwG0UtIpA1Ij9ca7dE2UNCnxT64RyjReaIedDJSIBwkcquAQV5IGoQHd4OEmNl+dSQWct6BBQ85PhcYkTMHoqcOeD3OYxBqg5A1QVcYsgVBVx7+Fmjl5dNaiAGMA/EpBY4TaTWBUlpKFM2w7UVwLXK3omrBsXudulPrRIPXBV6Iuf2zxR3u6FKuaNSp03LjEf1MANd3q7YryvC0IElxDeWoqxDT/CT1UGka7rugwC6HwjIBw7E4KxDwJ3RANiI4msu6aaruRUVcQNpbm5rEIJN69UQDQwIrTrNtXFr0cHUjJAGOP+prRt3M+ONu7fRasBZC5c88Ago4Q0XOm0QMNlLjHpt+sVXY9brvd5ehuToIqNgKugGd6CeoNjV5gHvtNOxHe6cPygm4AbcIVQALg6SOAql0Dh0G1zlMDLSYoRLjJ4Ocvg1flzhIsMTlIRBAIB94d/9XhXgqos4rpAGCOWd96ijulxmwrXO7jBzPZKp+VuoVVVXO1ZVcn9h6X6lRsdoE8uWg3QoX/cLfn0uLW+iftorvYbNJUbBuXqP+BvgRKSvWpVGSar7glLVQXoOvjQdqEcvzjfg5/kUSgVR+Jshx9UrR1QtbRD1dIOTYeuX0WQS4RcknLuSlIjnKXwcpYiQFiHUeqT8FKdhFPTJYjqKyC4canvW1ShhOtU6t4tSXmMAcQy7lazXd35swVob+a+BWxv7nquf6zpHsf184LMlWuIlys6H7t22+fatU+u4L6E0O+TyHsvr7k6NNx/MqoqLtHUV3U9VlVx0yXfKqmYQyDibvvFUqCtEWA3/Tt7jOlMTvoE5XfbL0kJifSk7eisXVVwf5Ajo7gPdS9a27Vo6ExO+q2htR2q5nbcaG5HXVNb56ZBXVMbahvb0Kwxb4UVqVgIXycRQh1VCJHUYoyoBncwJXw6LsO99Vc4N/8Koc4Gp/4VSblvGYViQCDkNqGIa8DXPxcIuQ9/9+fCbo8Z42o+jVfBTZLaB6GYq7koRgFuAYDbKEARwM3NpU8uIim37LtIwv27iiSdz6Xd9kkNu2q0NgCVR4CL3wIXv+dqtDcnKM+xXGLSJ6h+3OJRQiJW0azpQF2jBrWdyaq2sa0rcTV2Jq6mNtQ1tvHj9/oihA6+uI5AYTWCBNUYJ63FnaIajIISEiEDEzsAEkcIpY4QyZ0gkTtB6uAEuaMrRFJHrgFd6sT9lDh2bp2PAaCtgatVtqo6Hzf0/ritcxsMYjmXYNwCun66BXY9dvGzTJ+vVhVwqRC4+F1Xgro5WXoGdyaoziTl4mP0Ut1RQiI2r0WjRV1TG66pNahrbMM1dVdt69pNP683a/pan9MohYOks41LanD76OXMtX0pHCSQiIT8JhUJIRYJ+McSMfdYLBRwbWIA157T1tiZnJq42gS/ablaj8E+HXRaLXQ6btNqdZ2PdWBMB6GLD+ReQRC7eNtm94iWeq7f2cXvgYpvOxe2uOkfYtqLwIN/6PMypn5G7bilkFibg1SEAA9HBHg43jJWq2O4rtbgmrorSXG1L02Pmti1Jg06dIy/zTzfSzu6OSSdiaprE0AkFECnY9AyBq2O2zp0XY+1nceMJ1IBABGAOgB1kIgEcJCI4CAVwVEqhlwigqNUxO9z6Hx+836RUMDlQICfU0v/egys27Gu5+iM1T8WiQQQCbj3IxIKIBYKINT/FAggFoVD6DMRYr+VkHWo4HWtDB61RXCvKYJz/VnccBoDj9v/FQPoZ0LaunUr3njjDSiVSkRERODdd99FdHR0r/F79+7Fxo0bcfHiRQQHB+O1117DQw89xB9njCEjIwM7duxAfX097rvvPrz33nsIDg7uT/HIMCQSCrjGcZdbz3yg60xG+tvD7omrrrGr3auhtR0dWgaNVod2rQ7tHTq0dz6/WbuWoV2rBTA4qxBz1+9AQ2sHgLZBeY2BowAwC8AsKNCEVc1h+K8BurLZCSknJwepqanYtm0bYmJikJWVhfj4eJSXl8Pb27tHfEFBAZKTk5GZmYl58+YhOzsbCQkJKCsrQ1hYGADg9ddfxzvvvIPdu3dj9OjR2LhxI+Lj43H69GnI5QP4bQaxC0KhAO5OUrg7SRHs42L2+ayzxtPePVlpdWjv6HreoWVo1+n4moW4Wy1DLBRCKITBz+61D5GQixUIAI1WhxaNFi3tWjRrtPzjFg33vFW/v12LFk0HH6ffr9UxCAQCCNDZng7wz9F5ByiAoNuxbs87j+trdjr9T8bQoe38eXON76YaoVbnAjfFAA4XMnd9pejoaLZixQr+uVarZf7+/iwzM9NofGJiIps7d67BvpiYGPb0008zxhjT6XTM19eXvfHGG/zx+vp6JpPJ2Mcff2xSmSy6LhshxGymfkbN6hqr0WhQWlqKuLg4fp9QKERcXBwKCwuNnlNYWGgQDwDx8fF8fEVFBZRKpUGMQqFATExMr9dsa2tDQ0ODwUYIGfrMSkh1dXXQarXw8TH8ms/Hx6fXZa+VSmWf8fqf5lwzMzMTCoWC3wICAsx5G4QQGzUkBw+lpaVBpVLxW1VVlbWLRAgZAGYlJC8vL4hEIlRXVxvsr66uhq+v8d6bvr6+fcbrf5pzTZlMBldXV4ONEDL0mZWQpFIpoqKikJ+fz+/T6XTIz89HbKzxuaJjY2MN4gEgLy+Pjx89ejR8fX0NYhoaGlBUVNTrNQkhw5S5reV79uxhMpmM7dq1i50+fZotX76cubm5MaVSyRhjbNGiReyll17i43/44QcmFovZm2++yc6cOcMyMjKYRCJhJ0+e5GNeffVV5ubmxv75z3+yEydOsEceeYSNHj2atbS0DGgLPiHEOkz9jJqdkBhj7N1332WjRo1iUqmURUdHsyNHjvDHpk+fzhYvXmwQ/8knn7CQkBAmlUrZhAkT2IEDBwyO63Q6tnHjRubj48NkMhmbOXMmKy8vN7k8lJAIsW2mfkaHxVg2lUoFNzc3VFVVUXsSITaooaEBAQEBqK+vh6KPjpTDYixbY2MjANDX/4TYuMbGxj4T0rCoIel0Oly5cgUuLi5do7J7oc/UVJvqP/odDgx7+j0yxtDY2Ah/f38I+5iqeFjUkIRCIe644w6zzqHuArePfocDw15+j33VjPSGZMdIQsjwRAmJEGIz7C4hyWQyZGRkQCa79bw6xDj6HQ4M+j32NCwatQkhw4Pd1ZAIIbaLEhIhxGZQQiKE2AxKSIQQm0EJiRBiM+wuIW3duhVBQUGQy+WIiYlBcXGxtYs0ZGzatIlb0aLbFhoaau1i2bRvv/0W8+fPh7+/PwQCAfbt22dwnDGG9PR0+Pn5wcHBAXFxcTh37px1CmsD7Coh6ZdwysjIQFlZGSIiIhAfH4+amgFYSdBOTJgwAVevXuW377//3tpFsmlqtRoRERHYunWr0eP6JcC2bduGoqIiODk5IT4+Hq2trRYuqY0Y5GlQbIq5SzgRQxkZGSwiIsLaxRiyALDPP/+cfz4QS4ANN3ZTQ+rPEk6kp3PnzsHf3x9jxozBwoULUVlZae0iDVn9WQJsuLObhNSfJZyIoZiYGOzatQu5ubl47733UFFRgalTp/LzURHz9GcJsOFuWEw/Qixjzpw5/OOJEyciJiYGgYGB+OSTT7B06VIrlowMF3ZTQ+rPEk6kb25ubggJCcH58+etXZQhqT9LgA13dpOQ+rOEE+lbU1MTLly4AD8/P2sXZUiiJcB6sqtbttTUVCxevBiTJk1CdHQ0srKyoFarsWTJEmsXbUhYs2YN5s+fj8DAQFy5cgUZGRkQiURITk62dtFsVlNTk0ENsqKiAseOHYOHhwdGjRqF559/Hn/+858RHByM0aNHY+PGjfD390dCQoL1Cm1N1v6az9L6WsKJ9C0pKYn5+fkxqVTKRo4cyZKSktj58+etXSybdujQIQagx6ZfKux2lwAbbmg+JEKIzbCbNiRCiO2jhEQIsRmUkAghNoMSEiHEZlBCIoTYDEpIhBCbQQmJEGIzKCERQmwGJSRCiM2ghEQIsRmUkAghNuP/A3DydqqwcDtnAAAAAElFTkSuQmCC", + "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-26T11:15:05.997071Z", + "iopub.status.busy": "2024-03-26T11:15:05.996771Z", + "iopub.status.idle": "2024-03-26T11:16:13.043881Z", + "shell.execute_reply": "2024-03-26T11:16:13.042850Z" + }, + "papermill": { + "duration": 67.067842, + "end_time": "2024-03-26T11:16:13.046438", + "exception": false, + "start_time": "2024-03-26T11:15:05.978596", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "\n", + "from ml_utility_loss.loss_learning.estimator.pipeline import eval\n", + "#eval_loss = loss[\"eval_loss\"]\n", + "\n", + "batch_size = params[\"batch_size_low\"] if \"batch_size_low\" in params else params[\"batch_size\"]\n", + "\n", + "eval_loss = eval(\n", + " test_set, model,\n", + " batch_size=batch_size,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "187137f6", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-26T11:16:13.082681Z", + "iopub.status.busy": "2024-03-26T11:16:13.081974Z", + "iopub.status.idle": "2024-03-26T11:16:13.101589Z", + "shell.execute_reply": "2024-03-26T11:16:13.100780Z" + }, + "papermill": { + "duration": 0.039573, + "end_time": "2024-03-26T11:16:13.103438", + "exception": false, + "start_time": "2024-03-26T11:16:13.063865", + "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.0001080.0091440.0008850.6177120.29008711.9302590.6675140.0000033.0843450.0199260.7107430.0297470.1596080.00073.702057
\n", + "
" + ], + "text/plain": [ + " avg_g_cos_loss avg_g_mag_loss avg_loss grad_duration \\\n", + "realtabformer 0.000108 0.009144 0.000885 0.617712 \n", + "\n", + " grad_mae grad_mape grad_rmse mean_pred_loss pred_duration \\\n", + "realtabformer 0.290087 11.930259 0.667514 0.000003 3.084345 \n", + "\n", + " pred_mae pred_mape pred_rmse pred_std std_loss \\\n", + "realtabformer 0.019926 0.710743 0.029747 0.159608 0.0007 \n", + "\n", + " total_duration \n", + "realtabformer 3.702057 " + ] + }, + "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-26T11:16:13.136958Z", + "iopub.status.busy": "2024-03-26T11:16:13.136709Z", + "iopub.status.idle": "2024-03-26T11:16:13.589301Z", + "shell.execute_reply": "2024-03-26T11:16:13.588523Z" + }, + "papermill": { + "duration": 0.471922, + "end_time": "2024-03-26T11:16:13.591519", + "exception": false, + "start_time": "2024-03-26T11:16:13.119597", + "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-26T11:16:13.628282Z", + "iopub.status.busy": "2024-03-26T11:16:13.627460Z", + "iopub.status.idle": "2024-03-26T11:17:29.370436Z", + "shell.execute_reply": "2024-03-26T11:17:29.369622Z" + }, + "papermill": { + "duration": 75.764203, + "end_time": "2024-03-26T11:17:29.373160", + "exception": false, + "start_time": "2024-03-26T11:16:13.608957", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../insurance/_cache_aug_test/realtabformer/all inf False\n", + "Caching in ../../../../insurance/_cache_bs_test/realtabformer/all inf False\n", + "Caching in ../../../../insurance/_cache_synth_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-03-26T11:17:29.411080Z", + "iopub.status.busy": "2024-03-26T11:17:29.410326Z", + "iopub.status.idle": "2024-03-26T11:17:29.429696Z", + "shell.execute_reply": "2024-03-26T11:17:29.428989Z" + }, + "papermill": { + "duration": 0.040759, + "end_time": "2024-03-26T11:17:29.431670", + "exception": false, + "start_time": "2024-03-26T11:17:29.390911", + "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-26T11:17:29.465417Z", + "iopub.status.busy": "2024-03-26T11:17:29.465089Z", + "iopub.status.idle": "2024-03-26T11:17:29.470361Z", + "shell.execute_reply": "2024-03-26T11:17:29.469524Z" + }, + "papermill": { + "duration": 0.024307, + "end_time": "2024-03-26T11:17:29.472225", + "exception": false, + "start_time": "2024-03-26T11:17:29.447918", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'realtabformer': 0.03380099051670792}\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-26T11:17:29.505989Z", + "iopub.status.busy": "2024-03-26T11:17:29.505726Z", + "iopub.status.idle": "2024-03-26T11:17:29.905422Z", + "shell.execute_reply": "2024-03-26T11:17:29.904515Z" + }, + "papermill": { + "duration": 0.418994, + "end_time": "2024-03-26T11:17:29.907391", + "exception": false, + "start_time": "2024-03-26T11:17:29.488397", + "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-26T11:17:29.944342Z", + "iopub.status.busy": "2024-03-26T11:17:29.944053Z", + "iopub.status.idle": "2024-03-26T11:17:30.290546Z", + "shell.execute_reply": "2024-03-26T11:17:30.289644Z" + }, + "papermill": { + "duration": 0.367556, + "end_time": "2024-03-26T11:17:30.292775", + "exception": false, + "start_time": "2024-03-26T11:17:29.925219", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAASIAAAEmCAYAAADGL52gAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA+EElEQVR4nO3deXxU1d348c+9s2ZIMkkgIQlJCMii7ChCcQOVimCtaKtWbQVRu2Fb5aFF+nuKorXYujzyqA+1toC+qtJF1LYu1OJCpYII4sYmkUAgCYHsyez33t8fkxkyZJtMlsmQ7/v1mhfJzJ073yGZb84595zvUQzDMBBCiDhS4x2AEEJIIhJCxJ0kIiFE3EkiEkLEnSQiIUTcSSISQsSdJCIhRNxJIhJCxJ053gF0ha7rlJaWkpKSgqIo8Q5HCHEKwzCor68nNzcXVW273ZPQiai0tJT8/Px4hyGE6EBJSQl5eXltPp7QiSglJQUIvsnU1NQ4RyOEOFVdXR35+fnhz2pb4p6Ijh49ytKlS3n99ddxuVyMGDGCtWvXMmXKlA6fG+qOpaamSiISog/raOgkromourqa888/n4svvpjXX3+dzMxMvvjiC9LT0+MZlhCil8U1Ef36178mPz+ftWvXhu8bNmxYHCMSQsRDXC/f/+1vf2PKlClce+21ZGVlMXnyZJ5++uk2j/d6vdTV1UXchBCJL64toi+//JLVq1ezePFifv7zn7N9+3Z+/OMfY7VamT9/fovjV65cyYoVKzr1GoZhEAgE0DStu8IW/YjFYsFkMsU7jNOeEs/CaFarlSlTpvCf//wnfN+Pf/xjtm/fzvvvv9/ieK/Xi9frDX8fGpGvra1tdbDa5/NRVlaGy+XqmTcgTnuKopCXl0dycnK8Q0lIdXV1OJ3ONj+jIXFtEeXk5DBmzJiI+8466yxefPHFVo+32WzYbLaozq3rOgcPHsRkMpGbm4vVapVJj6JTDMPg+PHjHDlyhJEjR0rLqAfFNRGdf/757Nu3L+K+/fv3M3To0C6f2+fzoes6+fn5OByOLp9P9E+ZmZkUFxfj9/s7lYiqG32kD7D2YGSnl7gOVt91111s3bqVX/3qVxw4cIDnn3+e3/3udyxatKjbXqO9aeVCdKSzrWjDMPiwuIo/f1iCrks5+GjF9VN67rnn8tJLL/HCCy8wbtw47r//fh577DFuuummeIYlRMwMA7YdrMLl06hy+eIdTsKI+8zqr33ta3zta1+LdxhCdAtVVchMsXG02s2xOg+DkqMb0+zvpN/STxQXF6MoCrt27eqV82zZsoXx48djsViYN29el14zUXxeWsvaLQc5Wu0GoMblj3NEiUMSUT/1zjvvoCgKNTU1PXL+xYsXM2nSJA4ePMi6det65DX6mhqXPyL51LklEUVLElEC8PkSb6yhqKiISy65hLy8PNLS0mI6R2++79DE164IJZ4hyWDRXNR5JBFFq18mIl9Ab/MW0PSoj/VHcWwsZs6cyR133MGdd97JoEGDmD17Np999hlz5swhOTmZwYMH853vfIcTJ06En/PGG29wwQUXkJaWxsCBA/na175GUVFRq+cvLi7m4osvBiA9PR1FUViwYEGnzrN3717OO+887HY748aN49133w2fW1EUKisrWbhwIYqihFtE7777LlOnTsVms5GTk8Pdd98d8eFv7X2HWm4bN25k8uTJJCUlcckll1BRUcHrr7/OWWedRWpqKjfeeGPExFVd11m5ciXDhg0jKSmJiRMn8te//jX8eOi8r7/+Oueccw42m4333nsvpp9XSJ3Hj0n3ck7Fi0wuXY9eW9ql8/UncR+sjocn3z7Q5mPDBg1g3uQh4e9/t7kIv9b6Zdi89CSunXKyMNuaLQdx+yKXktz11VExxfjMM8/wgx/8gC1btlBTU8Mll1zCbbfdxv/8z//gdrtZunQp1113HW+99RYAjY2NLF68mAkTJtDQ0MDy5cu5+uqr2bVrV4spDPn5+bz44ot84xvfYN++faSmppKUlNSp8/z0pz/lscceY8yYMTz66KNceeWVHDx4kPz8fMrKyhg9ejT33Xcf119/PU6nk6NHjzJ37lwWLFjAs88+y969e7n99tux2+3ce++9rb5vgLKyMgDuvfdennjiCRwOB9dddx3XXXcdNpuN559/noaGBq6++moef/xxli5dCgSXA/3xj3/kt7/9LSNHjmTz5s18+9vfJjMzkxkzZoRf7+677+bhhx9m+PDhXa76UO8JMKjxAE6Ll0pFI9u1D/hKl87ZX/TLRJQIRo4cyW9+8xsAfvnLXzJ58mR+9atfhR9fs2YN+fn57N+/n1GjRvGNb3wj4vlr1qwhMzOT3bt3M27cuIjHTCYTGRkZAGRlZUV0naI9zx133BE+dvXq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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-26T11:17:30.331463Z", + "iopub.status.busy": "2024-03-26T11:17:30.331157Z", + "iopub.status.idle": "2024-03-26T11:17:30.563234Z", + "shell.execute_reply": "2024-03-26T11:17:30.562107Z" + }, + "papermill": { + "duration": 0.253956, + "end_time": "2024-03-26T11:17:30.565357", + "exception": false, + "start_time": "2024-03-26T11:17:30.311401", + "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-26T11:17:30.607050Z", + "iopub.status.busy": "2024-03-26T11:17:30.606703Z", + "iopub.status.idle": "2024-03-26T11:17:30.909236Z", + "shell.execute_reply": "2024-03-26T11:17:30.907541Z" + }, + "papermill": { + "duration": 0.326798, + "end_time": "2024-03-26T11:17:30.911418", + "exception": false, + "start_time": "2024-03-26T11:17:30.584620", + "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.019598, + "end_time": "2024-03-26T11:17:30.952725", + "exception": false, + "start_time": "2024-03-26T11:17:30.933127", + "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": 3006.118528, + "end_time": "2024-03-26T11:17:33.693958", + "environment_variables": {}, + "exception": null, + "input_path": "eval/insurance/realtabformer/2/mlu-eval.ipynb", + "output_path": "eval/insurance/realtabformer/2/mlu-eval.ipynb", + "parameters": { + "allow_same_prediction": true, + "dataset": "insurance", + "dataset_name": "insurance", + "debug": false, + "folder": "eval", + "gp": true, + "gp_multiply": true, + "log_wandb": false, + "param_index": 0, + "path": "eval/insurance/realtabformer/2", + "path_prefix": "../../../../", + "random_seed": 2, + "single_model": "realtabformer" + }, + "start_time": "2024-03-26T10:27:27.575430", + "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