diff --git "a/contraceptive/tvae/mlu-eval.ipynb" "b/contraceptive/tvae/mlu-eval.ipynb" new file mode 100644--- /dev/null +++ "b/contraceptive/tvae/mlu-eval.ipynb" @@ -0,0 +1,2262 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "982e76f5", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-24T03:52:22.450987Z", + "iopub.status.busy": "2024-03-24T03:52:22.450233Z", + "iopub.status.idle": "2024-03-24T03:52:22.483258Z", + "shell.execute_reply": "2024-03-24T03:52:22.482499Z" + }, + "papermill": { + "duration": 0.047848, + "end_time": "2024-03-24T03:52:22.485228", + "exception": false, + "start_time": "2024-03-24T03:52:22.437380", + "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-24T03:52:22.510014Z", + "iopub.status.busy": "2024-03-24T03:52:22.509647Z", + "iopub.status.idle": "2024-03-24T03:52:22.516729Z", + "shell.execute_reply": "2024-03-24T03:52:22.515964Z" + }, + "papermill": { + "duration": 0.021478, + "end_time": "2024-03-24T03:52:22.518584", + "exception": false, + "start_time": "2024-03-24T03:52:22.497106", + "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-24T03:52:22.541720Z", + "iopub.status.busy": "2024-03-24T03:52:22.541450Z", + "iopub.status.idle": "2024-03-24T03:52:22.545507Z", + "shell.execute_reply": "2024-03-24T03:52:22.544660Z" + }, + "papermill": { + "duration": 0.017743, + "end_time": "2024-03-24T03:52:22.547346", + "exception": false, + "start_time": "2024-03-24T03:52:22.529603", + "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-24T03:52:22.570612Z", + "iopub.status.busy": "2024-03-24T03:52:22.570349Z", + "iopub.status.idle": "2024-03-24T03:52:22.574203Z", + "shell.execute_reply": "2024-03-24T03:52:22.573402Z" + }, + "executionInfo": { + "elapsed": 678, + "status": "ok", + "timestamp": 1696841022168, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "ns5hFcVL2yvs", + "papermill": { + "duration": 0.017688, + "end_time": "2024-03-24T03:52:22.575966", + "exception": false, + "start_time": "2024-03-24T03:52:22.558278", + "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-24T03:52:22.599001Z", + "iopub.status.busy": "2024-03-24T03:52:22.598704Z", + "iopub.status.idle": "2024-03-24T03:52:22.604355Z", + "shell.execute_reply": "2024-03-24T03:52:22.603465Z" + }, + "papermill": { + "duration": 0.019515, + "end_time": "2024-03-24T03:52:22.606320", + "exception": false, + "start_time": "2024-03-24T03:52:22.586805", + "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": "d3fb48eb", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-24T03:52:22.634188Z", + "iopub.status.busy": "2024-03-24T03:52:22.633494Z", + "iopub.status.idle": "2024-03-24T03:52:22.639700Z", + "shell.execute_reply": "2024-03-24T03:52:22.638855Z" + }, + "papermill": { + "duration": 0.021842, + "end_time": "2024-03-24T03:52:22.641603", + "exception": false, + "start_time": "2024-03-24T03:52:22.619761", + "status": "completed" + }, + "tags": [ + "injected-parameters" + ] + }, + "outputs": [], + "source": [ + "# Parameters\n", + "dataset = \"contraceptive\"\n", + "dataset_name = \"contraceptive\"\n", + "single_model = \"tvae\"\n", + "gp = True\n", + "gp_multiply = True\n", + "random_seed = 3\n", + "debug = False\n", + "folder = \"eval\"\n", + "path_prefix = \"../../../../\"\n", + "path = \"eval/contraceptive/tvae/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.011643, + "end_time": "2024-03-24T03:52:22.664864", + "exception": false, + "start_time": "2024-03-24T03:52:22.653221", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "5f45b1d0", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-24T03:52:22.689861Z", + "iopub.status.busy": "2024-03-24T03:52:22.689154Z", + "iopub.status.idle": "2024-03-24T03:52:22.698942Z", + "shell.execute_reply": "2024-03-24T03:52:22.698104Z" + }, + "executionInfo": { + "elapsed": 7, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "UdvXYv3c3LXy", + "papermill": { + "duration": 0.024484, + "end_time": "2024-03-24T03:52:22.700881", + "exception": false, + "start_time": "2024-03-24T03:52:22.676397", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/kaggle/working\n", + "/kaggle/working/eval/contraceptive/tvae/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-24T03:52:22.726018Z", + "iopub.status.busy": "2024-03-24T03:52:22.725701Z", + "iopub.status.idle": "2024-03-24T03:52:24.735502Z", + "shell.execute_reply": "2024-03-24T03:52:24.734467Z" + }, + "papermill": { + "duration": 2.025307, + "end_time": "2024-03-24T03:52:24.738565", + "exception": false, + "start_time": "2024-03-24T03:52:22.713258", + "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-24T03:52:24.774162Z", + "iopub.status.busy": "2024-03-24T03:52:24.773653Z", + "iopub.status.idle": "2024-03-24T03:52:24.787027Z", + "shell.execute_reply": "2024-03-24T03:52:24.786075Z" + }, + "papermill": { + "duration": 0.029079, + "end_time": "2024-03-24T03:52:24.789233", + "exception": false, + "start_time": "2024-03-24T03:52:24.760154", + "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-24T03:52:24.814317Z", + "iopub.status.busy": "2024-03-24T03:52:24.813979Z", + "iopub.status.idle": "2024-03-24T03:52:24.821764Z", + "shell.execute_reply": "2024-03-24T03:52:24.820799Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "Vrl2QkoV3o_8", + "papermill": { + "duration": 0.022496, + "end_time": "2024-03-24T03:52:24.823753", + "exception": false, + "start_time": "2024-03-24T03:52:24.801257", + "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-24T03:52:24.848221Z", + "iopub.status.busy": "2024-03-24T03:52:24.847474Z", + "iopub.status.idle": "2024-03-24T03:52:24.946969Z", + "shell.execute_reply": "2024-03-24T03:52:24.945975Z" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1696841022169, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "TilUuFk9vqMb", + "papermill": { + "duration": 0.114511, + "end_time": "2024-03-24T03:52:24.949504", + "exception": false, + "start_time": "2024-03-24T03:52:24.834993", + "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-24T03:52:24.976909Z", + "iopub.status.busy": "2024-03-24T03:52:24.976092Z", + "iopub.status.idle": "2024-03-24T03:52:29.751296Z", + "shell.execute_reply": "2024-03-24T03:52:29.750111Z" + }, + "executionInfo": { + "elapsed": 3113, + "status": "ok", + "timestamp": 1696841025277, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "7Abt8nStvr9Z", + "papermill": { + "duration": 4.791354, + "end_time": "2024-03-24T03:52:29.753739", + "exception": false, + "start_time": "2024-03-24T03:52:24.962385", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-03-24 03:52:27.361338: 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 03:52:27.361398: 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 03:52:27.363100: 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-24T03:52:29.778913Z", + "iopub.status.busy": "2024-03-24T03:52:29.777968Z", + "iopub.status.idle": "2024-03-24T03:52:29.783768Z", + "shell.execute_reply": "2024-03-24T03:52:29.782925Z" + }, + "papermill": { + "duration": 0.020125, + "end_time": "2024-03-24T03:52:29.785661", + "exception": false, + "start_time": "2024-03-24T03:52:29.765536", + "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-24T03:52:29.811634Z", + "iopub.status.busy": "2024-03-24T03:52:29.811363Z", + "iopub.status.idle": "2024-03-24T03:52:38.196253Z", + "shell.execute_reply": "2024-03-24T03:52:38.195215Z" + }, + "executionInfo": { + "elapsed": 20137, + "status": "ok", + "timestamp": 1696841045408, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "tbaguWxAvtPi", + "papermill": { + "duration": 8.40106, + "end_time": "2024-03-24T03:52:38.198807", + "exception": false, + "start_time": "2024-03-24T03:52:29.797747", + "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-24T03:52:38.227529Z", + "iopub.status.busy": "2024-03-24T03:52:38.226599Z", + "iopub.status.idle": "2024-03-24T03:52:38.234285Z", + "shell.execute_reply": "2024-03-24T03:52:38.233457Z" + }, + "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.024299, + "end_time": "2024-03-24T03:52:38.236284", + "exception": false, + "start_time": "2024-03-24T03:52:38.211985", + "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-24T03:52:38.261575Z", + "iopub.status.busy": "2024-03-24T03:52:38.261306Z", + "iopub.status.idle": "2024-03-24T03:52:38.265800Z", + "shell.execute_reply": "2024-03-24T03:52:38.264944Z" + }, + "papermill": { + "duration": 0.01926, + "end_time": "2024-03-24T03:52:38.267590", + "exception": false, + "start_time": "2024-03-24T03:52:38.248330", + "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-24T03:52:38.292916Z", + "iopub.status.busy": "2024-03-24T03:52:38.292074Z", + "iopub.status.idle": "2024-03-24T03:52:38.814031Z", + "shell.execute_reply": "2024-03-24T03:52:38.812992Z" + }, + "papermill": { + "duration": 0.536746, + "end_time": "2024-03-24T03:52:38.816213", + "exception": false, + "start_time": "2024-03-24T03:52:38.279467", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../contraceptive/_cache_aug_test/tvae/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/tvae/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/tvae/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-24T03:52:38.843542Z", + "iopub.status.busy": "2024-03-24T03:52:38.843234Z", + "iopub.status.idle": "2024-03-24T03:52:39.166434Z", + "shell.execute_reply": "2024-03-24T03:52:39.165569Z" + }, + "executionInfo": { + "elapsed": 588, + "status": "ok", + "timestamp": 1696841049215, + "user": { + "displayName": "Rizqi Nur", + "userId": "09644007964068789560" + }, + "user_tz": -420 + }, + "id": "NgahtU1q9uLO", + "papermill": { + "duration": 0.339125, + "end_time": "2024-03-24T03:52:39.168588", + "exception": false, + "start_time": "2024-03-24T03:52:38.829463", + "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.95,\n", + " 'tf_pma_low': 8,\n", + " 'grad_loss_fn': torch.Tensor>,\n", + " 'pma_ffn_mode': 'none',\n", + " 'patience': 10,\n", + " 'inds_init_mode': 'fixnorm',\n", + " 'grad_clip': 0.7,\n", + " 'bias_weight_decay': 0.05,\n", + " 'head_activation': torch.nn.modules.activation.ReLU6,\n", + " 'tf_activation': torch.nn.modules.activation.Tanh,\n", + " 'dataset_size': 2048,\n", + " 'batch_size': 4,\n", + " 'epochs': 100,\n", + " 'lr_mul': 0.07,\n", + " 'n_warmup_steps': 200,\n", + " 'Optim': functools.partial(, amsgrad=True),\n", + " 'fixed_role_model': 'tvae',\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': 64,\n", + " 'tf_activation_final': ml_utility_loss.activations.LeakyHardtanh,\n", + " 'ada_d_hid': 512,\n", + " 'ada_n_layers': 9,\n", + " 'ada_activation': torch.nn.modules.activation.Softsign,\n", + " 'ada_activation_final': ml_utility_loss.activations.LeakyHardsigmoid,\n", + " 'head_d_hid': 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': ['tvae'],\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': 128,\n", + " 'ada_n_seeds': 0,\n", + " 'gradient_penalty_kwargs': {'mag_loss': True,\n", + " 'mse_mag': True,\n", + " 'mag_corr': False,\n", + " 'seq_mag': False,\n", + " 'cos_loss': False,\n", + " 'mag_corr_kwargs': {'only_sign': False},\n", + " 'cos_loss_kwargs': {'only_sign': True, 'cos_matrix': False},\n", + " 'mse_mag_kwargs': {'target': 0.5, '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-24T03:52:39.196741Z", + "iopub.status.busy": "2024-03-24T03:52:39.195984Z", + "iopub.status.idle": "2024-03-24T03:52:39.303252Z", + "shell.execute_reply": "2024-03-24T03:52:39.302115Z" + }, + "papermill": { + "duration": 0.12382, + "end_time": "2024-03-24T03:52:39.305523", + "exception": false, + "start_time": "2024-03-24T03:52:39.181703", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../contraceptive/_cache_aug_train/tvae/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/tvae/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/tvae/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/tvae/all inf False\n", + "split df ratio is 1\n", + "../../../../ml-utility-loss/bs_val/contraceptive [0, 50]\n", + "Caching in ../../../../contraceptive/_cache_synth/tvae/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-24T03:52:39.335359Z", + "iopub.status.busy": "2024-03-24T03:52:39.334329Z", + "iopub.status.idle": "2024-03-24T03:52:39.765650Z", + "shell.execute_reply": "2024-03-24T03:52:39.764664Z" + }, + "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.44856, + "end_time": "2024-03-24T03:52:39.767806", + "exception": false, + "start_time": "2024-03-24T03:52:39.319246", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Creating model of type \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[*] Embedding False True\n", + "['tvae'] 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-24T03:52:39.796226Z", + "iopub.status.busy": "2024-03-24T03:52:39.795851Z", + "iopub.status.idle": "2024-03-24T03:52:39.800934Z", + "shell.execute_reply": "2024-03-24T03:52:39.800035Z" + }, + "papermill": { + "duration": 0.021479, + "end_time": "2024-03-24T03:52:39.802768", + "exception": false, + "start_time": "2024-03-24T03:52:39.781289", + "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-24T03:52:39.829368Z", + "iopub.status.busy": "2024-03-24T03:52:39.828616Z", + "iopub.status.idle": "2024-03-24T03:52:39.835800Z", + "shell.execute_reply": "2024-03-24T03:52:39.834940Z" + }, + "papermill": { + "duration": 0.022397, + "end_time": "2024-03-24T03:52:39.837683", + "exception": false, + "start_time": "2024-03-24T03:52:39.815286", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "7608065" + ] + }, + "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-24T03:52:39.864099Z", + "iopub.status.busy": "2024-03-24T03:52:39.863512Z", + "iopub.status.idle": "2024-03-24T03:52:39.943403Z", + "shell.execute_reply": "2024-03-24T03:52:39.942525Z" + }, + "papermill": { + "duration": 0.095531, + "end_time": "2024-03-24T03:52:39.945552", + "exception": false, + "start_time": "2024-03-24T03:52:39.850021", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "========================================================================================================================\n", + "Layer (type:depth-idx) Output Shape Param #\n", + "========================================================================================================================\n", + "MLUtilitySingle [2, 1179, 46] --\n", + "├─Adapter: 1-1 [2, 1179, 46] --\n", + "│ └─Sequential: 2-1 [2, 1179, 256] --\n", + "│ │ └─FeedForward: 3-1 [2, 1179, 512] --\n", + "│ │ │ └─Linear: 4-1 [2, 1179, 512] 24,064\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, 512] --\n", + "│ │ │ └─Linear: 4-15 [2, 1179, 512] 262,656\n", + "│ │ │ └─Softsign: 4-16 [2, 1179, 512] --\n", + "│ │ └─FeedForward: 3-9 [2, 1179, 256] --\n", + "│ │ │ └─Linear: 4-17 [2, 1179, 256] 131,328\n", + "│ │ │ └─LeakyHardsigmoid: 4-18 [2, 1179, 256] --\n", + "├─Adapter: 1-2 [2, 294, 46] (recursive)\n", + "│ └─Sequential: 2-2 [2, 294, 256] (recursive)\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, 512] (recursive)\n", + "│ │ │ └─Linear: 4-31 [2, 294, 512] (recursive)\n", + "│ │ │ └─Softsign: 4-32 [2, 294, 512] --\n", + "│ │ └─FeedForward: 3-17 [2, 294, 512] (recursive)\n", + "│ │ │ └─Linear: 4-33 [2, 294, 512] (recursive)\n", + "│ │ │ └─Softsign: 4-34 [2, 294, 512] --\n", + "│ │ └─FeedForward: 3-18 [2, 294, 256] (recursive)\n", + "│ │ │ └─Linear: 4-35 [2, 294, 256] (recursive)\n", + "│ │ │ └─LeakyHardsigmoid: 4-36 [2, 294, 256] --\n", + "├─TwinEncoder: 1-3 [2, 2048] --\n", + "│ └─Encoder: 2-3 [2, 8, 256] --\n", + "│ │ └─ModuleList: 3-20 -- (recursive)\n", + "│ │ │ └─EncoderLayer: 4-37 [2, 1179, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-1 [2, 1179, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-1 [2, 128, 256] 32,768\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-2 [2, 128, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-1 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-2 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-3 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-4 [2, 64, 128, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-1 [2, 64, 128, 1179] --\n", + "│ │ │ │ │ │ └─Linear: 7-5 [2, 128, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyHardtanh: 7-6 [2, 128, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-3 [2, 1179, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-7 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-8 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-9 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-10 [2, 64, 1179, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-2 [2, 64, 1179, 128] --\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", + "│ │ │ │ │ └─Tanh: 6-5 [2, 1179, 512] --\n", + "│ │ │ │ │ └─Linear: 6-6 [2, 1179, 256] 131,328\n", + "│ │ │ └─EncoderLayer: 4-38 [2, 1179, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-3 [2, 1179, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-7 [2, 128, 256] 32,768\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-8 [2, 128, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-13 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-14 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-15 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-16 [2, 64, 128, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-3 [2, 64, 128, 1179] --\n", + "│ │ │ │ │ │ └─Linear: 7-17 [2, 128, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyHardtanh: 7-18 [2, 128, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-9 [2, 1179, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-19 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-20 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-21 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-22 [2, 64, 1179, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-4 [2, 64, 1179, 128] --\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", + "│ │ │ │ │ └─Tanh: 6-11 [2, 1179, 512] --\n", + "│ │ │ │ │ └─Linear: 6-12 [2, 1179, 256] 131,328\n", + "│ │ │ └─EncoderLayer: 4-39 [2, 8, 256] --\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-5 [2, 1179, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-13 [2, 128, 256] 32,768\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-14 [2, 128, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-25 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-26 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-27 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-28 [2, 64, 128, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-5 [2, 64, 128, 1179] --\n", + "│ │ │ │ │ │ └─Linear: 7-29 [2, 128, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyHardtanh: 7-30 [2, 128, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-15 [2, 1179, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-31 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-32 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-33 [2, 128, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-34 [2, 64, 1179, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-6 [2, 64, 1179, 128] --\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, 8, 256] --\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-19 [2, 8, 256] 2,048\n", + "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-20 [2, 8, 256] --\n", + "│ │ │ │ │ │ └─Linear: 7-37 [2, 8, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-38 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─Linear: 7-39 [2, 1179, 256] 65,536\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-40 [2, 64, 8, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-7 [2, 64, 8, 1179] --\n", + "│ │ │ │ │ │ └─Linear: 7-41 [2, 8, 256] 65,792\n", + "│ │ │ │ │ │ └─LeakyHardtanh: 7-42 [2, 8, 256] --\n", + "│ └─Encoder: 2-4 [2, 8, 256] (recursive)\n", + "│ │ └─ModuleList: 3-20 -- (recursive)\n", + "│ │ │ └─EncoderLayer: 4-40 [2, 294, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-8 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-21 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-22 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-43 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-44 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-45 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-46 [2, 64, 128, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-8 [2, 64, 128, 294] --\n", + "│ │ │ │ │ │ └─Linear: 7-47 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyHardtanh: 7-48 [2, 128, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-23 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-49 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-50 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-51 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-52 [2, 64, 294, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-9 [2, 64, 294, 128] --\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", + "│ │ │ │ │ └─Tanh: 6-25 [2, 294, 512] --\n", + "│ │ │ │ │ └─Linear: 6-26 [2, 294, 256] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-41 [2, 294, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-10 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-27 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-28 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-55 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-56 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-57 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-58 [2, 64, 128, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-10 [2, 64, 128, 294] --\n", + "│ │ │ │ │ │ └─Linear: 7-59 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyHardtanh: 7-60 [2, 128, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-29 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-61 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-62 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-63 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-64 [2, 64, 294, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-11 [2, 64, 294, 128] --\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", + "│ │ │ │ │ └─Tanh: 6-31 [2, 294, 512] --\n", + "│ │ │ │ │ └─Linear: 6-32 [2, 294, 256] (recursive)\n", + "│ │ │ └─EncoderLayer: 4-42 [2, 8, 256] (recursive)\n", + "│ │ │ │ └─SimpleInducedSetAttention: 5-12 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-33 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-34 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-67 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-68 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-69 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-70 [2, 64, 128, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-12 [2, 64, 128, 294] --\n", + "│ │ │ │ │ │ └─Linear: 7-71 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyHardtanh: 7-72 [2, 128, 256] --\n", + "│ │ │ │ │ └─MultiHeadAttention: 6-35 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-73 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-74 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-75 [2, 128, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-76 [2, 64, 294, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-13 [2, 64, 294, 128] --\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, 8, 256] (recursive)\n", + "│ │ │ │ │ └─TensorInductionPoint: 6-39 [2, 8, 256] (recursive)\n", + "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-40 [2, 8, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-79 [2, 8, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-80 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─Linear: 7-81 [2, 294, 256] (recursive)\n", + "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-82 [2, 64, 8, 4] --\n", + "│ │ │ │ │ │ │ └─Softmax: 8-14 [2, 64, 8, 294] --\n", + "│ │ │ │ │ │ └─Linear: 7-83 [2, 8, 256] (recursive)\n", + "│ │ │ │ │ │ └─LeakyHardtanh: 7-84 [2, 8, 256] --\n", + "├─Head: 1-4 [2] --\n", + "│ └─Sequential: 2-5 [2, 1] --\n", + "│ │ └─FeedForward: 3-21 [2, 512] --\n", + "│ │ │ └─Linear: 4-43 [2, 512] 1,049,088\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, 512] --\n", + "│ │ │ └─Linear: 4-55 [2, 512] 262,656\n", + "│ │ │ └─ReLU6: 4-56 [2, 512] --\n", + "│ │ └─FeedForward: 3-28 [2, 512] --\n", + "│ │ │ └─Linear: 4-57 [2, 512] 262,656\n", + "│ │ │ └─ReLU6: 4-58 [2, 512] --\n", + "│ │ └─FeedForward: 3-29 [2, 1] --\n", + "│ │ │ └─Linear: 4-59 [2, 1] 513\n", + "│ │ │ └─LeakyHardsigmoid: 4-60 [2, 1] --\n", + "========================================================================================================================\n", + "Total params: 7,608,065\n", + "Trainable params: 7,608,065\n", + "Non-trainable params: 0\n", + "Total mult-adds (M): 24.25\n", + "========================================================================================================================\n", + "Input size (MB): 0.54\n", + "Forward/backward pass size (MB): 257.33\n", + "Params size (MB): 30.43\n", + "Estimated Total Size (MB): 288.30\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-24T03:52:39.975551Z", + "iopub.status.busy": "2024-03-24T03:52:39.974781Z", + "iopub.status.idle": "2024-03-24T04:58:47.719344Z", + "shell.execute_reply": "2024-03-24T04:58:47.717981Z" + }, + "papermill": { + "duration": 3967.777203, + "end_time": "2024-03-24T04:58:47.736984", + "exception": false, + "start_time": "2024-03-24T03:52:39.959781", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3 datasets [900, 450, 1050]\n", + "Creating model of type \n", + "[*] Embedding False True\n", + "g_loss_mul 0.1\n", + "Epoch 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0186110673548602, 'avg_role_model_std_loss': 0.9859759064087645, 'avg_role_model_mean_pred_loss': 0.0014670658553136355, 'avg_role_model_g_mag_loss': 0.12243372971605923, '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.018859607335697446, 'n_size': 900, 'n_batch': 225, 'duration': 282.9204273223877, 'duration_batch': 1.257424121432834, 'duration_size': 0.3143560303582085, 'avg_pred_std': 0.11435848254969136}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.008952803679017556, 'avg_role_model_std_loss': 4.103192632228183, 'avg_role_model_mean_pred_loss': 0.00013674774596836414, '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.008952803679017556, 'n_size': 450, 'n_batch': 113, 'duration': 94.89591884613037, 'duration_batch': 0.8397868924436316, 'duration_size': 0.21087981965806749, 'avg_pred_std': 0.022598956262412588}\n", + "Epoch 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.005419754103058949, 'avg_role_model_std_loss': 0.7368064368608555, 'avg_role_model_mean_pred_loss': 6.596730340261968e-05, 'avg_role_model_g_mag_loss': 0.0279144444456324, '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.005536770965490077, 'n_size': 900, 'n_batch': 225, 'duration': 283.5930871963501, 'duration_batch': 1.2604137208726671, 'duration_size': 0.3151034302181668, 'avg_pred_std': 0.09610795313699377}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.009089643146014875, 'avg_role_model_std_loss': 2.2618643136544057, 'avg_role_model_mean_pred_loss': 0.00020205410188401396, '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.009089643146014875, 'n_size': 450, 'n_batch': 113, 'duration': 96.57411861419678, 'duration_batch': 0.8546382178247502, 'duration_size': 0.21460915247599283, 'avg_pred_std': 0.05953517459001726}\n", + "Epoch 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0041141705360819795, 'avg_role_model_std_loss': 0.4941683148547074, 'avg_role_model_mean_pred_loss': 5.9163905845158306e-05, 'avg_role_model_g_mag_loss': 0.01810061747660964, '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.004181610228713706, 'n_size': 900, 'n_batch': 225, 'duration': 290.8302204608917, 'duration_batch': 1.2925787576039631, 'duration_size': 0.3231446894009908, 'avg_pred_std': 0.09772732237146961}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.002547107368138515, 'avg_role_model_std_loss': 1.7669729735376936, 'avg_role_model_mean_pred_loss': 7.385972450104247e-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.002547107368138515, 'n_size': 450, 'n_batch': 113, 'duration': 96.63251686096191, 'duration_batch': 0.8551550164686895, 'duration_size': 0.21473892635769315, 'avg_pred_std': 0.0506768064260219}\n", + "Epoch 3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0023371195333958088, 'avg_role_model_std_loss': 0.4912818201007985, 'avg_role_model_mean_pred_loss': 5.350784180537504e-06, 'avg_role_model_g_mag_loss': 0.014647599203356853, '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.002370942204983698, 'n_size': 900, 'n_batch': 225, 'duration': 283.96464467048645, 'duration_batch': 1.2620650874243842, 'duration_size': 0.31551627185609604, 'avg_pred_std': 0.10408781512019535}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0034601237480011253, 'avg_role_model_std_loss': 2.612866154395119, 'avg_role_model_mean_pred_loss': 1.3134922784065689e-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.0034601237480011253, 'n_size': 450, 'n_batch': 113, 'duration': 94.63316321372986, 'duration_batch': 0.8374616213604412, 'duration_size': 0.21029591825273303, 'avg_pred_std': 0.04398040732047397}\n", + "Epoch 4\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0020195719559625205, 'avg_role_model_std_loss': 0.2510072517482392, 'avg_role_model_mean_pred_loss': 6.499685870238886e-06, 'avg_role_model_g_mag_loss': 0.013006549620121304, '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.002048346129207251, 'n_size': 900, 'n_batch': 225, 'duration': 285.49330401420593, 'duration_batch': 1.2688591289520263, 'duration_size': 0.3172147822380066, 'avg_pred_std': 0.10502510418287582}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0023336571037200176, 'avg_role_model_std_loss': 1.0392825815654005, 'avg_role_model_mean_pred_loss': 7.885705093391342e-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.0023336571037200176, 'n_size': 450, 'n_batch': 113, 'duration': 95.2993221282959, 'duration_batch': 0.8433568329937691, 'duration_size': 0.2117762713962131, 'avg_pred_std': 0.05800044378760246}\n", + "Epoch 5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0019015362533779505, 'avg_role_model_std_loss': 0.24092813788177259, 'avg_role_model_mean_pred_loss': 5.394619782389408e-06, 'avg_role_model_g_mag_loss': 0.014597136508156028, '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.0019251112584364213, 'n_size': 900, 'n_batch': 225, 'duration': 285.9157590866089, 'duration_batch': 1.2707367070515951, 'duration_size': 0.3176841767628988, 'avg_pred_std': 0.10497349073075586}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0023449724944657646, 'avg_role_model_std_loss': 1.324564782714674, 'avg_role_model_mean_pred_loss': 8.32234693904156e-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.0023449724944657646, 'n_size': 450, 'n_batch': 113, 'duration': 95.89643502235413, 'duration_batch': 0.8486410178969391, 'duration_size': 0.21310318893856472, 'avg_pred_std': 0.059179596025476115}\n", + "Epoch 6\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.001617696879960325, 'avg_role_model_std_loss': 0.15725728821715396, 'avg_role_model_mean_pred_loss': 4.0012195520334405e-06, 'avg_role_model_g_mag_loss': 0.013585555124898544, '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.0016441765983391734, 'n_size': 900, 'n_batch': 225, 'duration': 283.3449795246124, 'duration_batch': 1.2593110201093887, 'duration_size': 0.31482775502734717, 'avg_pred_std': 0.10613164186891583}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.002407976164379054, 'avg_role_model_std_loss': 1.1220077265352362, 'avg_role_model_mean_pred_loss': 7.455731951812162e-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.002407976164379054, 'n_size': 450, 'n_batch': 113, 'duration': 94.69690179824829, 'duration_batch': 0.8380256796305159, 'duration_size': 0.21043755955166288, 'avg_pred_std': 0.048071262323651956}\n", + "Epoch 7\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0014774360275219402, 'avg_role_model_std_loss': 0.16173793539400327, 'avg_role_model_mean_pred_loss': 3.2265756165433642e-06, 'avg_role_model_g_mag_loss': 0.013837635460464905, '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.001494622107436751, 'n_size': 900, 'n_batch': 225, 'duration': 285.05916833877563, 'duration_batch': 1.266929637061225, 'duration_size': 0.31673240926530627, 'avg_pred_std': 0.10432403838468922}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.002109985634936796, 'avg_role_model_std_loss': 1.285013097416944, 'avg_role_model_mean_pred_loss': 5.779796396621073e-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.002109985634936796, 'n_size': 450, 'n_batch': 113, 'duration': 95.49577188491821, 'duration_batch': 0.8450953264152055, 'duration_size': 0.21221282641092937, 'avg_pred_std': 0.059411970754277656}\n", + "Epoch 8\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0013566906487297577, 'avg_role_model_std_loss': 0.1447534780750981, 'avg_role_model_mean_pred_loss': 1.6995160905337986e-06, 'avg_role_model_g_mag_loss': 0.014613873372133336, '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.0013734321816850246, 'n_size': 900, 'n_batch': 225, 'duration': 284.22162222862244, 'duration_batch': 1.2632072099049887, 'duration_size': 0.3158018024762472, 'avg_pred_std': 0.10500639389579494}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Val loss {'avg_role_model_loss': 0.0019757018623446734, 'avg_role_model_std_loss': 1.1056950748967773, 'avg_role_model_mean_pred_loss': 7.016759447038556e-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.0019757018623446734, 'n_size': 450, 'n_batch': 113, 'duration': 95.37925219535828, 'duration_batch': 0.8440641787199847, 'duration_size': 0.21195389376746285, 'avg_pred_std': 0.05243083165208521}\n", + "Epoch 9\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train loss {'avg_role_model_loss': 0.0011172247426859232, 'avg_role_model_std_loss': 0.1346889167763815, 'avg_role_model_mean_pred_loss': 1.8536731677009785e-06, 'avg_role_model_g_mag_loss': 0.013761755622625868, '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.0011291193025641001, 'n_size': 900, 'n_batch': 225, 'duration': 284.7550492286682, 'duration_batch': 1.2655779965718588, 'duration_size': 0.3163944991429647, 'avg_pred_std': 0.10835976392237677}\n", + "Time out: 3719.8355207443237/3600\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval loss {'role_model': 'tvae', 'n_size': 1050, 'n_batch': 263, 'role_model_metrics': {'avg_loss': 0.0014795975680352144, 'avg_g_mag_loss': 0.030702529888277683, 'avg_g_cos_loss': 0.008277697899691357, 'pred_duration': 4.806691408157349, 'grad_duration': 2.9375720024108887, 'total_duration': 7.744263410568237, 'pred_std': 0.10091648250818253, 'std_loss': 0.008207244798541069, 'mean_pred_loss': 2.38593247559038e-06, 'pred_rmse': 0.03846553713083267, 'pred_mae': 0.029553567990660667, 'pred_mape': 0.09155531227588654, 'grad_rmse': 0.02409490942955017, 'grad_mae': 0.013917120173573494, 'grad_mape': 0.45717620849609375}, '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.0014795975680352144, 'avg_g_mag_loss': 0.030702529888277683, 'avg_g_cos_loss': 0.008277697899691357, 'avg_pred_duration': 4.806691408157349, 'avg_grad_duration': 2.9375720024108887, 'avg_total_duration': 7.744263410568237, 'avg_pred_std': 0.10091648250818253, 'avg_std_loss': 0.008207244798541069, 'avg_mean_pred_loss': 2.38593247559038e-06}, 'min_metrics': {'avg_loss': 0.0014795975680352144, 'avg_g_mag_loss': 0.030702529888277683, 'avg_g_cos_loss': 0.008277697899691357, 'pred_duration': 4.806691408157349, 'grad_duration': 2.9375720024108887, 'total_duration': 7.744263410568237, 'pred_std': 0.10091648250818253, 'std_loss': 0.008207244798541069, 'mean_pred_loss': 2.38593247559038e-06, 'pred_rmse': 0.03846553713083267, 'pred_mae': 0.029553567990660667, 'pred_mape': 0.09155531227588654, 'grad_rmse': 0.02409490942955017, 'grad_mae': 0.013917120173573494, 'grad_mape': 0.45717620849609375}, 'model_metrics': {'tvae': {'avg_loss': 0.0014795975680352144, 'avg_g_mag_loss': 0.030702529888277683, 'avg_g_cos_loss': 0.008277697899691357, 'pred_duration': 4.806691408157349, 'grad_duration': 2.9375720024108887, 'total_duration': 7.744263410568237, 'pred_std': 0.10091648250818253, 'std_loss': 0.008207244798541069, 'mean_pred_loss': 2.38593247559038e-06, 'pred_rmse': 0.03846553713083267, 'pred_mae': 0.029553567990660667, 'pred_mape': 0.09155531227588654, 'grad_rmse': 0.02409490942955017, 'grad_mae': 0.013917120173573494, 'grad_mape': 0.45717620849609375}}}\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-24T04:58:47.781597Z", + "iopub.status.busy": "2024-03-24T04:58:47.781115Z", + "iopub.status.idle": "2024-03-24T04:58:47.786340Z", + "shell.execute_reply": "2024-03-24T04:58:47.785305Z" + }, + "papermill": { + "duration": 0.026332, + "end_time": "2024-03-24T04:58:47.788412", + "exception": false, + "start_time": "2024-03-24T04:58:47.762080", + "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-24T04:58:47.819371Z", + "iopub.status.busy": "2024-03-24T04:58:47.819109Z", + "iopub.status.idle": "2024-03-24T04:58:47.895456Z", + "shell.execute_reply": "2024-03-24T04:58:47.894437Z" + }, + "papermill": { + "duration": 0.094592, + "end_time": "2024-03-24T04:58:47.897905", + "exception": false, + "start_time": "2024-03-24T04:58:47.803313", + "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-24T04:58:47.935107Z", + "iopub.status.busy": "2024-03-24T04:58:47.934691Z", + "iopub.status.idle": "2024-03-24T04:58:48.244700Z", + "shell.execute_reply": "2024-03-24T04:58:48.243579Z" + }, + "papermill": { + "duration": 0.332463, + "end_time": "2024-03-24T04:58:48.247096", + "exception": false, + "start_time": "2024-03-24T04:58:47.914633", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAATYAAAESCAYAAAB3gfmJAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABFGElEQVR4nO3deVxU9f4/8NfMMBvbgGwDioAJYopiGBNIekuuZJRRll2vV81MrbA0ssxSKb2J6+9a6s028fYtQu2qmZqFpHUT3BDccENBVBZFhWGdgZnP749hjowMywwDw/J+Ph4nznzO55zzOcS8Ped8Nh5jjIEQQroRvrULQAghlkaBjRDS7VBgI4R0OxTYCCHdDgU2Qki3Q4GNENLtUGAjhHQ7NtYuQGei1WpRUFAABwcH8Hg8axeHENIAYwzl5eXw8vICn9/8PRkFtgYKCgrg7e1t7WIQQppx7do19OnTp9k8FNgacHBwAKD7xTk6Olq5NISQhpRKJby9vbnvaXMosDWgf/x0dHSkwEZIJ9Wa10RUeUAI6XYosBFCuh0KbISQbofesRGL0Gq1UKvV1i4G6eKEQiEEAkGbj0OBjbSZWq1Gbm4utFqttYtCugEnJyfI5fI2tSWlwEbahDGGwsJCCAQCeHt7t9hwkpCmMMZQVVWFmzdvAgA8PT3NPhYFNjPcKlfhXKEScpkEAR4tt6npzurq6lBVVQUvLy/Y2tpauziki5NKpQCAmzdvwt3d3ezHUvrn1Qz/PpiDKZuOYtvxa9YuitVpNBoAgEgksnJJSHeh/weytrbW7GNQYDODv7vuLu1icYWVS9J5UN9aYimW+FuiwGaGAA97AEDOTQpshHRGFNjM0N9dF9hulFajQlVn5dIQQu5Hgc0MTrYiuDmIAdBdGzEfj8fDzp07rV0Mi/rwww8RHBxs7WJQYDOXf/1d26XiciuXhBDzbd68GU5OThY73rx585Cammqx45mLApuZ9M086I6N9ASt7VVib28PFxeXdi5NyyiwmUn/nu0SBTYDjDFUqeussjDGTCrrvn37EBERAScnJ7i4uOCpp57C5cuXAQDh4eGYP3++Qf5bt25BKBTijz/+AAAUFhYiOjoaUqkUfn5+SEpKgq+vL9auXWvW7+706dN4/PHHIZVK4eLigpkzZ6Ki4t7f18GDBxEaGgo7Ozs4OTlhxIgRuHr1KgDg5MmTeOyxx+Dg4ABHR0eEhITg+PHjzZ7v4MGDmDZtGsrKysDj8cDj8fDhhx8CAHx9fbF06VJMmTIFjo6OmDlzJgBg/vz5CAgIgK2tLfr164dFixYZNMu4/1H0pZdeQkxMDFavXg1PT0+4uLggNja2TU05WoMa6JpJ/yh6kR5FDVTXavDg4l+scu7sJVGwFbX+T7qyshJxcXEYMmQIKioqsHjxYjz77LPIysrCpEmTsHLlSixfvpxrfrBlyxZ4eXnh0UcfBQBMmTIFJSUlOHjwIIRCIeLi4rhW86aqrKxEVFQUwsLCcOzYMdy8eROvvPIKZs+ejc2bN6Ourg4xMTGYMWMGvv/+e6jVahw9epQr26RJkzBs2DB89tlnEAgEyMrKglAobPac4eHhWLt2LRYvXowLFy4A0N1x6a1evRqLFy9GfHw8l+bg4IDNmzfDy8sLp0+fxowZM+Dg4IB33323yfMcOHAAnp6eOHDgAHJycvDiiy8iODgYM2bMMOt31RoU2MzkX/8oev1uNarUdSZ9oUjnMH78eIPPmzZtgpubG7KzszFhwgTMnTsXf/75JxfIkpKSMHHiRPB4PJw/fx779+/HsWPHMHz4cADAV199BX9/f7PKkpSUhJqaGnzzzTews7MDAKxfvx5PP/00VqxYAaFQiLKyMjz11FN44IEHAAADBw7k9s/Pz8c777yDwMBAAGhVOUQiEWQyGXg8HuRyeaPtjz/+ON5++22DtIULF3Lrvr6+mDdvHpKTk5sNbM7Ozli/fj0EAgECAwMRHR2N1NRUCmydUS87EVztRSipUOPyzUoE9ZFZu0idglQoQPaSKKud2xSXLl3C4sWLceTIEZSUlHCd+PPz8zF48GCMGTMG3333HR599FHk5uYiPT0dn3/+OQDgwoULsLGxwUMPPcQdr3///nB2djar7OfOncPQoUO5oAYAI0aMgFarxYULFzBy5Ei89NJLiIqKwl//+ldERkZiwoQJXH/KuLg4vPLKK/i///s/REZG4oUXXuACoLn0AbuhLVu24NNPP8Xly5dRUVGBurq6FkebHjRokEHXKE9PT5w+fbpNZWsJvWNrg3vv2ehxVI/H48FWZGOVxdQW608//TTu3LmDL7/8EkeOHMGRI0cA3HtRPmnSJPzwww+ora1FUlISgoKCEBQUZPHfWWslJiYiPT0d4eHh2LJlCwICAnD48GEAundbZ8+eRXR0NH777Tc8+OCD2LFjR5vO1zDIAkB6ejomTZqEJ598Ert370ZmZiY++OCDFisW7n8k5vF47T4SDAW2NqCuVV3X7du3ceHCBSxcuBCjR4/GwIEDcffuXYM8zzzzDGpqarBv3z4kJSVh0qRJ3LYBAwagrq4OmZmZXFpOTk6jY7TWwIEDcfLkSVRWVnJphw4dAp/Px4ABA7i0YcOGYcGCBUhLS8PgwYORlJTEbQsICMBbb72FX3/9Fc899xwSExNbPK9IJOL6+7YkLS0NPj4++OCDDzB8+HD4+/tzlRedjVmBbcOGDfD19YVEIoFCocDRo0ebzb9t2zYEBgZCIpEgKCgIe/fuNdi+fft2jBkzBi4uLuDxeMjKyjLYnpeXx9Xa3L9s27aNy2dse3JysjmX2Cr+XNcqumPrapydneHi4oIvvvgCOTk5+O233xAXF2eQx87ODjExMVi0aBHOnTuHiRMnctsCAwMRGRmJmTNn4ujRo8jMzMTMmTMhlUrN6us4adIkSCQSTJ06FWfOnMGBAwfwxhtvYPLkyfDw8EBubi4WLFiA9PR0XL16Fb/++isuXbqEgQMHorq6GrNnz8bBgwdx9epVHDp0CMeOHTN4B9cUX19fVFRUIDU1FSUlJaiqqmoyr7+/P/Lz85GcnIzLly/j008/bfNdYXsxObBt2bIFcXFxiI+Px4kTJzB06FBERUU1WRuUlpaGiRMnYvr06cjMzERMTAxiYmJw5swZLk9lZSUiIiKwYsUKo8fw9vZGYWGhwfLRRx/B3t4eY8eONcibmJhokC8mJsbUS2w1/R0bNfnoevh8PpKTk5GRkYHBgwfjrbfewqpVqxrlmzRpEk6ePIlHH30Uffv2Ndj2zTffwMPDAyNHjsSzzz7L1RBKJBKTy2Nra4tffvkFd+7cwcMPP4znn38eo0ePxvr167nt58+fx/jx4xEQEICZM2ciNjYWs2bNgkAgwO3btzFlyhQEBARgwoQJGDt2LD766KMWzxseHo5XX30VL774Itzc3LBy5com844bNw5vvfUWZs+ejeDgYKSlpWHRokUmX2uHYCYKDQ1lsbGx3GeNRsO8vLxYQkKC0fwTJkxg0dHRBmkKhYLNmjWrUd7c3FwGgGVmZrZYjuDgYPbyyy8bpAFgO3bsaPkimlBWVsYAsLKyslblv1Vew3zm72a+7+1mVao6s8/blVVXV7Ps7GxWXV1t7aJY3bVr1xgAtn//fmsXpUtr6m/KlO+nSXdsarUaGRkZiIyM5NL4fD4iIyORnp5udJ/09HSD/AAQFRXVZP7WyMjIQFZWFqZPn95oW2xsLFxdXREaGopNmzY122hTpVJBqVQaLKZwsRPB2VYIxoDLt+iuraf57bffsGvXLuTm5iItLQ1/+9vf4Ovri5EjR1q7aD2eSYGtpKQEGo0GHh4eBukeHh4oKioyuk9RUZFJ+Vvj66+/xsCBAxEeHm6QvmTJEmzduhUpKSkYP348Xn/9daxbt67J4yQkJEAmk3GLt7e3SeXg8XhcezbqWtXz1NbW4v3338egQYPw7LPPws3NjWus+91338He3t7oMmjQoA4r49ixY5ssx7JlyzqsHB2ty7Vjq66uRlJSktFn+4Zpw4YNQ2VlJVatWoU333zT6LEWLFhg8MJYqVSaHNz83e1xNPcONfnogaKiohAVZbzN3rhx46BQKIxua6lHgCV99dVXqK6uNrqtV69eHVaOjmZSYHN1dYVAIEBxcbFBenFxsdGWywAgl8tNyt+SH374AVVVVZgyZUqLeRUKBZYuXQqVSgWxWNxou1gsNppuintdq+iOjdzj4OAABwfrz4fRu3dvaxfBKkx6FBWJRAgJCTEYlkSr1SI1NRVhYWFG9wkLC2s0jElKSkqT+Vvy9ddfY9y4cXBzc2sxb1ZWFpydndscvJpDj6KEdD4mP4rGxcVh6tSpGD58OEJDQ7F27VpUVlZi2rRpAHQdg3v37o2EhAQAwJw5czBq1CisWbMG0dHRSE5OxvHjx/HFF19wx7xz5w7y8/NRUFAAAFyHXLlcbnBnl5OTgz/++KNROzgA+Omnn1BcXIxHHnkEEokEKSkpWLZsGebNm2fqJZpE35bt6u1K1NRqIDGxWw8hpB2YUx27bt061rdvXyYSiVhoaCg7fPgwt23UqFFs6tSpBvm3bt3KAgICmEgkYoMGDWJ79uwx2J6YmMgANFri4+MN8i1YsIB5e3szjUbTqEw///wzCw4OZvb29szOzo4NHTqUbdy40Wjeppja3IMxxrRaLRvy4S/MZ/5ull3Q+v26C2ruQSzNEs09eIyZOIhVN6ZUKiGTyVBWVtZix96Gnv8sDcev3sUnfwvGM8E9651GTU0NcnNz4efnZ1bDVELu19TflCnfT+oragH+NGsVIZ0KBTYL4LpWUc0oMUF3nMyls6DAZgH6OzZqy0a6GktP5gLohhzn8XgoLS216HFNQYHNAvR3bHm3q6Cqa90QMISQ9kOBzQI8HMVwkNhAo2XIK2l62JcegTFAXWmdhSZzsdhkLiqVCvPmzUPv3r1hZ2cHhUKBgwcPcvtevXoVTz/9NJydnWFnZ4dBgwZh7969yMvLw2OPPQZANzQUj8fDSy+9ZNbvoy26XJeqzojH48Hf3R4n8ktx6WY5Bsit3+LcamqrgGVe1jn3+wWAyK7lfPVoMpemJ3OZPXs2srOzkZycDC8vL+zYsQNPPPEETp8+DX9/f8TGxkKtVuOPP/6AnZ0dsrOzYW9vD29vb/z3v//F+PHjceHCBTg6OkIqlZr1O2kLCmwW4u/ugBP5pdS1qguhyVyMT+aSn5+PxMRE5Ofnw8tL94/UvHnzsG/fPiQmJmLZsmXIz8/H+PHjuaHS+/Xrx+2v74Pq7u5u8fd3rUWBzUJoNN16QlvdnZO1zm0CmszFuNOnT0Oj0SAgIMAgXaVScZMhv/nmm3jttdfw66+/IjIyEuPHj8eQIUPMOl97oHdsFqLvM9rjm3zweLrHQWssNJmLRSZzqaiogEAg4MY91C/nzp3DJ598AgB45ZVXcOXKFUyePBmnT5/G8OHDmx0irKNRYLMQ/SgfuSWVqNW07ww8pO1oMhcdY5O5DBs2DBqNBjdv3kT//v0NloaPrN7e3nj11Vexfft2vP322/jyyy+5YwJo9SQx7YECm4V4yiSwEwlQp2XIK6lseQdiVTSZi46xyVwCAgIwadIkTJkyBdu3b0dubi6OHj2KhIQE7NmzBwAwd+5c/PLLL8jNzcWJEydw4MAB7nw+Pj7g8XjYvXs3bt26ZVCz22Hapxtr12ROJ/iGxq3/k/nM3832nCqwcMk6r67cCT4lJYUNHDiQicViNmTIEHbw4MFG82bs3buXAWAjR45stH9BQQEbO3YsE4vFzMfHhyUlJTF3d3e2cePGVp3//nOdOnWKPfbYY0wikbBevXqxGTNmsPLycsYYY0VFRSwmJoZ5enoykUjEfHx82OLFi5lGo2EqlYr97W9/Y97e3kwkEjEvLy82e/bsVv8/efXVV5mLi4vBwBNqtZotXryY+fr6MqFQyDw9Pdmzzz7LTp06xRhjbPbs2eyBBx5gYrGYubm5scmTJ7OSkhLumEuWLGFyuZzxeLxGg2K0hDrBW5i5neD13tl2EtsyruOtyADMiTSvdqyroU7w91y/fh3e3t7Yv38/Ro8ebe3idFmW6ARPtaIWRF2repbffvsNFRUVCAoKQmFhId59912azKWToHdsFkSd4XsWmsyl86I7NgvS37FdKalAnUYLGwH9u9Gd0WQunRcFNgvykklhKxKgSq3B1TtVeMDN3tpFIlZCk7lYF91SWBCfz0P/+vZsl4p71ns2qoMilmKJvyUKbBZ2L7D1jPdsAoFu8hp9a31C2qqqSjdCTlse2c16FN2wYQNWrVqFoqIiDB06FOvWrUNoaGiT+bdt24ZFixYhLy8P/v7+WLFiBZ588klu+/bt27Fx40ZkZGTgzp07yMzMRHBwsMEx/vKXv+D33383SJs1axY2btzIfc7Pz8drr72GAwcOwN7eHlOnTkVCQgJsbDruiTtA37WqhwwTbmNjA1tbW25IHz6f/q0k5mGMoaqqCjdv3oSTkxP3j6Y5TP7Gb9myBXFxcdi4cSMUCgXWrl2LqKgoXLhwAe7u7o3yp6WlYeLEiUhISMBTTz2FpKQkxMTE4MSJExg8eDAA3ZAtERERmDBhAmbMmNHkuWfMmIElS5Zwn21t73V61mg0iI6OhlwuR1paGgoLCzFlyhQIhcIOrf3Rd63qKYGNx+PB09MTubm53NhghLSFk5OT2ROq65ncQFehUODhhx/G+vXrAegmTPb29sYbb7yB9957r1H+F198EZWVldi9ezeX9sgjjyA4ONjgbgsA8vLy4Ofn1+QdW3BwcJOD+P3888946qmnUFBQAA8PDwDAxo0bMX/+fNy6dYvrv9actjbQBYD821UYueoARDZ8nFvyBAR807vXdEVarZYeR0mbCYXCJu/U2q2BrlqtRkZGBhYsWMCl8fl8REZGIj093eg+6enpjfrgRUVFmTWJxXfffYdvv/0WcrkcTz/9NBYtWsTdtaWnpyMoKIgLavrzvPbaazh79iyGDRvW6HgqlQoqlYr7rFQqTS7T/fo4SyER8lFTq0X+nSr4ubZ+4MOujM/n9/ieB6TzMCmwlZSUQKPRGAQPAPDw8MD58+eN7lNUVGQ0f1FRkUkF/fvf/w4fHx94eXnh1KlTmD9/Pi5cuIDt27c3ex79NmMSEhLw0UcfmVSOluhrRs/cUOJScXmPCWyEdCZdph3bzJkzufWgoCB4enpi9OjRuHz5stkD6i1YsMDgblKpVMLb27vNZfV3d9AFtpsVGNNxjcwJIfVMqsJydXWFQCBAcXGxQXpxcXGTL/vkcrlJ+VtL36o7Jyen2fPotxkjFovh6OhosFhCT23LRkhnYVJgE4lECAkJQWpqKpem1WqRmpqKsLAwo/uEhYUZ5AeAlJSUJvO3VlZWFgBwQyOHhYXh9OnTBpNppKSkwNHREQ8++GCbzmWqntbkg5DOxuRH0bi4OEydOhXDhw9HaGgo1q5di8rKSkybNg2Abuae3r17IyEhAQAwZ84cjBo1CmvWrEF0dDSSk5Nx/PhxfPHFF9wx79y5g/z8fBQU6MbK18+YI5fLIZfLcfnyZSQlJeHJJ5+Ei4sLTp06hbfeegsjR47kxlkfM2YMHnzwQUyePBkrV65EUVERFi5ciNjYWIjF4rb9lkykb/KRc7MCGi3rMTWjhHQaJo0AV2/dunWsb9++TCQSsdDQUHb48GFu26hRoxoNLLd161YWEBDARCIRGzRoENuzZ4/B9sTERAag0aIf9C4/P5+NHDmS9erVi4nFYta/f3/2zjvvNBpwLi8vj40dO5ZJpVLm6urK3n77bVZbW9vq62rrQJN6dRot8/9gL/OZv5vllVS06ViEEB0aaNJMlmjHpjf2k//hXKESX00ZjsgHPVregRDSLFO+n9T/pZ0EePSsHgiEdCYU2NrJva5VVDNKSEejwNZO+tNouoRYDQW2dnJvZvgKaLX0GpOQjkSBrZ349LKFSMBHda0GN0qND81MCGkfFNjaiY2Aj35uun6iOVSBQEiHosDWjvRdqy5S1ypCOhQFtnZEXasIsQ4KbO2op42mS0hnQYGtHXE1o8XlNIsTIR2IAls78nGxg1DAQ6Vag4KyGmsXh5AegwJbOxIK+NwIujQ2GyEdhwJbO/Ov74FATT4I6TgU2NoZNfkgpONRYGtn/jTKByEdjgJbO9O3ZcsprqCaUUI6CAW2dubrYgcBn4dyVR2KlaqWdyCEtBkFtnYmsuHD10U3qTO9ZyOkY1Bg6wDUtYqQjmVWYNuwYQN8fX0hkUigUChw9OjRZvNv27YNgYGBkEgkCAoKwt69ew22b9++HWPGjIGLiwt4PB43tZ7enTt38MYbb2DAgAGQSqXo27cv3nzzTZSVlRnk4/F4jZbk5GRzLtGi7s1aRXdshHQEkwPbli1bEBcXh/j4eJw4cQJDhw5FVFSUwXyeDaWlpWHixImYPn06MjMzERMTg5iYGJw5c4bLU1lZiYiICKxYscLoMQoKClBQUIDVq1fjzJkz2Lx5M/bt24fp06c3ypuYmIjCwkJuiYmJMfUSLa5//R3bRRpNl5COYeoUWKGhoSw2Npb7rNFomJeXF0tISDCaf8KECSw6OtogTaFQsFmzZjXKm5ubywCwzMzMFsuxdetWJhKJDKbXA8B27NjRugsxwlLT790vu6CM+czfzYLi9zGtVmvRYxPSU5jy/TTpjk2tViMjIwORkZFcGp/PR2RkJNLT043uk56ebpAfAKKioprM31r6KbhsbAznfI6NjYWrqytCQ0OxadOmZptYqFQqKJVKg6U99HOzA58HKGvqcKucakYJaW8mBbaSkhJoNBp4eBjOk+nh4YGioiKj+xQVFZmUv7XlWLp0KWbOnGmQvmTJEmzduhUpKSkYP348Xn/9daxbt67J4yQkJEAmk3GLt7e32WVqjthGAF+X+j6jVIFASLuzaTlL56JUKhEdHY0HH3wQH374ocG2RYsWcevDhg1DZWUlVq1ahTfffNPosRYsWIC4uDiDY7dXcOvvbo8rJZW4WFyOEf1d2+UchBAdk+7YXF1dIRAIUFxcbJBeXFwMuVxudB+5XG5S/uaUl5fjiSeegIODA3bs2AGhUNhsfoVCgevXr0OlMv74JxaL4ejoaLC0F+paRUjHMSmwiUQihISEIDU1lUvTarVITU1FWFiY0X3CwsIM8gNASkpKk/mbolQqMWbMGIhEIuzatQsSiaTFfbKysuDs7AyxWGzSudpDw65VhJD2ZfKjaFxcHKZOnYrhw4cjNDQUa9euRWVlJaZNmwYAmDJlCnr37o2EhAQAwJw5czBq1CisWbMG0dHRSE5OxvHjx/HFF19wx7xz5w7y8/NRUFAAALhw4QIA3d2eXC7nglpVVRW+/fZbgxf9bm5uEAgE+Omnn1BcXIxHHnkEEokEKSkpWLZsGebNm9e235CFcKN83NSNpsvj8axcIkK6MXOqXdetW8f69u3LRCIRCw0NZYcPH+a2jRo1ik2dOtUg/9atW1lAQAATiURs0KBBbM+ePQbbExMTGYBGS3x8PGOMsQMHDhjdDoDl5uYyxhj7+eefWXBwMLO3t2d2dnZs6NChbOPGjUyj0bT6utqruQdjjFWr65jve7uZz/zd7KayxuLHJ6S7M+X7yWOMhpzQUyqVkMlkXFMSSxu16gCu3q5C0gwFwh+gCgRCTGHK95P6inYgGk2XkI5Bga0DcTWjVIFASLuiwNaB/GmYcEI6BAW2DsQ1+aBHUULaFQW2DvSAmz14POB2pRq3K6jPKCHthQJbB5KKBOjjLAVAPRAIaU8U2DqYvmaUAhsh7YcCWwfT14zmUAUCIe2GAlsHozs2QtofBbYOdq/JBwU2QtoLBbYOpu8MX1Khwt1KtZVLQ0j3RIGtg9mJbdDbSVczmnOL7toIaQ8U2KyAulYR0r4osFkBda0ipH1RYLMCf+paRUi7osBmBfo7tks0Mzwh7YICmxXoa0aLlSqUVddauTSEdD8U2KzAQSKEp0w3GU0O3bURYnEU2KxE/56NakYJsTyzAtuGDRvg6+sLiUQChUKBo0ePNpt/27ZtCAwMhEQiQVBQEPbu3Wuwffv27RgzZgxcXFzA4/GQlZXV6Bg1NTWIjY2Fi4sL7O3tMX78+Ebzlebn5yM6Ohq2trZwd3fHO++8g7q6OnMusd3de89GgY0QSzM5sG3ZsgVxcXGIj4/HiRMnMHToUERFReHmzZtG86elpWHixImYPn06MjMzERMTg5iYGJw5c4bLU1lZiYiICKxYsaLJ87711lv46aefsG3bNvz+++8oKCjAc889x23XaDSIjo6GWq1GWloa/vOf/2Dz5s1YvHixqZfYIajJByHtyNQpsEJDQ1lsbCz3WaPRMC8vL5aQkGA0/4QJE1h0dLRBmkKhYLNmzWqUNzc3lwFgmZmZBumlpaVMKBSybdu2cWnnzp1jAFh6ejpjjLG9e/cyPp/PioqKuDyfffYZc3R0ZCqVqlXX1p7T793veN5t5jN/N3tk2f52Pxch3YEp30+T7tjUajUyMjIQGRnJpfH5fERGRiI9Pd3oPunp6Qb5ASAqKqrJ/MZkZGSgtrbW4DiBgYHo27cvd5z09HQEBQXBw8PD4DxKpRJnz541elyVSsVNvtxwEuaO0L9+lI/CshqU11DNKCGWZFJgKykpgUajMQgeAODh4YGioiKj+xQVFZmUv6ljiEQiODk5NXmcps6j32ZMQkICZDIZt3h7e7e6TG0lkwrh4SgGQA11CbG0Hl0rumDBApSVlXHLtWvXOvT83NhsVDNKiEWZFNhcXV0hEAga1UYWFxdDLpcb3Ucul5uUv6ljqNVqlJaWNnmcps6j32aMWCyGo6OjwdKRuM7w1JaNEIsyKbCJRCKEhIQgNTWVS9NqtUhNTUVYWJjRfcLCwgzyA0BKSkqT+Y0JCQmBUCg0OM6FCxeQn5/PHScsLAynT582qJ1NSUmBo6MjHnzwwVafqyPRaLqEtBNTayaSk5OZWCxmmzdvZtnZ2WzmzJnMycmJq42cPHkye++997j8hw4dYjY2Nmz16tXs3LlzLD4+ngmFQnb69Gkuz+3bt1lmZibbs2cPA8CSk5NZZmYmKyws5PK8+uqrrG/fvuy3335jx48fZ2FhYSwsLIzbXldXxwYPHszGjBnDsrKy2L59+5ibmxtbsGBBq6+tI2tFGWPsaK6uZjQ8IbVDzkdIV2bK99PkwMYYY+vWrWN9+/ZlIpGIhYaGssOHD3PbRo0axaZOnWqQf+vWrSwgIICJRCI2aNAgtmfPHoPtiYmJDECjJT4+nstTXV3NXn/9debs7MxsbW3Zs88+axD4GGMsLy+PjR07lkmlUubq6srefvttVltb2+rr6ujAdrdSxXzm72Y+83ez8prWl5OQnsiU7yePMcasdbfY2SiVSshkMpSVlXXY+7aHP96PW+Uq/Bg7AkO9nTrknIR0RaZ8P3t0rWhnQF2rCLE8CmxWxgU26lpFiMVQYLOy/h5UM0qIpdlYuwA9AmNAXQ1QU9Zoibh7A68LzqL3dTXwk6zBNuW9dd8I4PlNAI9n7SshpEugwGaOO1eAkpz6wFNqNGA1WrTG+4P6AXhXCKAOQEYT5zu7HYiYC3gObZfLIaS7ocBmjsxvgf+tMX0/Hh+QyHSL2JFb//FCJW7VSvB06EB4uHvcyyORAX/+PyBnP3B2BwU2QlqJAps5nHx0QaZhAJI43ffZyCKyN/o4+f0X6Th85Q569RmK5x7qY7ixouheYBsdT4+jhLQCBTZzhEzVLRbi7+6Aw1fuGK9ACHgCsJECd/OAwizAa5jFzktId0W1op3AvZnhjTT5ENkBAVG69bM7OrBUhHRdFNg6gf4tNdId9Kzu59kduhpWQkizKLB1AgH1bdny71ShplbTOIP/GEBoC5TmAwUnOrh0hHQ9FNg6ARc7EZxthWAMuHzLyF2byFb3rg2gx1FCWoECWyfA4/FaHk2XexzdSY+jhLSAAlsn0b+l0XT9/woI7YCya8CNplryEkIACmydRgDXGb6JOzahFBgwVrdOj6OENIsCWyfhX1+B0OyMVQ1rR7XaDigVIV0TBbZOQj98Ud7tSuM1owDQP1LXe0F5A7h+rANLR0jXQoGtk3BzEEMmFULLgNySSuOZhBJgwJO6dXocJaRJFNg6CV3NaCtG09U/jmbvpMdRQppgVmDbsGEDfH19IZFIoFAocPTo0Wbzb9u2DYGBgZBIJAgKCsLevXsNtjPGsHjxYnh6ekIqlSIyMhKXLl3ith88eBA8Hs/ocuyY7pEsLy/P6PbDhw+bc4lW0WzXKr3+o3Ujg5QXAteOdFDJCOlaTA5sW7ZsQVxcHOLj43HixAkMHToUUVFRBvN5NpSWloaJEydi+vTpyMzMRExMDGJiYnDmzBkuz8qVK/Hpp59i48aNOHLkCOzs7BAVFYWamhoAQHh4OAoLCw2WV155BX5+fhg+fLjB+fbv32+QLyQkxNRLtJr+rZkZ3kYMBEbr1ulxlBDjTJ0CKzQ0lMXGxnKfNRoN8/LyYgkJCUbzT5gwgUVHRxukKRQKNmvWLMYYY1qtlsnlcrZq1Spue2lpKROLxez77783eky1Ws3c3NzYkiVLuLTc3FwGgGVmZpp6SZyOnn7vfn9cvMl85u9mj68+0HzGC/sYi3dkbFUAY5q6DikbIdZmyvfTpDs2tVqNjIwMREZGcml8Ph+RkZFIT083uk96erpBfgCIiori8ufm5qKoqMggj0wmg0KhaPKYu3btwu3btzFt2rRG28aNGwd3d3dERERg165dzV6PSqWCUqk0WKxJ3/sg73YV1HXNvD/r9xgglunGasvvOo/ahHQUkwJbSUkJNBoNPDw8DNI9PDxQVFRkdJ+ioqJm8+t/mnLMr7/+GlFRUejT596gjPb29lizZg22bduGPXv2ICIiAjExMc0Gt4SEBMhkMm7x9vZuMm9H8HAUw0FsA42WNV0zCgA2ImDgU7p1ehwlpJEuVyt6/fp1/PLLL5g+fbpBuqurK+Li4qBQKPDwww9j+fLl+Mc//oFVq1Y1eawFCxagrKyMW65du9bexW8Wj8druWuVHlc7+iOgbaLdGyE9lEmBzdXVFQKBAMXFxQbpxcXFkMvlRveRy+XN5tf/bO0xExMT4eLignHjxrVYXoVCgZycnCa3i8ViODo6GizWFtCaCgQA8BulG4688iZwNa39C0ZIF2JSYBOJRAgJCUFqaiqXptVqkZqairCwMKP7hIWFGeQHgJSUFC6/n58f5HK5QR6lUokjR440OiZjDImJiZgyZQqEQmGL5c3KyoKnp2err68z0Df5aLZrFUCPo4Q0x9SaieTkZCYWi9nmzZtZdnY2mzlzJnNycmJFRUWMMcYmT57M3nvvPS7/oUOHmI2NDVu9ejU7d+4ci4+PZ0KhkJ0+fZrLs3z5cubk5MR+/PFHdurUKfbMM88wPz8/Vl1dbXDu/fv3MwDs3Llzjcq1efNmlpSUxM6dO8fOnTvHPv74Y8bn89mmTZtafW3WrhVljLED54uZz/zdLHLNwZYzX0rR1Y6ufICxutr2LxwhVmTK99PkyVxefPFF3Lp1C4sXL0ZRURGCg4Oxb98+7uV/fn4++Px7N4Lh4eFISkrCwoUL8f7778Pf3x87d+7E4MGDuTzvvvsuKisrMXPmTJSWliIiIgL79u2DRCIxOPfXX3+N8PBwBAYGGi3b0qVLcfXqVdjY2CAwMBBbtmzB888/b+olWpW+M3xuSSVqNVoIBc3cVPuNAqTOQOUt4OohoN+oDiolIZ0bjzEatVBPqVRCJpOhrKzMau/bGGMYHP8LKtUa7I8byTXabdKuN4AT3wAhLwFPf9IhZSTEGkz5fna5WtHuTlcz2soKBAAY9JzuZ/YuQFPXjiUjpOugwNYJ6TvDX2xNYPN9FLB1AarvAHl/tHPJCOkaKLB1QgGtbcsGAAIbYGB90xeqHSUEAAW2TknftarFJh96+sa6534CNLXtVCpCug4KbJ2QfgLlK7cqUadpxZhrPiMAOzeg+i6Q+3s7l46Qzo8CWyfU20kKqVAAtUaLq3eqWt6BHkcJMUCBrRPi83kNBp009XF0N1CnbqeSEdI1UGDrpPSPozmtqUAAAJ9wwM4dqCmlx1HS41Fg66T0FQitavIBAHwB8OAzunV6HCU9HAW2TqpVE7vcjx5HCQFAga3TCqjvfXD5VgU02lb2euv7CGAvB1RlwJUD7Vg6Qjo3CmydVG9nKSRCPtR1WlxrTc0oQI+jhNSjwNZJCfg8POCm71rVygoEABhc33f0/B6gtqYdSkZI50eBrRPTP46a9J6tTyjg4AWolMDl39qpZIR0bhTYOrF7TT5MCGx8PjAoRrdOj6Okh6LA1ondG+XDhEdR4F7t6IW9QG21hUtFSOdHga0T04+me76oHP9KuYia2lbORtV7OODYB1BXADmpLecnpJuhwNaJ+brY4plgL2i0DJ+kXsITa//A/y7danlHehwlPRwFtk6Mx+Nh7YvB2PD3h+DuIEbe7SpM/voo3vw+EzfLW6jx5B5Hf6bHUdLjmBXYNmzYAF9fX0gkEigUChw9erTZ/Nu2bUNgYCAkEgmCgoKwd+9eg+2MMSxevBienp6QSqWIjIzEpUuXDPL4+vqCx+MZLMuXLzfIc+rUKTz66KOQSCTw9vbGypUrzbm8ToXH4yF6iCdS3x6Fl8J9wecBu04WYPTq3/FNel7TjXd7hwAyb6C2EriU0rGFJsTaTJ0CKzk5mYlEIrZp0yZ29uxZNmPGDObk5MSKi4uN5j906BATCARs5cqVLDs7my1cuNDo9HsymYzt3LmTnTx5ko0bN67R9Hs+Pj5syZIlrLCwkFsqKioMpuby8PBgkyZNYmfOnGHff/89k0ql7PPPP2/1tXWG6fdacvp6KRu37n/MZ/5u5jN/N3t63f/YqWulxjP/8oFuer6tL3VsIQlpB6Z8P00ObKGhoSw2Npb7rNFomJeXF0tISDCaf8KECSw6OtogTaFQsFmzZjHGGNNqtUwul7NVq1Zx20tLS5lYLGbff/89l+bj48P+9a9/NVmuf//738zZ2ZmpVCoubf78+WzAgAGtvrauENgYY6xOo2XfpOWywYv3MZ/5u5nfe7tZ/I9nWFm12jDj9eO6wPZPOWOqSusUlhALMeX7adKjqFqtRkZGBiIjI7k0Pp+PyMhIpKenG90nPT3dID8AREVFcflzc3NRVFRkkEcmk0GhUDQ65vLly+Hi4oJhw4Zh1apVqKu7NytTeno6Ro4cCZFIZHCeCxcu4O7du0bLplKpoFQqDZauQMDnYXKYL1LnjcIzwV7QMmBzWh4i1/yO3acKwPQzKno9BDj5ALVVwKVfrVtoQjqQSYGtpKQEGo2GmxxZz8PDA0VFRUb3KSoqaja//mdLx3zzzTeRnJyMAwcOYNasWVi2bBnefffdFs/T8Bz3S0hIgEwm4xZvb+8mr70zcneQ4JO/DcO30xXwc7XDzXIVZidlYmriMVy9XQnwePcqEah2lPQgXaZWNC4uDn/5y18wZMgQvPrqq1izZg3WrVsHlUpl9jEXLFiAsrIybrl27ZoFS9xxIvxd8fOcRzE30h8iGz7+uHgLf/3XH/g09RLUgfWd4i/+AqgrrVtQQjqISYHN1dUVAoEAxcXFBunFxcWQy+VG95HL5c3m1/805ZgAoFAoUFdXh7y8vGbP0/Ac9xOLxXB0dDRYuiqJUIC5kQH4Ze5IPOrvCnWdFv8v5SKeSC5DtX1foK5aF9wI6QFMCmwikQghISFITb3Xml2r1SI1NRVhYWFG9wkLCzPIDwApKSlcfj8/P8jlcoM8SqUSR44cafKYAJCVlQU+nw93d3fuPH/88Qdqa+9NP5eSkoIBAwbA2dnZlMvs0vxc7fDNy6FYN3EY3BzEuHK7CptKgwEAqpM/WLdwhHQUU2smkpOTmVgsZps3b2bZ2dls5syZzMnJiRUVFTHGGJs8eTJ77733uPyHDh1iNjY2bPXq1ezcuXMsPj7eaHMPJycn9uOPP7JTp06xZ555xqC5R1paGvvXv/7FsrKy2OXLl9m3337L3Nzc2JQpU7hjlJaWMg8PDzZ58mR25swZlpyczGxtbbtdcw9TlFWr2eKdp9nYBesZi3dk1fEuLOl/Z1mdRmvtohFisnZt7sEYY+vWrWN9+/ZlIpGIhYaGssOHD3PbRo0axaZOnWqQf+vWrSwgIICJRCI2aNAgtmfPHoPtWq2WLVq0iHl4eDCxWMxGjx7NLly4wG3PyMhgCoWCyWQyJpFI2MCBA9myZctYTU2NwXFOnjzJIiIimFgsZr1792bLly836bq6W2DTO5l/h13/KJCxeEf2xoL32bj1f7LT15to+0ZIJ2XK95PHGGvluNPdn1KphEwmQ1lZWZd+32aMdv9S8P9cjVT2MKar3gKfB7wU7oe4MQGwF9tYu3iEtMiU72eXqRUlbcMfrGv28bjNKbwwWAYtAzYdysXoNQex93Qh6N830p1QYOspPAYBLv7gaVRYNaQA37wcCh8XWxQrVXj9uxOYtvkY8m+3cm4FQjo5Cmw9xX2NdUcGuOGXuSMxZ7Q/RAI+Dl64hb/+63dsO9412/IR0hAFtp5EH9hy9gM1ZZAIBXjrrwHYN/dRhD/gAlWdFu/8cApLd2ejTqO1blkJaQMKbD2J+0DAdQCgUevGaavXz80e305XYM5ofwDA13/m4uX/HEdZdW1TRyKkU6PA1pPwePem57uv7yifz8Nbfw3Ahr8/BIlQ1y3r2X8fwpVbJkwkQ0gnQYGtp3kwRvczJxWoLm20OXqIJ354NRxeMgmu3KrEMxsO4Y+LrRiOnJBOhAJbT+MeCLg/CGhrdbNYGTG4tww/zo5AiI8zymvq8FLiUXz9Zy41CSFdBgW2nqgVQxm5OYiRNEOBF0L6QMuApbuzMf+/p6Cqa+VMWYRYEQW2nkj/OHr5N6Da+CCcACC2EWDl80OwMHog+Dxg6/HrmPTlEdwqN3+oKEI6AgW2nsgtAPAYDGjrgHO7m83K4/HwyqP9kDgtFA4SGxy/ehfPrP8TZwvKzDu3VgPcyACUBebtT0grUGDrqUycd3RUgBt2xo5AP1c7FJTV4PnP0vHz6cLWn6/yNvDnWuDTYcCXjwNrhwC74yjAkXZBneAb6M6d4BspyQHWhwA8AfBODmDbq1W7lVXV4o3kTK6mdM5of8wZ7Q8+n9c4M2O6u7NjXwFntgOa+kdYG6lu4EsAEIiB4S8DEW8BDh6Nj0FIPeoET1rm2h+QBwFMA5z7qdW7yWyF2DR1OF6J8AMAfJJ6CbFJJ1ClvjexDtRVwIlvgC9GAV+NBk5+rwtqnkOBceuBd68AL+0B+obr0o98BnwyFPh1ke7OjpA2oju2BnrUHRsA/G8NkLoE6PcYMGWnybtvPX4NC3ecgVqjxUBPRyQ+7Qz5xSQg61ugpv4dnECsaxT88Cu6SZx5De7sGAOuHAB++xi4cVyXJrIHFK8C4bMBac8Z+Zi0zJTvJwW2BnpcYLtzRffOiycA5l0E7FxNPkRG7k0k/d+XeKb2Z4wUnL63wckHeHg6EPwPwM6l+YMwppse8MDHQOFJXZpYBoTFAo+8Bkh6wP8L0iIKbGbqcYENAD4fBRRmAU+tBYZPa/1+FTeBE/8Bjm8GlNcBAFrGw+8sGALFKxg5diLAF5hWFsaA87uBA8uAm9m6NKkzMGIOEDoTENmZdjzSrVBgM1OPDGx/rgX2xwN+o4Cpu5rPyxiQf1hXGZD9o673AgBIe6F26CQsLQrDN+d1SdNG+OKDJwfCRmDGa1ytFji7HTi4HLh9SZdm56arYBj+MiCUmn5M0uVRYDNTjwxsd/N0L+55fODti4C9W+M8qgrg9Fbg2NdA8Zl76X0e1r07ezAGEErAGMOnqTn41/6LAIBH/V2xfuJDkNkKzSubpg44vQ34fbmunADg4Ak8+jbw0BTARmzecUmX1O61ohs2bICvry8kEgkUCgWOHj3abP5t27YhMDAQEokEQUFB2LvXsI8iYwyLFy+Gp6cnpFIpIiMjcenSJW57Xl4epk+fDj8/P0ilUjzwwAOIj4+HWq02yMPj8Rothw8fNucSew5nX8DrIYBpgXP33bHdugDsfQdYEwjsfksX1GykwLDJwMzfgVf2A0P/BgglAHSNeedE+uOzSQ9BKhTgf5dKEPPvQ8i5aeYIIQIbIHgiMPs48PSngMwbKC8E9s4D1oUAGZsBDQ2tRIwwdaaY5ORkJhKJ2KZNm9jZs2fZjBkzmJOTEysuLjaa/9ChQ0wgELCVK1ey7OxstnDhQqPT78lkMrZz50528uRJNm7cOIPp937++Wf20ksvsV9++YVdvnyZ/fjjj8zd3Z29/fbb3DFyc3MZALZ//35WWFjILWq1utXX1l1nqWrRn58wFu/IWGI0Y3Vqxs7s0K3HO95bPhnGWNoGxqrutOqQZ2+UsfCEVOYzfzcbHL+PHThv/O/DJLU1jB35grHVA+6Va+0QxjK/Y6yutu3HJ51au06/FxoaymJjY7nPGo2GeXl5sYSEBKP5J0yYwKKjow3SFAoFmzVrFmNMN/WeXC5nq1at4raXlpYysVjMvv/++ybLsXLlSubn58d91ge2zMxMUy+J02MD292r9YFCZhg0PnRi7Pu/M5aTyphGY/Jhb5XXsOc/O8R85u9mfu/tZl/+cZlptRaY01RdpQuyKx+4V9ZPQxg7tc2scpKuwZTvp0mPomq1GhkZGYiMjOTS+Hw+IiMjkZ6ebnSf9PR0g/wAEBUVxeXPzc1FUVGRQR6ZTAaFQtHkMQGgrKwMvXo1bi0/btw4uLu7IyIiArt2Nf8yXKVSQalUGiw9klNfoPdwAEz3qGfnBjw6D5h7Gvjbd8ADjwN8099auNqL8d0rj+DF4d7QMuCfe87hnR8sMEKIUAqEvQ7MOQlEfgRIe+kqGf47Hdg4AsjepavoID2WSRNKlpSUQKPRwMPDsOuLh4cHzp8/b3SfoqIio/mLioq47fq0pvLcLycnB+vWrcPq1au5NHt7e6xZswYjRowAn8/Hf//7X8TExGDnzp0YN26c0eMkJCTgo48+auaKe5CxK4CjXwL+fwUGjgNsRBY5rMiGj+XjgxDo6YClu7PxQ8Z1XLlVgWXPBaGfqz1ENm3o/CKyAyLm6mpKj3wOpK3TNRPZOhmQDwEe+wAIiDJsFNwRNHW6HhV19YvBuhqoq7lvXd10fu5zfV6NSvee09kX6OUHOPvp1h3kHX+dnViXmyn3xo0beOKJJ/DCCy9gxowZXLqrqyvi4uK4zw8//DAKCgqwatWqJgPbggULDPZRKpXw9vZuv8J3Zn2G65Z2wOPxMG2EH/q72yP2uxM4kV+KJ9b+D3we0MfZFn6udo0WLycpBMb6nxojcQRGvQOEvgKkbwAOfwYUnQK+fxHo1U/XmwFMdxfHWP26ton1+s9gAEODdWa4buwYmlpd8GFWmAhHH+zuD3i9/HR35D2sBtmkwObq6gqBQIDi4mKD9OLiYsjlcqP7yOXyZvPrfxYXF8PT09MgT3BwsMF+BQUFeOyxxxAeHo4vvviixfIqFAqkpKQ0uV0sFkMs7ln/w63pUX83/Dg7Au9vP42T10tRpdYg/04V8u9U4ff7hh8XCfjo62IY9Hxd7NDPzQ7uDmLwjN2dSJ2BxxcCiteAtE90d6B3rnTQ1TWBJ9AFFRuxrnuZjQiwkdy3LmqcRyDWbePW9dtFgLoCuJOrawJzNxcou64bVODWOd3SuBCAY+/6gOfbOPi1cgCErsSkwCYSiRASEoLU1FTExMQAALRaLVJTUzF79myj+4SFhSE1NRVz587l0lJSUhAWFgYA8PPzg1wuR2pqKhfIlEoljhw5gtdee43b58aNG3jssccQEhKCxMRE8FvxzicrK8sgWBLr83O1w/czHwFjDLfKVbhSUom8kkrkNliu3qmCuk6LnJsVRpuK2IoE8HWxg5+bHfxc6oOeqx36udrB2U6k68L11yVA+JtAQZZuJ179f3j8+ke21q7zWp9fIDQMVAKxrslKe6tTA2XXdEGOC3h599ZrK3W9Q5TXgbz/Nd5fItMFOS7w1a87+eiCnsi+yz3mmvxbj4uLw9SpUzF8+HCEhoZi7dq1qKysxLRpuu44U6ZMQe/evZGQkAAAmDNnDkaNGoU1a9YgOjoaycnJOH78OHfHxePxMHfuXPzzn/+Ev78//Pz8sGjRInh5eXHB88aNG/jLX/4CHx8frF69Grdu3fvXXX/H95///AcikQjDhg0DAGzfvh2bNm3CV199Zf5vh7QbHo8Hd0cJ3B0leKSfYV9SjZahoLQauSWVyLtdiSu3dD9zSypx/W41qtQaZBcqkV3YuLJHJhXCrz7I+braoY9zIBwlQthLbOAgsYGD+N660JxeEZ2RjQhweUC33I8xoPJWg0CXa7heUawbsKAwS7cYw+MDYkddAJQ4AhIn3bpBmuy+tAZ5xY4dE+AbMPlsL774Im7duoXFixejqKgIwcHB2LdvH/fyPz8/3+BuKjw8HElJSVi4cCHef/99+Pv7Y+fOnRg8eDCX591330VlZSVmzpyJ0tJSREREYN++fZBIdA0/U1JSkJOTg5ycHPTp08egPKxB7dfSpUtx9epV2NjYIDAwEFu2bMHzzz9v6iUSKxPwefDuZQvvXrYYCcOeEOo6La7dreLu8hre8RWW1aCsuhZZ10qRda20xfOIbfi6YCcRwl5sA3uxLuDZS2zgIK5Pl9xLd5DYwF4svO+zjXndxjoKjwfYu+sW79DG29WVwN2rjQPe3TygNF9XwcG0QE2pbjGX0O6+gHd/EJTp+gRb6M6QulQ10CO7VHUj1WoN8m7rAp0+4BWW1aBcVYeKmlqU19ShQlWHKrVlJ6SRCgWwl9jAUyaBt7Mt+jhL0aeXLbydpfDuZYveTlJIhCYOCNAZMKarDKkpA2qU9T/LAFXZvXWDdGXjtNrK1p1LZA+8f6PZLKZ8P7tcrSghTZGKBBjo6YiBns3/0ddptKhUaVCuqkWFqk4X8GrqoKzRfa6oqeOCYHlNHcr16dxnXZqqTlf7WV2rQXWtBrfKVTh13fhcEO4OYnj30gU9b2dbePeSoo+zLbydbeHpJOmcj8U8nq7NoFCqa05iDk0toCqvv+NrJgha+B0eBTbS49gI+JDZ8s3vnF9PXadFZX2wU9bU4kZpNa7dqcL1u9W4frcK1+5U49rdKlSpNbhZrsLNchUyrjaeFYzPAzxlUl3Q62XL3fXpHselcHeQtL7pS2cjEOoqIDq45pUeRRugR1FiaYwx3K2q5QLetbtVBuvX71ZDXdd8uzehgIfeTlLujk/uKIVMagMnWxFkUiFktkLdz/qlU979WQA9ihLSSfB4PPSyE6GXnQhDvZ0abddqGUoqVPUBz/BO79rdKhSU1qBWw5B3uwp5t6tadU47kQBOtiI4SoW6ACjVBUAnW2F9mm5dJhVy22RSIRwkNsYn5emCKLARYkV8/r1mLyE+jbfXabQoUtbo7vDuVOHa3WrcKlehrFqNsupalFXXorRK97O8RjehTqVag0p1NW6UVptUFh4PcJTcC3r6YKerMRY2qC22Magt1m/T1yx3hsdmCmyEdGI2Aj76ONuij7Nto/Z+96vTaFFeU4fS+oCnC3pqKBsEv4bbyrg0NWpqtWAM3La2sBMJ7gU6iRAOYv26vi2hPjDeC5b2Ehs87Gu593AU2AjpJmwEfDjbiXS9L0xUU6uB0iAg6n42rA2uUNWioqbh54Y/a1Gr0b2u190xalAMVavPLxHycX7pWJPL3RQKbIQQSIQCSIQCuDtKzD6Gqk7TKPBxn7lmNA2a1DTYbiOg5h6EkE5IbCOA2F4AF3vrDyzRPeuFCSE9GgU2Qki3Q4GNENLtUGAjhHQ7FNgIId0OBTZCSLdDgY0Q0u1QO7YG9AOd9Nj5RQnpxPTfy9YMSESBrYHy8nIA6LlT8BHSBZSXl0MmkzWbh8Zja0Cr1aKgoAAODg7Gp3drQD8H6bVr17rF2G3d7XoAuqauorXXxBhDeXk5vLy8Wpylju7YGuDz+Y0mi2mJo6Njt/kDA7rf9QB0TV1Fa66ppTs1Pao8IIR0OxTYCCHdDgU2M4nFYsTHx0Mstv5IBpbQ3a4HoGvqKtrjmqjygBDS7dAdGyGk26HARgjpdiiwEUK6HQpshJBuhwIbIaTbocBmhg0bNsDX1xcSiQQKhQJHjx61dpHMlpCQgIcffhgODg5wd3dHTEwMLly4YO1iWdTy5cvB4/Ewd+5caxelTW7cuIF//OMfcHFxgVQqRVBQEI4fP27tYplFo9Fg0aJF8PPzg1QqxQMPPIClS5e2qoN7a1BgM9GWLVsQFxeH+Ph4nDhxAkOHDkVUVBRu3rxp7aKZ5ffff0dsbCwOHz6MlJQU1NbWYsyYMaisrLR20Szi2LFj+PzzzzFkyBBrF6VN7t69ixEjRkAoFOLnn39GdnY21qxZA2dnZ2sXzSwrVqzAZ599hvXr1+PcuXNYsWIFVq5ciXXr1lnmBIyYJDQ0lMXGxnKfNRoN8/LyYgkJCVYsleXcvHmTAWC///67tYvSZuXl5czf35+lpKSwUaNGsTlz5li7SGabP38+i4iIsHYxLCY6Opq9/PLLBmnPPfccmzRpkkWOT3dsJlCr1cjIyEBkZCSXxufzERkZifT0dCuWzHLKysoAAL169bJySdouNjYW0dHRBv+/uqpdu3Zh+PDheOGFF+Du7o5hw4bhyy+/tHaxzBYeHo7U1FRcvHgRAHDy5En8+eefGDvWMrPB0+geJigpKYFGo4GHh4dBuoeHB86fP2+lUlmOVqvF3LlzMWLECAwePNjaxWmT5ORknDhxAseOHbN2USziypUr+OyzzxAXF4f3338fx44dw5tvvgmRSISpU6dau3gme++996BUKhEYGAiBQACNRoOPP/4YkyZNssjxKbARTmxsLM6cOYM///zT2kVpk2vXrmHOnDlISUmBRCKxdnEsQqvVYvjw4Vi2bBkAYNiwYThz5gw2btzYJQPb1q1b8d133yEpKQmDBg1CVlYW5s6dCy8vL8tcj0UeaHsIlUrFBAIB27Fjh0H6lClT2Lhx46xTKAuJjY1lffr0YVeuXLF2Udpsx44dDAATCATcAoDxeDwmEAhYXV2dtYtosr59+7Lp06cbpP373/9mXl5eVipR2/Tp04etX7/eIG3p0qVswIABFjk+vWMzgUgkQkhICFJTU7k0rVaL1NRUhIWFWbFk5mOMYfbs2dixYwd+++03+Pn5WbtIbTZ69GicPn0aWVlZ3DJ8+HBMmjQJWVlZEAgE1i6iyUaMGNGoGc7Fixfh4+NjpRK1TVVVVaNRcAUCAbRarWVOYJHw2IMkJyczsVjMNm/ezLKzs9nMmTOZk5MTKyoqsnbRzPLaa68xmUzGDh48yAoLC7mlqqrK2kWzqK5eK3r06FFmY2PDPv74Y3bp0iX23XffMVtbW/btt99au2hmmTp1KuvduzfbvXs3y83NZdu3b2eurq7s3XfftcjxKbCZYd26daxv375MJBKx0NBQdvjwYWsXyWwAjC6JiYnWLppFdfXAxhhjP/30Exs8eDATi8UsMDCQffHFF9YuktmUSiWbM2cO69u3L5NIJKxfv37sgw8+YCqVyiLHp/HYCCHdDr1jI4R0OxTYCCHdDgU2Qki3Q4GNENLtUGAjhHQ7FNgIId0OBTZCSLdDgY0Q0u1QYCOEdDsU2Agh3Q4FNkJIt/P/Ad4EZzF8TCiUAAAAAElFTkSuQmCC", + "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-24T04:58:48.282435Z", + "iopub.status.busy": "2024-03-24T04:58:48.282068Z", + "iopub.status.idle": "2024-03-24T05:02:54.805198Z", + "shell.execute_reply": "2024-03-24T05:02:54.804382Z" + }, + "papermill": { + "duration": 246.543926, + "end_time": "2024-03-24T05:02:54.807556", + "exception": false, + "start_time": "2024-03-24T04:58:48.263630", + "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-24T05:02:54.843237Z", + "iopub.status.busy": "2024-03-24T05:02:54.842552Z", + "iopub.status.idle": "2024-03-24T05:02:54.864746Z", + "shell.execute_reply": "2024-03-24T05:02:54.863819Z" + }, + "papermill": { + "duration": 0.04212, + "end_time": "2024-03-24T05:02:54.866825", + "exception": false, + "start_time": "2024-03-24T05:02:54.824705", + "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
tvae0.0066440.0357860.001482.8779740.0139170.4571760.0240950.0000024.7272150.0295540.0915550.0384660.1009160.0082077.60519
\n", + "
" + ], + "text/plain": [ + " avg_g_cos_loss avg_g_mag_loss avg_loss grad_duration grad_mae \\\n", + "tvae 0.006644 0.035786 0.00148 2.877974 0.013917 \n", + "\n", + " grad_mape grad_rmse mean_pred_loss pred_duration pred_mae \\\n", + "tvae 0.457176 0.024095 0.000002 4.727215 0.029554 \n", + "\n", + " pred_mape pred_rmse pred_std std_loss total_duration \n", + "tvae 0.091555 0.038466 0.100916 0.008207 7.60519 " + ] + }, + "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-24T05:02:54.901830Z", + "iopub.status.busy": "2024-03-24T05:02:54.901026Z", + "iopub.status.idle": "2024-03-24T05:02:55.301336Z", + "shell.execute_reply": "2024-03-24T05:02:55.300019Z" + }, + "papermill": { + "duration": 0.42061, + "end_time": "2024-03-24T05:02:55.303873", + "exception": false, + "start_time": "2024-03-24T05:02:54.883263", + "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-24T05:02:55.339239Z", + "iopub.status.busy": "2024-03-24T05:02:55.338855Z", + "iopub.status.idle": "2024-03-24T05:07:25.727940Z", + "shell.execute_reply": "2024-03-24T05:07:25.727072Z" + }, + "papermill": { + "duration": 270.40958, + "end_time": "2024-03-24T05:07:25.730480", + "exception": false, + "start_time": "2024-03-24T05:02:55.320900", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Caching in ../../../../contraceptive/_cache_aug_test/tvae/all inf False\n", + "Caching in ../../../../contraceptive/_cache_bs_test/tvae/all inf False\n", + "Caching in ../../../../contraceptive/_cache_synth_test/tvae/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-24T05:07:25.769004Z", + "iopub.status.busy": "2024-03-24T05:07:25.768138Z", + "iopub.status.idle": "2024-03-24T05:07:25.795186Z", + "shell.execute_reply": "2024-03-24T05:07:25.794448Z" + }, + "papermill": { + "duration": 0.047832, + "end_time": "2024-03-24T05:07:25.797051", + "exception": false, + "start_time": "2024-03-24T05:07:25.749219", + "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-24T05:07:25.829695Z", + "iopub.status.busy": "2024-03-24T05:07:25.829132Z", + "iopub.status.idle": "2024-03-24T05:07:25.834346Z", + "shell.execute_reply": "2024-03-24T05:07:25.833429Z" + }, + "papermill": { + "duration": 0.023626, + "end_time": "2024-03-24T05:07:25.836259", + "exception": false, + "start_time": "2024-03-24T05:07:25.812633", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'tvae': 0.3903380688599178}\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-24T05:07:25.872376Z", + "iopub.status.busy": "2024-03-24T05:07:25.872030Z", + "iopub.status.idle": "2024-03-24T05:07:26.331834Z", + "shell.execute_reply": "2024-03-24T05:07:26.330819Z" + }, + "papermill": { + "duration": 0.481427, + "end_time": "2024-03-24T05:07:26.334083", + "exception": false, + "start_time": "2024-03-24T05:07:25.852656", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from ml_utility_loss.loss_learning.visualization import plot_pred_density_2\n", + "\n", + "_ = plot_pred_density_2(y)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "e79e4b0f", + "metadata": { + "execution": { + "iopub.execute_input": "2024-03-24T05:07:26.370391Z", + "iopub.status.busy": "2024-03-24T05:07:26.369764Z", + "iopub.status.idle": "2024-03-24T05:07:26.797880Z", + "shell.execute_reply": "2024-03-24T05:07:26.796993Z" + }, + "papermill": { + "duration": 0.44865, + "end_time": "2024-03-24T05:07:26.799989", + "exception": false, + "start_time": "2024-03-24T05:07:26.351339", + "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-24T05:07:26.837690Z", + "iopub.status.busy": "2024-03-24T05:07:26.836863Z", + "iopub.status.idle": "2024-03-24T05:07:27.060396Z", + "shell.execute_reply": "2024-03-24T05:07:27.059427Z" + }, + "papermill": { + "duration": 0.244584, + "end_time": "2024-03-24T05:07:27.062488", + "exception": false, + "start_time": "2024-03-24T05:07:26.817904", + "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-24T05:07:27.099990Z", + "iopub.status.busy": "2024-03-24T05:07:27.099677Z", + "iopub.status.idle": "2024-03-24T05:07:27.364047Z", + "shell.execute_reply": "2024-03-24T05:07:27.363099Z" + }, + "papermill": { + "duration": 0.285602, + "end_time": "2024-03-24T05:07:27.366158", + "exception": false, + "start_time": "2024-03-24T05:07:27.080556", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#\"\"\"\n", + "from ml_utility_loss.loss_learning.visualization import plot_grad, plot_grad_2, plot_grad_3\n", + "import matplotlib.pyplot as plt\n", + "\n", + "#plot_grad_2(y, model.models)\n", + "for m in model.models:\n", + " ym = y[m]\n", + " fig, ax = plt.subplots()\n", + " plot_grad_3(ym[\"error\"], ym[\"grad\"], name=f\"{m}_grad\", fig=fig, ax=ax)\n", + "#\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "54c0e9f3", + "metadata": { + "papermill": { + "duration": 0.018603, + "end_time": "2024-03-24T05:07:27.403129", + "exception": false, + "start_time": "2024-03-24T05:07:27.384526", + "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": 4509.109971, + "end_time": "2024-03-24T05:07:30.143404", + "environment_variables": {}, + "exception": null, + "input_path": "eval/contraceptive/tvae/3/mlu-eval.ipynb", + "output_path": "eval/contraceptive/tvae/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/tvae/3", + "path_prefix": "../../../../", + "random_seed": 3, + "single_model": "tvae" + }, + "start_time": "2024-03-24T03:52:21.033433", + "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