{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "982e76f5", "metadata": { "execution": { "iopub.execute_input": "2024-03-22T18:25:32.810606Z", "iopub.status.busy": "2024-03-22T18:25:32.810253Z", "iopub.status.idle": "2024-03-22T18:25:32.844126Z", "shell.execute_reply": "2024-03-22T18:25:32.843228Z" }, "papermill": { "duration": 0.049518, "end_time": "2024-03-22T18:25:32.846150", "exception": false, "start_time": "2024-03-22T18:25:32.796632", "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-22T18:25:32.871980Z", "iopub.status.busy": "2024-03-22T18:25:32.871271Z", "iopub.status.idle": "2024-03-22T18:25:32.878825Z", "shell.execute_reply": "2024-03-22T18:25:32.878026Z" }, "papermill": { "duration": 0.022399, "end_time": "2024-03-22T18:25:32.880774", "exception": false, "start_time": "2024-03-22T18:25:32.858375", "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-22T18:25:32.905398Z", "iopub.status.busy": "2024-03-22T18:25:32.904673Z", "iopub.status.idle": "2024-03-22T18:25:32.908769Z", "shell.execute_reply": "2024-03-22T18:25:32.907978Z" }, "papermill": { "duration": 0.018577, "end_time": "2024-03-22T18:25:32.910682", "exception": false, "start_time": "2024-03-22T18:25:32.892105", "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-22T18:25:32.934272Z", "iopub.status.busy": "2024-03-22T18:25:32.934005Z", "iopub.status.idle": "2024-03-22T18:25:32.937751Z", "shell.execute_reply": "2024-03-22T18:25:32.936972Z" }, "executionInfo": { "elapsed": 678, "status": "ok", "timestamp": 1696841022168, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "ns5hFcVL2yvs", "papermill": { "duration": 0.017915, "end_time": "2024-03-22T18:25:32.939736", "exception": false, "start_time": "2024-03-22T18:25:32.921821", "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-22T18:25:32.963325Z", "iopub.status.busy": "2024-03-22T18:25:32.963068Z", "iopub.status.idle": "2024-03-22T18:25:32.969414Z", "shell.execute_reply": "2024-03-22T18:25:32.968762Z" }, "papermill": { "duration": 0.020539, "end_time": "2024-03-22T18:25:32.971254", "exception": false, "start_time": "2024-03-22T18:25:32.950715", "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": "e6ac06ed", "metadata": { "execution": { "iopub.execute_input": "2024-03-22T18:25:32.996699Z", "iopub.status.busy": "2024-03-22T18:25:32.996164Z", "iopub.status.idle": "2024-03-22T18:25:33.001946Z", "shell.execute_reply": "2024-03-22T18:25:33.001170Z" }, "papermill": { "duration": 0.020348, "end_time": "2024-03-22T18:25:33.003845", "exception": false, "start_time": "2024-03-22T18:25:32.983497", "status": "completed" }, "tags": [ "injected-parameters" ] }, "outputs": [], "source": [ "# Parameters\n", "dataset = \"contraceptive\"\n", "dataset_name = \"contraceptive\"\n", "single_model = \"realtabformer\"\n", "gp = True\n", "gp_multiply = True\n", "random_seed = 4\n", "debug = False\n", "folder = \"eval\"\n", "path_prefix = \"../../../../\"\n", "path = \"eval/contraceptive/realtabformer/4\"\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.011496, "end_time": "2024-03-22T18:25:33.027218", "exception": false, "start_time": "2024-03-22T18:25:33.015722", "status": "completed" }, "tags": [] }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 7, "id": "5f45b1d0", "metadata": { "execution": { "iopub.execute_input": "2024-03-22T18:25:33.051797Z", "iopub.status.busy": "2024-03-22T18:25:33.051536Z", "iopub.status.idle": "2024-03-22T18:25:33.061460Z", "shell.execute_reply": "2024-03-22T18:25:33.060625Z" }, "executionInfo": { "elapsed": 7, "status": "ok", "timestamp": 1696841022169, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "UdvXYv3c3LXy", "papermill": { "duration": 0.024661, "end_time": "2024-03-22T18:25:33.063488", "exception": false, "start_time": "2024-03-22T18:25:33.038827", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/kaggle/working\n", "/kaggle/working/eval/contraceptive/realtabformer/4\n" ] } ], "source": [ "from pathlib import Path\n", "import os\n", "\n", "%cd /kaggle/working/\n", "\n", "if path is None:\n", " path = os.path.join(folder, dataset_name, single_model, random_seed)\n", "Path(path).mkdir(parents=True, exist_ok=True)\n", "\n", "%cd {path}" ] }, { "cell_type": "code", "execution_count": 8, "id": "f85bf540", "metadata": { "execution": { "iopub.execute_input": "2024-03-22T18:25:33.087949Z", "iopub.status.busy": "2024-03-22T18:25:33.087654Z", "iopub.status.idle": "2024-03-22T18:25:35.091545Z", "shell.execute_reply": "2024-03-22T18:25:35.090625Z" }, "papermill": { "duration": 2.018587, "end_time": "2024-03-22T18:25:35.093760", "exception": false, "start_time": "2024-03-22T18:25:33.075173", "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-22T18:25:35.121283Z", "iopub.status.busy": "2024-03-22T18:25:35.120287Z", "iopub.status.idle": "2024-03-22T18:25:35.133689Z", "shell.execute_reply": "2024-03-22T18:25:35.132914Z" }, "papermill": { "duration": 0.02882, "end_time": "2024-03-22T18:25:35.135556", "exception": false, "start_time": "2024-03-22T18:25:35.106736", "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-22T18:25:35.159865Z", "iopub.status.busy": "2024-03-22T18:25:35.159587Z", "iopub.status.idle": "2024-03-22T18:25:35.166500Z", "shell.execute_reply": "2024-03-22T18:25:35.165637Z" }, "executionInfo": { "elapsed": 6, "status": "ok", "timestamp": 1696841022169, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "Vrl2QkoV3o_8", "papermill": { "duration": 0.021545, "end_time": "2024-03-22T18:25:35.168571", "exception": false, "start_time": "2024-03-22T18:25:35.147026", "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-22T18:25:35.193192Z", "iopub.status.busy": "2024-03-22T18:25:35.192895Z", "iopub.status.idle": "2024-03-22T18:25:35.295635Z", "shell.execute_reply": "2024-03-22T18:25:35.294503Z" }, "executionInfo": { "elapsed": 6, "status": "ok", "timestamp": 1696841022169, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "TilUuFk9vqMb", "papermill": { "duration": 0.118596, "end_time": "2024-03-22T18:25:35.299353", "exception": false, "start_time": "2024-03-22T18:25:35.180757", "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-22T18:25:35.345814Z", "iopub.status.busy": "2024-03-22T18:25:35.345281Z", "iopub.status.idle": "2024-03-22T18:25:40.035802Z", "shell.execute_reply": "2024-03-22T18:25:40.034988Z" }, "executionInfo": { "elapsed": 3113, "status": "ok", "timestamp": 1696841025277, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "7Abt8nStvr9Z", "papermill": { "duration": 4.72311, "end_time": "2024-03-22T18:25:40.038405", "exception": false, "start_time": "2024-03-22T18:25:35.315295", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2024-03-22 18:25:37.634605: 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-22 18:25:37.634666: 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-22 18:25:37.636412: 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-22T18:25:40.064350Z", "iopub.status.busy": "2024-03-22T18:25:40.063748Z", "iopub.status.idle": "2024-03-22T18:25:40.069694Z", "shell.execute_reply": "2024-03-22T18:25:40.068940Z" }, "papermill": { "duration": 0.020969, "end_time": "2024-03-22T18:25:40.071695", "exception": false, "start_time": "2024-03-22T18:25:40.050726", "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-22T18:25:40.098056Z", "iopub.status.busy": "2024-03-22T18:25:40.097756Z", "iopub.status.idle": "2024-03-22T18:25:48.386241Z", "shell.execute_reply": "2024-03-22T18:25:48.385081Z" }, "executionInfo": { "elapsed": 20137, "status": "ok", "timestamp": 1696841045408, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "tbaguWxAvtPi", "papermill": { "duration": 8.30448, "end_time": "2024-03-22T18:25:48.388661", "exception": false, "start_time": "2024-03-22T18:25:40.084181", "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-22T18:25:48.416817Z", "iopub.status.busy": "2024-03-22T18:25:48.415940Z", "iopub.status.idle": "2024-03-22T18:25:48.423229Z", "shell.execute_reply": "2024-03-22T18:25:48.422395Z" }, "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.023322, "end_time": "2024-03-22T18:25:48.425255", "exception": false, "start_time": "2024-03-22T18:25:48.401933", "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-22T18:25:48.452099Z", "iopub.status.busy": "2024-03-22T18:25:48.451734Z", "iopub.status.idle": "2024-03-22T18:25:48.457495Z", "shell.execute_reply": "2024-03-22T18:25:48.456465Z" }, "papermill": { "duration": 0.023243, "end_time": "2024-03-22T18:25:48.460213", "exception": false, "start_time": "2024-03-22T18:25:48.436970", "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-22T18:25:48.488503Z", "iopub.status.busy": "2024-03-22T18:25:48.488167Z", "iopub.status.idle": "2024-03-22T18:25:48.983967Z", "shell.execute_reply": "2024-03-22T18:25:48.982986Z" }, "papermill": { "duration": 0.511485, "end_time": "2024-03-22T18:25:48.986631", "exception": false, "start_time": "2024-03-22T18:25:48.475146", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Caching in ../../../../contraceptive/_cache_aug_test/realtabformer/all inf False\n", "../../../../ml-utility-loss/aug_test/contraceptive [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", "Caching in ../../../../contraceptive/_cache_bs_test/realtabformer/all inf False\n", "../../../../ml-utility-loss/bs_test/contraceptive [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", "Caching in ../../../../contraceptive/_cache_synth_test/realtabformer/all inf False\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "../../../../ml-utility-loss/synthetics/contraceptive [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", "1050\n" ] } ], "source": [ "from ml_utility_loss.loss_learning.estimator.pipeline import load_dataset_4\n", "\n", "test_set = load_dataset_4(\n", " dataset_dir=os.path.join(path_prefix, \"ml-utility-loss/\"),\n", " dataset_name=dataset_name,\n", " preprocessor=preprocessor,\n", " model=single_model,\n", " cache_dir=path_prefix,\n", ")" ] }, { "cell_type": "code", "execution_count": 18, "id": "14ff8b40", "metadata": { "execution": { "iopub.execute_input": "2024-03-22T18:25:49.016655Z", "iopub.status.busy": "2024-03-22T18:25:49.016343Z", "iopub.status.idle": "2024-03-22T18:25:49.337933Z", "shell.execute_reply": "2024-03-22T18:25:49.337082Z" }, "executionInfo": { "elapsed": 588, "status": "ok", "timestamp": 1696841049215, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "NgahtU1q9uLO", "papermill": { "duration": 0.337712, "end_time": "2024-03-22T18:25:49.339917", "exception": false, "start_time": "2024-03-22T18:25:49.002205", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "{'Body': 'twin_encoder',\n", " 'loss_balancer_meta': True,\n", " 'loss_balancer_log': False,\n", " 'loss_balancer_lbtw': False,\n", " 'pma_skip_small': False,\n", " 'isab_skip_small': False,\n", " 'layer_norm': False,\n", " 'pma_layer_norm': False,\n", " 'attn_residual': True,\n", " 'tf_n_layers_dec': False,\n", " 'tf_isab_rank': 0,\n", " 'tf_layer_norm': False,\n", " 'tf_pma_start': -1,\n", " 'head_n_seeds': 0,\n", " 'tf_pma_low': 16,\n", " 'dropout': 0,\n", " 'combine_mode': 'diff_left',\n", " 'tf_isab_mode': 'separate',\n", " 'grad_loss_fn': torch.Tensor>,\n", " 'single_model': True,\n", " 'bias': True,\n", " 'bias_final': True,\n", " 'pma_ffn_mode': 'none',\n", " 'patience': 10,\n", " 'inds_init_mode': 'fixnorm',\n", " 'grad_clip': 0.73,\n", " 'gradient_penalty_mode': {'gradient_penalty': True,\n", " 'forward_once': False,\n", " 'calc_grad_m': False,\n", " 'avg_non_role_model_m': False,\n", " 'inverse_avg_non_role_model_m': False},\n", " 'synth_data': 2,\n", " 'bias_lr_mul': 1.0,\n", " 'bias_weight_decay': 0.05,\n", " 'head_activation': torch.nn.modules.activation.Softsign,\n", " 'loss_balancer_beta': 0.67,\n", " 'loss_balancer_r': 0.943,\n", " 'tf_activation': torch.nn.modules.activation.Tanh,\n", " 'dataset_size': 2048,\n", " 'batch_size': 4,\n", " 'epochs': 100,\n", " 'lr_mul': 0.09,\n", " 'n_warmup_steps': 100,\n", " 'Optim': functools.partial(, amsgrad=True),\n", " 'fixed_role_model': 'realtabformer',\n", " 'd_model': 256,\n", " 'attn_activation': torch.nn.modules.activation.PReLU,\n", " 'tf_d_inner': 512,\n", " 'tf_n_layers_enc': 3,\n", " 'tf_n_head': 32,\n", " 'tf_activation_final': ml_utility_loss.activations.LeakyHardtanh,\n", " 'ada_d_hid': 1024,\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': 256,\n", " 'head_n_layers': 9,\n", " 'head_n_head': 32,\n", " 'head_activation_final': ml_utility_loss.activations.LeakyHardsigmoid,\n", " 'models': ['realtabformer'],\n", " 'max_seconds': 3600,\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.65, '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", "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-22T18:25:49.367429Z", "iopub.status.busy": "2024-03-22T18:25:49.367146Z", "iopub.status.idle": "2024-03-22T18:25:49.481593Z", "shell.execute_reply": "2024-03-22T18:25:49.480556Z" }, "papermill": { "duration": 0.130903, "end_time": "2024-03-22T18:25:49.483846", "exception": false, "start_time": "2024-03-22T18:25:49.352943", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Caching in ../../../../contraceptive/_cache_aug_train/realtabformer/all inf False\n", "split df ratio is 0\n", "../../../../ml-utility-loss/aug_train/contraceptive [400, 0]\n", "Caching in ../../../../contraceptive/_cache_aug_val/realtabformer/all inf False\n", "split df ratio is 1\n", "../../../../ml-utility-loss/aug_val/contraceptive [0, 200]\n", "Caching in ../../../../contraceptive/_cache_bs_train/realtabformer/all inf False\n", "split df ratio is 0\n", "../../../../ml-utility-loss/bs_train/contraceptive [100, 0]\n", "Caching in ../../../../contraceptive/_cache_bs_val/realtabformer/all inf False\n", "split df ratio is 1\n", "../../../../ml-utility-loss/bs_val/contraceptive [0, 50]\n", "Caching in ../../../../contraceptive/_cache_synth/realtabformer/all inf False\n", "Splitting without random!\n", "Split with reverse index!\n", "../../../../ml-utility-loss/synthetics/contraceptive [400, 200]\n", "[900, 450]\n", "[900, 450]\n" ] } ], "source": [ "train_set, val_set = datasetsn(model=params[\"fixed_role_model\"], synth_data=params[\"synth_data\"])" ] }, { "cell_type": "code", "execution_count": 20, "id": "2fcb1418", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 1000 }, "execution": { "iopub.execute_input": "2024-03-22T18:25:49.517623Z", "iopub.status.busy": "2024-03-22T18:25:49.516808Z", "iopub.status.idle": "2024-03-22T18:25:49.965327Z", "shell.execute_reply": "2024-03-22T18:25:49.964454Z" }, "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.467912, "end_time": "2024-03-22T18:25:49.968113", "exception": false, "start_time": "2024-03-22T18:25:49.500201", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Creating model of type \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[*] Embedding True True\n", "['realtabformer'] 1\n" ] } ], "source": [ "from ml_utility_loss.loss_learning.estimator.model.pipeline import remove_non_model_params\n", "from ml_utility_loss.loss_learning.estimator.pipeline import create_model\n", "from ml_utility_loss.util import filter_dict, clear_memory\n", "\n", "clear_memory()\n", "\n", "params2 = remove_non_model_params(params)\n", "adapters = filter_dict(preprocessor.adapter_sizes, params[\"models\"])\n", "\n", "model = create_model(\n", " adapters=adapters,\n", " #Body=\"twin_encoder\",\n", " **params2,\n", ")\n", "#cf.apply_weight_standardization(model, n_last_layers_ignore=0)\n", "print(model.models, len(model.adapters))" ] }, { "cell_type": "code", "execution_count": 21, "id": "938f94fc", "metadata": { "execution": { "iopub.execute_input": "2024-03-22T18:25:50.001404Z", "iopub.status.busy": "2024-03-22T18:25:50.000585Z", "iopub.status.idle": "2024-03-22T18:25:50.005435Z", "shell.execute_reply": "2024-03-22T18:25:50.004492Z" }, "papermill": { "duration": 0.022319, "end_time": "2024-03-22T18:25:50.007663", "exception": false, "start_time": "2024-03-22T18:25:49.985344", "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-22T18:25:50.037114Z", "iopub.status.busy": "2024-03-22T18:25:50.036796Z", "iopub.status.idle": "2024-03-22T18:25:50.044082Z", "shell.execute_reply": "2024-03-22T18:25:50.043211Z" }, "papermill": { "duration": 0.023858, "end_time": "2024-03-22T18:25:50.046140", "exception": false, "start_time": "2024-03-22T18:25:50.022282", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "12536352" ] }, "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-22T18:25:50.073008Z", "iopub.status.busy": "2024-03-22T18:25:50.072727Z", "iopub.status.idle": "2024-03-22T18:25:50.157362Z", "shell.execute_reply": "2024-03-22T18:25:50.156456Z" }, "papermill": { "duration": 0.100317, "end_time": "2024-03-22T18:25:50.159378", "exception": false, "start_time": "2024-03-22T18:25:50.059061", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "========================================================================================================================\n", "Layer (type:depth-idx) Output Shape Param #\n", "========================================================================================================================\n", "MLUtilitySingle [2, 1179, 16128] --\n", "├─Adapter: 1-1 [2, 1179, 16128] --\n", "│ └─Embedding: 2-1 [2, 1179, 24, 672] (48,384)\n", "│ └─TensorInductionPoint: 2-2 [24, 1] 24\n", "│ └─Sequential: 2-3 [2, 1179, 256] --\n", "│ │ └─FeedForward: 3-1 [2, 1179, 1024] --\n", "│ │ │ └─Linear: 4-1 [2, 1179, 1024] 689,152\n", "│ │ │ └─Softsign: 4-2 [2, 1179, 1024] --\n", "│ │ └─FeedForward: 3-2 [2, 1179, 1024] --\n", "│ │ │ └─Linear: 4-3 [2, 1179, 1024] 1,049,600\n", "│ │ │ └─Softsign: 4-4 [2, 1179, 1024] --\n", "│ │ └─FeedForward: 3-3 [2, 1179, 1024] --\n", "│ │ │ └─Linear: 4-5 [2, 1179, 1024] 1,049,600\n", "│ │ │ └─Softsign: 4-6 [2, 1179, 1024] --\n", "│ │ └─FeedForward: 3-4 [2, 1179, 1024] --\n", "│ │ │ └─Linear: 4-7 [2, 1179, 1024] 1,049,600\n", "│ │ │ └─Softsign: 4-8 [2, 1179, 1024] --\n", "│ │ └─FeedForward: 3-5 [2, 1179, 1024] --\n", "│ │ │ └─Linear: 4-9 [2, 1179, 1024] 1,049,600\n", "│ │ │ └─Softsign: 4-10 [2, 1179, 1024] --\n", "│ │ └─FeedForward: 3-6 [2, 1179, 1024] --\n", "│ │ │ └─Linear: 4-11 [2, 1179, 1024] 1,049,600\n", "│ │ │ └─Softsign: 4-12 [2, 1179, 1024] --\n", "│ │ └─FeedForward: 3-7 [2, 1179, 1024] --\n", "│ │ │ └─Linear: 4-13 [2, 1179, 1024] 1,049,600\n", "│ │ │ └─Softsign: 4-14 [2, 1179, 1024] --\n", "│ │ └─FeedForward: 3-8 [2, 1179, 1024] --\n", "│ │ │ └─Linear: 4-15 [2, 1179, 1024] 1,049,600\n", "│ │ │ └─Softsign: 4-16 [2, 1179, 1024] --\n", "│ │ └─FeedForward: 3-9 [2, 1179, 256] --\n", "│ │ │ └─Linear: 4-17 [2, 1179, 256] 262,400\n", "│ │ │ └─LeakyHardsigmoid: 4-18 [2, 1179, 256] --\n", "├─Adapter: 1-2 [2, 294, 16128] (recursive)\n", "│ └─Embedding: 2-4 [2, 294, 24, 672] (recursive)\n", "│ └─TensorInductionPoint: 2-5 [24, 1] (recursive)\n", "│ └─Sequential: 2-6 [2, 294, 256] (recursive)\n", "│ │ └─FeedForward: 3-10 [2, 294, 1024] (recursive)\n", "│ │ │ └─Linear: 4-19 [2, 294, 1024] (recursive)\n", "│ │ │ └─Softsign: 4-20 [2, 294, 1024] --\n", "│ │ └─FeedForward: 3-11 [2, 294, 1024] (recursive)\n", "│ │ │ └─Linear: 4-21 [2, 294, 1024] (recursive)\n", "│ │ │ └─Softsign: 4-22 [2, 294, 1024] --\n", "│ │ └─FeedForward: 3-12 [2, 294, 1024] (recursive)\n", "│ │ │ └─Linear: 4-23 [2, 294, 1024] (recursive)\n", "│ │ │ └─Softsign: 4-24 [2, 294, 1024] --\n", "│ │ └─FeedForward: 3-13 [2, 294, 1024] (recursive)\n", "│ │ │ └─Linear: 4-25 [2, 294, 1024] (recursive)\n", "│ │ │ └─Softsign: 4-26 [2, 294, 1024] --\n", "│ │ └─FeedForward: 3-14 [2, 294, 1024] (recursive)\n", "│ │ │ └─Linear: 4-27 [2, 294, 1024] (recursive)\n", "│ │ │ └─Softsign: 4-28 [2, 294, 1024] --\n", "│ │ └─FeedForward: 3-15 [2, 294, 1024] (recursive)\n", "│ │ │ └─Linear: 4-29 [2, 294, 1024] (recursive)\n", "│ │ │ └─Softsign: 4-30 [2, 294, 1024] --\n", "│ │ └─FeedForward: 3-16 [2, 294, 1024] (recursive)\n", "│ │ │ └─Linear: 4-31 [2, 294, 1024] (recursive)\n", "│ │ │ └─Softsign: 4-32 [2, 294, 1024] --\n", "│ │ └─FeedForward: 3-17 [2, 294, 1024] (recursive)\n", "│ │ │ └─Linear: 4-33 [2, 294, 1024] (recursive)\n", "│ │ │ └─Softsign: 4-34 [2, 294, 1024] --\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, 4096] --\n", "│ └─Encoder: 2-7 [2, 16, 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, 32, 128, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-1 [2, 32, 128, 1179] --\n", "│ │ │ │ │ │ └─Linear: 7-5 [2, 128, 256] 65,792\n", "│ │ │ │ │ │ └─PReLU: 7-6 [2, 128, 256] 1\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, 32, 1179, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-2 [2, 32, 1179, 128] --\n", "│ │ │ │ │ │ └─Linear: 7-11 [2, 1179, 256] 65,792\n", "│ │ │ │ │ │ └─PReLU: 7-12 [2, 1179, 256] 1\n", "│ │ │ │ └─DoubleFeedForward: 5-2 [2, 1179, 256] --\n", "│ │ │ │ │ └─Linear: 6-4 [2, 1179, 512] 131,584\n", "│ │ │ │ │ └─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, 32, 128, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-3 [2, 32, 128, 1179] --\n", "│ │ │ │ │ │ └─Linear: 7-17 [2, 128, 256] 65,792\n", "│ │ │ │ │ │ └─PReLU: 7-18 [2, 128, 256] 1\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, 32, 1179, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-4 [2, 32, 1179, 128] --\n", "│ │ │ │ │ │ └─Linear: 7-23 [2, 1179, 256] 65,792\n", "│ │ │ │ │ │ └─PReLU: 7-24 [2, 1179, 256] 1\n", "│ │ │ │ └─DoubleFeedForward: 5-4 [2, 1179, 256] --\n", "│ │ │ │ │ └─Linear: 6-10 [2, 1179, 512] 131,584\n", "│ │ │ │ │ └─Tanh: 6-11 [2, 1179, 512] --\n", "│ │ │ │ │ └─Linear: 6-12 [2, 1179, 256] 131,328\n", "│ │ │ └─EncoderLayer: 4-39 [2, 16, 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, 32, 128, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-5 [2, 32, 128, 1179] --\n", "│ │ │ │ │ │ └─Linear: 7-29 [2, 128, 256] 65,792\n", "│ │ │ │ │ │ └─PReLU: 7-30 [2, 128, 256] 1\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, 32, 1179, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-6 [2, 32, 1179, 128] --\n", "│ │ │ │ │ │ └─Linear: 7-35 [2, 1179, 256] 65,792\n", "│ │ │ │ │ │ └─PReLU: 7-36 [2, 1179, 256] 1\n", "│ │ │ │ └─DoubleFeedForward: 5-6 [2, 1179, 256] --\n", "│ │ │ │ │ └─Linear: 6-16 [2, 1179, 512] 131,584\n", "│ │ │ │ │ └─LeakyHardtanh: 6-17 [2, 1179, 512] --\n", "│ │ │ │ │ └─Linear: 6-18 [2, 1179, 256] 131,328\n", "│ │ │ │ └─PoolingByMultiheadAttention: 5-7 [2, 16, 256] --\n", "│ │ │ │ │ └─TensorInductionPoint: 6-19 [2, 16, 256] 4,096\n", "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-20 [2, 16, 256] --\n", "│ │ │ │ │ │ └─Linear: 7-37 [2, 16, 256] 65,536\n", "│ │ │ │ │ │ └─Linear: 7-38 [2, 1179, 256] 65,536\n", "│ │ │ │ │ │ └─Linear: 7-39 [2, 1179, 256] 65,536\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-40 [2, 32, 16, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-7 [2, 32, 16, 1179] --\n", "│ │ │ │ │ │ └─Linear: 7-41 [2, 16, 256] 65,792\n", "│ │ │ │ │ │ └─PReLU: 7-42 [2, 16, 256] 1\n", "│ └─Encoder: 2-8 [2, 16, 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, 32, 128, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-8 [2, 32, 128, 294] --\n", "│ │ │ │ │ │ └─Linear: 7-47 [2, 128, 256] (recursive)\n", "│ │ │ │ │ │ └─PReLU: 7-48 [2, 128, 256] (recursive)\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, 32, 294, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-9 [2, 32, 294, 128] --\n", "│ │ │ │ │ │ └─Linear: 7-53 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─PReLU: 7-54 [2, 294, 256] (recursive)\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, 32, 128, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-10 [2, 32, 128, 294] --\n", "│ │ │ │ │ │ └─Linear: 7-59 [2, 128, 256] (recursive)\n", "│ │ │ │ │ │ └─PReLU: 7-60 [2, 128, 256] (recursive)\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, 32, 294, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-11 [2, 32, 294, 128] --\n", "│ │ │ │ │ │ └─Linear: 7-65 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─PReLU: 7-66 [2, 294, 256] (recursive)\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, 16, 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, 32, 128, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-12 [2, 32, 128, 294] --\n", "│ │ │ │ │ │ └─Linear: 7-71 [2, 128, 256] (recursive)\n", "│ │ │ │ │ │ └─PReLU: 7-72 [2, 128, 256] (recursive)\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, 32, 294, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-13 [2, 32, 294, 128] --\n", "│ │ │ │ │ │ └─Linear: 7-77 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─PReLU: 7-78 [2, 294, 256] (recursive)\n", "│ │ │ │ └─DoubleFeedForward: 5-13 [2, 294, 256] (recursive)\n", "│ │ │ │ │ └─Linear: 6-36 [2, 294, 512] (recursive)\n", "│ │ │ │ │ └─LeakyHardtanh: 6-37 [2, 294, 512] --\n", "│ │ │ │ │ └─Linear: 6-38 [2, 294, 256] (recursive)\n", "│ │ │ │ └─PoolingByMultiheadAttention: 5-14 [2, 16, 256] (recursive)\n", "│ │ │ │ │ └─TensorInductionPoint: 6-39 [2, 16, 256] (recursive)\n", "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-40 [2, 16, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-79 [2, 16, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-80 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-81 [2, 294, 256] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-82 [2, 32, 16, 8] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-14 [2, 32, 16, 294] --\n", "│ │ │ │ │ │ └─Linear: 7-83 [2, 16, 256] (recursive)\n", "│ │ │ │ │ │ └─PReLU: 7-84 [2, 16, 256] (recursive)\n", "├─Head: 1-4 [2] --\n", "│ └─Sequential: 2-9 [2, 1] --\n", "│ │ └─FeedForward: 3-21 [2, 256] --\n", "│ │ │ └─Linear: 4-43 [2, 256] 1,048,832\n", "│ │ │ └─Softsign: 4-44 [2, 256] --\n", "│ │ └─FeedForward: 3-22 [2, 256] --\n", "│ │ │ └─Linear: 4-45 [2, 256] 65,792\n", "│ │ │ └─Softsign: 4-46 [2, 256] --\n", "│ │ └─FeedForward: 3-23 [2, 256] --\n", "│ │ │ └─Linear: 4-47 [2, 256] 65,792\n", "│ │ │ └─Softsign: 4-48 [2, 256] --\n", "│ │ └─FeedForward: 3-24 [2, 256] --\n", "│ │ │ └─Linear: 4-49 [2, 256] 65,792\n", "│ │ │ └─Softsign: 4-50 [2, 256] --\n", "│ │ └─FeedForward: 3-25 [2, 256] --\n", "│ │ │ └─Linear: 4-51 [2, 256] 65,792\n", "│ │ │ └─Softsign: 4-52 [2, 256] --\n", "│ │ └─FeedForward: 3-26 [2, 256] --\n", "│ │ │ └─Linear: 4-53 [2, 256] 65,792\n", "│ │ │ └─Softsign: 4-54 [2, 256] --\n", "│ │ └─FeedForward: 3-27 [2, 256] --\n", "│ │ │ └─Linear: 4-55 [2, 256] 65,792\n", "│ │ │ └─Softsign: 4-56 [2, 256] --\n", "│ │ └─FeedForward: 3-28 [2, 256] --\n", "│ │ │ └─Linear: 4-57 [2, 256] 65,792\n", "│ │ │ └─Softsign: 4-58 [2, 256] --\n", "│ │ └─FeedForward: 3-29 [2, 1] --\n", "│ │ │ └─Linear: 4-59 [2, 1] 257\n", "│ │ │ └─LeakyHardsigmoid: 4-60 [2, 1] --\n", "========================================================================================================================\n", "Total params: 12,584,736\n", "Trainable params: 12,536,352\n", "Non-trainable params: 48,384\n", "Total mult-adds (M): 46.91\n", "========================================================================================================================\n", "Input size (MB): 0.28\n", "Forward/backward pass size (MB): 755.51\n", "Params size (MB): 50.34\n", "Estimated Total Size (MB): 806.13\n", "========================================================================================================================" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from torchinfo import summary\n", "\n", "role_model = params[\"fixed_role_model\"]\n", "s = train_set[0][role_model]\n", "summary(model[role_model], input_size=((2, *s[0].shape), (2, *s[1].shape)), depth=9) # 8 max" ] }, { "cell_type": "code", "execution_count": 24, "id": "0f42c4d1", "metadata": { "execution": { "iopub.execute_input": "2024-03-22T18:25:50.189362Z", "iopub.status.busy": "2024-03-22T18:25:50.189056Z", "iopub.status.idle": "2024-03-22T19:30:55.813525Z", "shell.execute_reply": "2024-03-22T19:30:55.812567Z" }, "papermill": { "duration": 3905.656784, "end_time": "2024-03-22T19:30:55.830437", "exception": false, "start_time": "2024-03-22T18:25:50.173653", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3 datasets [900, 450, 1050]\n", "Creating model of type \n", "[*] Embedding True True\n", "g_loss_mul 0.1\n", "Epoch 0\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.014773491756835332, 'avg_role_model_std_loss': 0.5065707220365463, 'avg_role_model_mean_pred_loss': 0.0010022340709901162, 'avg_role_model_g_mag_loss': 2.0442994761798117, '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.015191531291671305, 'n_size': 900, 'n_batch': 225, 'duration': 274.4165141582489, 'duration_batch': 1.2196289518144396, 'duration_size': 0.3049072379536099, 'avg_pred_std': 0.11575380941232045}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.007571417718944657, 'avg_role_model_std_loss': 1.554786379107431, 'avg_role_model_mean_pred_loss': 0.00017871774661915499, '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.007571417718944657, 'n_size': 450, 'n_batch': 113, 'duration': 91.69575762748718, 'duration_batch': 0.8114668816591786, 'duration_size': 0.20376835028330484, 'avg_pred_std': 0.061720233775296174}\n", "Epoch 1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.007462754625658918, 'avg_role_model_std_loss': 0.9658913450170937, 'avg_role_model_mean_pred_loss': 0.00014313012270514552, 'avg_role_model_g_mag_loss': 0.8396876566774315, '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.007641434397470827, 'n_size': 900, 'n_batch': 225, 'duration': 273.0821771621704, 'duration_batch': 1.213698565165202, 'duration_size': 0.3034246412913005, 'avg_pred_std': 0.09523055639531877}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.006775144316876928, 'avg_role_model_std_loss': 2.6273896950355087, 'avg_role_model_mean_pred_loss': 9.84499310450578e-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.006775144316876928, 'n_size': 450, 'n_batch': 113, 'duration': 91.63136982917786, 'duration_batch': 0.8108970781343173, 'duration_size': 0.2036252662870619, 'avg_pred_std': 0.046712872879249995}\n", "Epoch 2\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.004955892372494822, 'avg_role_model_std_loss': 0.7045143008656533, 'avg_role_model_mean_pred_loss': 7.975020945901844e-05, 'avg_role_model_g_mag_loss': 0.6091641951931848, '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.005083349947817624, 'n_size': 900, 'n_batch': 225, 'duration': 273.1290547847748, 'duration_batch': 1.2139069101545545, 'duration_size': 0.30347672753863864, 'avg_pred_std': 0.09947649084807685}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0036339714314736838, 'avg_role_model_std_loss': 3.456087975117349, 'avg_role_model_mean_pred_loss': 5.305239131944066e-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.0036339714314736838, 'n_size': 450, 'n_batch': 113, 'duration': 91.59913516044617, 'duration_batch': 0.8106118155791696, 'duration_size': 0.20355363368988036, 'avg_pred_std': 0.05323507617829384}\n", "Epoch 3\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0038874727278339883, 'avg_role_model_std_loss': 0.5685213102487542, 'avg_role_model_mean_pred_loss': 3.110381803025462e-05, 'avg_role_model_g_mag_loss': 0.44001219677428405, '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.003981491989947648, 'n_size': 900, 'n_batch': 225, 'duration': 273.2383725643158, 'duration_batch': 1.2143927669525147, 'duration_size': 0.3035981917381287, 'avg_pred_std': 0.09838743486338192}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.00476446549566592, 'avg_role_model_std_loss': 8.537542689921613, 'avg_role_model_mean_pred_loss': 7.457373639723973e-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.00476446549566592, 'n_size': 450, 'n_batch': 113, 'duration': 91.5707778930664, 'duration_batch': 0.8103608663103222, 'duration_size': 0.20349061754014758, 'avg_pred_std': 0.04942838404795353}\n", "Epoch 4\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.003344398294769538, 'avg_role_model_std_loss': 0.42805399294468366, 'avg_role_model_mean_pred_loss': 2.9547856750660956e-05, 'avg_role_model_g_mag_loss': 0.4788584218091435, '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.0034413283928168108, 'n_size': 900, 'n_batch': 225, 'duration': 273.74941539764404, 'duration_batch': 1.2166640684339736, 'duration_size': 0.3041660171084934, 'avg_pred_std': 0.10119029613832632}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.003117711971394278, 'avg_role_model_std_loss': 3.474242146586163, 'avg_role_model_mean_pred_loss': 4.511719159815966e-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.003117711971394278, 'n_size': 450, 'n_batch': 113, 'duration': 91.81963801383972, 'duration_batch': 0.8125631682640684, 'duration_size': 0.20404364003075492, 'avg_pred_std': 0.06101849829712141}\n", "Epoch 5\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.003131055658159312, 'avg_role_model_std_loss': 0.4019659260851485, 'avg_role_model_mean_pred_loss': 2.7654838360707502e-05, 'avg_role_model_g_mag_loss': 0.4308759291966756, '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.0032185360684201846, 'n_size': 900, 'n_batch': 225, 'duration': 275.91382932662964, 'duration_batch': 1.2262836858961317, 'duration_size': 0.3065709214740329, 'avg_pred_std': 0.10080154451231162}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0037931067653052095, 'avg_role_model_std_loss': 2.7604550893965283, 'avg_role_model_mean_pred_loss': 4.1587406659311395e-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.0037931067653052095, 'n_size': 450, 'n_batch': 113, 'duration': 91.9511308670044, 'duration_batch': 0.8137268218318973, 'duration_size': 0.20433584637112087, 'avg_pred_std': 0.055654415548614236}\n", "Epoch 6\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0029877640384883206, 'avg_role_model_std_loss': 0.366934466270567, 'avg_role_model_mean_pred_loss': 1.5397459504559052e-05, 'avg_role_model_g_mag_loss': 0.43426220549477473, '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.003075523809238803, 'n_size': 900, 'n_batch': 225, 'duration': 275.31064915657043, 'duration_batch': 1.2236028851403131, 'duration_size': 0.3059007212850783, 'avg_pred_std': 0.10231422000668115}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.003043726567929197, 'avg_role_model_std_loss': 3.6605247210606398, 'avg_role_model_mean_pred_loss': 3.023255854904125e-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.003043726567929197, 'n_size': 450, 'n_batch': 113, 'duration': 93.64256858825684, 'duration_batch': 0.8286952972412109, 'duration_size': 0.20809459686279297, 'avg_pred_std': 0.04299795463994409}\n", "Epoch 7\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0027128174370348763, 'avg_role_model_std_loss': 0.6366902967303084, 'avg_role_model_mean_pred_loss': 1.8083823394538535e-05, 'avg_role_model_g_mag_loss': 0.3685302308367358, '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.0027878411782633825, 'n_size': 900, 'n_batch': 225, 'duration': 278.0753390789032, 'duration_batch': 1.2358903959062364, 'duration_size': 0.3089725989765591, 'avg_pred_std': 0.0995295613238381}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0033965686908535037, 'avg_role_model_std_loss': 3.677261768688456, 'avg_role_model_mean_pred_loss': 3.01374123970701e-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.0033965686908535037, 'n_size': 450, 'n_batch': 113, 'duration': 94.00029134750366, 'duration_batch': 0.8318609853761386, 'duration_size': 0.20888953632778592, 'avg_pred_std': 0.048798565403043205}\n", "Epoch 8\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.00263197087019863, 'avg_role_model_std_loss': 0.38799835741244154, 'avg_role_model_mean_pred_loss': 1.5526932464568304e-05, 'avg_role_model_g_mag_loss': 0.40329953748318886, '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.00271295235922379, 'n_size': 900, 'n_batch': 225, 'duration': 275.622722864151, 'duration_batch': 1.2249898793962266, 'duration_size': 0.30624746984905665, 'avg_pred_std': 0.10333809573306806}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.0033174797300145856, 'avg_role_model_std_loss': 3.981254602707383, 'avg_role_model_mean_pred_loss': 1.7999465464147374e-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.0033174797300145856, 'n_size': 450, 'n_batch': 113, 'duration': 91.82101058959961, 'duration_batch': 0.8125753149522089, 'duration_size': 0.20404669019911023, 'avg_pred_std': 0.048110959254796574}\n", "Epoch 9\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0024303717027133746, 'avg_role_model_std_loss': 0.2821750321023667, 'avg_role_model_mean_pred_loss': 1.0843823537028828e-05, 'avg_role_model_g_mag_loss': 0.3803096185210678, '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.002506096155072252, 'n_size': 900, 'n_batch': 225, 'duration': 273.3220579624176, 'duration_batch': 1.2147647020551893, 'duration_size': 0.3036911755137973, 'avg_pred_std': 0.10012033009280762}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.002648681451359557, 'avg_role_model_std_loss': 3.9122540106362074, 'avg_role_model_mean_pred_loss': 1.250503946443018e-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.002648681451359557, 'n_size': 450, 'n_batch': 113, 'duration': 91.80838418006897, 'duration_batch': 0.8124635768147697, 'duration_size': 0.20401863151126437, 'avg_pred_std': 0.04869509997944537}\n", "Time out: 3677.9721715450287/3600\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Eval loss {'role_model': 'realtabformer', 'n_size': 1050, 'n_batch': 263, 'role_model_metrics': {'avg_loss': 0.0025333050786866805, 'avg_g_mag_loss': 0.021173561026940617, 'avg_g_cos_loss': 0.010191353678366709, 'pred_duration': 8.549674272537231, 'grad_duration': 8.245461463928223, 'total_duration': 16.795135736465454, 'pred_std': 0.09621766954660416, 'std_loss': 0.016873924061655998, 'mean_pred_loss': 1.128543954109773e-05, 'pred_rmse': 0.05033194646239281, 'pred_mae': 0.03761804476380348, 'pred_mape': 0.12008485943078995, 'grad_rmse': 0.44913792610168457, 'grad_mae': 0.2508392035961151, 'grad_mape': 6.304388523101807}, '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.0025333050786866805, 'avg_g_mag_loss': 0.021173561026940617, 'avg_g_cos_loss': 0.010191353678366709, 'avg_pred_duration': 8.549674272537231, 'avg_grad_duration': 8.245461463928223, 'avg_total_duration': 16.795135736465454, 'avg_pred_std': 0.09621766954660416, 'avg_std_loss': 0.016873924061655998, 'avg_mean_pred_loss': 1.128543954109773e-05}, 'min_metrics': {'avg_loss': 0.0025333050786866805, 'avg_g_mag_loss': 0.021173561026940617, 'avg_g_cos_loss': 0.010191353678366709, 'pred_duration': 8.549674272537231, 'grad_duration': 8.245461463928223, 'total_duration': 16.795135736465454, 'pred_std': 0.09621766954660416, 'std_loss': 0.016873924061655998, 'mean_pred_loss': 1.128543954109773e-05, 'pred_rmse': 0.05033194646239281, 'pred_mae': 0.03761804476380348, 'pred_mape': 0.12008485943078995, 'grad_rmse': 0.44913792610168457, 'grad_mae': 0.2508392035961151, 'grad_mape': 6.304388523101807}, 'model_metrics': {'realtabformer': {'avg_loss': 0.0025333050786866805, 'avg_g_mag_loss': 0.021173561026940617, 'avg_g_cos_loss': 0.010191353678366709, 'pred_duration': 8.549674272537231, 'grad_duration': 8.245461463928223, 'total_duration': 16.795135736465454, 'pred_std': 0.09621766954660416, 'std_loss': 0.016873924061655998, 'mean_pred_loss': 1.128543954109773e-05, 'pred_rmse': 0.05033194646239281, 'pred_mae': 0.03761804476380348, 'pred_mape': 0.12008485943078995, 'grad_rmse': 0.44913792610168457, 'grad_mae': 0.2508392035961151, 'grad_mape': 6.304388523101807}}}\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-22T19:30:55.862924Z", "iopub.status.busy": "2024-03-22T19:30:55.862624Z", "iopub.status.idle": "2024-03-22T19:30:55.866856Z", "shell.execute_reply": "2024-03-22T19:30:55.866123Z" }, "papermill": { "duration": 0.022686, "end_time": "2024-03-22T19:30:55.868769", "exception": false, "start_time": "2024-03-22T19:30:55.846083", "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-22T19:30:55.899722Z", "iopub.status.busy": "2024-03-22T19:30:55.899469Z", "iopub.status.idle": "2024-03-22T19:30:55.989982Z", "shell.execute_reply": "2024-03-22T19:30:55.989180Z" }, "papermill": { "duration": 0.108762, "end_time": "2024-03-22T19:30:55.992479", "exception": false, "start_time": "2024-03-22T19:30:55.883717", "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-22T19:30:56.026229Z", "iopub.status.busy": "2024-03-22T19:30:56.025811Z", "iopub.status.idle": "2024-03-22T19:30:56.311006Z", "shell.execute_reply": "2024-03-22T19:30:56.310073Z" }, "papermill": { "duration": 0.304446, "end_time": "2024-03-22T19:30:56.313060", "exception": false, "start_time": "2024-03-22T19:30:56.008614", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "history = loss[\"history\"]\n", "history.to_csv(\"history.csv\")\n", "history[[\"avg_loss_train\", \"avg_loss_test\"]].plot()" ] }, { "cell_type": "code", "execution_count": 28, "id": "2586ba0a", "metadata": { "execution": { "iopub.execute_input": "2024-03-22T19:30:56.347417Z", "iopub.status.busy": "2024-03-22T19:30:56.347111Z", "iopub.status.idle": "2024-03-22T19:34:45.495165Z", "shell.execute_reply": "2024-03-22T19:34:45.494328Z" }, "papermill": { "duration": 229.16824, "end_time": "2024-03-22T19:34:45.497840", "exception": false, "start_time": "2024-03-22T19:30:56.329600", "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-22T19:34:45.534054Z", "iopub.status.busy": "2024-03-22T19:34:45.533725Z", "iopub.status.idle": "2024-03-22T19:34:45.554128Z", "shell.execute_reply": "2024-03-22T19:34:45.553243Z" }, "papermill": { "duration": 0.040901, "end_time": "2024-03-22T19:34:45.556133", "exception": false, "start_time": "2024-03-22T19:34:45.515232", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
avg_g_cos_lossavg_g_mag_lossavg_lossgrad_durationgrad_maegrad_mapegrad_rmsemean_pred_losspred_durationpred_maepred_mapepred_rmsepred_stdstd_losstotal_duration
realtabformer0.0100880.0349370.0025338.2342270.2508396.3043860.4491380.0000118.5653010.0376180.1200850.0503320.0962180.01687416.799528
\n", "
" ], "text/plain": [ " avg_g_cos_loss avg_g_mag_loss avg_loss grad_duration \\\n", "realtabformer 0.010088 0.034937 0.002533 8.234227 \n", "\n", " grad_mae grad_mape grad_rmse mean_pred_loss pred_duration \\\n", "realtabformer 0.250839 6.304386 0.449138 0.000011 8.565301 \n", "\n", " pred_mae pred_mape pred_rmse pred_std std_loss \\\n", "realtabformer 0.037618 0.120085 0.050332 0.096218 0.016874 \n", "\n", " total_duration \n", "realtabformer 16.799528 " ] }, "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-22T19:34:45.589403Z", "iopub.status.busy": "2024-03-22T19:34:45.588694Z", "iopub.status.idle": "2024-03-22T19:34:46.069865Z", "shell.execute_reply": "2024-03-22T19:34:46.068938Z" }, "papermill": { "duration": 0.500035, "end_time": "2024-03-22T19:34:46.071881", "exception": false, "start_time": "2024-03-22T19:34:45.571846", "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-22T19:34:46.106808Z", "iopub.status.busy": "2024-03-22T19:34:46.106503Z", "iopub.status.idle": "2024-03-22T19:39:08.589480Z", "shell.execute_reply": "2024-03-22T19:39:08.588620Z" }, "papermill": { "duration": 262.502998, "end_time": "2024-03-22T19:39:08.591992", "exception": false, "start_time": "2024-03-22T19:34:46.088994", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Caching in ../../../../contraceptive/_cache_aug_test/realtabformer/all inf False\n", "Caching in ../../../../contraceptive/_cache_bs_test/realtabformer/all inf False\n", "Caching in ../../../../contraceptive/_cache_synth_test/realtabformer/all inf False\n" ] } ], "source": [ "#\"\"\"\n", "from ml_utility_loss.loss_learning.estimator.process import pred, pred_2\n", "from ml_utility_loss.util import stack_samples\n", "\n", "#samples = test_set[list(range(len(test_set)))]\n", "#y = {m: pred(model[m], s) for m, s in samples.items()}\n", "y = pred_2(model, test_set, batch_size=batch_size)\n", "#\"\"\"" ] }, { "cell_type": "code", "execution_count": 32, "id": "6ab51db8", "metadata": { "execution": { "iopub.execute_input": "2024-03-22T19:39:08.628489Z", "iopub.status.busy": "2024-03-22T19:39:08.628166Z", "iopub.status.idle": "2024-03-22T19:39:08.654544Z", "shell.execute_reply": "2024-03-22T19:39:08.653600Z" }, "papermill": { "duration": 0.047, "end_time": "2024-03-22T19:39:08.656469", "exception": false, "start_time": "2024-03-22T19:39:08.609469", "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-22T19:39:08.689934Z", "iopub.status.busy": "2024-03-22T19:39:08.689180Z", "iopub.status.idle": "2024-03-22T19:39:08.694739Z", "shell.execute_reply": "2024-03-22T19:39:08.693895Z" }, "papermill": { "duration": 0.024483, "end_time": "2024-03-22T19:39:08.696729", "exception": false, "start_time": "2024-03-22T19:39:08.672246", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'realtabformer': 0.3862167485555013}\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-22T19:39:08.731368Z", "iopub.status.busy": "2024-03-22T19:39:08.730583Z", "iopub.status.idle": "2024-03-22T19:39:09.084021Z", "shell.execute_reply": "2024-03-22T19:39:09.083023Z" }, "papermill": { "duration": 0.373135, "end_time": "2024-03-22T19:39:09.086205", "exception": false, "start_time": "2024-03-22T19:39:08.713070", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAASIAAAE8CAYAAABkYrxdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABED0lEQVR4nO3deXhTVf4/8PfNvjRJ942utBVEZF8EREAYRZkRxhHFDSrDMg6MwzA8P8VnRNFR1FEEmRlGHW1BUVy+uIyOuIOjIsi+WtYulG50S9s06z2/P26SNjQtSZrmNunn9Tx50t6c3JybNJ+e/XCMMQZCCBGRROwMEEIIBSJCiOgoEBFCREeBiBAiOgpEhBDRUSAihIiOAhEhRHQUiAghoqNARAgRHQUi0qnHHnsMHMcF9ZyFhYXgOA579+71Kf3f/vY39O/fH1KpFMOGDQtqXkjvQYGI+OWpp57CBx98EJLX+vzzz/H//t//w4QJE1BQUICnnnoqJK9LQk8mdgZIeHnqqadw2223YdasWT3+Wl9//TUkEgleffVVKBSKHn89Ih4qEUWIlpYWsbMQdNXV1VCr1UELQowxtLa2BuVc3WEymcTOQq9DgSgMudpujh8/jrvuugsxMTG49tprAQBvvPEGRo4cCbVajdjYWMyZMwdlZWUez//f//6H2bNnIyMjA0qlEunp6fjTn/502S8px3FoaWnBpk2bwHEcOI5Dfn4+AKCkpAS///3vMWDAAKjVasTFxWH27NkoLi72ei6TyYTFixcjLi4Oer0ec+fORX19vcdrFRQUoKWlxf1ahYWFAAC73Y4nnngCOTk5UCqVyMrKwsMPPwyLxeLxGllZWfjlL3+Jzz77DKNGjYJarcZLL72EHTt2gOM4vPPOO1i9ejX69esHnU6H2267DY2NjbBYLFi2bBkSExMRFRWF++67r8O5fX2vJ0+ejMGDB2Pfvn247rrroNFo8PDDD3f5PvdFVDULY7Nnz0ZeXh6eeuopMMbw5JNP4pFHHsHtt9+OBQsWoKamBhs2bMB1112HAwcOIDo6GgDw7rvvwmQy4f7770dcXBz27NmDDRs24Pz583j33Xc7fb3XX38dCxYswJgxY7Bo0SIAQE5ODgDgp59+wg8//IA5c+YgLS0NxcXF2LhxIyZPnozjx49Do9F4nGvp0qWIjo7GY489hqKiImzcuBElJSXuIPH666/j5Zdfxp49e/Dvf/8bADB+/HgAwIIFC7Bp0ybcdttt+POf/4zdu3djzZo1OHHiBN5//32P1ykqKsKdd96JxYsXY+HChRgwYID7sTVr1kCtVuOhhx7C6dOnsWHDBsjlckgkEtTX1+Oxxx7Djz/+iMLCQmRnZ2PVqlXu5/r6XgNAbW0tbrrpJsyZMwf33HMPkpKS/Pyk+wBGws6jjz7KALA777zTfay4uJhJpVL25JNPeqQ9cuQIk8lkHsdNJlOHc65Zs4ZxHMdKSko6vE57Wq2WzZs3r8PzvZ1z165dDADbvHmz+1hBQQEDwEaOHMmsVqv7+LPPPssAsA8//NB9bN68eUyr1Xqc8+DBgwwAW7BggcfxFStWMADs66+/dh/LzMxkANj27ds90n7zzTcMABs8eLBHHu68807GcRy76aabPNKPGzeOZWZmun/3572eNGkSA8D+9a9/dXh/SBuqmoWx3/3ud+6ft23bBp7ncfvtt+PixYvuW3JyMvLy8vDNN9+406rVavfPLS0tuHjxIsaPHw/GGA4cOBBQXtqf02azoba2Frm5uYiOjsb+/fs7pF+0aBHkcrn79/vvvx8ymQz//e9/u3wd1+PLly/3OP7nP/8ZAPDJJ594HM/OzsaNN97o9Vxz5871yMPYsWPBGMP8+fM90o0dOxZlZWWw2+0A/HuvAUCpVOK+++7r8rr6OqqahbHs7Gz3z6dOnQJjDHl5eV7Ttv/ClZaWYtWqVfjoo4882mUAoLGxMaC8tLa2Ys2aNSgoKEB5eTlYu4U/vZ3z0nxGRUUhJSWl0zYll5KSEkgkEuTm5nocT05ORnR0NEpKSjyOt3+PLpWRkeHxu8FgAACkp6d3OM7zPBobGxEXF+fXew0A/fr1o16/y6BAFMbal0J4ngfHcfj0008hlUo7pI2KigIAOBwO/OIXv0BdXR0efPBBDBw4EFqtFuXl5cjPzwfP8wHl5Q9/+AMKCgqwbNkyjBs3DgaDARzHYc6cOQGfsyu+DrRs/x5dytv71NVxV3D19b32JQ9EQIEoQuTk5IAxhuzsbFxxxRWdpjty5AhOnjyJTZs2Ye7cue7jX3zxhU+v01kAeO+99zBv3jw8//zz7mNmsxkNDQ1e0586dQpTpkxx/97c3IyKigrcfPPNXb5+ZmYmeJ7HqVOncOWVV7qPV1VVoaGhAZmZmT5dR3f4+l4T31EbUYS49dZbIZVKsXr1ao9qESD8J6+trQXQ9t++fRrGGNavX+/T62i1Wq/BRSqVdnjdDRs2wOFweD3Pyy+/DJvN5v5948aNsNvtuOmmm7p8fVegWrduncfxtWvXAgBmzJhxuUvoNl/fa+I7KhFFiJycHPz1r3/FypUrUVxcjFmzZkGn0+HcuXN4//33sWjRIqxYsQIDBw5ETk4OVqxYgfLycuj1evzf//1fh7aizowcORJffvkl1q5di9TUVGRnZ2Ps2LH45S9/iddffx0GgwGDBg3Crl278OWXXyIuLs7reaxWK6ZOnYrbb78dRUVF+Oc//4lrr70Wt9xyS5evP3ToUMybNw8vv/wyGhoaMGnSJOzZswebNm3CrFmzPEpZPcXX95r4jgJRBHnooYdwxRVX4IUXXsDq1asBCA2vN9xwg/sLLpfL8Z///AcPPPAA1qxZA5VKhV//+tdYunQphg4detnXWLt2LRYtWoS//OUvaG1txbx58zB27FisX78eUqkUW7ZsgdlsxoQJE/Dll1922mP197//HVu2bMGqVatgs9lw55134sUXX/Sp7eff//43+vfvj8LCQrz//vtITk7GypUr8eijj/rxbnWPL+818R3HLi1bEkJIiFEbESFEdBSICCGio0BECBEdBSJCiOgoEBFCREeBiBAiurAeR8TzPC5cuACdThf0Rd4JId3HGENTUxNSU1MhkXRR7gn1uiPt2e129pe//IVlZWUxlUrF+vfvzx5//HHG87xPzy8rK2MA6EY3uvXyW1lZWZffZVFLRM888ww2btyITZs24aqrrsLevXtx3333wWAw4IEHHrjs83U6HQCgrKwMer2+p7NLCPGT0WhEenq6+7vaGVED0Q8//ICZM2e6JypmZWXhrbfewp49e3x6vqs6ptfrKRAR0otdrulE1Mbq8ePH46uvvsLJkycBAIcOHcJ3333X6Qxsi8UCo9HocSOEhD9RS0QPPfQQjEYjBg4cCKlUCofDgSeffBJ333231/Rr1qxxTzAkhEQOUUtE77zzDrZs2YI333wT+/fvx6ZNm/Dcc89h06ZNXtOvXLkSjY2N7tulW7cQQsKTqLPv09PT8dBDD2HJkiXuY3/961/xxhtv4Oeff77s841GIwwGAxobGzttI2KMwW63d7pAF+mcVCqFTCajoREkYL58RwGR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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-22T19:39:09.120943Z", "iopub.status.busy": "2024-03-22T19:39:09.120162Z", "iopub.status.idle": "2024-03-22T19:39:09.457604Z", "shell.execute_reply": "2024-03-22T19:39:09.456678Z" }, "papermill": { "duration": 0.35686, "end_time": "2024-03-22T19:39:09.459669", "exception": false, "start_time": "2024-03-22T19:39:09.102809", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "image/png": "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iYmJHlWnu+++2yOt6zwnTpzA0KFD3ceffPJJd9o1a9Zgy5YtePfdd/H73/8eycnJ4DgOer0eycnJAIC//OUvyMjIwBtvvAGO43D11VejrKwMixYtwtKlS91Bru11A62B6E9/+hMmTJgAAHj44YexZMkSFBYWol+/fgCAX/7yl/juu++waNEiWK1WvPDCC/jmm28wbtw4AEC/fv2we/duvP322x6BaPny5fjFL37hz0sTEApEpIP5kwd0+pik3TjAR2/o32na9mMG507I6Um2PFxzzTXunw8fPozvvvsO0dHRHdIVFhbiqquuwtmzZ7F06VLs27cP1dXV7vmMlWUXIRk90ufn7ew8JSUlHoHI9QEHAJlMhtGjR+PkyZOdnvfkyZMYN26cx0DLCRMmwGQy4eLFi8jMzOxw3W0NHz7c/XNSUhI0Go07CLmOuRYcPHfuHMxmc4cAY7PZkJeX53Fs9OjRneY5mCgQkQ5cDblipu1OVFSU+2eTyYTbb78dL774Yod0KSkpAIR5jVlZWXjnnXeQmpoKnucxdOhQKCQMSpnU5+ft7Dyhajhue91tyeVy988cx3n87jrmCpomkwkA8OWXXyItLc0jnVKp9On5go0CEenzRo0ahU8++QTZ2dmQyTq+pWtqanD69Gm88847mDhxIgB02/DqmknednkUf87zww8/4IYbbgAAOBwOHDhwAE8++WSnzzdo0CB88sknYIy5S0V79uyBVqtFenp6l3n11+DBg6FUKlFSUuJRDRMT9ZqRPm/+/Pmora3Ff/7nf+Knn35CYWEhtm7dioceeghOpxOxsbGIj4/H/765Bj8ePoFvvtmOBQsWAECn0zyysrLAcRy++OILVFVVwWQyuc/z17/+FefOncO3337rPk97b775Jj799FOcOnUK8+fPR11dXZerSjzxxBMoLS3Fb37zG5w6dQqff/45nn32WSxYsCDo8wG1Wi0WLlyIp59+GuvXr0dhYSEOHjyI119/vdNFCXsbBSLS56WmpmLPnj1wOp24+eabMWzYMDz11FOIiYmBRCKBRCLB+xs/wOFDP+OGsaPwX/+1AC+//DIAoKHZjlpTx2pVWloali1bhsWLFyMpKQlPPvkkJBIJNm3ahAMHDmDo0KF4+umn3edpb+XKlVi5ciVGjBiB3bt34x//+AcSEhI6vYa0tDT861//wo8//ogR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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-22T19:39:09.496676Z", "iopub.status.busy": "2024-03-22T19:39:09.496344Z", "iopub.status.idle": "2024-03-22T19:39:09.652658Z", "shell.execute_reply": "2024-03-22T19:39:09.651769Z" }, "papermill": { "duration": 0.178936, "end_time": "2024-03-22T19:39:09.656531", "exception": false, "start_time": "2024-03-22T19:39:09.477595", "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-22T19:39:09.708989Z", "iopub.status.busy": "2024-03-22T19:39:09.708145Z", "iopub.status.idle": "2024-03-22T19:39:09.999683Z", "shell.execute_reply": "2024-03-22T19:39:09.998652Z" }, "papermill": { "duration": 0.313142, "end_time": "2024-03-22T19:39:10.001804", "exception": false, "start_time": "2024-03-22T19:39:09.688662", "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.019495, "end_time": "2024-03-22T19:39:10.040658", "exception": false, "start_time": "2024-03-22T19:39:10.021163", "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": 4421.448075, "end_time": "2024-03-22T19:39:12.783196", "environment_variables": {}, "exception": null, "input_path": "eval/contraceptive/realtabformer/4/mlu-eval.ipynb", "output_path": "eval/contraceptive/realtabformer/4/mlu-eval.ipynb", "parameters": { "allow_same_prediction": true, "dataset": "contraceptive", "dataset_name": "contraceptive", "debug": false, "folder": "eval", "gp": true, "gp_multiply": true, "log_wandb": false, "param_index": 0, "path": "eval/contraceptive/realtabformer/4", "path_prefix": "../../../../", "random_seed": 4, "single_model": "realtabformer" }, "start_time": "2024-03-22T18:25:31.335121", "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 }