diff --git "a/contraceptive/realtabformer/mlu-eval.ipynb" "b/contraceptive/realtabformer/mlu-eval.ipynb" new file mode 100644--- /dev/null +++ "b/contraceptive/realtabformer/mlu-eval.ipynb" @@ -0,0 +1,2278 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "982e76f5", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-24T02:38:42.697393Z", + "iopub.status.busy": "2024-03-24T02:38:42.697005Z", + "iopub.status.idle": "2024-03-24T02:38:42.739151Z", + "shell.execute_reply": "2024-03-24T02:38:42.738116Z" + }, + "papermill": { + "duration": 0.059702, + "end_time": "2024-03-24T02:38:42.741766", + "exception": false, + "start_time": "2024-03-24T02:38:42.682064", + "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-24T02:38:42.772261Z", + "iopub.status.busy": "2024-03-24T02:38:42.771077Z", + "iopub.status.idle": "2024-03-24T02:38:42.780958Z", + "shell.execute_reply": "2024-03-24T02:38:42.779962Z" + }, + "papermill": { + "duration": 0.027878, + "end_time": "2024-03-24T02:38:42.783212", + "exception": false, + "start_time": "2024-03-24T02:38:42.755334", + "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-24T02:38:42.810448Z", + "iopub.status.busy": "2024-03-24T02:38:42.809731Z", + "iopub.status.idle": "2024-03-24T02:38:42.814145Z", + "shell.execute_reply": "2024-03-24T02:38:42.813233Z" + }, + "papermill": { + "duration": 0.020359, + "end_time": "2024-03-24T02:38:42.816339", + "exception": false, + "start_time": "2024-03-24T02:38:42.795980", + "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-24T02:38:42.842505Z", + "iopub.status.busy": "2024-03-24T02:38:42.841716Z", + "iopub.status.idle": "2024-03-24T02:38:42.846312Z", + "shell.execute_reply": "2024-03-24T02:38:42.845228Z" + }, + "executionInfo": { + "elapsed": 678, + "status": "ok", + "timestamp": 1696841022168, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "ns5hFcVL2yvs", + "papermill": { + "duration": 0.019981, + "end_time": "2024-03-24T02:38:42.848520", + "exception": false, + "start_time": "2024-03-24T02:38:42.828539", + "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-24T02:38:42.875273Z", + "iopub.status.busy": "2024-03-24T02:38:42.874920Z", + "iopub.status.idle": "2024-03-24T02:38:42.881580Z", + "shell.execute_reply": "2024-03-24T02:38:42.880631Z" + }, + "papermill": { + "duration": 0.022356, + "end_time": "2024-03-24T02:38:42.883691", + "exception": false, + "start_time": "2024-03-24T02:38:42.861335", + "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": "52b90da1", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-24T02:38:42.910031Z", + "iopub.status.busy": "2024-03-24T02:38:42.909716Z", + "iopub.status.idle": "2024-03-24T02:38:42.915242Z", + "shell.execute_reply": "2024-03-24T02:38:42.914247Z" + }, + "papermill": { + "duration": 0.02196, + "end_time": "2024-03-24T02:38:42.917465", + "exception": false, + "start_time": "2024-03-24T02:38:42.895505", + "status": "completed" + }, + "tags": [ + "injected-parameters" + ] + }, + "outputs": [], + "source": [ + "# Parameters\n", + "dataset = \"contraceptive\"\n", + "dataset_name = \"contraceptive\"\n", + "single_model = \"realtabformer\"\n", + "gp = True\n", + "gp_multiply = True\n", + "random_seed = 3\n", + "debug = False\n", + "folder = \"eval\"\n", + "path_prefix = \"../../../../\"\n", + "path = \"eval/contraceptive/realtabformer/3\"\n", + "param_index = 0\n", + "allow_same_prediction = True\n", + "log_wandb = False\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bd7c02d6", + "metadata": { + "papermill": { + "duration": 0.012314, + "end_time": "2024-03-24T02:38:42.942034", + "exception": false, + "start_time": "2024-03-24T02:38:42.929720", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "5f45b1d0", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-24T02:38:42.969716Z", + "iopub.status.busy": "2024-03-24T02:38:42.968811Z", + "iopub.status.idle": "2024-03-24T02:38:42.979545Z", + "shell.execute_reply": "2024-03-24T02:38:42.978554Z" + }, + "executionInfo": { + "elapsed": 7, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "UdvXYv3c3LXy", + "papermill": { + "duration": 0.027554, + "end_time": "2024-03-24T02:38:42.981814", + "exception": false, + "start_time": "2024-03-24T02:38:42.954260", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/kaggle/working\n", + "/kaggle/working/eval/contraceptive/realtabformer/3\n" + ] + } + ], + "source": [ + "from pathlib import Path\n", + "import os\n", + "\n", + "%cd /kaggle/working/\n", + "\n", + "if path is None:\n", + " path = os.path.join(folder, dataset_name, single_model, random_seed)\n", + "Path(path).mkdir(parents=True, exist_ok=True)\n", + "\n", + "%cd {path}" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "f85bf540", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-24T02:38:43.010808Z", + "iopub.status.busy": "2024-03-24T02:38:43.010428Z", + "iopub.status.idle": "2024-03-24T02:38:45.304295Z", + "shell.execute_reply": "2024-03-24T02:38:45.303185Z" + }, + "papermill": { + "duration": 2.311808, + "end_time": "2024-03-24T02:38:45.306872", + "exception": false, + "start_time": "2024-03-24T02:38:42.995064", + "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-24T02:38:45.336937Z", + "iopub.status.busy": "2024-03-24T02:38:45.335841Z", + "iopub.status.idle": "2024-03-24T02:38:45.351618Z", + "shell.execute_reply": "2024-03-24T02:38:45.350784Z" + }, + "papermill": { + "duration": 0.032502, + "end_time": "2024-03-24T02:38:45.354031", + "exception": false, + "start_time": "2024-03-24T02:38:45.321529", + "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-24T02:38:45.382841Z", + "iopub.status.busy": "2024-03-24T02:38:45.382459Z", + "iopub.status.idle": "2024-03-24T02:38:45.391119Z", + "shell.execute_reply": "2024-03-24T02:38:45.390230Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "Vrl2QkoV3o_8", + "papermill": { + "duration": 0.025034, + "end_time": "2024-03-24T02:38:45.393217", + "exception": false, + "start_time": "2024-03-24T02:38:45.368183", + "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-24T02:38:45.424353Z", + "iopub.status.busy": "2024-03-24T02:38:45.423724Z", + "iopub.status.idle": "2024-03-24T02:38:45.530029Z", + "shell.execute_reply": "2024-03-24T02:38:45.529081Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "TilUuFk9vqMb", + "papermill": { + "duration": 0.125359, + "end_time": "2024-03-24T02:38:45.532690", + "exception": false, + "start_time": "2024-03-24T02:38:45.407331", + "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-24T02:38:45.561868Z", + "iopub.status.busy": "2024-03-24T02:38:45.561057Z", + "iopub.status.idle": "2024-03-24T02:38:50.856524Z", + "shell.execute_reply": "2024-03-24T02:38:50.855232Z" + }, + "executionInfo": { + "elapsed": 3113, + "status": "ok", + "timestamp": 1696841025277, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "7Abt8nStvr9Z", + "papermill": { + "duration": 5.313135, + "end_time": "2024-03-24T02:38:50.859430", + "exception": false, + "start_time": "2024-03-24T02:38:45.546295", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-03-24 02:38:48.116544: 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-24 02:38:48.116610: 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-24 02:38:48.118474: 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-24T02:38:50.889598Z", + "iopub.status.busy": "2024-03-24T02:38:50.888895Z", + "iopub.status.idle": "2024-03-24T02:38:50.895658Z", + "shell.execute_reply": "2024-03-24T02:38:50.894813Z" + }, + "papermill": { + "duration": 0.024441, + "end_time": "2024-03-24T02:38:50.897998", + "exception": false, + "start_time": "2024-03-24T02:38:50.873557", + "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-24T02:38:50.925180Z", + "iopub.status.busy": "2024-03-24T02:38:50.924526Z", + "iopub.status.idle": "2024-03-24T02:39:00.369372Z", + "shell.execute_reply": "2024-03-24T02:39:00.368208Z" + }, + "executionInfo": { + "elapsed": 20137, + "status": "ok", + "timestamp": 1696841045408, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "tbaguWxAvtPi", + "papermill": { + "duration": 9.461598, + "end_time": "2024-03-24T02:39:00.372274", + "exception": false, + "start_time": "2024-03-24T02:38:50.910676", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", + " warnings.warn(\n", + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:119: ConvergenceWarning: Number of distinct clusters (4) found smaller than n_clusters (10). Possibly due to duplicate points in X.\n", + " .fit(X)\n", + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:119: ConvergenceWarning: Number of distinct clusters (4) found smaller than n_clusters (10). Possibly due to duplicate points in X.\n", + " .fit(X)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n", + " warnings.warn(\n", + "/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:119: ConvergenceWarning: Number of distinct clusters (4) found smaller than n_clusters (10). Possibly due to duplicate points in X.\n", + " .fit(X)\n" + ] + } + ], + "source": [ + "from ml_utility_loss.loss_learning.estimator.preprocessing import DataPreprocessor\n", + "\n", + "preprocessor = DataPreprocessor(\n", + " task,\n", + " target=target,\n", + " cat_features=cat_features,\n", + " mixed_features=mixed_features,\n", + " longtail_features=longtail_features,\n", + " integer_features=integer_features,\n", + " lct_ae_embedding_size=lct_ae_embedding_size,\n", + " lct_ae_params=lct_ae_params,\n", + " lct_ae=lct_ae,\n", + " tab_ddpm_normalization=tab_ddpm_normalization,\n", + " tab_ddpm_cat_encoding=tab_ddpm_cat_encoding,\n", + " tab_ddpm_y_policy=tab_ddpm_y_policy,\n", + " tab_ddpm_is_y_cond=tab_ddpm_is_y_cond,\n", + " realtabformer_embedding=rtf_embed,\n", + " realtabformer_params=rtf_params,\n", + ")\n", + "preprocessor.fit(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "a9c9b110", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2024-03-24T02:39:00.403750Z", + "iopub.status.busy": "2024-03-24T02:39:00.402960Z", + "iopub.status.idle": "2024-03-24T02:39:00.410518Z", + "shell.execute_reply": "2024-03-24T02:39:00.409593Z" + }, + "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.025599, + "end_time": "2024-03-24T02:39:00.412753", + "exception": false, + "start_time": "2024-03-24T02:39:00.387154", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'tvae': 46,\n", + " 'realtabformer': (24, 72, Embedding(72, 672), True),\n", + " 'lct_gan': 40,\n", + " 'tab_ddpm_concat': 10}" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "preprocessor.adapter_sizes" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "3cb9ed90", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-24T02:39:00.440362Z", + "iopub.status.busy": "2024-03-24T02:39:00.440053Z", + "iopub.status.idle": "2024-03-24T02:39:00.445820Z", + "shell.execute_reply": "2024-03-24T02:39:00.444729Z" + }, + "papermill": { + "duration": 0.022368, + "end_time": "2024-03-24T02:39:00.448186", + "exception": false, + "start_time": "2024-03-24T02:39:00.425818", + "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-24T02:39:00.478355Z", + "iopub.status.busy": "2024-03-24T02:39:00.477968Z", + "iopub.status.idle": "2024-03-24T02:39:01.025228Z", + "shell.execute_reply": "2024-03-24T02:39:01.024152Z" + }, + "papermill": { + "duration": 0.565158, + "end_time": "2024-03-24T02:39:01.027760", + "exception": false, + "start_time": "2024-03-24T02:39:00.462602", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../contraceptive/_cache_aug_test/realtabformer/all inf False\n", + "../../../../ml-utility-loss/aug_test/contraceptive [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Caching in ../../../../contraceptive/_cache_bs_test/realtabformer/all inf False\n", + "../../../../ml-utility-loss/bs_test/contraceptive [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Caching in ../../../../contraceptive/_cache_synth_test/realtabformer/all inf False\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "../../../../ml-utility-loss/synthetics/contraceptive [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "1050\n" + ] + } + ], + "source": [ + "from ml_utility_loss.loss_learning.estimator.pipeline import load_dataset_4\n", + "\n", + "test_set = load_dataset_4(\n", + " dataset_dir=os.path.join(path_prefix, \"ml-utility-loss/\"),\n", + " dataset_name=dataset_name,\n", + " preprocessor=preprocessor,\n", + " model=single_model,\n", + " cache_dir=path_prefix,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "14ff8b40", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-24T02:39:01.061792Z", + "iopub.status.busy": "2024-03-24T02:39:01.060781Z", + "iopub.status.idle": "2024-03-24T02:39:01.430674Z", + "shell.execute_reply": "2024-03-24T02:39:01.429588Z" + }, + "executionInfo": { + "elapsed": 588, + "status": "ok", + "timestamp": 1696841049215, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "NgahtU1q9uLO", + "papermill": { + "duration": 0.390462, + "end_time": "2024-03-24T02:39:01.433161", + "exception": false, + "start_time": "2024-03-24T02:39:01.042699", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'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", + " 'loss_balancer_beta': 0.7999999999999999,\n", + " 'loss_balancer_r': 0.96,\n", + " 'tf_pma_low': 16,\n", + " 'grad_loss_fn': torch.Tensor>,\n", + " 'pma_ffn_mode': 'none',\n", + " 'patience': 10,\n", + " 'inds_init_mode': 'fixnorm',\n", + " 'grad_clip': 0.7999999999999999,\n", + " 'bias_weight_decay': 0.05,\n", + " 'head_activation': torch.nn.modules.activation.ReLU6,\n", + " 'tf_activation': ml_utility_loss.activations.LeakyHardtanh,\n", + " 'dataset_size': 2048,\n", + " 'batch_size': 4,\n", + " 'epochs': 100,\n", + " 'lr_mul': 0.09,\n", + " 'n_warmup_steps': 80,\n", + " 'Optim': functools.partial(, amsgrad=True),\n", + " 'fixed_role_model': 'realtabformer',\n", + " 'g_loss_mul': 0.1,\n", + " 'd_model': 256,\n", + " 'attn_activation': ml_utility_loss.activations.LeakyHardtanh,\n", + " 'tf_d_inner': 512,\n", + " 'tf_n_layers_enc': 3,\n", + " 'tf_n_head': 32,\n", + " 'tf_activation_final': ml_utility_loss.activations.LeakyHardtanh,\n", + " 'ada_d_hid': 512,\n", + " 'ada_n_layers': 8,\n", + " 'ada_activation': torch.nn.modules.activation.Softsign,\n", + " 'ada_activation_final': ml_utility_loss.activations.LeakyHardsigmoid,\n", + " 'head_d_hid': 512,\n", + " 'head_n_layers': 9,\n", + " 'head_n_head': 64,\n", + " 'head_activation_final': ml_utility_loss.activations.LeakyHardsigmoid,\n", + " 'single_model': True,\n", + " 'models': ['realtabformer'],\n", + " 'max_seconds': 3600,\n", + " 'Body': 'twin_encoder',\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", + " 'dropout': 0,\n", + " 'combine_mode': 'diff_left',\n", + " 'tf_isab_mode': 'separate',\n", + " 'bias': True,\n", + " 'bias_final': True,\n", + " 'synth_data': 2,\n", + " 'bias_lr_mul': 1.0,\n", + " 'tf_lora': False,\n", + " 'tf_num_inds': 16,\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': 1.0, '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", + "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-24T02:39:01.465746Z", + "iopub.status.busy": "2024-03-24T02:39:01.465371Z", + "iopub.status.idle": "2024-03-24T02:39:01.592669Z", + "shell.execute_reply": "2024-03-24T02:39:01.591421Z" + }, + "papermill": { + "duration": 0.147122, + "end_time": "2024-03-24T02:39:01.595269", + "exception": false, + "start_time": "2024-03-24T02:39:01.448147", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../contraceptive/_cache_aug_train/realtabformer/all inf False\n", + "split df ratio is 0\n", + "../../../../ml-utility-loss/aug_train/contraceptive [400, 0]\n", + "Caching in ../../../../contraceptive/_cache_aug_val/realtabformer/all inf False\n", + "split df ratio is 1\n", + "../../../../ml-utility-loss/aug_val/contraceptive [0, 200]\n", + "Caching in ../../../../contraceptive/_cache_bs_train/realtabformer/all inf False\n", + "split df ratio is 0\n", + "../../../../ml-utility-loss/bs_train/contraceptive [100, 0]\n", + "Caching in ../../../../contraceptive/_cache_bs_val/realtabformer/all inf False\n", + "split df ratio is 1\n", + "../../../../ml-utility-loss/bs_val/contraceptive [0, 50]\n", + "Caching in ../../../../contraceptive/_cache_synth/realtabformer/all inf False\n", + "Splitting without random!\n", + "Split with reverse index!\n", + "../../../../ml-utility-loss/synthetics/contraceptive [400, 200]\n", + "[900, 450]\n", + "[900, 450]\n" + ] + } + ], + "source": [ + "train_set, val_set = datasetsn(model=params[\"fixed_role_model\"], synth_data=params[\"synth_data\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "2fcb1418", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "execution": { + "iopub.execute_input": "2024-03-24T02:39:01.629134Z", + "iopub.status.busy": "2024-03-24T02:39:01.628700Z", + "iopub.status.idle": "2024-03-24T02:39:02.145260Z", + "shell.execute_reply": "2024-03-24T02:39:02.144040Z" + }, + "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.537093, + "end_time": "2024-03-24T02:39:02.148039", + "exception": false, + "start_time": "2024-03-24T02:39:01.610946", + "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-24T02:39:02.182993Z", + "iopub.status.busy": "2024-03-24T02:39:02.182428Z", + "iopub.status.idle": "2024-03-24T02:39:02.188560Z", + "shell.execute_reply": "2024-03-24T02:39:02.187248Z" + }, + "papermill": { + "duration": 0.027321, + "end_time": "2024-03-24T02:39:02.191569", + "exception": false, + "start_time": "2024-03-24T02:39:02.164248", + "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-24T02:39:02.224551Z", + "iopub.status.busy": "2024-03-24T02:39:02.223879Z", + "iopub.status.idle": "2024-03-24T02:39:02.232450Z", + "shell.execute_reply": "2024-03-24T02:39:02.231344Z" + }, + "papermill": { + "duration": 0.027014, + "end_time": "2024-03-24T02:39:02.234838", + "exception": false, + "start_time": "2024-03-24T02:39:02.207824", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "8630553" + ] + }, + "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-24T02:39:02.267778Z", + "iopub.status.busy": "2024-03-24T02:39:02.267362Z", + "iopub.status.idle": "2024-03-24T02:39:02.366344Z", + "shell.execute_reply": "2024-03-24T02:39:02.365227Z" + }, + "papermill": { + "duration": 0.118353, + "end_time": "2024-03-24T02:39:02.368824", + "exception": false, + "start_time": "2024-03-24T02:39:02.250471", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "========================================================================================================================\n", + "Layer (type:depth-idx) Output Shape Param #\n", + "========================================================================================================================\n", + "MLUtilitySingle [2, 1179, 16128] --\n", + "├─Adapter: 1-1 [2, 1179, 16128] --\n", + "│ └─Embedding: 2-1 [2, 1179, 24, 672] (48,384)\n", + "│ └─TensorInductionPoint: 2-2 [24, 1] 24\n", + "│ └─Sequential: 2-3 [2, 1179, 256] --\n", + "│ │ └─FeedForward: 3-1 [2, 1179, 512] --\n", + "│ │ │ └─Linear: 4-1 [2, 1179, 512] 344,576\n", + "│ │ │ └─Softsign: 4-2 [2, 1179, 512] --\n", + "│ │ └─FeedForward: 3-2 [2, 1179, 512] --\n", + "│ │ │ └─Linear: 4-3 [2, 1179, 512] 262,656\n", + "│ │ │ └─Softsign: 4-4 [2, 1179, 512] --\n", + "│ │ └─FeedForward: 3-3 [2, 1179, 512] --\n", + "│ │ │ └─Linear: 4-5 [2, 1179, 512] 262,656\n", + "│ │ │ └─Softsign: 4-6 [2, 1179, 512] --\n", + "│ │ └─FeedForward: 3-4 [2, 1179, 512] --\n", + "│ │ │ └─Linear: 4-7 [2, 1179, 512] 262,656\n", + "│ │ │ └─Softsign: 4-8 [2, 1179, 512] --\n", + "│ │ └─FeedForward: 3-5 [2, 1179, 512] --\n", + "│ │ │ └─Linear: 4-9 [2, 1179, 512] 262,656\n", + "│ │ │ └─Softsign: 4-10 [2, 1179, 512] --\n", + "│ │ └─FeedForward: 3-6 [2, 1179, 512] --\n", + "│ │ │ └─Linear: 4-11 [2, 1179, 512] 262,656\n", + "│ │ │ └─Softsign: 4-12 [2, 1179, 512] --\n", + "│ │ └─FeedForward: 3-7 [2, 1179, 512] --\n", + "│ │ │ └─Linear: 4-13 [2, 1179, 512] 262,656\n", + "│ │ │ └─Softsign: 4-14 [2, 1179, 512] --\n", + "│ │ └─FeedForward: 3-8 [2, 1179, 256] --\n", + "│ │ │ └─Linear: 4-15 [2, 1179, 256] 131,328\n", + "│ │ │ └─LeakyHardsigmoid: 4-16 [2, 1179, 256] --\n", + "├─Adapter: 1-2 [2, 294, 16128] (recursive)\n", + "│ └─Embedding: 2-4 [2, 294, 24, 672] (recursive)\n", + "│ └─TensorInductionPoint: 2-5 [24, 1] (recursive)\n", + "│ └─Sequential: 2-6 [2, 294, 256] (recursive)\n", + "│ │ └─FeedForward: 3-9 [2, 294, 512] (recursive)\n", + "│ │ │ └─Linear: 4-17 [2, 294, 512] (recursive)\n", + "│ │ │ └─Softsign: 4-18 [2, 294, 512] --\n", + "│ │ └─FeedForward: 3-10 [2, 294, 512] (recursive)\n", + "│ │ │ └─Linear: 4-19 [2, 294, 512] (recursive)\n", + "│ │ │ └─Softsign: 4-20 [2, 294, 512] --\n", + "│ │ └─FeedForward: 3-11 [2, 294, 512] (recursive)\n", + "│ │ │ └─Linear: 4-21 [2, 294, 512] (recursive)\n", + "│ │ │ └─Softsign: 4-22 [2, 294, 512] --\n", + "│ │ └─FeedForward: 3-12 [2, 294, 512] (recursive)\n", + "│ │ │ └─Linear: 4-23 [2, 294, 512] (recursive)\n", + "│ │ │ └─Softsign: 4-24 [2, 294, 512] --\n", + "│ │ └─FeedForward: 3-13 [2, 294, 512] (recursive)\n", + "│ │ │ └─Linear: 4-25 [2, 294, 512] (recursive)\n", + "│ │ │ └─Softsign: 4-26 [2, 294, 512] --\n", + "│ │ └─FeedForward: 3-14 [2, 294, 512] (recursive)\n", + "│ │ │ └─Linear: 4-27 [2, 294, 512] (recursive)\n", + "│ │ │ └─Softsign: 4-28 [2, 294, 512] --\n", + "│ │ └─FeedForward: 3-15 [2, 294, 512] (recursive)\n", + "│ │ │ └─Linear: 4-29 [2, 294, 512] (recursive)\n", + "│ │ │ └─Softsign: 4-30 [2, 294, 512] --\n", + "│ │ └─FeedForward: 3-16 [2, 294, 256] (recursive)\n", + "│ │ │ └─Linear: 4-31 [2, 294, 256] (recursive)\n", + "│ │ │ └─LeakyHardsigmoid: 4-32 [2, 294, 256] --\n", + "├─TwinEncoder: 1-3 [2, 4096] --\n", + "│ └─Encoder: 2-7 [2, 16, 256] --\n", + "│ │ └─ModuleList: 3-18 -- (recursive)\n", + "│ │ │ └─EncoderLayer: 4-33 [2, 1179, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-1 [2, 1179, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-1 [2, 16, 256] 4,096\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-2 [2, 16, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-1 [2, 16, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-2 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-3 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-4 [2, 32, 16, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-1 [2, 32, 16, 1179] --\n", + "│ │ │ │ │ │ └─Linear: 7-5 [2, 16, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyHardtanh: 7-6 [2, 16, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-3 [2, 1179, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-7 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-8 [2, 16, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-9 [2, 16, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-10 [2, 32, 1179, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-2 [2, 32, 1179, 16] --\n", + "│ │ │ │ │ │ └─Linear: 7-11 [2, 1179, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyHardtanh: 7-12 [2, 1179, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-2 [2, 1179, 256] --\n", + "│ │ │ │ │ └─Linear: 6-4 [2, 1179, 512] 131,584\n", + "│ │ │ │ │ └─LeakyHardtanh: 6-5 [2, 1179, 512] --\n", + "│ │ │ │ │ └─Linear: 6-6 [2, 1179, 256] 131,328\n", + "│ │ │ └─EncoderLayer: 4-34 [2, 1179, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-3 [2, 1179, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-7 [2, 16, 256] 4,096\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-8 [2, 16, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-13 [2, 16, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-14 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-15 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-16 [2, 32, 16, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-3 [2, 32, 16, 1179] --\n", + "│ │ │ │ │ │ └─Linear: 7-17 [2, 16, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyHardtanh: 7-18 [2, 16, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-9 [2, 1179, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-19 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-20 [2, 16, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-21 [2, 16, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-22 [2, 32, 1179, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-4 [2, 32, 1179, 16] --\n", + "│ │ │ │ │ │ └─Linear: 7-23 [2, 1179, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyHardtanh: 7-24 [2, 1179, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-4 [2, 1179, 256] --\n", + "│ │ │ │ │ └─Linear: 6-10 [2, 1179, 512] 131,584\n", + "│ │ │ │ │ └─LeakyHardtanh: 6-11 [2, 1179, 512] --\n", + "│ │ │ │ │ └─Linear: 6-12 [2, 1179, 256] 131,328\n", + "│ │ │ └─EncoderLayer: 4-35 [2, 16, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-5 [2, 1179, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-13 [2, 16, 256] 4,096\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-14 [2, 16, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-25 [2, 16, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-26 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-27 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-28 [2, 32, 16, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-5 [2, 32, 16, 1179] --\n", + "│ │ │ │ │ │ └─Linear: 7-29 [2, 16, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyHardtanh: 7-30 [2, 16, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-15 [2, 1179, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-31 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-32 [2, 16, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-33 [2, 16, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-34 [2, 32, 1179, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-6 [2, 32, 1179, 16] --\n", + "│ │ │ │ │ │ └─Linear: 7-35 [2, 1179, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyHardtanh: 7-36 [2, 1179, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-6 [2, 1179, 256] --\n", + "│ │ │ │ │ └─Linear: 6-16 [2, 1179, 512] 131,584\n", + "│ │ │ │ │ └─LeakyHardtanh: 6-17 [2, 1179, 512] --\n", + "│ │ │ │ │ └─Linear: 6-18 [2, 1179, 256] 131,328\n", + "│ │ │ │ └─PoolingByMultiheadAttention: 5-7 [2, 16, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-19 [2, 16, 256] 4,096\n", + "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-20 [2, 16, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-37 [2, 16, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-38 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-39 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-40 [2, 32, 16, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-7 [2, 32, 16, 1179] --\n", + "│ │ │ │ │ │ └─Linear: 7-41 [2, 16, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyHardtanh: 7-42 [2, 16, 256] --\n", + "│ └─Encoder: 2-8 [2, 16, 256] (recursive)\n", + "│ │ └─ModuleList: 3-18 -- (recursive)\n", + "│ │ │ └─EncoderLayer: 4-36 [2, 294, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-8 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-21 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-22 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-43 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-44 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-45 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-46 [2, 32, 16, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-8 [2, 32, 16, 294] --\n", + "│ │ │ │ │ │ └─Linear: 7-47 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyHardtanh: 7-48 [2, 16, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-23 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-49 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-50 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-51 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-52 [2, 32, 294, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-9 [2, 32, 294, 16] --\n", + "│ │ │ │ │ │ └─Linear: 7-53 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyHardtanh: 7-54 [2, 294, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-9 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-24 [2, 294, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardtanh: 6-25 [2, 294, 512] --\n", + "│ │ │ │ │ └─Linear: 6-26 [2, 294, 256] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-37 [2, 294, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-10 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-27 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-28 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-55 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-56 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-57 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-58 [2, 32, 16, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-10 [2, 32, 16, 294] --\n", + "│ │ │ │ │ │ └─Linear: 7-59 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyHardtanh: 7-60 [2, 16, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-29 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-61 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-62 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-63 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-64 [2, 32, 294, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-11 [2, 32, 294, 16] --\n", + "│ │ │ │ │ │ └─Linear: 7-65 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyHardtanh: 7-66 [2, 294, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-11 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-30 [2, 294, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardtanh: 6-31 [2, 294, 512] --\n", + "│ │ │ │ │ └─Linear: 6-32 [2, 294, 256] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-38 [2, 16, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-12 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-33 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-34 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-67 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-68 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-69 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-70 [2, 32, 16, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-12 [2, 32, 16, 294] --\n", + "│ │ │ │ │ │ └─Linear: 7-71 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyHardtanh: 7-72 [2, 16, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-35 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-73 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-74 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-75 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-76 [2, 32, 294, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-13 [2, 32, 294, 16] --\n", + "│ │ │ │ │ │ └─Linear: 7-77 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyHardtanh: 7-78 [2, 294, 256] --\n", + "│ │ │ │ └─DoubleFeedForward: 5-13 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─Linear: 6-36 [2, 294, 512] (recursive)\n", + "│ │ │ │ │ └─LeakyHardtanh: 6-37 [2, 294, 512] --\n", + "│ │ │ │ │ └─Linear: 6-38 [2, 294, 256] (recursive)\n", + "│ │ │ │ └─PoolingByMultiheadAttention: 5-14 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-39 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-40 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-79 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-80 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-81 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-82 [2, 32, 16, 8] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-14 [2, 32, 16, 294] --\n", + "│ │ │ │ │ │ └─Linear: 7-83 [2, 16, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyHardtanh: 7-84 [2, 16, 256] --\n", + "├─Head: 1-4 [2] --\n", + "│ └─Sequential: 2-9 [2, 1] --\n", + "│ │ └─FeedForward: 3-19 [2, 512] --\n", + "│ │ │ └─Linear: 4-39 [2, 512] 2,097,664\n", + "│ │ │ └─ReLU6: 4-40 [2, 512] --\n", + "│ │ └─FeedForward: 3-20 [2, 512] --\n", + "│ │ │ └─Linear: 4-41 [2, 512] 262,656\n", + "│ │ │ └─ReLU6: 4-42 [2, 512] --\n", + "│ │ └─FeedForward: 3-21 [2, 512] --\n", + "│ │ │ └─Linear: 4-43 [2, 512] 262,656\n", + "│ │ │ └─ReLU6: 4-44 [2, 512] --\n", + "│ │ └─FeedForward: 3-22 [2, 512] --\n", + "│ │ │ └─Linear: 4-45 [2, 512] 262,656\n", + "│ │ │ └─ReLU6: 4-46 [2, 512] --\n", + "│ │ └─FeedForward: 3-23 [2, 512] --\n", + "│ │ │ └─Linear: 4-47 [2, 512] 262,656\n", + "│ │ │ └─ReLU6: 4-48 [2, 512] --\n", + "│ │ └─FeedForward: 3-24 [2, 512] --\n", + "│ │ │ └─Linear: 4-49 [2, 512] 262,656\n", + "│ │ │ └─ReLU6: 4-50 [2, 512] --\n", + "│ │ └─FeedForward: 3-25 [2, 512] --\n", + "│ │ │ └─Linear: 4-51 [2, 512] 262,656\n", + "│ │ │ └─ReLU6: 4-52 [2, 512] --\n", + "│ │ └─FeedForward: 3-26 [2, 512] --\n", + "│ │ │ └─Linear: 4-53 [2, 512] 262,656\n", + "│ │ │ └─ReLU6: 4-54 [2, 512] --\n", + "│ │ └─FeedForward: 3-27 [2, 1] --\n", + "│ │ │ └─Linear: 4-55 [2, 1] 513\n", + "│ │ │ └─LeakyHardsigmoid: 4-56 [2, 1] --\n", + "========================================================================================================================\n", + "Total params: 8,678,937\n", + "Trainable params: 8,630,553\n", + "Non-trainable params: 48,384\n", + "Total mult-adds (M): 26.78\n", + "========================================================================================================================\n", + "Input size (MB): 0.28\n", + "Forward/backward pass size (MB): 611.80\n", + "Params size (MB): 34.72\n", + "Estimated Total Size (MB): 646.80\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-24T02:39:02.403230Z", + "iopub.status.busy": "2024-03-24T02:39:02.402822Z", + "iopub.status.idle": "2024-03-24T03:45:01.465570Z", + "shell.execute_reply": "2024-03-24T03:45:01.464454Z" + }, + "papermill": { + "duration": 3959.099226, + "end_time": "2024-03-24T03:45:01.484387", + "exception": false, + "start_time": "2024-03-24T02:39:02.385161", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3 datasets [900, 450, 1050]\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.011365748913376592, 'avg_role_model_std_loss': 0.9511739558440473, 'avg_role_model_mean_pred_loss': 0.0006854779220273954, 'avg_role_model_g_mag_loss': 1.2036508678562112, '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.011510453373646467, 'n_size': 900, 'n_batch': 225, 'duration': 244.78535199165344, 'duration_batch': 1.087934897740682, 'duration_size': 0.2719837244351705, 'avg_pred_std': 0.10629495567538672}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.004436042588980248, 'avg_role_model_std_loss': 1.158144313332901, 'avg_role_model_mean_pred_loss': 5.6492201652799975e-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.004436042588980248, 'n_size': 450, 'n_batch': 113, 'duration': 100.92714786529541, 'duration_batch': 0.8931606005778355, 'duration_size': 0.22428255081176757, 'avg_pred_std': 0.06720254934532979}\n", + "Epoch 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.004198840709804143, 'avg_role_model_std_loss': 0.8141998785290303, 'avg_role_model_mean_pred_loss': 3.387297497191669e-05, 'avg_role_model_g_mag_loss': 0.2937400783267286, '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.004241808241511333, 'n_size': 900, 'n_batch': 225, 'duration': 244.76988172531128, 'duration_batch': 1.0878661410013835, 'duration_size': 0.27196653525034586, 'avg_pred_std': 0.0953530696950232}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.00333135591690532, 'avg_role_model_std_loss': 2.725961913635608, 'avg_role_model_mean_pred_loss': 1.3745906455597812e-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.00333135591690532, 'n_size': 450, 'n_batch': 113, 'duration': 99.83114504814148, 'duration_batch': 0.883461460603022, 'duration_size': 0.22184698899586996, 'avg_pred_std': 0.04183473708664388}\n", + "Epoch 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.002762561462489733, 'avg_role_model_std_loss': 0.5484214044140991, 'avg_role_model_mean_pred_loss': 8.805304913856541e-06, 'avg_role_model_g_mag_loss': 0.2618754346999857, '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.0027956583087668857, 'n_size': 900, 'n_batch': 225, 'duration': 242.95946621894836, 'duration_batch': 1.0798198498619926, 'duration_size': 0.26995496246549816, 'avg_pred_std': 0.10219329664483666}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0027281873274801506, 'avg_role_model_std_loss': 2.8626933845729767, 'avg_role_model_mean_pred_loss': 6.899153320190609e-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.0027281873274801506, 'n_size': 450, 'n_batch': 113, 'duration': 100.66479754447937, 'duration_batch': 0.8908389163228263, 'duration_size': 0.22369955009884304, 'avg_pred_std': 0.04004584675329218}\n", + "Epoch 3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.002585010585737311, 'avg_role_model_std_loss': 0.5059408610661492, 'avg_role_model_mean_pred_loss': 1.07776368556805e-05, 'avg_role_model_g_mag_loss': 0.2515256485177411, '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.0026162271208078083, 'n_size': 900, 'n_batch': 225, 'duration': 244.41886401176453, 'duration_batch': 1.086306062274509, 'duration_size': 0.2715765155686273, 'avg_pred_std': 0.1017372147883806}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0025077687115925883, 'avg_role_model_std_loss': 2.664003259325225, 'avg_role_model_mean_pred_loss': 7.708884488491681e-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.0025077687115925883, 'n_size': 450, 'n_batch': 113, 'duration': 100.92277240753174, 'duration_batch': 0.8931218797126702, 'duration_size': 0.22427282757229275, 'avg_pred_std': 0.04433754623756307}\n", + "Epoch 4\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0022580953761239977, 'avg_role_model_std_loss': 0.45952041590186543, 'avg_role_model_mean_pred_loss': 8.792309877011795e-06, 'avg_role_model_g_mag_loss': 0.2588796340343025, '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.0022885854777915586, 'n_size': 900, 'n_batch': 225, 'duration': 244.1408052444458, 'duration_batch': 1.0850702455308703, 'duration_size': 0.27126756138271757, 'avg_pred_std': 0.10189315725092052}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0023599671401704353, 'avg_role_model_std_loss': 3.2095572816661777, 'avg_role_model_mean_pred_loss': 7.228522299237366e-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.0023599671401704353, 'n_size': 450, 'n_batch': 113, 'duration': 101.14786124229431, 'duration_batch': 0.8951138163034895, 'duration_size': 0.22477302498287624, 'avg_pred_std': 0.04659274682213049}\n", + "Epoch 5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0021870362648365293, 'avg_role_model_std_loss': 0.25351457023726504, 'avg_role_model_mean_pred_loss': 7.473293455636948e-06, 'avg_role_model_g_mag_loss': 0.2523958419428931, '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.002216868234035145, 'n_size': 900, 'n_batch': 225, 'duration': 244.6163468360901, 'duration_batch': 1.087183763715956, 'duration_size': 0.271795940928989, 'avg_pred_std': 0.10260770147045453}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.002132210925208508, 'avg_role_model_std_loss': 2.034111335401322, 'avg_role_model_mean_pred_loss': 4.895658492241791e-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.002132210925208508, 'n_size': 450, 'n_batch': 113, 'duration': 100.4099771976471, 'duration_batch': 0.8885838690057265, 'duration_size': 0.22313328266143798, 'avg_pred_std': 0.05016624194001202}\n", + "Epoch 6\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.002052127151619061, 'avg_role_model_std_loss': 0.18765673593578922, 'avg_role_model_mean_pred_loss': 6.5528008938834434e-06, 'avg_role_model_g_mag_loss': 0.277902038457493, '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.002083149238023907, 'n_size': 900, 'n_batch': 225, 'duration': 243.84846901893616, 'duration_batch': 1.083770973417494, 'duration_size': 0.2709427433543735, 'avg_pred_std': 0.10590767532587052}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0024004279846849387, 'avg_role_model_std_loss': 2.7415380834772916, 'avg_role_model_mean_pred_loss': 5.895928737795737e-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.0024004279846849387, 'n_size': 450, 'n_batch': 113, 'duration': 100.27250218391418, 'duration_batch': 0.8873672759638424, 'duration_size': 0.2228277826309204, 'avg_pred_std': 0.04519922711136463}\n", + "Epoch 7\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0018999467526898822, 'avg_role_model_std_loss': 0.20382699480085795, 'avg_role_model_mean_pred_loss': 5.589238350358375e-06, 'avg_role_model_g_mag_loss': 0.25682228529618845, '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.001928712559650497, 'n_size': 900, 'n_batch': 225, 'duration': 245.35998964309692, 'duration_batch': 1.0904888428582085, 'duration_size': 0.2726222107145521, 'avg_pred_std': 0.10311477472798691}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.001989704634373387, 'avg_role_model_std_loss': 2.2423227408280177, 'avg_role_model_mean_pred_loss': 4.893121499534396e-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.001989704634373387, 'n_size': 450, 'n_batch': 113, 'duration': 100.96781826019287, 'duration_batch': 0.893520515576928, 'duration_size': 0.22437292946709528, 'avg_pred_std': 0.05078682927332357}\n", + "Epoch 8\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0017601978679401024, 'avg_role_model_std_loss': 0.4031062119189409, 'avg_role_model_mean_pred_loss': 4.838700413782498e-06, 'avg_role_model_g_mag_loss': 0.26518729818363984, '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.0017887732903990481, 'n_size': 900, 'n_batch': 225, 'duration': 245.00445175170898, 'duration_batch': 1.08890867445204, 'duration_size': 0.27222716861301, 'avg_pred_std': 0.10410975835182601}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.002103634206901511, 'avg_role_model_std_loss': 1.6868754704122124, 'avg_role_model_mean_pred_loss': 6.431579865517962e-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.002103634206901511, 'n_size': 450, 'n_batch': 113, 'duration': 100.77440333366394, 'duration_batch': 0.8918088790589729, 'duration_size': 0.2239431185192532, 'avg_pred_std': 0.056379431404329966}\n", + "Epoch 9\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0016397621689894651, 'avg_role_model_std_loss': 0.11264491108698306, 'avg_role_model_mean_pred_loss': 6.2875129506191465e-06, 'avg_role_model_g_mag_loss': 0.2709155303819312, '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.001668296587401225, 'n_size': 900, 'n_batch': 225, 'duration': 244.95206952095032, 'duration_batch': 1.088675864537557, 'duration_size': 0.27216896613438923, 'avg_pred_std': 0.10980390641838313}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.001868966455739509, 'avg_role_model_std_loss': 1.625626234592526, 'avg_role_model_mean_pred_loss': 4.7393164126034105e-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.001868966455739509, 'n_size': 450, 'n_batch': 113, 'duration': 101.65219712257385, 'duration_batch': 0.8995769656864943, 'duration_size': 0.22589377138349745, 'avg_pred_std': 0.05243304344017751}\n", + "Epoch 10\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0014940200044495416, 'avg_role_model_std_loss': 0.2755374942968874, 'avg_role_model_mean_pred_loss': 3.1630159733497656e-06, 'avg_role_model_g_mag_loss': 0.27379964623186326, '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.0015222167474591211, 'n_size': 900, 'n_batch': 225, 'duration': 246.83059191703796, 'duration_batch': 1.0970248529646132, 'duration_size': 0.2742562132411533, 'avg_pred_std': 0.10100599300530222}\n", + "Time out: 3711.764585494995/3600\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval loss {'role_model': 'realtabformer', 'n_size': 1050, 'n_batch': 263, 'role_model_metrics': {'avg_loss': 0.0016764628703683792, 'avg_g_mag_loss': 0.026020999058271363, 'avg_g_cos_loss': 0.010928842550446613, 'pred_duration': 7.159314393997192, 'grad_duration': 2.6302547454833984, 'total_duration': 9.78956913948059, 'pred_std': 0.10647688060998917, 'std_loss': 0.00215106806717813, 'mean_pred_loss': 3.3525986964377807e-06, 'pred_rmse': 0.04094462841749191, 'pred_mae': 0.03046504035592079, 'pred_mape': 0.09343661367893219, 'grad_rmse': 0.43987467885017395, 'grad_mae': 0.24295493960380554, 'grad_mape': 7.0997748374938965}, '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.0016764628703683792, 'avg_g_mag_loss': 0.026020999058271363, 'avg_g_cos_loss': 0.010928842550446613, 'avg_pred_duration': 7.159314393997192, 'avg_grad_duration': 2.6302547454833984, 'avg_total_duration': 9.78956913948059, 'avg_pred_std': 0.10647688060998917, 'avg_std_loss': 0.00215106806717813, 'avg_mean_pred_loss': 3.3525986964377807e-06}, 'min_metrics': {'avg_loss': 0.0016764628703683792, 'avg_g_mag_loss': 0.026020999058271363, 'avg_g_cos_loss': 0.010928842550446613, 'pred_duration': 7.159314393997192, 'grad_duration': 2.6302547454833984, 'total_duration': 9.78956913948059, 'pred_std': 0.10647688060998917, 'std_loss': 0.00215106806717813, 'mean_pred_loss': 3.3525986964377807e-06, 'pred_rmse': 0.04094462841749191, 'pred_mae': 0.03046504035592079, 'pred_mape': 0.09343661367893219, 'grad_rmse': 0.43987467885017395, 'grad_mae': 0.24295493960380554, 'grad_mape': 7.0997748374938965}, 'model_metrics': {'realtabformer': {'avg_loss': 0.0016764628703683792, 'avg_g_mag_loss': 0.026020999058271363, 'avg_g_cos_loss': 0.010928842550446613, 'pred_duration': 7.159314393997192, 'grad_duration': 2.6302547454833984, 'total_duration': 9.78956913948059, 'pred_std': 0.10647688060998917, 'std_loss': 0.00215106806717813, 'mean_pred_loss': 3.3525986964377807e-06, 'pred_rmse': 0.04094462841749191, 'pred_mae': 0.03046504035592079, 'pred_mape': 0.09343661367893219, 'grad_rmse': 0.43987467885017395, 'grad_mae': 0.24295493960380554, 'grad_mape': 7.0997748374938965}}}\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-24T03:45:01.520372Z", + "iopub.status.busy": "2024-03-24T03:45:01.519964Z", + "iopub.status.idle": "2024-03-24T03:45:01.524884Z", + "shell.execute_reply": "2024-03-24T03:45:01.523879Z" + }, + "papermill": { + "duration": 0.02466, + "end_time": "2024-03-24T03:45:01.526806", + "exception": false, + "start_time": "2024-03-24T03:45:01.502146", + "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-24T03:45:01.562409Z", + "iopub.status.busy": "2024-03-24T03:45:01.562060Z", + "iopub.status.idle": "2024-03-24T03:45:01.640792Z", + "shell.execute_reply": "2024-03-24T03:45:01.639690Z" + }, + "papermill": { + "duration": 0.099037, + "end_time": "2024-03-24T03:45:01.643399", + "exception": false, + "start_time": "2024-03-24T03:45:01.544362", + "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-24T03:45:01.682076Z", + "iopub.status.busy": "2024-03-24T03:45:01.681124Z", + "iopub.status.idle": "2024-03-24T03:45:01.998932Z", + "shell.execute_reply": "2024-03-24T03:45:01.997894Z" + }, + "papermill": { + "duration": 0.340062, + "end_time": "2024-03-24T03:45:02.001370", + "exception": false, + "start_time": "2024-03-24T03:45:01.661308", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "history = loss[\"history\"]\n", + "history.to_csv(\"history.csv\")\n", + "history[[\"avg_loss_train\", \"avg_loss_test\"]].plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "2586ba0a", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-24T03:45:02.039788Z", + "iopub.status.busy": "2024-03-24T03:45:02.039354Z", + "iopub.status.idle": "2024-03-24T03:49:10.158622Z", + "shell.execute_reply": "2024-03-24T03:49:10.157371Z" + }, + "papermill": { + "duration": 248.142335, + "end_time": "2024-03-24T03:49:10.161745", + "exception": false, + "start_time": "2024-03-24T03:45:02.019410", + "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-24T03:49:10.202994Z", + "iopub.status.busy": "2024-03-24T03:49:10.202021Z", + "iopub.status.idle": "2024-03-24T03:49:10.228075Z", + "shell.execute_reply": "2024-03-24T03:49:10.226971Z" + }, + "papermill": { + "duration": 0.049784, + "end_time": "2024-03-24T03:49:10.230545", + "exception": false, + "start_time": "2024-03-24T03:49:10.180761", + "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.012350.0247040.0016762.6065610.2429557.0997750.4398750.0000037.1857560.0304650.0934370.0409450.1064770.0021519.792317
\n", + "
" + ], + "text/plain": [ + " avg_g_cos_loss avg_g_mag_loss avg_loss grad_duration \\\n", + "realtabformer 0.01235 0.024704 0.001676 2.606561 \n", + "\n", + " grad_mae grad_mape grad_rmse mean_pred_loss pred_duration \\\n", + "realtabformer 0.242955 7.099775 0.439875 0.000003 7.185756 \n", + "\n", + " pred_mae pred_mape pred_rmse pred_std std_loss \\\n", + "realtabformer 0.030465 0.093437 0.040945 0.106477 0.002151 \n", + "\n", + " total_duration \n", + "realtabformer 9.792317 " + ] + }, + "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-24T03:49:10.271759Z", + "iopub.status.busy": "2024-03-24T03:49:10.271381Z", + "iopub.status.idle": "2024-03-24T03:49:10.664282Z", + "shell.execute_reply": "2024-03-24T03:49:10.663177Z" + }, + "papermill": { + "duration": 0.415434, + "end_time": "2024-03-24T03:49:10.666741", + "exception": false, + "start_time": "2024-03-24T03:49:10.251307", + "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-24T03:49:10.709397Z", + "iopub.status.busy": "2024-03-24T03:49:10.708310Z", + "iopub.status.idle": "2024-03-24T03:53:26.541630Z", + "shell.execute_reply": "2024-03-24T03:53:26.540526Z" + }, + "papermill": { + "duration": 255.858046, + "end_time": "2024-03-24T03:53:26.544418", + "exception": false, + "start_time": "2024-03-24T03:49:10.686372", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../contraceptive/_cache_aug_test/realtabformer/all inf False\n", + "Caching in ../../../../contraceptive/_cache_bs_test/realtabformer/all inf False\n", + "Caching in ../../../../contraceptive/_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-24T03:53:26.586968Z", + "iopub.status.busy": "2024-03-24T03:53:26.586522Z", + "iopub.status.idle": "2024-03-24T03:53:26.619429Z", + "shell.execute_reply": "2024-03-24T03:53:26.618313Z" + }, + "papermill": { + "duration": 0.058489, + "end_time": "2024-03-24T03:53:26.622976", + "exception": false, + "start_time": "2024-03-24T03:53:26.564487", + "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-24T03:53:26.666784Z", + "iopub.status.busy": "2024-03-24T03:53:26.665830Z", + "iopub.status.idle": "2024-03-24T03:53:26.673429Z", + "shell.execute_reply": "2024-03-24T03:53:26.672285Z" + }, + "papermill": { + "duration": 0.029344, + "end_time": "2024-03-24T03:53:26.675476", + "exception": false, + "start_time": "2024-03-24T03:53:26.646132", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'realtabformer': 0.38464616315705435}\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-24T03:53:26.716999Z", + "iopub.status.busy": "2024-03-24T03:53:26.716148Z", + "iopub.status.idle": "2024-03-24T03:53:27.259231Z", + "shell.execute_reply": "2024-03-24T03:53:27.258123Z" + }, + "papermill": { + "duration": 0.567621, + "end_time": "2024-03-24T03:53:27.261650", + "exception": false, + "start_time": "2024-03-24T03:53:26.694029", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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6I+evtdCz4k2ojRxzTXXoNVqWbZsWVy1CJS/5I2NjcCRv/ZHp5FlmZUrV/boOlartcvgotVqO133scceIxwOd3mexx9/nGAwGHu8atUqQqEQs2bNOu71OwLVo48+Gnd8xYoVAFxxxRUnuoV+6+l7LfScKBGliZEjR/Lf//3fLFmyhKqqKmbPno3NZmPv3r289NJLLFy4kMWLFzNu3DhGjhzJ4sWLqa2txW6387e//a1TW1F3Jk+ezFtvvcWKFSsoKiqivLycqVOncuWVV/KXv/wFh8PBySefzMcff8xbb71FdnZ2l+cJBAJcdNFFXH/99ezYsYM//vGPnHvuuVx11VXHvf7EiROZN28ejz/+OC0tLUyfPp2NGzeyevVqZs+eHVfKSpaevtdCz4lAlEbuu+8+xowZw29/+1uWLVsGKA2vl156aewXXK/X849//IO7776b5cuXYzKZ+O53v8tdd93FxIkTT3iNFStWsHDhQv7rv/4Lr9fLvHnzmDp1KitXrkSr1fLMM8/g8/k455xzeOutt7rtsfr973/PM888w9KlSwkGg9x444387ne/61Hbz5///GdGjBhBZWUlL730EgUFBSxZsoT777+/F+9W//TkvRZ6TpKPLVsKgiCkmGgjEgRBdSIQCYKgOhGIBEFQnQhEgiCoTgQiQRBUJwKRIAiqG9TjiCKRCAcOHMBmsyV8kXdBEPpPlmXa29spKipCo+m+3DOoA9GBAwc6zZQWBGHgqampYfjw4d0+r3ogqq2t5d577+W1117D4/EwatQoKioqOOOMM074WpvNBig3abfbk51VQRB6qa2tjeLi4tjvandUDUTNzc2cc845XHDBBbz22mvk5uaya9cuMjMze/T6juqY3W4XgUgQBrATNZ2oGoh+9atfUVxcTEVFRezY8RayEgQhPanaa/b3v/+dM844g+uuu468vDwmTZrEE0880W16v99PW1tb3JcgCIOfqoHo22+/ZdWqVYwePZo33niDO+64g7vvvpvVq1d3mX758uU4HI7Yl2ioFoT0oOrse4PBwBlnnMFHH30UO3b33Xfz6aef8vHHH3dK7/f74/aX6mgIa21t7baNSJZlQqFQtwt0Cd3TarXodDoxNELos7a2NhwOx3F/R0HlNqLCwkJOPvnkuGMnnXQSf/vb37pMbzQaMRqNPT5/IBCgrq5O7KzZDxaLhcLCQrH4u5BUqgaic845hx07dsQd27lzZ0LWHY5EIuzduxetVktRUREGg0H8Ze8FWZYJBAIcPnyYvXv3Mnr06OMOSBOE/lA1EP3kJz/h7LPP5qGHHuL6669n48aNPP744zz++OP9PncgECASiVBcXNxpl1GhZ8xmM3q9nurqagKBACaTSe0sJZwsy2yqbub0kkw0GvGHSi2q/ok788wzeemll3juuecYP348Dz74II8++ig333xzwq4h/or3T7q/f4fa/Px7VwNbDvRtPzchMVQfWX3llVdy5ZVXqp0NYYg61OYD4KuaFiYMd6qbmSEsvf/cCUI36tt9BMMRxhbY0EgSDa4Ard7giV8oJIUIRENcWVlZpz3C0l0kIvPCpv2sWr8HTyBMgUPpia1pEr2rahGBSBhy6tv9+IMRdFoJp1lPgUPZEvqwy3+CVwrJIgJRGggEAmpnYVDpaBcqcpjRaCRyM5QS0eF2EYjUMiQDUSAU6fYrFI70OG2wB2n7YsaMGdx1113cddddOBwOcnJy+PnPfx7b3risrIwHH3yQuXPnYrfbWbhwIQAffPAB5513HmazmeLiYu6++27cbnfsvPX19XznO9/BbDZTXl7OM88806f8DXYdgSjPpgSgXNuRQCS2+VOH6r1mavjDu7u7fa48x8rsScNijx9/fw/BcNc/nMMzzVx3xpH5bk99uBdvIH4qyU8uGdOnPK5evZof/vCHbNy4kc8++4yFCxdSUlLCbbfdBsBvfvMbli5dGtvddM+ePcycOZP//u//5qmnnuLw4cOxYNaxusH8+fM5cOAA7777Lnq9nrvvvpv6+vo+5W8wq4+WfPLsSgDKshqYWOzAYdYTjsjotGI8UaoNyUA0GBQXF/Pb3/4WSZIYO3Ysmzdv5re//W0sEF144YX89Kc/jaVfsGABN998M/fccw8Ao0eP5ne/+x3Tp09n1apV7Nu3j9dee42NGzdy5plnAvDkk09y0kknpfze1BQKR2h0KVXZPLsyQFOrkbhwXL6a2RryhmQguvOCUd0+d+zg2oXnj+w27bEzRm49J3FrKZ111llxU1KmTZvGI488Epu8e+wKll999RVff/11XHVLluXYVJedO3ei0+mYPHly7Plx48bhdDoTlufBoMUbJCLLGHQabMYh+eM/IA3JT8Kg63nTWLLS9pfVao177HK5uP3227n7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+X/+539iz7e0tMhGo1F+7rnnknAH3evtvR0rFArJNptNXr16dezYvHnz5KuvvjrRWe2T3t5fRUWF7HA4uj1fOn12v/3tb2WbzSa7XK7YsVR/dqJq1kOBQIBNmzZx8cUXx45pNBouvvhiPv744y5f8/HHH8elB7jsssti6ffu3cvBgwfj0jgcDqZOndrtOZOhL/d2LI/HQzAYJCsrK+74+vXrycvLY+zYsdxxxx00NjYmNO890df7c7lclJaWUlxczNVXX83WrVtjz6XTZ/fkk08yZ84crNb4Ta9S+dmJQNRDx9uV9uDBg12+5uDBg8dN3/G9N+dMhr7c27HuvfdeioqK4n4hZs6cyZo1a3j77bf51a9+xXvvvcesWbMIh8MJzf+J9OX+xo4dy1NPPcUrr7zC008/TSQS4eyzz2b//v1A+nx2GzduZMuWLSxYsCDueKo/u0E9+14YGB5++GHWrl3L+vXr4xp058yZE/v/qaeeyoQJExg5ciTr16/noosu6upUA8a0adPi9tY7++yzOemkk/jTn/7Egw8+qGLOEuvJJ5/k1FNPZcqUKXHHU/3ZiRJRD/V2V1qAgoKC46bv+N6bcyZDX+6tw29+8xsefvhh1q1bx4QJE46bdsSIEeTk5LB79+5+57k3+nN/HfR6PZMmTYrlPR0+O7fbzdq1a/nhD394wusk+7MTgaiH+rIr7bRp0+LSA7z55pux9OXl5RQUFMSlaWtrY8OGDSnd6bavO+7++te/5sEHH+T111/njDPOOOF19u/fT2NjI4WFhQnJd08lYkfhcDjM5s2bY3kf7J8dKENL/H4/3//+9094naR/dilrFk8Da9eulY1Go1xZWSlv27ZNXrhwoex0OmPduj/4wQ/k++67L5b+ww8/lHU6nfyb3/xG3r59u3z//fd32X3vdDrlV155Rf7666/lq6++WrUu4N7c28MPPywbDAb5hRdeiOvibW9vl2VZltvb2+XFixfLH3/8sbx37175rbfekk8//XR59OjRss/nS+m99eX+li1bJr/xxhvynj175E2bNslz5syRTSaTvHXr1liawfrZdTj33HPlG264odNxNT47EYh66bHHHpNLSkpkg8EgT5kyRf7kk09iz02fPl2eN29eXPq//vWv8pgxY2SDwSCfcsop8quvvhr3fCQSkX/+85/L+fn5stFolC+66CJ5x44dqbiVTnpzb6WlpTLQ6ev++++XZVmWPR6PfOmll8q5ubmyXq+XS0tL5dtuu63TWJxU6s393XPPPbG0+fn58uWXXy5//vnncecbrJ+dLMvyN998IwPyunXrOp1Ljc9OLAMiCILqRBuRIAiqE4FIEATViUAkCILqRCASBEF1IhAJgqA6EYgEQVCdCESCIKhOBCJBEFQnApEwqFRWVuJ0OmOPH3jgAU477bTY4/nz5zN79uyU50voHxGIhC51rFn8ox/9qNNzd955J5IkMX/+/Lj0iQ4AZWVlPProo3HHbrjhBnbu3Nnta1auXEllZWXs8YwZM7jnnnsSmi8h8UQgErpVXFzM2rVr8Xq9sWM+n49nn32WkpISVfJkNpvJy8vr9nmHwxFXYhIGBxGIhG6dfvrpFBcX8+KLL8aOvfjii5SUlDBp0qR+nburksrs2bNjpawZM2ZQXV3NT37yk9guEtC5anaso0tm8+fP57333mPlypWxc+zdu5dRo0bxm9/8Ju51X375JZIkpXytJEEhApFwXLfeeisVFRWxx0899RS33HJL0q/74osvMnz4cH7xi19QV1dHXV1dr8+xcuVKpk2bxm233RY7R0lJSad7AqioqOD8889n1KhRiboFoRdEIBKO6/vf/z4ffPAB1dXVVFdX8+GHH/ZoIa3+ysrKQqvVYrPZKCgo6NOqhw6HA4PBgMViiZ1Dq9Uyf/58duzYEdv7KxgM8uyzz3Lrrbcm+jaEHhJrVgvHlZubyxVXXEFlZSWyLHPFFVeQk5Ojdrb6paioiCuuuIKnnnqKKVOm8I9//AO/3891112ndtaGLFEiEk7o1ltvpbKyktWrVyes1KDRaDh2KaxgMJiQc/fEggULYg3xFRUV3HDDDVgslpRdX4gnApFwQjNnziQQCBAMBrnssssScs7c3Ny4dp9wOMyWLVvi0hgMhn5vX9PdOS6//HKsViurVq3i9ddfF9UylYmqmXBCWq2W7du3x/7fndbWVr788su4Y9nZ2RQXF3dKe+GFF7Jo0SJeffVVRo4cyYoVK2hpaYlLU1ZWxvvvv8+cOXMwGo19qhKWlZWxYcMGqqqqyMjIICsrC41GE2srWrJkCaNHj07pgvdCZ6JEJPSI3W7HbrcfN8369euZNGlS3NeyZcu6THvrrbcyb9485s6dy/Tp0xkxYgQXXHBBXJpf/OIXVFVVMXLkSHJzc/uU78WLF6PVajn55JPJzc1l3759sed++MMfEggEUtILKByfWLNaGLL+/e9/c9FFF1FTU9Npp1QhtUQgEoYcv9/P4cOHmTdvHgUFBTzzzDNqZ2nIE1UzYch57rnnKC0tpaWlhV//+tdqZ0dAlIgEQRgARIlIEATViUAkCILqRCASBEF1IhAJgqA6EYgEQVCdCESCIKhOBCJBEFQnApEgCKr7/+HIXI+JKe8ZAAAAAElFTkSuQmCC", + "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-24T03:53:27.307638Z", + "iopub.status.busy": "2024-03-24T03:53:27.307085Z", + "iopub.status.idle": "2024-03-24T03:53:27.784030Z", + "shell.execute_reply": "2024-03-24T03:53:27.782911Z" + }, + "papermill": { + "duration": 0.504473, + "end_time": "2024-03-24T03:53:27.786324", + "exception": false, + "start_time": "2024-03-24T03:53:27.281851", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from ml_utility_loss.loss_learning.visualization import plot_density_3\n", + "\n", + "_ = plot_density_3(y2[\"pred\"], next(iter(y2[\"y\"].values())))" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "745adde1", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-24T03:53:27.829938Z", + "iopub.status.busy": "2024-03-24T03:53:27.828703Z", + "iopub.status.idle": "2024-03-24T03:53:28.083388Z", + "shell.execute_reply": "2024-03-24T03:53:28.082257Z" + }, + "papermill": { + "duration": 0.279131, + "end_time": "2024-03-24T03:53:28.085692", + "exception": false, + "start_time": "2024-03-24T03:53:27.806561", + "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-24T03:53:28.129001Z", + "iopub.status.busy": "2024-03-24T03:53:28.128618Z", + "iopub.status.idle": "2024-03-24T03:53:28.419159Z", + "shell.execute_reply": "2024-03-24T03:53:28.418109Z" + }, + "papermill": { + "duration": 0.315295, + "end_time": "2024-03-24T03:53:28.421859", + "exception": false, + "start_time": "2024-03-24T03:53:28.106564", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAATcAAAEmCAYAAAAHqNcMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABixklEQVR4nO2dd3wT5R/HP5fZPVgdUDaUXWahRVmigIjgAlFZAoKCChWkIFKWFpWlgEwZDmQvWQpl/dhQVhllFsrogO6Zeb8/0lzvsi9NmjR93q9XXm0uz909SS7f++6HommaBoFAILgYAkdPgEAgEOwBEW4EAsElIcKNQCC4JES4EQgEl4QINwKB4JIQ4UYgEFwSItwIBIJLQoQbgUBwSUSOnkB5o1ar8ezZM3h7e4OiKEdPh0Ag6EDTNPLy8hAcHAyBwHr9q9IJt2fPniEkJMTR0yAQCGZ4/PgxatWqZfX+lU64eXt7A9B8cD4+Pg6eDYFA0CU3NxchISHMb9VaKp1w05qiPj4+RLgRCE5MWd1GJKBAIBBcEiLcCASCS0KEG4FAcEkqnc+tokDTNJRKJVQqlaOnQiDYFKFQCJFIZPdULIcKt+XLl2P58uV4+PAhAKB58+aYMWMG+vTpY3D8+vXrMWLECM42qVSK4uJie0+1XJHL5UhJSUFhYaGjp0Ig2AUPDw8EBQVBIpHY7RwOFW61atXCvHnz0KhRI9A0jQ0bNqB///64fPkymjdvbnAfHx8f3L59m3nuaom4arUaSUlJEAqFCA4OhkQicbn3SKi80DQNuVyO58+fIykpCY0aNSpToq4pHCrc+vXrx3n+3XffYfny5Th79qxR4UZRFAIDA+0+t8TUXERtvoqqXhL8MbKj3c+nRS6XQ61WIyQkBB4eHuV2XgKhvHB3d4dYLMajR48gl8vh5uZml/M4TUBBpVJh06ZNKCgoQEREhNFx+fn5qFOnDkJCQtC/f3/cuHHD5HFlMhlyc3M5D4vmo6ZxMyUXt1PzeL0PW2GvuxmB4AyUx/Xt8F9QQkICvLy8IJVKMXbsWOzcuRPNmjUzODY0NBRr167F7t278eeff0KtViMyMhJPnjwxevzY2Fj4+voyD0tLr9zFQgBAkYI49AmEiojDhVtoaCiuXLmCc+fO4dNPP8WwYcNw8+ZNg2MjIiIwdOhQtG7dGl27dsWOHTtQvXp1rFy50ujxp06dipycHObx+PFji+blLikRbnIi3AiEiojDhZtEIkHDhg3Rrl07xMbGIiwsDD///LNF+4rFYrRp0wb37t0zOkYqlTKlVnxKrjzEGnekUk1DoVJbtA/B9jx8+BAUReHKlSvlcpxTp06hZcuWEIvFGDBgQJnOWVk5duwYKIpCdna2Q+fhcOGmi1qthkwms2isSqVCQkICgoKCbD4PN0npR0NMU+fB3j+cqKgotG7dGklJSVi/fr1dzkEoHxwaLZ06dSr69OmD2rVrIy8vDxs3bsSxY8fw77//AgCGDh2KmjVrIjY2FgAwe/ZsdOrUCQ0bNkR2djZ++uknPHr0CKNGjbL53CRCAQQUoKY1pqmPm9jm53B15HK5XfOY7MH9+/cxduzYMrXaKc/3TdM0VCoVRCLb/pQr4neni0M1t/T0dAwdOhShoaF45ZVXcOHCBfz777949dVXAQDJyclISUlhxmdlZWH06NFo2rQpXn/9deTm5uL06dNGAxBlgaIoeEg0F4yj/W40TaNQrnTIg6Zpi+fZrVs3jB8/HhMmTEC1atXQq1cvXL9+HX369IGXlxcCAgIwZMgQvHjxgtnn4MGDeOmll+Dn54eqVavijTfewP379w0e/+HDh+jevTsAwN/fHxRFYfjw4byOk5iYiMjISLi5uaFFixY4fvw4c2yKopCRkYGPP/4YFEUxmtvx48cRHh4OqVSKoKAgREdHQ6lUmnzfWg3z33//RZs2beDu7o4ePXogPT0dBw4cQNOmTeHj44MPPviAk6ytVqsRGxuLevXqwd3dHWFhYdi2bRvzuva4Bw4cQLt27SCVSnHy5Emz383cuXNRo0YNeHt7Y9SoUYiOjkbr1q2Z14cPH44BAwbgu+++Q3BwMEJDQwEAf/zxB9q3bw9vb28EBgbigw8+QHp6OufY+/fvR+PGjeHu7o7u3bszSfmOxqGa22+//Wby9WPHjnGeL1q0CIsWLbLjjLi4iYXIlykdbpYWKVRoNuNfh5z75uxejJC3hA0bNuDTTz/FqVOnkJ2djR49emDUqFFYtGgRioqKMGXKFAwcOBBHjhwBABQUFCAqKgqtWrVCfn4+ZsyYgbfeegtXrlzRSxcICQnB9u3b8c477+D27dvw8fGBu7s7r+NMnjwZixcvRrNmzbBw4UL069cPSUlJCAkJQUpKCkJDQzF79mwMGjQIvr6+ePr0KV5//XUMHz4cv//+OxITEzF69Gi4ublh5syZBt83AOamPHPmTCxduhQeHh4YOHAgBg4cCKlUio0bNyI/Px9vvfUWlixZgilTpgDQRPf//PNPrFixAo0aNcKJEyfw0UcfoXr16ujatStzvujoaMyfPx/169eHv7+/ye/kr7/+wnfffYdff/0VnTt3xqZNm7BgwQLUq1ePMy4uLg4+Pj44dOgQs02hUGDOnDkIDQ1Feno6oqKiMHz4cOzfvx+Api/i22+/jXHjxuGTTz7BxYsX8dVXX5m/UMoBUltqAo+SiGkhiZhaTKNGjfDjjz8C0GgLbdq0wffff8+8vnbtWoSEhODOnTto3Lgx3nnnHc7+a9euRfXq1XHz5k20aNGC85pQKESVKlUAADVq1ICfnx/zmqXHGT9+PDN2+fLlOHjwIH777Td8/fXXCAwMBEVR8PX1ZRLFf/31V4SEhGDp0qWgKApNmjTBs2fPMGXKFMyYMYMRnOz3DZQKt7lz56Jz584AgJEjR2Lq1Km4f/8+6tevDwB49913cfToUUyZMgUymQzff/89Dh8+zOR61q9fHydPnsTKlSs5wm327NmMhWOOJUuWYOTIkUzp4owZM/Dff/8hPz+fM87T0xNr1qzhmKMff/wx83/9+vXxyy+/oEOHDsjPz4eXlxeWL1+OBg0aYMGCBQA02Q8JCQn44YcfLJqbPSHCzQTaXLdiB2tu7mIhbs7u5bBz86Fdu3bM/1evXsXRo0fh5eWlN+7+/fto3Lgx7t69ixkzZuDcuXN48eIF1GpNZDo5OVlPuJnC0uOwE8RFIhHat2+PW7duGT3urVu3EBERwSmB69y5M/Lz8/HkyRPUrl1b732zadWqFfN/QEAAPDw8GMGm3Xb+/HkAwL1791BYWKgntORyOdq0acPZ1r59e6Nz1uX27dv47LPPONvCw8MZ7VlLy5Yt9fxs8fHxmDlzJq5evYqsrCzO59qsWTPcunULHTtyK3hMJeGXJ0S4mcDNSTQ3tv/P2fH09GT+z8/PR79+/QzexbUR7n79+qFOnTpYvXo1goODoVar0aJFC8jlcl7ntdVxrIX9vtmIxaWBKIqiOM+127QCQ6tJ7du3DzVr1uSMk0qlFp2vLOges6CgAL169UKvXr3w119/oXr16khOTkavXr3K7XMtCxXjF+MgPEiVQplo27Yttm/fjrp16xqM5mVkZOD27dtYvXo1Xn75ZQAw6xzXahbsVlB8jnP27Fl06dIFAKBUKhEfH4/x48cbPV/Tpk2xfft20DTNaG+nTp2Ct7d3mSKqhmjWrBmkUimSk5M5JmhZCQ0NxYULFzB06FBm24ULF8zul5iYiIyMDMybN4+p7Ll48SJnTNOmTbFnzx7OtrNnz9pg1mXH6fLcnAltlUIx8blZxbhx45CZmYnBgwfjwoULuH//Pv7991+MGDECKpUK/v7+qFq1KlatWoV79+7hyJEjiIqKMnnMOnXqgKIo7N27F8+fP0d+fj6v4yxbtgw7d+5EYmIixo0bh6ysLI5fSZfPPvsMjx8/xueff47ExETs3r0bMTExiIqKsnl9pLe3NyZNmoSJEydiw4YNuH//Pi5duoQlS5Zgw4YNVh/3888/x2+//YYNGzbg7t27mDt3Lq5du2a220zt2rUhkUiwZMkSPHjwAHv27MGcOXM4Y8aOHYu7d+9i8uTJuH37NjZu3Og0+YFEuJlA628qlCvNjCQYIjg4GKdOnYJKpcJrr72Gli1bYsKECfDz84NAIIBAIMCmTZsQHx+PFi1aYOLEifjpp59MHrNmzZqYNWsWoqOjERAQgPHjx/M6zrx58zBv3jyEhYXh5MmT2LNnD6pVq2byfPv378f58+cRFhaGsWPHYuTIkZg+fXqZPhtjzJkzB99++y1iY2PRtGlT9O7dG/v27dOLbPLhww8/xNSpUzFp0iS0bdsWSUlJGD58uNluHNWrV8f69euxdetWNGvWDPPmzcP8+fM5Y2rXro3t27dj165dCAsLw4oVKzgBJEdC0XwSmVyA3Nxc+Pr6Iicnx2wp1qStV7Et/gmm9G6CT7s1KJf5FRcXIykpCfXq1bNbKxgC4dVXX0VgYCD++OMPh5zf1HXO5zdqCuJzMwHpDEJwBQoLC7FixQr06tULQqEQf//9Nw4fPszJZ3NFiFlqAg+mMwgxSwnOg1rH2GrevDm8vLwMPv766y9QFIX9+/ejS5cuaNeuHf755x9s374dPXv2dNA7KB+I5mYCN6K5EZyMtNxipOUWo0F1L3hKNT/f/fv3Q6FQGBwfEBAAd3d3HD58uDyn6RQQ4WYCdyfJcyMQtKTlahZDepZThEY1vAFoIsgEfYhZagKtWeroCgUCgcAfItxMwJilRHMjECocRLiZoDTPjQg3AqGiQYSbCYhZSiBUXIhwMwHJcyMQKi5EuJmAREvLl7p162Lx4sXMc4qisGvXLofNx5kxXRVKAEgqiEnciVnqUFJSUsx2mSUQjEGEmwlIQMGxaLvhOhJ7LcBCsD8ONUuXL1+OVq1aMeuJRkRE4MCBAyb32bp1K5o0aQI3Nze0bNmS6eVuD5iFmRUqXgul2ByaBuQFjnnwfN95eXn48MMP4enpiaCgICxatAjdunXDhAkTeL9ttlmqXcBlx44d6N69Ozw8PBAWFoYzZ85w9jl58iRefvlluLu7IyQkBF988QUKCgqY180teGLtAiwE58Oht6NatWph3rx5aNSoEWiaxoYNG9C/f39cvnwZzZs31xt/+vRpDB48GLGxsXjjjTewceNGDBgwAJcuXeLVktpStJobTQMypZrJeyt3FIXA98GOOfe0Z4DE8q6vUVFROHXqFPbs2YOAgADMmDEDly5d4qy0VBa++eYbzJ8/H40aNcI333yDwYMH4969exCJRLh//z569+6NuXPnYu3atXj+/DnGjx+P8ePHY926dQDML3iihc8CLATnxKHCrV+/fpzn3333HZYvX46zZ88aFG4///wzevfujcmTJwPQ9L46dOgQli5dihUrVth8fuz1A4rkKscJtwpCXl4eNmzYgI0bN+KVV14BAKxbtw7BwbYTzJMmTULfvn0BALNmzULz5s1x7949NGnSBLGxsfjwww8ZLbFRo0b45Zdf0LVrVyxfvhxubm5mFzzRwmcBFoJz4jSOBJVKha1bt6KgoMDoAhNnzpzR67Daq1cvkxE1mUzGWcE+NzfX4jmJhAJIhALIVWoUKVRw2P1b7KHRoBx1bgt58OABFAoFwsPDmW2+vr7MGpi2gL3ginYdhvT0dDRp0gRXr17FtWvX8NdffzFjaJqGWq1GUlISmjZtanbBEy18FmAhOCcOF24JCQmIiIhAcXExvLy8sHPnTqOLLKempiIgIICzLSAgAKmpqUaPHxsbi1mzZlk9PzdxqXBzGBTFyzR0ZXQXXAHAWWBlzJgx+OKLL/T2q127Nq8FT+yxAIttIckg5nC4cAsNDcWVK1eQk5ODbdu2YdiwYTh+/LjNVpGfOnUqR9vLzc1lFruwBA+JCLnFSlJfagH169eHWCzGhQsXmCXvcnJycOfOHWZRFnvStm1b3Lx5Ew0bNjT4ekJCgtkFTwiug8OFm0QiYS7Gdu3a4cKFC/j555+xcuVKvbGBgYFIS0vjbEtLSzOZMiCVSvWWReMDO2JKMI23tzeGDRuGyZMno0qVKqhRowZiYmIgEAjMLkZiC6ZMmYJOnTph/PjxGDVqFDw9PXHz5k3GL8te8GTs2LG4fv263oInBNfB6SoU1Go1x0fGJiIiAnFxcZxthw4dsusisG4k140XCxcuREREBN544w307NkTnTt3RtOmTctlPYhWrVrh+PHjuHPnDl5++WW0adMGM2bMYAIalix4QnAhaAcSHR1NHz9+nE5KSqKvXbtGR0dH0xRF0f/99x9N0zQ9ZMgQOjo6mhl/6tQpWiQS0fPnz6dv3bpFx8TE0GKxmE5ISLD4nDk5OTQAOicnx6Lxb/96iq4zZS99ICGF35uzkqKiIvrmzZt0UVFRuZzP3uTn59O+vr70mjVrHD0Vl+Dq4yz66uMs+m5anqOnUiZMXed8f6PGcKhZmp6ejqFDhyIlJQW+vr5o1aoV/v33XyYEn5yczFkbMjIyEhs3bsT06dMxbdo0NGrUCLt27bJLjpsWbToIKcGyjMuXLyMxMRHh4eHIycnB7NmzAQD9+/d38MxcCxqVatE6q3CocPvtt99Mvn7s2DG9be+99x7ee+89O81IH1I8z5/58+fj9u3bkEgkaNeuHf73v//h1q1b6NOnj9F98vPzy3GGFZ8iuQq5RQr4uIvND66kODyg4OyQtkf8aNOmDeLj4/W2FxUV4cqVK+U/IRfmYUYBWtXyc/Q0nBYi3MxAzFLb4O7ubjRFg0CwB04XLXU2Ss3S8l27lHZkoT6BYGfK4/omws0MTJ6bXF0u59Nm4BcWFpbL+QgER6C9vtkVJ7aGmKVmKPW5lY/mJhQK4efnx7Th8fDwKJcEWELFgFaWlolRFIXi4mIHzoY/NE2jsLAQ6enp8PPzg1Bov2YURLiZwUNS/sv7aSsu2H3GCAQASM8qYv4XUIC40N2Bs7EePz8/uzcjJcLNDG4OiJZSFIWgoCDUqFEDCoWi3M5LcH5G7TjG/O8pFWHP+JccNxkrEYvFdtXYtBDhZgYPB+a5CYXCcrkICBWHp3ml12EVtbBcytoqKiSgYAaSCkJwVoQC4os1BRFuZnAjXUEIToqYCDeTEOFmBg/SFYTgpIiE5OdrCvLpmIFZu5QIN4KTISKam0mIcDMDs3YpMUsJToZISISbKYhwM4O7A/LcCARLEArIz9cU5NMxg1ZzkynVUKtJvSfBeSAuN9OQj8cMHpLSVEASMSU4E+ryKXeusBDhZgapqPQjIsKN4EyoSecYkxDhZgaBgIKbWPMxEb8bwVYcvJ6CX4/dK9MxiGwzTZnKr/Lz85kFcbX4+PiUaULOiIdEhGKFnGhuBJsxfdcNvMiXoW/LINSpat0C0ERzMw1vzS0pKQl9+/aFp6cnfH194e/vD39/f/j5+cHf35/XsWJjY9GhQwd4e3ujRo0aGDBgAG7fvm1yn/Xr14OiKM7D3vV1TNsjorkRbERukaYhQr7M+lZaRLiZhrfm9tFHH4GmaaxduxYBAQFl6jV2/PhxjBs3Dh06dIBSqcS0adPw2muv4ebNm/D0NH438/Hx4QhBe/c705qlpEqBYAuUKjXkKo3FI1daHxUgss00vIXb1atXER8fj9DQ0DKf/ODBg5zn69evR40aNRAfH48uXboY3Y+iKLv3gmKjjZiS4nmCLWC7N8oi3IjmZhreZmmHDh3w+PFje8wFOTk5AIAqVaqYHJefn486deogJCQE/fv3x40bN4yOlclkyM3N5Tz4QlbAItgStntDobJeQJG0S9Pw1tzWrFmDsWPH4unTp2jRooVeD/RWrVpZNRG1Wo0JEyagc+fOJhdZDg0Nxdq1a9GqVSvk5ORg/vz5iIyMxI0bN1CrVi298bGxsZg1a5ZVc9JC1i4l2BKO5qay/poimptpeAu358+f4/79+xgxYgSzjaIo0DQNiqKgsvLLGjduHK5fv46TJ0+aHBcREYGIiAjmeWRkJJo2bYqVK1dizpw5euOnTp2KqKgo5nlubi5CQkJ4zY1obgRbwr5JEp+b/eAt3D7++GO0adMGf//9d5kDClrGjx+PvXv34sSJEwa1L1OIxWK0adMG9+4ZzhmSSqWQSqVlmh/pDEKwJeybpIz43OwGb+H26NEj7NmzxyYL7NI0jc8//xw7d+7EsWPHUK9ePd7HUKlUSEhIwOuvv17m+RiDmKUEW2I7nxsRbqbgHVDo0aMHrl69apOTjxs3Dn/++Sc2btwIb29vpKamIjU1FUVFpSv8DB06FFOnTmWez549G//99x8ePHiAS5cu4aOPPsKjR48watQom8zJEMQsJdiSIhuZpSpSW2oS3ppbv379MHHiRCQkJKBly5Z6AYU333zT4mMtX74cANCtWzfO9nXr1mH48OEAgOTkZAhYrV2ysrIwevRopKamwt/fH+3atcPp06fRrFkzvm/FYkqTeMt31XmCa1LISQWx/oZZHqu2V2R4C7exY8cC0GhQuvANKFjy5Rw7dozzfNGiRVi0aJHF57AF7mQdBYINKSZmabnAW7jp1pJWBkrN0sr33gm2p5BlAcjLYFuSPDfT8PK5KRQKiEQiXL9+3V7zcUpKV50nZimh7BSSaGm5wEu4icVi1K5d2+pctooKMUsJtoRrlpI8N3vBO1r6zTffYNq0acjMzLTHfJwSN9IVhGBDbJXESzQ30/D2uS1duhT37t1DcHAw6tSpo9e949KlSzabnLPgQfLcCDaEFM6XD7yF24ABA+wwDedGG1AgXUEItqDIRmYpCSiYhrdwi4mJscc8nBpSoUCwJbbS3Eiem2msbjMeHx+PW7duAQCaN2+ONm3a2GxSzgapUCDYEvZNUqZSQ6lSY/zGy2hT2w9jujaw+DhEczMNb+GWnp6O999/H8eOHYOfnx8AIDs7G927d8emTZtQvXp1W8/R4TCF8waEm0pNQyggK38TLId9k1Qo1Th8Kw0Hb6Ti4I1UnsKNSDdT8I6Wfv7558jLy8ONGzeQmZmJzMxMXL9+Hbm5ufjiiy/sMUeH4yHW3AMUKprjI/n7fDJazvwX5x5klOn4mQVy/O/uc7LocyWBU1uqUutZBGm5xdifkAKVmeuByDbT8BZuBw8exK+//oqmTZsy25o1a4Zly5bhwIEDNp2cs+AmMbx26al7L1AoV+Hqk+wyHb/X4hMY8tt5bLv0pEzHIVQMdH1uAp22YXP23sRnf13C8Tvp5T01l4K3cFOr1XrF8oAmwddVS7MkQgG0lic7AVPrOynrHfR5ngwA8N+NtLIdiFAh0I2W6gq3rEI5gNLrgmAdVrU8+vLLL/Hs2TNm29OnTzFx4kS88sorNp2cs0BRFLNITCFHuGnKsYh1QOADp7ZUqdbz2WpvlmUpzSJYIdyWLl2K3Nxc1K1bFw0aNECDBg1Qr1495ObmYsmSJfaYo1PgZiBiaqpi4XFmIYavO4/T91/YfW6EioVuJ1625qZS04xwK0uaCMGKaGlISAguXbqEw4cPIzExEQDQtGlT9OzZ0+aTcyYMVSmYMkv3JaTg2O3n8PeQILJBtXKZI8H5UatpFLO6y8hVXM1NoVIzUVCiuZUNq/LcKIrCq6++ildffdXW83FaDFUpMMLNgGGaVaDxmyhJBJTAolinOaVCpYaQZT8p1aVXk4zkVZYJq4RbXFwc4uLikJ6erhdEWLt2rU0m5my4SfSL5wtNtEDKLlQA4JeLZIO1dghOjm6Vi260VKFUM05cSzQ3tZqGgORZGoS3cJs1axZmz56N9u3bIygoyCarX1UEPEo0t0JDmpsB+aWNeJESGQIbXT+trl9NoVYzloAlwk1F0xCgcvwG+cJbuK1YsQLr16/HkCFDynzy2NhY7NixA4mJiXB3d0dkZCR++OEHhIaGmtxv69at+Pbbb/Hw4UM0atQIP/zwg11XvwL0l/dTqWmTF192UYnmRtwmBBa6CbsKFc25OSpVNFNWZZHmRm6eRuEdLZXL5YiMjLTJyY8fP45x48bh7NmzOHToEBQKBV577TUUFBQY3ef06dMYPHgwRo4cicuXL2PAgAEYMGCA3bsD69aXmjJJASC7RHMjFx+BjVZz01qScqWaU4mgVNGMti+zYPEYcvM0Dm/hNmrUKGzcuNEmJz948CCGDx+O5s2bIywsDOvXr0dycjLi4+ON7vPzzz+jd+/emDx5Mpo2bYo5c+agbdu2WLp0qU3mZAzdziBs88KQ6Vnqc7PrtAgVDO314+OuSYSXq9RQsa4fuUpdGlCw0CwlGIa3WVpcXIxVq1bh8OHDaNWqlV61wsKFC62eTE5ODgCgSpUqRsecOXMGUVFRnG29evXCrl27rD6vJehrbmzhxh1L07RVAQWC61Ok0Gj8vu5i5hphCzGlWs0rz41cX8bhLdyuXbuG1q1bA4CeKViW4IJarcaECRPQuXNntGjRwui41NRUBAQEcLYFBAQgNTXV4HiZTAaZrLSMJTc316r56S4SY6q3W5FCxaxqRC4+Apsiuea68HUvVQrY6UVKFc1LcyPNFozDW7gdPXrUHvPAuHHjcP36dZw8edKmx42NjcWsWbPKfBzdCgW2z0338soquSMDxCwlcNFeN2zhxs5nU6jUpT43C/LcyPVlHN4+N3swfvx47N27F0ePHkWtWrVMjg0MDERaGrfAPC0tDYGBgQbHT506FTk5Oczj8ePHVs2RWQGr5M5ryizVBhM0r/HIc7NqZoSKhFZL85KKSpsxsCoW2NFTi3xuRLoZxaHCjaZpjB8/Hjt37sSRI0dQr149s/tEREQgLi6Os+3QoUOIiIgwOF4qlcLHx4fzsAbGLFXom6W6FQrZHM2NXHyEUrTXjbtYCIlI8/PjmqWleW7E51Y2rG4zbgvGjRuHjRs3Yvfu3fD29mb8Zr6+vnB3dwcADB06FDVr1kRsbCwA4Msvv0TXrl2xYMEC9O3bF5s2bcLFixexatUqu85Vd3k/rZAzBEe4kVA9gYXWreEuEUIiFKBYwW1WqVCzNTdLzFIi3IzhUM1t+fLlyMnJQbdu3RAUFMQ8Nm/ezIxJTk5GSkoK8zwyMhIbN27EqlWrEBYWhm3btmHXrl0mgxC2QDdaWiAzbpZmscxScvER2BQZ1NxY0VKVmlcSLzFLjcNbcztx4gQiIyMhEnF3VSqVOH36NLp06WLxsSzxRx07dkxv23vvvYf33nvP4vPYAg+d2lJOnpvO2JyiUs2NyDYCG+3N0aNEcwO4xfScgIJF0VI7TNJF4K25de/e3eBq8zk5OejevbtNJuWMmMpz00XbEQQghfMELtrrxk3C0tw4nXlLrxfLoqXk7mkM3sKNpmmD+WwZGRl6q8+7EroVCoVsn5vOBZZdRAIKBOBOWh7+ufqMY6EwPje2WcrS3DhJvBYs2KxboXD9aQ62XHxMGjaAh1n69ttvA9Ak6g4fPhxSqZR5TaVS4dq1azarOXVGdJf3K5QZN0uzOT4368/5KKMA4zdeRsLTHMx/LwzvtjOdJkNwLl5bdAIA4OchxsuNNEteKkpMTbFQALFQ3+emUNKcZpXGlAktukm8X2+7hpspuWhZ0xdNg6zLDHAVLBZuvr6+ADSam7e3NxPNBACJRIJOnTph9OjRtp+hk+CuEy01ZZayo6VluYOO/fMSbqVoKiombb1KhFsF5XZqHiPctFcDRcFgKoim5ZEGmtaYqRKRCeGmc3lllrhE8opNN3aoDFgs3NatWwcAqFu3LiZNmuTSJqghGLNUoQJN05xUENPRUuvP+eB5vvU7E5wGbRoRUHqtUKCYgEKRbvkV64KSKVWMEDSEbrRUeyxillrhc4uJial0gg0o1dxoWmMumErizbGRz43461wDtnDT6m5czY1doaDmXE3mEnl1rxGtFuh0V07qdeDwzHJNH+At3NLS0jBkyBAEBwdDJBJBKBRyHq6KO+sCLVaojJql7I4gQNk0N5LDVHFha05uYgFru+avgAKjuXFrS2mOZDKXDsIWbjRd2kDVqe6LifuA314DTi4C4teX22l557kNHz4cycnJ+PbbbytVm3GRUACJUAC5SqO1cQrnWRdSvkzJWRSmLOYBkW0VF3ZKh5uo9MaoFUYUKKPlV2qOWWpauLFvgOyxhhYtKndoWiPQ4mYDoIH63YDmA8rt9LyF28mTJ/G///2PaXtUmXATa4RbkY7mxr6M2FobYN60/GZngi2nSHAS2H40KVtz0/5DgYmW6pVfsY5jrgSLfX1x1mdwtGxTFAP/fAlc26R53mE00DsWEIpN72dDrFq3tLI6Kz0kIuQWK1EkVxldkFlXuJkzLf86l2yz+RGcB7apKRbqm6UUDPvclCo1xxIw73Mr/Z+dL+fQX2h+OrDpQ+DJeYASAn1+AMLLP5OCt89t8eLFiI6OxsOHD+0wHeeGaXukq7mxriR2pFT3NXNQpOmRy8AWWOxvVXs5CCjKYBKvgtUVBOBnlrLP6TD9IzUBWNVdI9jcfIGPtjtEsAFWaG6DBg1CYWEhGjRoAA8PD70244ZKs1wFdmcQbrPK0itJW50gFlJQqGgS8ayk6C6+rEVr9VCsgAL7ElGoaE69qExheUCB7btziM/t1l5gxyeAogCo2hAYvBmo1rD851ECb+G2ePFiO0yjYqAtns8tVnAcxuzrSFud4O8hQXqejAQFKinFRupCGbOUlQrCRqlTCW/W58Yazvbdles9laaBkwuBuDlgAgfvrQfc/ctxEvrwFm7Dhg2zxzwqBNp0kMwCudExWp9bFU+tcCPSrTLCMRFZ27UaFTuJl41uEq85n5vKqOZWTiiKgX++AK6VtClzQODAGFb1c7t//z6mT5+OwYMHIz09HQBw4MAB3Lhxw6aTcza0ZmlGvo5fjfW/1udWxVOieY3ItkqJ7uLLWsxpbnKdJF4+eW4yjs+tHC68/HRgwxsawUYJgb4LgL7znUKwAVYIt+PHj6Nly5Y4d+4cduzYgfx8TYnQ1atXERMTY/MJOhNaszSjQMbZzr6QcliaG2BdlUGBTIndV55aO02CE2DeLKU4UVQtSp0V6M2bpfodR4By0NxSrpUEDi6UBg46jLL3WXnBW7hFR0dj7ty5OHToECQSCbO9R48eOHv2rE0n52y4G9Hc2OhqbtYIt6+3X8OXm67wnyDBaTAm3EqTeI373KxN4uWc057S7dZeYG0vIPeJJnAw6gjQwPl6OfIWbgkJCXjrrbf0tteoUQMvXrywyaScFXdGczOe7qGNlpYKN/7n2XctxfwggtPxIl+Go7fToVSpjUY5DXUFYaNQ0TxrS0v/5/r57CDdaBr43wJg84eAolATOBh12KERUVPwDij4+fkhJSVFb6Wqy5cvo2bNmjabmDPCCLd8HbOU9b82oFCV8bnZtxOvUqXG0+wi1Kla+ZoZOBvR26/h8K10vNuuFlrV8mW2cy4BpraUgkSo/4UrdJJ4+fjciu0ZLdUNHIR/AvSKBYQOXWPKJLw1t/fffx9TpkxBamoqKIqCWq3GqVOnMGnSJAwdOpTXsU6cOIF+/fohODgYFEVh165dJscfO3YMFEXpPYytNm9rGLPUZLRUa5ZqmnnaOxVk7J/x6PrTMey5+sy+JyKY5fAtTXBtW/wT4z43mDFLVTTYt0tzrcZVRnxuNiUvTT9w8PpPTi3YACuE2/fff48mTZogJCQE+fn5aNasGbp06YLIyEhMnz6d17EKCgoQFhaGZcuW8drv9u3bSElJYR41atTgtb+1aAMKuiVW2rukWk0z7Y78PTURI3ungmh/UGtPJtn1PATLEVBcE5GNVhZpknj1u+goWKtfAXyjpXbQ3FKuAat7lAQO/IAhO5wucGAM3qJXIpFg9erV+Pbbb3H9+nXk5+ejTZs2aNSoEe+T9+nTB3369OG9X40aNeDn58d7v7LC7ctVivZunFesZC5MxudWTlm8laQ5S4VAKKBMpIIwXjeDHXaVat1mlTzMUqXh3DqrufVPScVBoSZw8MEWoGoDWxy5XLBar6xduzZq165ty7lYTOvWrSGTydCiRQvMnDkTnTt3LpfzajU3Y2gjpR4SIdPmprzy3Ihscx4EFGXCLNVAUZoSPV10m1Waj5aW/s/1uZXhwtMGDo7M0Tyv3x14b53DKw74YpFwi4qKwpw5c+Dp6YmoqCiTYxcuXGiTiRkiKCgIK1asQPv27SGTybBmzRp069YN586dQ9u2bQ3uI5PJIJOVBgByc3OtPr+7Mc2t5DrSRkr9PSQQlKhSfMzSslyPAqK6OQ1CAWU0clnarJIyHi3lked2Jy0Pz/NkqO4tNbmWrsUoioE9nwMJWzTPK0DgwBgWzfjy5ctQKBTM/8awd+PK0NBQhIaGMs8jIyNx//59LFq0CH/88YfBfWJjYzFr1iybnN/NQs3N113MmIl8rFLdZdp02Rb/BG1q+6FBdS+914hscx4EFGU0EFBqlAJSgwEFfnluq048wKoTD/BwXl+uWWqNdMtL06R5PLmgCRy8/hPQYaQVB3IOLBJuR48eNfi/MxAeHo6TJ08afX3q1KkcbTM3NxchISFWncvDiOamRVud4O8phkDAX3NTmlmnctLWqwCAh/P66r1WWToiVwQElGVdQQxWKKhpbptxM11B2HBNYZ7SLeUa8PdgTWKumx8w8Hegfld+x3AyKp6uqcOVK1cQFBRk9HWpVMpZY7UsuOtobm5iAYoVauaC1Wpufu4SCBjNjYdwK0PwgYg2x8Jeq1agY5aefZCJyAbVAFhQW6rUWSDGgoWZtVid58YJHDQCPthcoQIHxrBIuGkXZLaEHTt2WDw2Pz8f9+7dY54nJSXhypUrqFKlCmrXro2pU6fi6dOn+P333wFo2i3Vq1cPzZs3R3FxMdasWYMjR47gv//+s/icZUHX5+YpEaFYIWcuRm2KiJ+HmOVzs/z4ZVkQhihujuW9FWeY/4U6AYVf4u4i6tXGAFh5bpSRriBqNTdayiN3jXdXEIOBg/WAu5/F53RmLBJu2gWZAY1avXPnTvj6+qJ9+/YAgPj4eGRnZ/MSggBw8eJFdO9eWpOmNR+HDRuG9evXIyUlBcnJpW245XI5vvrqKzx9+hQeHh5o1aoVDh8+zDmGPdHV3DykQmQUlD7X3r39PNg+t/LR3EhAwbHcTS9dY5aiTKWClIyBEbNUpbuGAh/NjYfPTS9wMAbo9X2FDBwYw6J3ol2QGQCmTJmCgQMHYsWKFcxSfiqVCp999hl8fHx4nbxbt24mQ9br16/nPP/666/x9ddf8zqHLTGkuQGmo6U0rbkhWOITM+dzMwWRbc6DUGBJEi9lMKAgNxFQMPVbUatpyzvx5qUBmz4Anl50icCBMXhXKKxduxaTJk3irFEqFAoRFRWFtWvX2nRyzoaHRKTzvCSXDVqfm0a4+bqLOZqUpcpbWczSU/cysO4UqVJwBoSmoqXmuoLopILIlZb50RRqtWWdeFOuaioOnl4sqTjY6ZKCDbBCuCmVSiQmJuptT0xMhFptveZREdC903pKuZpbDqvFuIClSVlqmpbFLAWAWf/c5KztQOCS8CQHB6/bvw5ZE1Aw7SszluemVPNL4mX2U9FGu/8y3NwDrO1d0qqoETD6SIWPiJqCt4E9YsQIjBw5Evfv30d4eDgA4Ny5c5g3bx5GjBhh8wk6EwIBxURIAf2KhSxWQIFthloqs2yxwjxnbQcCh35LNSlDB758GU2D+LlQ+CCgKBQaTQXR/DWWCqJQ0WB7P2QWllQpVGqd2lLWaJoG/jcfODJX87xBD+DddS4TODAGb+E2f/58BAYGYsGCBUhJ0fQdCwoKwuTJk/HVV1/ZfILOhkdJhBRg+dxKXisNKFinuSnK4HPTcvLuC/RtZTw1hgA8yiiws3Az0YmX1RVEJKBAUfomJPsGZVRg6aBQ0YZz6xRFJYGDrZrnLhg4MAbvdygQCBjHvraUiW8goSLDDip4SEvrR5UqNXKLNSYhOxVE+7ol2EJzG7fxEn6J88aHnWpjaETdMh/PFbF3wrPAROE88xVTpekgpkxPdp6bqaujWKHiCEWaBjdwIBBpAgftP+bxTio2Vi0Qo8XHx6dSCTZAk7irxZMVYNAKNgDw0wkolJfPTcvttDzM2O3ai/WUBWNpM/sTUjBx8xWz/jJddKPcajVt9IZWGlDQzMFQrhsbmVKN+EdZmL4rgWmnZYgCHV+rT/ZNYHV3buCgEgk2wMoKhW3btmHLli1ITk6GXM5t3Hjp0iWbTMxZYUdMS/PeaKY6wVsqgkgogFJd+gOxVLjZQnMjmEdgRHH77C/Ntds4wBufdrM8Q79QRxia8ntqX9HOQSISADKjw0HTwDvLTwMwXYqVx7q59hKcR5eTKwFVkUtVHPCFt+b2yy+/YMSIEQgICMDly5cRHh6OqlWr4sGDB1b1ZqtoaM1SiUgAkaA0l43xt5U0qRQK+AcUbKW5EUxjLuH5eZ4JaWMAdjcOwEyEk5XnBhhOBzHGQ3bGuA55xQoANMYJd2GlZDFEqiJN4GDU4Uop2AArhNuvv/6KVatWYcmSJZBIJPj6669x6NAhfPHFF8jJybHHHJ0KrbbmIRFyfDdM6ZW7pkkl1+dmWGjpbieaWzmhI9vuP8/HwkN3mOd8F1cplOtqbsaFG7P6VckcDEVMjSESGB9bUJCPxeJlmCzWVBzcrfcR8MFWl4+ImoK3WZqcnIzIyEgAgLu7O/Ly8gAAQ4YMQadOnbB06VLbztDJ0GpubH8bTXPTQADoREsNH0s/Sma/PEFLqyQqA7qa26sLj3O+I77tgnRzC02tWMVueQTw09zERsZWRxYiTgxFNeF1KGghYpTD0ab5RDSqBBFRU/DW3AIDA5GZmQlA041Xu1ZpUlJS+axy7WC0mhu7zpQGzUkDAaCT52b4c9HdrrRTjtqyo/fQ8fs4PM4stMvxKxq6Pjfdmw/f61jXLDXVyYPWNUt5aG5iA87C5tRD7JZ+i2o515FNe2KoIhobVa/Yf1HmCgBv4dajRw/s2bMHgCahd+LEiXj11VcxaNAgg+uZuhpcs7R0u9Ys9S/R3ACYbXuk+6Oyl+b207+3kZ4nw0//3rbL8SsalJkGUXwFg65Zasi9oBWYpV1BNNtNaW4iHWEm0mlL3ktwHlslsxBMZSLDvS76y+fgjLp5yQl5vQWXhLfeumrVKqbMaty4cahatSpOnz6NN998E2PGjLH5BB1K/Aag7ksch6zWLHUXC5kfCU0D2UXaXm5s4UZBTRtPC9DT3HQWB7E15jr9ujLsz9VYtLR0LL9j6wo3Q8iUariJhZyuIIBpzc1NLES+rNTkFTFjaYwX7sIksSYx97iqFU43/BGPLmQyY+2yKHMFg5dwUyqV+P777/Hxxx+jVq1aADTrmL7//vt2mZxDuX1Aswitu7+mK2m9LgBYPjcpy+cGts9NwmzX+HZoo4ECQz8iUj5lH9iftTnfI1/BUKQwX88rU+gINwuipVKRAOz1vyVCAaSQ40fxKvQXatJD1il7Ya7yI/RXuXPfA7mM+JmlIpEIP/74I5TKSlCcHdwGqNkOKMoC/ngLuKhp+8T2ubF/Izk6AQUAZnu6GfoR2TOoUJlv5uzvwFxcha9gKJCZ19y0pVFaDVJggVmqu5SkvyoDmyVz0F94GgpaiKmKkZilHAYVhJw8N6BSf9UMvH1ur7zyCo4fP26PuTgX3oHA8H1Ai3cBtRLYOwHY/zXCgr0gFFBoW9ufMS000dLSjiBa2D3dDGFIobNrxLQSX/Lsz9pcnhvfT0k3oGBqTGm0VDMH9vJ+XlKuIcWuhmlOJeGLpLFoLbiPLNoLQxXR+Fv1CvN6vq5wq7xfNQNvn1ufPn0QHR2NhIQEtGvXDp6enpzX33zzTZtNzuGI3YF31gA1mmg6KpxfiZcy7uJ69G9w96mClcfvA9BGS0t6ufEKKOhv59Mzny+V+YJXO9jnVqq5aZ5r5auI5XPz9xRzfGxaza234DwWiX+Fu0KOe+pgjFRMwiM6kHP8PBm3NKsy38i08BZun332GQDD65NSFAWVil9dntNDUUCXyUC1UGDnGOD+EbhveA34YHOpecOqUDCkuRnNczMgxyxJB9HmrPENPhy4norMAjmqeErMD3YxuD43c2N5JvFa4HPTam766T+lF0EVTykeZxYxz91EAowX7mQCB/d8OuKt9NHIg4fe8Ynmpg9vs1StVht9uJxgY9PsTeDjg4BPTSDjLrC6B2pmXgCg0bYKSi5edrTUnM/NoOZmQXNCNQ3kFisQs4d/cfznf1/C+aRMpOYU8963IsP1uZkxS3kKBkvMUm0PQMYsLZkCO4Dk41aqa0ghR1Tej4xgW6vsje1NFhoUbACIz80AZeoKUlZOnDiBfv36ITg4GBRFYdeuXWb3OXbsGNq2bQupVIqGDRvqrbNgV4LCgNFHgZrtgeJs9Ln6GT4SHmK6NVAU4MNOBWFqT40FFPSxpPNqRoEMrWb+h9/PPOL9Fk7dy8DAlWfQKTaO974VGa5Zalq48VnUR6WmrTJLtXNg+1ilIo0ZWh1Z2CyZjc5Fx5jAwWzlUIhEYhhDV7gR1Y2HWVpUVIS4uDi88cYbADSLHctkpXFqoVCIOXPmwM3NzeKTFxQUICwsDB9//LFFK2clJSWhb9++GDt2LP766y/ExcVh1KhRCAoKQq9evSw+b5nwDtAEGvZ8DkHCFswVr8M/6ek4jffh5ebGKZg3Z5Ya+hEZ6wPG5sz9DOvmrsOLfBmqedlmTVdn4/id54h/mIkJPRtDIKA434G5IjRLxcLp+y8wcv1Fi76zYkYAcpN4OcJNLEBzKglrJAsQRGUiX+CDUcVf4Ky6GQBuMwZddH21RLTxEG4bNmzAvn37GOG2dOlSNG/eHO7umvyaxMREBAcHY+LEiRafvE+fPrw6iaxYsQL16tXDggULAABNmzbFyZMnsWjRovITbgAgdgPeXoXzhQFof28p+sn2wU/8CD+4R3OGWRpQEFBAkK87nmYXWdRLzFa5cIUyFeBlk0M5HcPWngcANAzwxpthwTpJvLYxS8f8Hm+RYAMMBBSg1dxKT9ah8H+YL5kLd0oTONjS8CecvW5dPTBR3HiYpX/99Rc++eQTzraNGzfi6NGjOHr0KH766Sds2bLF5hNkc+bMGfTs2ZOzrVevXjhz5oyRPQCZTIbc3FzOwyZQFK7V/RhjFRNQSEvxsvA6VsqmAC/usYaUaG5GLE22iaJNCbDkx1KWJQDZVIaKhZRsjYOeo7mZCyhYqPcIhZYLHq3PTbcriEZzo/G5cAeGP5kBd0qOY6owvCWfjTyPOpxj8GkaUxnqvM1hsXC7d+8eWrZsyTx3c3ODgNWCJTw8HDdv3rTt7HRITU1FQEAAZ1tAQAByc3NRVFRkcJ/Y2Fj4+voyj5CQEJvNh6Io/KfugHfkM/GUroqaqqfAmh7A/aMALNfcKKo0JcCSFcZt1feNj2+poqI15fi81/Rcy/q56dZ+mkI3z027K6Usxi/ipfhKvA0A8JuyD0YqJiEPHpw8N4CfwHL9b9Y8Fgu37Oxsjo/t+fPnqFu3LvNcrVZzXncWpk6dipycHObx+PFjmx1be2nfouugv2wuktybA8U5wJ/vAOdXm03iZZfiaPt6lafmpnbB/nGXk7OQnFHa/aTU72n5ez1574VF40z5wHTRNUsBCshNwQ+50XhTeAYKWogD9aZijnIIVCitX2bD5z1UgvuWWSwWbrVq1cL169eNvn7t2jWm3tReBAYGIi0tjbMtLS0NPj4+jO9PF6lUyqz1YOs1H9jmzQv44s/QZUDYYIBWAfsnYbJyFURQQk3TOJqYjs7zjuA064fD9rlJSkwcYyuVs7GV5uZqZunDFwV469fT6PLTUWabVv7Y462aah6pS7FchZvPcpnIuvRFArC6B5qo7yKL9sJfjX9GYjA3qKZbfmXJe9DV9iozFn8Sr7/+OmbMmIHiYv38qKKiIsyaNQt9+/a16eR0iYiIQFwcN4Xh0KFDiIiIsOt5LcXd3QMYsBzoOQsAhbdVB7Fe/AOo4iyMWH8BT7OLMPr3i8x4rs+tRHOzIK3AVgEFV1tDOzE1T2+bNWappei2IDLFhYdZzLqpfQTnUHPHACDvmSY5fHQchn3wEaQ6gkl3EXBL3oFW23Ot25Z1WBwtnTZtGrZs2YLQ0FCMHz8ejRs3BgDcvn0bS5cuhVKpxLRp03idPD8/H/fulTrgk5KScOXKFVSpUgW1a9fG1KlT8fTpU/z+++8AgLFjx2Lp0qX4+uuv8fHHH+PIkSPYsmUL9u3bx+u8tkL30naXCDXq3EsTgGqNUbhpBF4S3kDxngFoQI3Dfbomk+wLsDU3ivmhWGKWqmwklVzN52YoUCBghJvtz8fHLD3zIAMAjS+EOxEl3gYoATTsCby7Fv5uvgBK89y06Ao3S74vd7EQWVCQgAJ4CLeAgACcPn0an376KaKjo0uXKKMovPrqq/j111/1nP3muHjxIrp37848j4qKAgAMGzYM69evR0pKCpKTk5nX69Wrh3379mHixIn4+eefUatWLaxZs6Z800BY6Ga6c3wkTV7H5+4/YFbhHNTKe4idkhiMU3yBk3QrZoj2B0ehtJc+CShYj6EUDyETsbaD5sZDuEkhx0/ilXhTqIns57YeDZ9+8ziLI7OFmYACpFaYpewO0ZUdXrWl9erVw8GDB5GZmcloXA0bNkSVKlWsOnm3bt1M3mEMVR9069YNly9ftup89kb3wkoS1UV/2Rwcq/0bfNIvYr34B3yvHgbQrwOs2lCKKm1aWGxBhYKt2pG72oI0hkSNoYCC9l+Vmsb8/6zvTiy00OdWA1lYJVmA1oIHUNBCTFd+jHEvz4aPULcLSOn1o12wmY0l2pj2GnSx+5ZVWOV9rFKlCsLDwxEeHm61YHMFdBUFDx3hJqAoZMAX8V3XY5uqC4QUjW+F64G9EwGVgtHcBAJ+PjdLNbe4W2kmX3c1zY2vWbrz8lMsP3bf6vNZorm1oB5gt/RbtBY8QBbthSGKqdis6m5wrmzNjQL0fHCWfO2lPjfX+m6tgYRWyoCez02sK9w0f5/mqzFJMQbfKT6AmqaA+HXAH2+BKsosGcfP52ZpKsjIDRdNvu5iipths7TkCjckyMu6YI65gMLrgrPYKpmNICoTD6la6C+fw5RSmRVulL4PziKfW8mqbC5237IKItxsiK5Zqv2xpWQXA6CwWvUGRim+Ai3xBB7+DyHb30AD6ikolJqlFgk3G0mlmN038MjEQr8VDgMC478bGu2VbdJptRpLhMXZBxkY+0e8wS4qxjU3Gl8Id+BXyS9wp+Q4qgqDcsR/SBMGlU7VgHRj+9goUPrRUos0N0HJDAhEuJUFnQtU1yzVXsDPckqrJ46o2yLl3X8Av9qQ5D7CTskMRNJXeAUUbNWt92ZKLgatPGuTYzkDhkTNgeupALha6g8HE5GcUWiRcHt/1VkcvJGKr7Ze0XvNULRUCjmWiJdoIqIA1ij7YHuTBWhYuybn5mdorrqaG581TbUwZimRbkS4lQXdC1Q36VJ77Ws0t1JS3eoDo4+iIDAcPlQRFqu/R5esrQBoi5J4bRkISM0tnVtGvgx1o/fhs7/ibXZ8Z4EtyE7dy8C7K07zMssTUzQ5dM+yixgtUDeJtwaysEUyG/2EZ6GghZiiGI25yiGgKf2KA8vMUn6pIEIBxZTxEZ8bEW42xUPCjX4xZmkOt+41M18OeFbDw9c3YrOyG4RQo+/TXxArWgOF3HwTSVuZpboMWqXR4vYnpNrl+PbGVLcP3dTA9DwZr/SQ3GIFdl5+gsh5RzDvYCIArubWgnqAPdLpCBM8QCbthY/k07BZ1Z1zDHcds1MXNz2zlJ/PzU0k4KzrUdkhwq0M6P6WjAUUUnT8NS9K1mtTCySYohyNX4TDoYYAg0VH8U3mNPjDdOcSPrWl8w4kWjz2Xnq+xWMrGoYEA59osUJF45udmvLDlccfAChd3EUbOAiksnBHXRP95XNwkWqmdwy28DLkrtPT3HhGS93EQrMdTyoTRLiVAd27r25AQetz03bX1TaGfJylidJpflwUNov7Y0eT+cij3dFKeR27JDPQkHpi9LwKHhrHiuPWpzoAFat1zqx/DLddv5uWZ1CT4eu61O24SwH4UridEzh4Rz4Lj+kAvbQOQKfu05Bw4wg//gEFN85C4RXne7MXRLjZEGOam5ZO9TU5gQ9faIQbu5/+k2ov4235LDxFAOoI0rFTEoNuAsPJyqpyWrg5/lEmWs8+hG3xxgWtM3H/ueHI76uLTpRZc9NDUYRP0udiong7AE3gYKRiMrPGga5gAqATUDAQjNDZRzegYE5guYkFjOZGZBsRbmWCbQKIBJTexajrA+pYvyoAIOmF5kfIri0VCwW4S9fCEEEszqmbwJsqwm/i+Rgp3AfdwL7SDhXvCwxk6o/98xJyihSYtPWqzc9X3vAVbqYESQ1kAev6oEOBZo2Dr0sCB2rWz0m32gAA3ESWBxTkKrWez80izU0r3EwPrRQQ4VYG2NenrtYGcIWbgAI61PUHADzKKABN05zVx7X+mxSFJz6ST8Pfyu6aigbxX/hBtBpilC4AYquuIGyWHLmnt60i3P3/u5GKQzdNV2IAhv1VpoSbMcu/ZUngAM8uI1/gg4/k07BFJ3AAGNbc3HTMTv19Sl+XK9UGuoKY09yEAGOWmhxaKeC9binBMIYKltnXbzUvKepV84SAAgrkKjzPl5WWX7FaHhUrVaAhwlTlKNyla+Eb0Z8YJDqGuoJUfCqfgEz42EVzq4jkFCnwyR+atJX61T1NjjWkif15NtnASA0qNa2Xx9ZXcBbzxSvgTsmB6k0wz306zt3RfG9iIcW56eimBQHcAIEhv79Yp+JBPxXE6HQBaG6wpZobkW5EcysDbOGlm8ALcO/Ogb5ukIqECPbTNNV8lFFYmopAlXYFYXdqXavS+HFyaXd0FCRit+RbNKYe26xwvqKTVSBn/n9gxN+mhW/2DFero/GlcDuWsQIH9Mj/kKSuzozQFYSGAwqmzVLdqgXd4nmzqSBikgrChgi3MsB2Chu6U7NzPAN8NEse1q2q0TCSXhSw+ulTendtLcfUrfGWfDYeqgMQIniOHZIYhBXZtqrAmH/J2dMKLFkvVAvf4IE2UdoNMiwVL9ELHIzffh+n7pUusSjU+bB02xUBOj43swsMlhyHJSTNvQUp8blxIMKtLPDR3LTCrZommvYoo4DR3AQszc0Q9+maGCCfjTOqZvCiihGdPQujhXthq0u4ot7lLV1WD+Av3JRqGsh9hs2SOXhDeBZyncDBvoQUzniTmlvJSxyz1MJfHnsfc9FSd1YqSIX9Um0IEW42wpDPTdcsBUo1t4cvCvHtbk1S6J20fJPCDQCy4Y0himhsVPaAADS+EW/Ej6JVkEBR5rlX1J+BJe2htPD9rVPPLgOre3AqDgwFDrTofn8GfW4GTFVzsIMM5pN4BURzY0GEWxngRkv1YzPsm7nWLK1XTSPczj7I4ORlmRNuAKCECNOUI7HcfTRUNIWBouP4U/I9qiLHujdQgjGNoECmNLjdGUjOKMTvZx5aPJ6P5tZXcBbef/cD8lKYioPzdFOT+5jS3LQYSg8xBzu9yHz5lZD43FgQ4VYG2BeoWc2tRLjVKdHcMljOcEA/UmbirNgmegPDFVOQS3sgXHAbu6XfIpQyHvkzh7FaVT4+rfKmy09H8Z8FKSBaLAso0Jgg2oZlkl9AKYuBRq/h7ZKKA3OM696Q89yQ5uZmgeamm/jtJS29aRp7C9rWS5o8t5JUEKK7EeFmKzwMXMwUxyzVlF7VruJhsK7QEs1Ni1JN43/qVnhLPgtJ6gDUol5gu2QmXhFY183jSGK6VftVJMxqPSWBgwmiHQCA/LZjgMGbkF9ScWCOt9rWxKw3mzPPrYmWAvpVCV/3DmX+P377ucF9tNcO+wZLNDcnEW7Lli1D3bp14ebmho4dO+L8+fNGx65fvx4URXEebm5u5TjbUjhmqUHNrfR/rVkqEQlQ019/jVVewq0kFUQTaJiDU6rm8KKKsVq8EGOE/4CvxyW/WN/8tFXPOGfBlDM+AJnYIpnNCRxkvTQTEFi+2IpYIECdqqWC0JAJyg4OGOtgortuwsuNqmN6X41JnK/jJuhQ1x+D2ocwWr9URHxubBwu3DZv3oyoqCjExMTg0qVLCAsLQ69evZCeblyb8PHxQUpKCvN49OhROc64FPb1acos9ZQI4e0mZraP6dIAXRpXx/++7o6329TEio/aQiKyPO+CncSbAy8MU0zBn8pXIKBoTBX/jQXiFbwCDYbM0i0XH1u8f3mTW8w/iGIs71lbcdBKkMQJHPCNroqFFEdTN+hzE5kXlhIDY4ZH1sWmTzrhr1Ed0a6OP7N969hI/PBuK2YfbuE8r+nblXyZEnfT8nD8znM9AW1PHF6hsHDhQowePRojRowAAKxYsQL79u3D2rVrER0dbXAfiqIQGBhYntM0iyGzVJvnFuDL1Sw/6lQHH3WqAwBYOKg1AODq42yLz6WbxKuECNOVI3GbDkGM6He8I/wf6lKpGCOPwgv4mj3etJ0JetueZhUZGOkc7L7yjPc+p+6/0Nv2huAM5otXwI1S4I66JkYqJjH+Nb4NQYUCiqOpG/S5WWCWGhKKIqEAnUrqko8kpiP+URbndYmQ7XPTbCsvn1uxQoWUnGKkZBfhGftvThFSsovxLKcIeSzLYPunkRwBbU8cKtzkcjni4+MxdepUZptAIEDPnj1x5swZo/vl5+ejTp06UKvVaNu2Lb7//ns0b97c4FiZTAaZTMY8z8013SuND+Y0N+2dPMjXvNnMxyw1ZjL+oXoNSXQQlol/RjvBXeySfovR8q9wi65j8bErAtasQbru1EPmfwpqfCnawfjXjqha4wvFeI5/TaWmsfDQHYuPT1EUx9Q0JKS4fjgjZqkVrcXFJfto8tw0aDW33Vee4uD1VLzWPAB9WgQZFLrGUKjUSM0p1givnCI8y+b+TckpRqZOYMwY3m4iBPu68+pFWFYcKtxevHgBlUqlt5hzQEAAEhMNN1kMDQ3F2rVr0apVK+Tk5GD+/PmIjIzEjRs3UKtWLb3xsbGxmDVrll3mz75ATZmlWn+bKfiYpaa0ipPqlhggn4PfxD+hviAV2yQzMUExDofU7S0+PuDcPpuytCpygwzzxSvwhvAcAGCVsi/mKQdzOnoAgIqm8UvcXV7HpoxobtrNUjPNKgF9n5slaPdxEwtQ3VsTuErJKYZaTWPWPzeRWSDHgeupiNl9A2+1qYn3w2ujaZAPaJrGzZRcPHxRyBVeJRrY83yZhYvSCBHk54ZgX3cE+bohyM8dwTp/2VHf8sLhZilfIiIiEBERwTyPjIxE06ZNsXLlSsyZM0dv/NSpU5mV7AGN5hYSEmLzeRnuCqL5G2iBcOOluZnRXJLoIAyQz8Yy8S94WXgdK8WLMF85EL+q3oSl6aNpuebbnZcHFx9mok5VT+ZHC1i/hkQAMrFasgCtBEmQ00J8oxyJrapuBsfyOceol+oBAD/NzVhAwYzmZmivOlU9cDc9H3WqejIpLw+e5+PGs1xkFsjhJhagqqcUT7OLsOHMI2w48whhIX6o6ikxGymXCAUI9HVDkK8bgv10hJevO4L93ODrLrY4b688cahwq1atGoRCIdLSuPlKaWlpFvvUxGIx2rRpg3v39Fv2AIBUKoVUKjX4WlkxVzivTdgNC/Ezeyx+0VLzqn0uvDBC8TW+pf/AMNEhfC3ejIaCp5iqGAUZJGb333HpqcXzsRen77/AB6vPQUABD2L7MtutUdxaUfexWrIAAVQ2MmkvjJVPNJmYy6fxivY6YAs3jvlXsrmGj1R3kx7mhJuht75kcFuk5hajXjVPZi5JLwpw/I5GcL3cqDpWfNQOJ++9wKbzyTh0M43x8YoEFMJC/LjCq0RoBfm6o6qnhFnYuqLhUOEmkUjQrl07xMXFYcCAAQAAtVqNuLg4jB8/3qJjqFQqJCQk4PXXX7fjTM1jyJfxRY9GeKdtLYRUMZ8rZUjzM4alSoUSIsQoR+AuXQszRRvwtvAkE2h4Dj+Lz6fL7itPIVOqMbC97TVgNifuaIIAuu+Xr1nKDhzcVtfCSMUkPKFrmNxH2wqeD2wZYEhzq+Hthl8Gt4GbSGBUYFiezF2Ku0TI3EhrV/GASEChUK5iOih3aVQNQgGFro2ro2vj6nieJ8OOS08Q/ygLY7rWR7s6VXifsyLgcLM0KioKw4YNQ/v27REeHo7FixejoKCAiZ4OHToUNWvWRGxsLABg9uzZ6NSpExo2bIjs7Gz89NNPePToEUaNGuXIt6G38hUACASURYINMOyzsxV/ql7FAzoIv4p/RlvBPSbQcJOua/Ex0vOKUc1Tii0XHyN6hya6+kqTGqjqZR+tGDC+/oOlwp2CGhNEO/BlSeAgTtUGXyrGWZSYG7PH8HoMBs9Toi4Z87mxeTMs2OSxDKWC8EEsFKB2FQ88eFGAhxkaAd2lcXXOmOreUozp2qBM56kIOFy4DRo0CM+fP8eMGTOQmpqK1q1b4+DBg0yQITk5GQJW76CsrCyMHj0aqamp8Pf3R7t27XD69Gk0a6a/2pC94ZRf8dC8DCEVCSCg+Pcds5TT6hYYIJ+N38Tz0UCQgm2SWZio+BT/qsMt2j/8uzi9bVmFclTxlJS7v8USzc0NMiwQL0dfoSYh3FjgwBjP82Sc5x4SodlyNGN5bpa2N9Ldz1rqV/fCg5JW9nWqejAlf5UNhyfxAsD48ePx6NEjyGQynDt3Dh07dmReO3bsGNavX888X7RoETM2NTUV+/btQ5s2bRwwa/MVCryORVHwNKD92ZKHdBDeks/GCVVLeFAyrJQsxjjhLlgbG+258ASG/Ga8msRemEsF0VYc9BWeh5wWYrLiE3yv/NBiwWYIIUXhdHQPvNtOPyKvvQ44AQWxdeeyJqCgSwNWV+KXG1Wzah6ugFMIN1fAFmalPU1TLbnwxAjF11in7AUAmCzegsXiZZDCsnwlXU7e00+OtTemZFsr6j5TcZBBe+ND+TdGI6J8EAgoBPu5G0xA1bYX5/rczCfsGkJqRSqILuyW610aVTcx0rUhwq0MsM0jQxUKfDEUcbUHKggxSzkM0xQjoaCFGCA8jc2SOaiOLPM7Owh2hNiYWdpPcBpbJLMRQGXjtroW+svn4ALdxCbn17Y0MvQdaZtmcqOl1v20+ETNjVG/uhcATSQ0okHVMh+vokKEWxkoZnWCtY3mVr4u0I2qVzBUEY1s2hOtBfexW/otmlNJ5ToHS2n4zQG9JRG1UFBjomgblkiWwo1SIE7VBu/IZ5qNiPJBK7gM+VaL5JryIsqI5sYHayoUdGkT4od32tbCpF6hnJrmygYRbmWA3QnWFo5gU5qbu1iIQXZIvTijbo7+8jm4pw5GMJWJbZJZ6C3g50crr4Tf7vOPIWrLFc4yhJpWRb8wEdGVyr4YrfjK4lZFllK3pOOHoai4VnNjBw7s5XOzBJFQgAUDwzC2EkRETUGEWxkoUpSaSraIGJoSboeiukBkRQ6UJTyiA/GWfDaOqcLgTsmxQrIYnwt3wNJAQ8fv49Bz4XHEP8os0zxomsbt1DzIlWqk5Bgu3GcnFwciA1slsziBg9gyBg6MoRU6hjR0bRSVXdVgqPzKEoZGaOqA+7RwrsYQFRGHp4JUZIp5LFBiCabSSWr5e9jEH2OMPHhgpGISptEbMVJ0AF+Jt6GR4CkmK8ZYVNFwLz0fPx68jc1jIsyONcb+hFSM23gJA9vXgr+H6XOGUfewSrIQAVQ2MmhvjJVPtJl/zRCdG2qijoZuQNrrQK4quyZfp6onbs7uVebUIgLR3MqErYWbp5niYt3s9YY1vGx6fhWEmKMcgmjFKChoId4UnsFmyWzUsDDQ8DS7bG2SNpf0kNty8QlWnnhgdFw/gSYAEkBlI1EdYtPAgSHmvxeGT7rUB2BYuGk1N5myVJNnF8Dz6cShOYfIqCXQo2kNo/MgcCHCrQzwWVrOEswFJXQ1N5Gdav42qXrgI/k0ZNJeaC3QNHNsQRkXNlrKapnnFpluQqkJHGzlBA7elcfYNHBgiHfb1TLYyluL9jpgrzhPURRi+jVDk0BvfNmzkc3mEtmgGnaP64zT0T1sdkxXhQi3MiAS2PbjM9cgUqQj3Oxppp6jm6K/fA7uqGsikMrCVslsvC4wvRg0n0x8Q+iuIMXGHcVYJv4FX4p2ArBf4MAcBgMKJZpbWC1NY1BvN82YEZ3r4eCELqhm4xK1sBA/+Jkx2wlEuJWJz7o3QFiIH+YOaGGT43UP1SRcGusiItExS9vUNjzOVjymA/C2fBaOlgQafpX8gi+F22Eq0GBu4WBT6K7ariUQGdgimY3XSwIHkxRj7BY4MIfBVJASzc3PQ4JL376KC9/0LO9pEQxAhFsZqOYlxe5xnZmW4WXl/fDaWD20PbaM6cTZvvOzSABcTc1dLMTUPtyWPdpIG6ARfLZIHcmHB0YqJmO1UtN1ZaJ4O5aKl8ANMr2xyZmFqDd1P+/1Tp9mF0GmVBk088Ooe9gj/RYtBQ+RQXvjA/k32Kbqat2bsZDezY1HKg1pl+ya0yqeEt4+NoJ9INFSJ8JNLMSrzbhdiZsF+aBNbU3JD9ssDQ301vP/zOzXHEMj6qBBdS9QFIXh62xT96mGAN8pP8JduibmitbiDeFZ1KbSMFr+FdKg3y7nn6vP8H54bYuOvevyU0zYfMXga/0Ep/GTeCXcKAUS1SEYpfjK7v41ABgWWRcHb6QC0CzOokv9ap5MYToAyJWutVKYq0A0Nydlw8fhCK9bBUs/KG0KwDZLmwb5AABT69i5YVUIBBQa1vBmIm3JGfx7kplii6o7PpJPQwbtjVaCJE0NJ6XflsjYsnWGMCTYKKgRJdrCBA4O26HiwBQtS3xnwb5umPmm/tocBya8jGszX8OYrpoIanQf+0VqCdZDNDcnRdtYkA1bc2sW5A0AWDWkHfZcfYYBrWtafOxmQT64mWLdQjnnSwINv4nnI1TwBFskszFJMRZ71aX5bZZ0br2UnIVfj+oLRncUY4F4BV4vaVW0QvkGflS+b3f/2qZPOuGzvy5hdv/m8JKKkDDzNaPVAlKREFKRENG9m+DD8DoIqaK/Di3B8RDNrQLB9rlpNbeqXlKM6FwP/p760bOf3gtDlZLtrzQp1XrqVS9bf68ndA28I5+JOFUbuFEKLJUswUTRVlDQmGeWZKi8/etpHL7FbS+vqTjgBg7mKT+wuWBrEqi5MTSo7omH8/ri4by+6FS/KuKn98QbrTTNJL3dxGbrQymKQu2qHk65fgCBaG4VinzWYsRNSoSbKdrV8celb19FsUIFqUiA3CIl1DSN3GIF9l1LKdtc4IHRiq8whf4bY0T78KVoJxpRT/GVYiyOJKZj77UUTOjZCK1q+Vl0vNYlFQc1SioOxsgn4qKNE3N7NKmBI4npWP5RO8iVaj2Niwgp14JobhWIrMJS4cZnqTTNYr0UfD3E8PeUoE5VT+z9/KUyz0cNAWKVH2KSYgzktBCvC89ji2Q2Ll67jiOJ6Xhz6SmD++XoJOu+WVJxUIOpOJhbJsH2aTfDBeNrhrZHwszXUK+aJ0IDvQ3mrBFcB4ouS2JSBSQ3Nxe+vr7IycmBj4957ceZSM0pxgdrzmJg+xCbdHyIf5SFAB8pXvrhaJmP1Z5KxErJIlSl8pBO++ETeRSu0A1xaGIXNArwZsYlvShA9/nHAJS2KvpCtAsAcEjVFhMU41AAy3xYo16qh5caVcPwdReYbfWreeLIpG7IKVTgwYt8/Hk2GZ92q48gX3ez5W0E58BWv1Ei3Ah4nFmIRYfv4MSd56jp78Es+8aXWtRzrBHPRxPBY8hoMSYrPoGg1XtY/H5pxDf2wC2sPP7AQOCgH35UDrLYvyYWUrgztw8oikKhXIlmM/4FAJyO7oFgP+Lgr8jY6jfqFGbpsmXLULduXbi5uaFjx444f950ftbWrVvRpEkTuLm5oWXLlti/f385zdQ1CanigYUDW+Pi9Fexe1xnZvsrTWrg4by+Jvbk8oSujnfkM3FI1RZSSoFfJMvQ4PpinLv/nBmz6fxjBBkMHFi2eIu7WIgVH7VD4pw+jI/MQyLCqJfqYUTnukSwERgcLtw2b96MqKgoxMTE4NKlSwgLC0OvXr2Qnm54JezTp09j8ODBGDlyJC5fvowBAwZgwIABuH79ejnP3HXZPa4zVg9tj9+GdwBQ6sNyFwtxaGIX9GhiPN+sAO4Yo4jCCmU/AMDnol3IXD8Yb/98CDRNo17xLeyWfosWgod4QftgsHy6wYqDAa2D8ZmO7yyiflXcmtMbvVsE6lUKTH+jGWL66eekESovDjdLO3bsiA4dOmDp0qUANIsyh4SE4PPPP0d0dLTe+EGDBqGgoAB79+5ltnXq1AmtW7fGihUrzJ6PmKX8oWkaD14UoH41T0Zbomkah2+l48D1FIgEFLZcfKK33zuCE/hevAZSSokb6jrYrOqGb0QbIaUUuKUOwWjFJDyh9RcwEQoo3J3bB0o1jcbTDwAAlgxugzdaBZGIZiXAJXxucrkcHh4e2LZtG7PiPAAMGzYM2dnZ2L17t94+tWvXRlRUFCZMmMBsi4mJwa5du3D16lW98TKZDDJZaR1kbm4uQkJCiHCzMbnFCuy89FRvMeO21B2slCxEdao0adhY4GBYRB3U8HHDZ90acIRooVxFggGVCFsJN4deMS9evIBKpWIWYNYSEBCAxMREg/ukpqYaHJ+ammpwfGxsLGbNmmWbCROM4uMmxrDIuhjSqQ6eZBUhu0iOd1ecwSVlYwyQzcEayQI0FSRzAgcd61XB2uEdTAouiqKIYCNYhctfNVOnTkVUVBTzXKu5EeyDQKDJ2q8ND9yZ24fZnpX7Hh5nPMHYeqEY68D5ESoPDhVu1apVg1AoRFoatwwnLS0NgYGG284EBgbyGi+VSiGV2rZZIIE//j6e8PcJdfQ0CJUIh0ZLJRIJ2rVrh7i4OGabWq1GXFwcIiIMLzQSERHBGQ8Ahw4dMjqeQCBUThxulkZFRWHYsGFo3749wsPDsXjxYhQUFGDEiBEAgKFDh6JmzZqIjY0FAHz55Zfo2rUrFixYgL59+2LTpk24ePEiVq1a5ci3QSAQnAyHC7dBgwbh+fPnmDFjBlJTU9G6dWscPHiQCRokJydDwFqrIDIyEhs3bsT06dMxbdo0NGrUCLt27UKLFrZp9U0gEFwDh+e5lTckz41AcG5cqvyKQCAQbA0RbgQCwSUhwo1AILgkDg8olDdaF2NurnVrCBAIBPui/W2WNRxQ6YRbXl4eAJAqBQLBycnLy4Ovr6/V+1e6aKlarcazZ8/g7e1t9w4T2lKvx48fV/rILPksuJDPgwv78/D29kZeXh6Cg4M5aWB8qXSam0AgQK1atcr1nD4+PuQCLoF8FlzI58FF+3mURWPTQgIKBALBJSHCjUAguCREuNkRqVSKmJgY0pUE5LPQhXweXOzxeVS6gAKBQKgcEM2NQCC4JES4EQgEl4QINwKB4JIQ4UYgEFwSItxsSGZmJj788EP4+PjAz88PI0eORH5+vsl9Vq1ahW7dusHHxwcURSE7O7t8JmsHli1bhrp168LNzQ0dO3bE+fPnTY7funUrmjRpAjc3N7Rs2RL79+8vp5mWD3w+jxs3buCdd95B3bp1QVEUFi9eXH4TLSf4fB6rV6/Gyy+/DH9/f/j7+6Nnz55mryddiHCzIR9++CFu3LiBQ4cOYe/evThx4gQ++eQTk/sUFhaid+/emDZtWjnN0j5s3rwZUVFRiImJwaVLlxAWFoZevXohPT3d4PjTp09j8ODBGDlyJC5fvowBAwZgwIABuH79ejnP3D7w/TwKCwtRv359zJs3z+hiRxUZvp/HsWPHMHjwYBw9ehRnzpxBSEgIXnvtNTx9+tTyk9IEm3Dz5k0aAH3hwgVm24EDB2iKouinT5+a3f/o0aM0ADorK8uOs7Qf4eHh9Lhx45jnKpWKDg4OpmNjYw2OHzhwIN23b1/Oto4dO9Jjxoyx6zzLC76fB5s6derQixYtsuPsyp+yfB40TdNKpZL29vamN2zYYPE5ieZmI86cOQM/Pz+0b9+e2dazZ08IBAKcO3fOgTOzP3K5HPHx8ejZsyezTSAQoGfPnjhz5ozBfc6cOcMZDwC9evUyOr4iYc3n4crY4vMoLCyEQqFAlSpVLD4vEW42IjU1FTVq1OBsE4lEqFKlClJTUx00q/LhxYsXUKlUzKI+WgICAoy+99TUVF7jKxLWfB6ujC0+jylTpiA4OFjvhmgKItzMEB0dDYqiTD4SExMdPU0CwWWZN28eNm3ahJ07d8LNzc3i/SpdyyO+fPXVVxg+fLjJMfXr10dgYKCec1SpVCIzM9MlHcRsqlWrBqFQiLS0NM72tLQ0o+89MDCQ1/iKhDWfhytTls9j/vz5mDdvHg4fPoxWrVrxOi/R3MxQvXp1NGnSxORDIpEgIiIC2dnZiI+PZ/Y9cuQI1Go1Onbs6MB3YH8kEgnatWuHuLg4ZptarUZcXBwiIiIM7hMREcEZDwCHDh0yOr4iYc3n4cpY+3n8+OOPmDNnDg4ePMjxZVsM77AHwSi9e/em27RpQ587d44+efIk3ahRI3rw4MHM60+ePKFDQ0Ppc+fOMdtSUlLoy5cv06tXr6YB0CdOnKAvX75MZ2RkOOItWM2mTZtoqVRKr1+/nr558yb9ySef0H5+fnRqaipN0zQ9ZMgQOjo6mhl/6tQpWiQS0fPnz6dv3bpFx8TE0GKxmE5ISHDUW7ApfD8PmUxGX758mb58+TIdFBRET5o0ib58+TJ99+5dR70Fm8L385g3bx4tkUjobdu20SkpKcwjLy/P4nMS4WZDMjIy6MGDB9NeXl60j48PPWLECM6XkZSURAOgjx49ymyLiYmhAeg91q1bV/5voIwsWbKErl27Ni2RSOjw8HD67NmzzGtdu3alhw0bxhm/ZcsWunHjxrREIqGbN29O79u3r5xnbF/4fB7aa0P30bVr1/KfuJ3g83nUqVPH4OcRExNj8flIyyMCgeCSEJ8bgUBwSYhwIxAILgkRbgQCwSUhwo1AILgkRLgRCASXhAg3AoHgkhDhRiAQXBIi3AgEgktChBvBKRg+fLjBjiu9e/d29NQIFRTSFYTgNPTu3Rvr1q3jbDO2ArlCoYBYLOZsk8vlkEgkvM9r7X4E54ZobgSnQSqVIjAwkPPw9/cHAFAUheXLl+PNN9+Ep6cnvvvuO8ycOROtW7fGmjVrUK9ePabXV3JyMvr37w8vLy/4+Phg4MCBnHY7xvYjuBZEuBEqDDNnzsRbb72FhIQEfPzxxwCAe/fuYfv27dixYweuXLkCtVqN/v37IzMzE8ePH8ehQ4fw4MEDDBo0iHMs3f0IrgcxSwlOw969e+Hl5cXZNm3aNGZlsA8++AAjRozgvC6Xy/H777+jevXqADQ94RISEpCUlISQkBAAwO+//47mzZvjwoUL6NChg8H9CK4HEW4Ep6F79+5Yvnw5Zxt7QRBDDQvr1KnDEVC3bt1CSEgII9gAoFmzZvDz88OtW7cY4aa7H8H1IMKN4DR4enqiYcOGJl+3ZJul5yK4NsTnRnApmjZtisePH+Px48fMtps3byI7OxvNmjVz4MwI5Q3R3AhOg0wm01vqTSQSoVq1ahYfo2fPnmjZsiU+/PBDLF68GEqlEp999hm6du1qXR9+QoWFaG4Ep+HgwYMICgriPF566SVex6AoCrt374a/vz+6dOmCnj17on79+ti8ebOdZk1wVkibcQKB4JIQzY1AILgkRLgRCASXhAg3AoHgkhDhRiAQXBIi3AgEgktChBuBQHBJiHAjEAguCRFuBALBJSHCjUAguCREuBEIBJeECDcCgeCSEOFGIBBckv8DBbO6TI/6fC4AAAAASUVORK5CYII=", + "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.021, + "end_time": "2024-03-24T03:53:28.463475", + "exception": false, + "start_time": "2024-03-24T03:53:28.442475", + "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": 4490.212381, + "end_time": "2024-03-24T03:53:31.210295", + "environment_variables": {}, + "exception": null, + "input_path": "eval/contraceptive/realtabformer/3/mlu-eval.ipynb", + "output_path": "eval/contraceptive/realtabformer/3/mlu-eval.ipynb", + "parameters": { + "allow_same_prediction": true, + "dataset": "contraceptive", + "dataset_name": "contraceptive", + "debug": false, + "folder": "eval", + "gp": true, + "gp_multiply": true, + "log_wandb": false, + "param_index": 0, + "path": "eval/contraceptive/realtabformer/3", + "path_prefix": "../../../../", + "random_seed": 3, + "single_model": "realtabformer" + }, + "start_time": "2024-03-24T02:38:40.997914", + "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