{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "982e76f5", "metadata": { "execution": { "iopub.execute_input": "2024-03-03T06:20:52.982920Z", "iopub.status.busy": "2024-03-03T06:20:52.982060Z", "iopub.status.idle": "2024-03-03T06:20:53.015985Z", "shell.execute_reply": "2024-03-03T06:20:53.015207Z" }, "papermill": { "duration": 0.049159, "end_time": "2024-03-03T06:20:53.018212", "exception": false, "start_time": "2024-03-03T06:20:52.969053", "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-03T06:20:53.043661Z", "iopub.status.busy": "2024-03-03T06:20:53.043222Z", "iopub.status.idle": "2024-03-03T06:20:53.050291Z", "shell.execute_reply": "2024-03-03T06:20:53.049455Z" }, "papermill": { "duration": 0.022153, "end_time": "2024-03-03T06:20:53.052350", "exception": false, "start_time": "2024-03-03T06:20:53.030197", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "'\\n%cd /kaggle/working\\n#!git clone https://github.com/R-N/ml-utility-loss\\n%cd ml-utility-loss\\n!git pull\\n#!pip install .\\n!pip install . --no-deps --force-reinstall --upgrade\\n#'" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\"\"\"\n", "%cd /kaggle/working\n", "#!git clone https://github.com/R-N/ml-utility-loss\n", "%cd ml-utility-loss\n", "!git pull\n", "#!pip install .\n", "!pip install . --no-deps --force-reinstall --upgrade\n", "#\"\"\"" ] }, { "cell_type": "code", "execution_count": 3, "id": "5ae30f5c", "metadata": { "execution": { "iopub.execute_input": "2024-03-03T06:20:53.076016Z", "iopub.status.busy": "2024-03-03T06:20:53.075743Z", "iopub.status.idle": "2024-03-03T06:20:53.079876Z", "shell.execute_reply": "2024-03-03T06:20:53.079050Z" }, "papermill": { "duration": 0.01836, "end_time": "2024-03-03T06:20:53.081880", "exception": false, "start_time": "2024-03-03T06:20:53.063520", "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-03T06:20:53.105046Z", "iopub.status.busy": "2024-03-03T06:20:53.104804Z", "iopub.status.idle": "2024-03-03T06:20:53.108756Z", "shell.execute_reply": "2024-03-03T06:20:53.107919Z" }, "executionInfo": { "elapsed": 678, "status": "ok", "timestamp": 1696841022168, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "ns5hFcVL2yvs", "papermill": { "duration": 0.017807, "end_time": "2024-03-03T06:20:53.110664", "exception": false, "start_time": "2024-03-03T06:20:53.092857", "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-03T06:20:53.134112Z", "iopub.status.busy": "2024-03-03T06:20:53.133799Z", "iopub.status.idle": "2024-03-03T06:20:53.139660Z", "shell.execute_reply": "2024-03-03T06:20:53.138933Z" }, "papermill": { "duration": 0.01956, "end_time": "2024-03-03T06:20:53.141460", "exception": false, "start_time": "2024-03-03T06:20:53.121900", "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": "6b2f5a50", "metadata": { "execution": { "iopub.execute_input": "2024-03-03T06:20:53.166707Z", "iopub.status.busy": "2024-03-03T06:20:53.166324Z", "iopub.status.idle": "2024-03-03T06:20:53.171505Z", "shell.execute_reply": "2024-03-03T06:20:53.170774Z" }, "papermill": { "duration": 0.019876, "end_time": "2024-03-03T06:20:53.173357", "exception": false, "start_time": "2024-03-03T06:20:53.153481", "status": "completed" }, "tags": [ "injected-parameters" ] }, "outputs": [], "source": [ "# Parameters\n", "dataset = \"contraceptive\"\n", "dataset_name = \"contraceptive\"\n", "single_model = \"tab_ddpm_concat\"\n", "gp = True\n", "gp_multiply = False\n", "random_seed = 1\n", "debug = False\n", "folder = \"eval\"\n", "path_prefix = \"../../../../\"\n", "path = \"eval/contraceptive/tab_ddpm_concat/1\"\n", "param_index = 3\n", "allow_same_prediction = True\n", "log_wandb = False\n" ] }, { "cell_type": "code", "execution_count": null, "id": "bd7c02d6", "metadata": { "papermill": { "duration": 0.011128, "end_time": "2024-03-03T06:20:53.195823", "exception": false, "start_time": "2024-03-03T06:20:53.184695", "status": "completed" }, "tags": [] }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 7, "id": "5f45b1d0", "metadata": { "execution": { "iopub.execute_input": "2024-03-03T06:20:53.219625Z", "iopub.status.busy": "2024-03-03T06:20:53.219254Z", "iopub.status.idle": "2024-03-03T06:20:53.228812Z", "shell.execute_reply": "2024-03-03T06:20:53.228007Z" }, "executionInfo": { "elapsed": 7, "status": "ok", "timestamp": 1696841022169, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "UdvXYv3c3LXy", "papermill": { "duration": 0.023626, "end_time": "2024-03-03T06:20:53.230684", "exception": false, "start_time": "2024-03-03T06:20:53.207058", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/kaggle/working\n", "/kaggle/working/eval/contraceptive/tab_ddpm_concat/1\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-03T06:20:53.254197Z", "iopub.status.busy": "2024-03-03T06:20:53.253949Z", "iopub.status.idle": "2024-03-03T06:20:55.504273Z", "shell.execute_reply": "2024-03-03T06:20:55.503354Z" }, "papermill": { "duration": 2.264428, "end_time": "2024-03-03T06:20:55.506284", "exception": false, "start_time": "2024-03-03T06:20:53.241856", "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-03T06:20:55.533351Z", "iopub.status.busy": "2024-03-03T06:20:55.532777Z", "iopub.status.idle": "2024-03-03T06:20:55.544642Z", "shell.execute_reply": "2024-03-03T06:20:55.543969Z" }, "papermill": { "duration": 0.027615, "end_time": "2024-03-03T06:20:55.546493", "exception": false, "start_time": "2024-03-03T06:20:55.518878", "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-03T06:20:55.570029Z", "iopub.status.busy": "2024-03-03T06:20:55.569753Z", "iopub.status.idle": "2024-03-03T06:20:55.576879Z", "shell.execute_reply": "2024-03-03T06:20:55.576120Z" }, "executionInfo": { "elapsed": 6, "status": "ok", "timestamp": 1696841022169, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "Vrl2QkoV3o_8", "papermill": { "duration": 0.021309, "end_time": "2024-03-03T06:20:55.579014", "exception": false, "start_time": "2024-03-03T06:20:55.557705", "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-03T06:20:55.604960Z", "iopub.status.busy": "2024-03-03T06:20:55.604181Z", "iopub.status.idle": "2024-03-03T06:20:55.706334Z", "shell.execute_reply": "2024-03-03T06:20:55.705537Z" }, "executionInfo": { "elapsed": 6, "status": "ok", "timestamp": 1696841022169, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "TilUuFk9vqMb", "papermill": { "duration": 0.117849, "end_time": "2024-03-03T06:20:55.708735", "exception": false, "start_time": "2024-03-03T06:20:55.590886", "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-03T06:20:55.734744Z", "iopub.status.busy": "2024-03-03T06:20:55.734416Z", "iopub.status.idle": "2024-03-03T06:21:00.421850Z", "shell.execute_reply": "2024-03-03T06:21:00.420856Z" }, "executionInfo": { "elapsed": 3113, "status": "ok", "timestamp": 1696841025277, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "7Abt8nStvr9Z", "papermill": { "duration": 4.703061, "end_time": "2024-03-03T06:21:00.424311", "exception": false, "start_time": "2024-03-03T06:20:55.721250", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2024-03-03 06:20:57.973451: 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-03 06:20:57.973508: 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-03 06:20:57.975128: 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-03T06:21:00.450585Z", "iopub.status.busy": "2024-03-03T06:21:00.449944Z", "iopub.status.idle": "2024-03-03T06:21:00.456256Z", "shell.execute_reply": "2024-03-03T06:21:00.455505Z" }, "papermill": { "duration": 0.021612, "end_time": "2024-03-03T06:21:00.458577", "exception": false, "start_time": "2024-03-03T06:21:00.436965", "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-03T06:21:00.491218Z", "iopub.status.busy": "2024-03-03T06:21:00.490912Z", "iopub.status.idle": "2024-03-03T06:21:09.035892Z", "shell.execute_reply": "2024-03-03T06:21:09.034691Z" }, "executionInfo": { "elapsed": 20137, "status": "ok", "timestamp": 1696841045408, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "tbaguWxAvtPi", "papermill": { "duration": 8.564414, "end_time": "2024-03-03T06:21:09.038449", "exception": false, "start_time": "2024-03-03T06:21:00.474035", "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", "/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", "100%|██████████| 1/1 [00:00<00:00, 2.64it/s]\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-03T06:21:09.067302Z", "iopub.status.busy": "2024-03-03T06:21:09.066950Z", "iopub.status.idle": "2024-03-03T06:21:09.073932Z", "shell.execute_reply": "2024-03-03T06:21:09.073059Z" }, "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.023972, "end_time": "2024-03-03T06:21:09.075866", "exception": false, "start_time": "2024-03-03T06:21:09.051894", "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-03T06:21:09.101444Z", "iopub.status.busy": "2024-03-03T06:21:09.101141Z", "iopub.status.idle": "2024-03-03T06:21:09.105888Z", "shell.execute_reply": "2024-03-03T06:21:09.105064Z" }, "papermill": { "duration": 0.019747, "end_time": "2024-03-03T06:21:09.107826", "exception": false, "start_time": "2024-03-03T06:21:09.088079", "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-03T06:21:09.133152Z", "iopub.status.busy": "2024-03-03T06:21:09.132866Z", "iopub.status.idle": "2024-03-03T06:21:09.164333Z", "shell.execute_reply": "2024-03-03T06:21:09.163457Z" }, "papermill": { "duration": 0.046241, "end_time": "2024-03-03T06:21:09.166272", "exception": false, "start_time": "2024-03-03T06:21:09.120031", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Caching in ../../../../contraceptive/_cache_test/tab_ddpm_concat/all inf False\n" ] } ], "source": [ "from ml_utility_loss.loss_learning.estimator.pipeline import load_dataset\n", "\n", "test_set = load_dataset(\n", " dataset_dir=os.path.join(path_prefix, \"ml-utility-loss/\", \"datasets_5\", dataset_name),\n", " preprocessor=preprocessor,\n", " cache_dir=os.path.join(path_prefix, dataset_name, \"_cache_test\"),\n", " start=200,\n", " #stop=600,\n", " val=False,\n", " ratio=0,\n", " drop_first_column=True,\n", " model=single_model,\n", ")" ] }, { "cell_type": "code", "execution_count": 18, "id": "14ff8b40", "metadata": { "execution": { "iopub.execute_input": "2024-03-03T06:21:09.194198Z", "iopub.status.busy": "2024-03-03T06:21:09.193902Z", "iopub.status.idle": "2024-03-03T06:21:09.512656Z", "shell.execute_reply": "2024-03-03T06:21:09.511741Z" }, "executionInfo": { "elapsed": 588, "status": "ok", "timestamp": 1696841049215, "user": { "displayName": "Rizqi Nur", "userId": "09644007964068789560" }, "user_tz": -420 }, "id": "NgahtU1q9uLO", "papermill": { "duration": 0.334976, "end_time": "2024-03-03T06:21:09.514903", "exception": false, "start_time": "2024-03-03T06:21:09.179927", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "{'loss_balancer_beta': 0.6806661100374879,\n", " 'loss_balancer_r': 0.9427716710925113,\n", " 'tf_pma_low': 4,\n", " 'grad_loss_fn': torch.Tensor>,\n", " 'pma_ffn_mode': 'shared',\n", " 'patience': 10,\n", " 'inds_init_mode': 'fixnorm',\n", " 'grad_clip': 0.7494458230986923,\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", " 'dataset_size': 2048,\n", " 'batch_size': 4,\n", " 'epochs': 100,\n", " 'lr_mul': 0.07424782199493057,\n", " 'n_warmup_steps': 104,\n", " 'Optim': functools.partial(, amsgrad=True),\n", " 'fixed_role_model': 'tab_ddpm_concat',\n", " 'd_model': 128,\n", " 'attn_activation': ml_utility_loss.activations.LeakyHardtanh,\n", " 'tf_d_inner': 512,\n", " 'tf_n_layers_enc': 3,\n", " 'tf_n_head': 32,\n", " 'tf_activation': torch.nn.modules.activation.ReLU6,\n", " 'tf_activation_final': ml_utility_loss.activations.LeakyHardtanh,\n", " 'ada_d_hid': 1024,\n", " 'ada_n_layers': 8,\n", " 'ada_activation': torch.nn.modules.activation.Softsign,\n", " 'ada_activation_final': ml_utility_loss.activations.LeakyHardsigmoid,\n", " 'head_d_hid': 256,\n", " 'head_n_layers': 8,\n", " 'head_n_head': 16,\n", " 'head_activation': torch.nn.modules.activation.ReLU6,\n", " 'head_activation_final': ml_utility_loss.activations.LeakyHardsigmoid,\n", " 'single_model': True,\n", " 'models': ['tab_ddpm_concat'],\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", " 'tf_lora': False,\n", " 'tf_num_inds': 16,\n", " 'ada_n_seeds': 0,\n", " 'gradient_penalty_kwargs': {'mag_loss': True,\n", " 'mse_mag': True,\n", " 'mag_corr': False,\n", " 'seq_mag': False,\n", " 'cos_loss': False,\n", " 'mag_corr_kwargs': {'only_sign': False},\n", " 'cos_loss_kwargs': {'only_sign': True, 'cos_matrix': False},\n", " 'mse_mag_kwargs': {'target': 0.1, 'multiply': False}}}" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import ml_utility_loss.loss_learning.estimator.params2 as PARAMS\n", "from ml_utility_loss.tuning import map_parameters\n", "from ml_utility_loss.loss_learning.estimator.params.default import update_param_space, update_param_space_2\n", "import wandb\n", "\n", "#\"\"\"\n", "param_space = {\n", " **getattr(PARAMS, dataset_name).PARAM_SPACE,\n", "}\n", "params = {\n", " **getattr(PARAMS, dataset_name).BESTS[param_index],\n", "}\n", "if gp:\n", " params[\"gradient_penalty_mode\"] = \"ALL\"\n", " params[\"mse_mag\"] = True\n", " if gp_multiply:\n", " params[\"mse_mag_multiply\"] = True\n", " params[\"mse_mag_target\"] = 1.0\n", " else:\n", " params[\"mse_mag_multiply\"] = False\n", " params[\"mse_mag_target\"] = 0.1\n", "else:\n", " params[\"gradient_penalty_mode\"] = \"NONE\"\n", " params[\"mse_mag\"] = False\n", "params[\"single_model\"] = False\n", "if models:\n", " params[\"models\"] = models\n", "if single_model:\n", " params[\"fixed_role_model\"] = single_model\n", " params[\"single_model\"] = True\n", " params[\"models\"] = [single_model]\n", "if params[\"fixed_role_model\"] == \"realtabformer\" and dataset_name == \"treatment\":\n", " params[\"batch_size\"] = 2\n", "params[\"max_seconds\"] = 3600\n", "params[\"patience\"] = 10\n", "params[\"epochs\"] = 100\n", "if debug:\n", " params[\"epochs\"] = 2\n", "with open(\"params.json\", \"w\") as f:\n", " json.dump(params, f)\n", "params = map_parameters(params, param_space=param_space)\n", "params" ] }, { "cell_type": "code", "execution_count": 19, "id": "a48bd9e9", "metadata": { "execution": { "iopub.execute_input": "2024-03-03T06:21:09.541987Z", "iopub.status.busy": "2024-03-03T06:21:09.541668Z", "iopub.status.idle": "2024-03-03T06:21:09.612421Z", "shell.execute_reply": "2024-03-03T06:21:09.611487Z" }, "papermill": { "duration": 0.086426, "end_time": "2024-03-03T06:21:09.614383", "exception": false, "start_time": "2024-03-03T06:21:09.527957", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "load_dataset_3_factory 2\n", "Caching in ../../../../contraceptive/_cache/tab_ddpm_concat/all inf False\n", "Splitting without random!\n", "Split with reverse index!\n", "../../../../ml-utility-loss/datasets_2/contraceptive [80, 20]\n", "Caching in ../../../../contraceptive/_cache4/tab_ddpm_concat/all inf False\n", "Splitting without random!\n", "Split with reverse index!\n", "../../../../ml-utility-loss/datasets_4/contraceptive [80, 20]\n", "Caching in ../../../../contraceptive/_cache5/tab_ddpm_concat/all inf False\n", "Splitting without random!\n", "Split with reverse index!\n", "../../../../ml-utility-loss/datasets_5/contraceptive [160, 40]\n", "[320, 80]\n", "[320, 80]\n" ] } ], "source": [ "train_set, val_set = datasetsn(model=params[\"fixed_role_model\"], synth_data=params[\"synth_data\"])" ] }, { "cell_type": "code", "execution_count": 20, "id": "2fcb1418", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 1000 }, "execution": { "iopub.execute_input": "2024-03-03T06:21:09.642331Z", "iopub.status.busy": "2024-03-03T06:21:09.641944Z", "iopub.status.idle": "2024-03-03T06:21:10.080306Z", "shell.execute_reply": "2024-03-03T06:21:10.079378Z" }, "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.454288, "end_time": "2024-03-03T06:21:10.082258", "exception": false, "start_time": "2024-03-03T06:21:09.627970", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Creating model of type \n", "[*] Embedding False True\n", "['tab_ddpm_concat'] 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-03T06:21:10.111992Z", "iopub.status.busy": "2024-03-03T06:21:10.111204Z", "iopub.status.idle": "2024-03-03T06:21:10.115437Z", "shell.execute_reply": "2024-03-03T06:21:10.114548Z" }, "papermill": { "duration": 0.021493, "end_time": "2024-03-03T06:21:10.117388", "exception": false, "start_time": "2024-03-03T06:21:10.095895", "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-03T06:21:10.145249Z", "iopub.status.busy": "2024-03-03T06:21:10.144488Z", "iopub.status.idle": "2024-03-03T06:21:10.151622Z", "shell.execute_reply": "2024-03-03T06:21:10.150768Z" }, "papermill": { "duration": 0.023142, "end_time": "2024-03-03T06:21:10.153501", "exception": false, "start_time": "2024-03-03T06:21:10.130359", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "7827841" ] }, "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-03T06:21:10.180220Z", "iopub.status.busy": "2024-03-03T06:21:10.179932Z", "iopub.status.idle": "2024-03-03T06:21:10.257073Z", "shell.execute_reply": "2024-03-03T06:21:10.256169Z" }, "papermill": { "duration": 0.092939, "end_time": "2024-03-03T06:21:10.259122", "exception": false, "start_time": "2024-03-03T06:21:10.166183", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "========================================================================================================================\n", "Layer (type:depth-idx) Output Shape Param #\n", "========================================================================================================================\n", "MLUtilitySingle [2, 1179, 10] --\n", "├─Adapter: 1-1 [2, 1179, 10] --\n", "│ └─Sequential: 2-1 [2, 1179, 128] --\n", "│ │ └─FeedForward: 3-1 [2, 1179, 1024] --\n", "│ │ │ └─Linear: 4-1 [2, 1179, 1024] 11,264\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, 128] --\n", "│ │ │ └─Linear: 4-15 [2, 1179, 128] 131,200\n", "│ │ │ └─LeakyHardsigmoid: 4-16 [2, 1179, 128] --\n", "├─Adapter: 1-2 [2, 294, 10] (recursive)\n", "│ └─Sequential: 2-2 [2, 294, 128] (recursive)\n", "│ │ └─FeedForward: 3-9 [2, 294, 1024] (recursive)\n", "│ │ │ └─Linear: 4-17 [2, 294, 1024] (recursive)\n", "│ │ │ └─Softsign: 4-18 [2, 294, 1024] --\n", "│ │ └─FeedForward: 3-10 [2, 294, 1024] (recursive)\n", "│ │ │ └─Linear: 4-19 [2, 294, 1024] (recursive)\n", "│ │ │ └─Softsign: 4-20 [2, 294, 1024] --\n", "│ │ └─FeedForward: 3-11 [2, 294, 1024] (recursive)\n", "│ │ │ └─Linear: 4-21 [2, 294, 1024] (recursive)\n", "│ │ │ └─Softsign: 4-22 [2, 294, 1024] --\n", "│ │ └─FeedForward: 3-12 [2, 294, 1024] (recursive)\n", "│ │ │ └─Linear: 4-23 [2, 294, 1024] (recursive)\n", "│ │ │ └─Softsign: 4-24 [2, 294, 1024] --\n", "│ │ └─FeedForward: 3-13 [2, 294, 1024] (recursive)\n", "│ │ │ └─Linear: 4-25 [2, 294, 1024] (recursive)\n", "│ │ │ └─Softsign: 4-26 [2, 294, 1024] --\n", "│ │ └─FeedForward: 3-14 [2, 294, 1024] (recursive)\n", "│ │ │ └─Linear: 4-27 [2, 294, 1024] (recursive)\n", "│ │ │ └─Softsign: 4-28 [2, 294, 1024] --\n", "│ │ └─FeedForward: 3-15 [2, 294, 1024] (recursive)\n", "│ │ │ └─Linear: 4-29 [2, 294, 1024] (recursive)\n", "│ │ │ └─Softsign: 4-30 [2, 294, 1024] --\n", "│ │ └─FeedForward: 3-16 [2, 294, 128] (recursive)\n", "│ │ │ └─Linear: 4-31 [2, 294, 128] (recursive)\n", "│ │ │ └─LeakyHardsigmoid: 4-32 [2, 294, 128] --\n", "├─TwinEncoder: 1-3 [2, 512] --\n", "│ └─Encoder: 2-3 [2, 4, 128] --\n", "│ │ └─ModuleList: 3-18 -- (recursive)\n", "│ │ │ └─EncoderLayer: 4-33 [2, 1179, 128] --\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-1 [2, 1179, 128] --\n", "│ │ │ │ │ └─TensorInductionPoint: 6-1 [2, 16, 128] 2,048\n", "│ │ │ │ │ └─MultiHeadAttention: 6-2 [2, 16, 128] --\n", "│ │ │ │ │ │ └─Linear: 7-1 [2, 16, 128] 16,384\n", "│ │ │ │ │ │ └─Linear: 7-2 [2, 1179, 128] 16,384\n", "│ │ │ │ │ │ └─Linear: 7-3 [2, 1179, 128] 16,384\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-4 [2, 32, 16, 4] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-1 [2, 32, 16, 1179] --\n", "│ │ │ │ │ │ └─Linear: 7-5 [2, 16, 128] 16,512\n", "│ │ │ │ │ │ └─LeakyHardtanh: 7-6 [2, 16, 128] --\n", "│ │ │ │ │ └─MultiHeadAttention: 6-3 [2, 1179, 128] --\n", "│ │ │ │ │ │ └─Linear: 7-7 [2, 1179, 128] 16,384\n", "│ │ │ │ │ │ └─Linear: 7-8 [2, 16, 128] 16,384\n", "│ │ │ │ │ │ └─Linear: 7-9 [2, 16, 128] 16,384\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-10 [2, 32, 1179, 4] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-2 [2, 32, 1179, 16] --\n", "│ │ │ │ │ │ └─Linear: 7-11 [2, 1179, 128] 16,512\n", "│ │ │ │ │ │ └─LeakyHardtanh: 7-12 [2, 1179, 128] --\n", "│ │ │ │ └─DoubleFeedForward: 5-2 [2, 1179, 128] --\n", "│ │ │ │ │ └─Linear: 6-4 [2, 1179, 512] 66,048\n", "│ │ │ │ │ └─ReLU6: 6-5 [2, 1179, 512] --\n", "│ │ │ │ │ └─Linear: 6-6 [2, 1179, 128] 65,664\n", "│ │ │ └─EncoderLayer: 4-34 [2, 1179, 128] --\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-3 [2, 1179, 128] --\n", "│ │ │ │ │ └─TensorInductionPoint: 6-7 [2, 16, 128] 2,048\n", "│ │ │ │ │ └─MultiHeadAttention: 6-8 [2, 16, 128] --\n", "│ │ │ │ │ │ └─Linear: 7-13 [2, 16, 128] 16,384\n", "│ │ │ │ │ │ └─Linear: 7-14 [2, 1179, 128] 16,384\n", "│ │ │ │ │ │ └─Linear: 7-15 [2, 1179, 128] 16,384\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-16 [2, 32, 16, 4] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-3 [2, 32, 16, 1179] --\n", "│ │ │ │ │ │ └─Linear: 7-17 [2, 16, 128] 16,512\n", "│ │ │ │ │ │ └─LeakyHardtanh: 7-18 [2, 16, 128] --\n", "│ │ │ │ │ └─MultiHeadAttention: 6-9 [2, 1179, 128] --\n", "│ │ │ │ │ │ └─Linear: 7-19 [2, 1179, 128] 16,384\n", "│ │ │ │ │ │ └─Linear: 7-20 [2, 16, 128] 16,384\n", "│ │ │ │ │ │ └─Linear: 7-21 [2, 16, 128] 16,384\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-22 [2, 32, 1179, 4] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-4 [2, 32, 1179, 16] --\n", "│ │ │ │ │ │ └─Linear: 7-23 [2, 1179, 128] 16,512\n", "│ │ │ │ │ │ └─LeakyHardtanh: 7-24 [2, 1179, 128] --\n", "│ │ │ │ └─DoubleFeedForward: 5-4 [2, 1179, 128] --\n", "│ │ │ │ │ └─Linear: 6-10 [2, 1179, 512] 66,048\n", "│ │ │ │ │ └─ReLU6: 6-11 [2, 1179, 512] --\n", "│ │ │ │ │ └─Linear: 6-12 [2, 1179, 128] 65,664\n", "│ │ │ └─EncoderLayer: 4-35 [2, 4, 128] --\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-5 [2, 1179, 128] --\n", "│ │ │ │ │ └─TensorInductionPoint: 6-13 [2, 16, 128] 2,048\n", "│ │ │ │ │ └─MultiHeadAttention: 6-14 [2, 16, 128] --\n", "│ │ │ │ │ │ └─Linear: 7-25 [2, 16, 128] 16,384\n", "│ │ │ │ │ │ └─Linear: 7-26 [2, 1179, 128] 16,384\n", "│ │ │ │ │ │ └─Linear: 7-27 [2, 1179, 128] 16,384\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-28 [2, 32, 16, 4] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-5 [2, 32, 16, 1179] --\n", "│ │ │ │ │ │ └─Linear: 7-29 [2, 16, 128] 16,512\n", "│ │ │ │ │ │ └─LeakyHardtanh: 7-30 [2, 16, 128] --\n", "│ │ │ │ │ └─MultiHeadAttention: 6-15 [2, 1179, 128] --\n", "│ │ │ │ │ │ └─Linear: 7-31 [2, 1179, 128] 16,384\n", "│ │ │ │ │ │ └─Linear: 7-32 [2, 16, 128] 16,384\n", "│ │ │ │ │ │ └─Linear: 7-33 [2, 16, 128] 16,384\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-34 [2, 32, 1179, 4] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-6 [2, 32, 1179, 16] --\n", "│ │ │ │ │ │ └─Linear: 7-35 [2, 1179, 128] 16,512\n", "│ │ │ │ │ │ └─LeakyHardtanh: 7-36 [2, 1179, 128] --\n", "│ │ │ │ └─DoubleFeedForward: 5-6 [2, 1179, 128] --\n", "│ │ │ │ │ └─Linear: 6-16 [2, 1179, 512] 66,048\n", "│ │ │ │ │ └─LeakyHardtanh: 6-17 [2, 1179, 512] --\n", "│ │ │ │ │ └─Linear: 6-18 [2, 1179, 128] 65,664\n", "│ │ │ │ └─PoolingByMultiheadAttention: 5-7 [2, 4, 128] --\n", "│ │ │ │ │ └─TensorInductionPoint: 6-19 [2, 4, 128] 512\n", "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-20 [2, 4, 128] --\n", "│ │ │ │ │ │ └─Linear: 7-37 [2, 4, 128] 16,384\n", "│ │ │ │ │ │ └─Linear: 7-38 [2, 1179, 128] 16,384\n", "│ │ │ │ │ │ └─Linear: 7-39 [2, 1179, 128] 16,384\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-40 [2, 32, 4, 4] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-7 [2, 32, 4, 1179] --\n", "│ │ │ │ │ │ └─Linear: 7-41 [2, 4, 128] 16,512\n", "│ │ │ │ │ │ └─LeakyHardtanh: 7-42 [2, 4, 128] --\n", "│ │ │ │ └─DoubleFeedForward: 5-8 [2, 4, 128] (recursive)\n", "│ │ │ │ │ └─Linear: 6-21 [2, 4, 512] (recursive)\n", "│ │ │ │ │ └─LeakyHardtanh: 6-22 [2, 4, 512] --\n", "│ │ │ │ │ └─Linear: 6-23 [2, 4, 128] (recursive)\n", "│ └─Encoder: 2-4 [2, 4, 128] (recursive)\n", "│ │ └─ModuleList: 3-18 -- (recursive)\n", "│ │ │ └─EncoderLayer: 4-36 [2, 294, 128] (recursive)\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-9 [2, 294, 128] (recursive)\n", "│ │ │ │ │ └─TensorInductionPoint: 6-24 [2, 16, 128] (recursive)\n", "│ │ │ │ │ └─MultiHeadAttention: 6-25 [2, 16, 128] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-43 [2, 16, 128] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-44 [2, 294, 128] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-45 [2, 294, 128] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-46 [2, 32, 16, 4] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-8 [2, 32, 16, 294] --\n", "│ │ │ │ │ │ └─Linear: 7-47 [2, 16, 128] (recursive)\n", "│ │ │ │ │ │ └─LeakyHardtanh: 7-48 [2, 16, 128] --\n", "│ │ │ │ │ └─MultiHeadAttention: 6-26 [2, 294, 128] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-49 [2, 294, 128] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-50 [2, 16, 128] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-51 [2, 16, 128] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-52 [2, 32, 294, 4] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-9 [2, 32, 294, 16] --\n", "│ │ │ │ │ │ └─Linear: 7-53 [2, 294, 128] (recursive)\n", "│ │ │ │ │ │ └─LeakyHardtanh: 7-54 [2, 294, 128] --\n", "│ │ │ │ └─DoubleFeedForward: 5-10 [2, 294, 128] (recursive)\n", "│ │ │ │ │ └─Linear: 6-27 [2, 294, 512] (recursive)\n", "│ │ │ │ │ └─ReLU6: 6-28 [2, 294, 512] --\n", "│ │ │ │ │ └─Linear: 6-29 [2, 294, 128] (recursive)\n", "│ │ │ └─EncoderLayer: 4-37 [2, 294, 128] (recursive)\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-11 [2, 294, 128] (recursive)\n", "│ │ │ │ │ └─TensorInductionPoint: 6-30 [2, 16, 128] (recursive)\n", "│ │ │ │ │ └─MultiHeadAttention: 6-31 [2, 16, 128] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-55 [2, 16, 128] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-56 [2, 294, 128] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-57 [2, 294, 128] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-58 [2, 32, 16, 4] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-10 [2, 32, 16, 294] --\n", "│ │ │ │ │ │ └─Linear: 7-59 [2, 16, 128] (recursive)\n", "│ │ │ │ │ │ └─LeakyHardtanh: 7-60 [2, 16, 128] --\n", "│ │ │ │ │ └─MultiHeadAttention: 6-32 [2, 294, 128] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-61 [2, 294, 128] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-62 [2, 16, 128] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-63 [2, 16, 128] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-64 [2, 32, 294, 4] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-11 [2, 32, 294, 16] --\n", "│ │ │ │ │ │ └─Linear: 7-65 [2, 294, 128] (recursive)\n", "│ │ │ │ │ │ └─LeakyHardtanh: 7-66 [2, 294, 128] --\n", "│ │ │ │ └─DoubleFeedForward: 5-12 [2, 294, 128] (recursive)\n", "│ │ │ │ │ └─Linear: 6-33 [2, 294, 512] (recursive)\n", "│ │ │ │ │ └─ReLU6: 6-34 [2, 294, 512] --\n", "│ │ │ │ │ └─Linear: 6-35 [2, 294, 128] (recursive)\n", "│ │ │ └─EncoderLayer: 4-38 [2, 4, 128] (recursive)\n", "│ │ │ │ └─SimpleInducedSetAttention: 5-13 [2, 294, 128] (recursive)\n", "│ │ │ │ │ └─TensorInductionPoint: 6-36 [2, 16, 128] (recursive)\n", "│ │ │ │ │ └─MultiHeadAttention: 6-37 [2, 16, 128] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-67 [2, 16, 128] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-68 [2, 294, 128] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-69 [2, 294, 128] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-70 [2, 32, 16, 4] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-12 [2, 32, 16, 294] --\n", "│ │ │ │ │ │ └─Linear: 7-71 [2, 16, 128] (recursive)\n", "│ │ │ │ │ │ └─LeakyHardtanh: 7-72 [2, 16, 128] --\n", "│ │ │ │ │ └─MultiHeadAttention: 6-38 [2, 294, 128] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-73 [2, 294, 128] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-74 [2, 16, 128] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-75 [2, 16, 128] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-76 [2, 32, 294, 4] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-13 [2, 32, 294, 16] --\n", "│ │ │ │ │ │ └─Linear: 7-77 [2, 294, 128] (recursive)\n", "│ │ │ │ │ │ └─LeakyHardtanh: 7-78 [2, 294, 128] --\n", "│ │ │ │ └─DoubleFeedForward: 5-14 [2, 294, 128] (recursive)\n", "│ │ │ │ │ └─Linear: 6-39 [2, 294, 512] (recursive)\n", "│ │ │ │ │ └─LeakyHardtanh: 6-40 [2, 294, 512] --\n", "│ │ │ │ │ └─Linear: 6-41 [2, 294, 128] (recursive)\n", "│ │ │ │ └─PoolingByMultiheadAttention: 5-15 [2, 4, 128] (recursive)\n", "│ │ │ │ │ └─TensorInductionPoint: 6-42 [2, 4, 128] (recursive)\n", "│ │ │ │ │ └─SimpleMultiHeadAttention: 6-43 [2, 4, 128] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-79 [2, 4, 128] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-80 [2, 294, 128] (recursive)\n", "│ │ │ │ │ │ └─Linear: 7-81 [2, 294, 128] (recursive)\n", "│ │ │ │ │ │ └─ScaledDotProductAttention: 7-82 [2, 32, 4, 4] --\n", "│ │ │ │ │ │ │ └─Softmax: 8-14 [2, 32, 4, 294] --\n", "│ │ │ │ │ │ └─Linear: 7-83 [2, 4, 128] (recursive)\n", "│ │ │ │ │ │ └─LeakyHardtanh: 7-84 [2, 4, 128] --\n", "│ │ │ │ └─DoubleFeedForward: 5-16 [2, 4, 128] (recursive)\n", "│ │ │ │ │ └─Linear: 6-44 [2, 4, 512] (recursive)\n", "│ │ │ │ │ └─LeakyHardtanh: 6-45 [2, 4, 512] --\n", "│ │ │ │ │ └─Linear: 6-46 [2, 4, 128] (recursive)\n", "├─Head: 1-4 [2] --\n", "│ └─Sequential: 2-5 [2, 1] --\n", "│ │ └─FeedForward: 3-19 [2, 256] --\n", "│ │ │ └─Linear: 4-39 [2, 256] 131,328\n", "│ │ │ └─ReLU6: 4-40 [2, 256] --\n", "│ │ └─FeedForward: 3-20 [2, 256] --\n", "│ │ │ └─Linear: 4-41 [2, 256] 65,792\n", "│ │ │ └─ReLU6: 4-42 [2, 256] --\n", "│ │ └─FeedForward: 3-21 [2, 256] --\n", "│ │ │ └─Linear: 4-43 [2, 256] 65,792\n", "│ │ │ └─ReLU6: 4-44 [2, 256] --\n", "│ │ └─FeedForward: 3-22 [2, 256] --\n", "│ │ │ └─Linear: 4-45 [2, 256] 65,792\n", "│ │ │ └─ReLU6: 4-46 [2, 256] --\n", "│ │ └─FeedForward: 3-23 [2, 256] --\n", "│ │ │ └─Linear: 4-47 [2, 256] 65,792\n", "│ │ │ └─ReLU6: 4-48 [2, 256] --\n", "│ │ └─FeedForward: 3-24 [2, 256] --\n", "│ │ │ └─Linear: 4-49 [2, 256] 65,792\n", "│ │ │ └─ReLU6: 4-50 [2, 256] --\n", "│ │ └─FeedForward: 3-25 [2, 256] --\n", "│ │ │ └─Linear: 4-51 [2, 256] 65,792\n", "│ │ │ └─ReLU6: 4-52 [2, 256] --\n", "│ │ └─FeedForward: 3-26 [2, 1] --\n", "│ │ │ └─Linear: 4-53 [2, 1] 257\n", "│ │ │ └─LeakyHardsigmoid: 4-54 [2, 1] --\n", "========================================================================================================================\n", "Total params: 7,827,841\n", "Trainable params: 7,827,841\n", "Non-trainable params: 0\n", "Total mult-adds (M): 30.76\n", "========================================================================================================================\n", "Input size (MB): 0.12\n", "Forward/backward pass size (MB): 260.58\n", "Params size (MB): 31.31\n", "Estimated Total Size (MB): 292.01\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-03T06:21:10.290901Z", "iopub.status.busy": "2024-03-03T06:21:10.289996Z", "iopub.status.idle": "2024-03-03T07:22:58.625808Z", "shell.execute_reply": "2024-03-03T07:22:58.624885Z" }, "papermill": { "duration": 3708.373089, "end_time": "2024-03-03T07:22:58.647238", "exception": false, "start_time": "2024-03-03T06:21:10.274149", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "g_loss_mul 0.1\n", "Epoch 0\n", "Train loss {'avg_role_model_loss': 0.01341511887658271, 'avg_role_model_std_loss': 0.24023109539175563, 'avg_role_model_mean_pred_loss': 0.000575269428866676, 'avg_role_model_g_mag_loss': 0.004837815280916402, '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.015502669336274266, 'n_size': 320, 'n_batch': 80, 'duration': 86.60318899154663, 'duration_batch': 1.082539862394333, 'duration_size': 0.27063496559858324, 'avg_pred_std': 0.11721891383640468}\n", "Val loss {'avg_role_model_loss': 0.018764166883192955, 'avg_role_model_std_loss': 0.7378902015632776, 'avg_role_model_mean_pred_loss': 0.0008810971392904321, 'avg_role_model_g_mag_loss': 0.006337779993191362, '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.02165449762251228, 'n_size': 80, 'n_batch': 20, 'duration': 19.204163312911987, 'duration_batch': 0.9602081656455994, 'duration_size': 0.24005204141139985, 'avg_pred_std': 0.08749947492033243}\n", "Epoch 1\n", "Train loss {'avg_role_model_loss': 0.01306824244238669, 'avg_role_model_std_loss': 1.023421409522797, 'avg_role_model_mean_pred_loss': 0.0006003775347632523, 'avg_role_model_g_mag_loss': 0.007479726555175148, '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.014787302106560674, 'n_size': 320, 'n_batch': 80, 'duration': 87.21888208389282, 'duration_batch': 1.0902360260486603, 'duration_size': 0.2725590065121651, 'avg_pred_std': 0.1071490949485451}\n", "Val loss {'avg_role_model_loss': 0.007755115552572534, 'avg_role_model_std_loss': 2.593804732917124, 'avg_role_model_mean_pred_loss': 0.00013148071556594586, 'avg_role_model_g_mag_loss': 0.006523144242237322, '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.008876382285961881, 'n_size': 80, 'n_batch': 20, 'duration': 19.415016651153564, 'duration_batch': 0.9707508325576782, 'duration_size': 0.24268770813941956, 'avg_pred_std': 0.026741976058110593}\n", "Epoch 2\n", "Train loss {'avg_role_model_loss': 0.0028183516405988485, 'avg_role_model_std_loss': 0.7737382953319809, 'avg_role_model_mean_pred_loss': 9.625664277708966e-06, 'avg_role_model_g_mag_loss': 0.00837607061257586, '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.0028855871143605325, 'n_size': 320, 'n_batch': 80, 'duration': 87.30349731445312, 'duration_batch': 1.091293716430664, 'duration_size': 0.272823429107666, 'avg_pred_std': 0.0851033627637662}\n", "Val loss {'avg_role_model_loss': 0.0034189124999102205, 'avg_role_model_std_loss': 2.2048701629042626, 'avg_role_model_mean_pred_loss': 1.1537741464451301e-05, 'avg_role_model_g_mag_loss': 0.008503273967653513, '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.0035019157105125485, 'n_size': 80, 'n_batch': 20, 'duration': 19.296178340911865, 'duration_batch': 0.9648089170455932, 'duration_size': 0.2412022292613983, 'avg_pred_std': 0.02689541974104941}\n", "Epoch 3\n", "Train loss {'avg_role_model_loss': 0.0031308751182223204, 'avg_role_model_std_loss': 1.4198307410230258, 'avg_role_model_mean_pred_loss': 1.015549445890062e-05, 'avg_role_model_g_mag_loss': 0.008551960467593744, '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.0032078142976388335, 'n_size': 320, 'n_batch': 80, 'duration': 87.20788407325745, 'duration_batch': 1.0900985509157182, 'duration_size': 0.27252463772892954, 'avg_pred_std': 0.07063841636409052}\n", "Val loss {'avg_role_model_loss': 0.0025563906941897586, 'avg_role_model_std_loss': 1.7120467301925602, 'avg_role_model_mean_pred_loss': 4.022160688882392e-06, 'avg_role_model_g_mag_loss': 0.008696647034958005, '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.0026055111757159466, 'n_size': 80, 'n_batch': 20, 'duration': 19.3008930683136, 'duration_batch': 0.9650446534156799, 'duration_size': 0.24126116335391998, 'avg_pred_std': 0.031063590943813325}\n", "Epoch 4\n", "Train loss {'avg_role_model_loss': 0.0020325787663750816, 'avg_role_model_std_loss': 0.9927601797127522, 'avg_role_model_mean_pred_loss': 3.947625345419869e-06, 'avg_role_model_g_mag_loss': 0.008560203079832717, '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.002069109250442125, 'n_size': 320, 'n_batch': 80, 'duration': 86.83163189888, 'duration_batch': 1.085395398736, 'duration_size': 0.271348849684, 'avg_pred_std': 0.08267453832668252}\n", "Val loss {'avg_role_model_loss': 0.002587378228054149, 'avg_role_model_std_loss': 1.5380892607378684, 'avg_role_model_mean_pred_loss': 5.001206458744855e-06, 'avg_role_model_g_mag_loss': 0.008236717758700251, '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.002642228409240488, 'n_size': 80, 'n_batch': 20, 'duration': 19.28103756904602, 'duration_batch': 0.964051878452301, 'duration_size': 0.24101296961307525, 'avg_pred_std': 0.03489238116890192}\n", "Epoch 5\n", "Train loss {'avg_role_model_loss': 0.0018827232423063833, 'avg_role_model_std_loss': 0.36071941533007446, 'avg_role_model_mean_pred_loss': 3.0995558925314963e-06, 'avg_role_model_g_mag_loss': 0.008657984499586746, '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.0019155390065861866, 'n_size': 320, 'n_batch': 80, 'duration': 86.8512351512909, 'duration_batch': 1.085640439391136, 'duration_size': 0.271410109847784, 'avg_pred_std': 0.08422506358474494}\n", "Val loss {'avg_role_model_loss': 0.002631575356645044, 'avg_role_model_std_loss': 1.174698173921024, 'avg_role_model_mean_pred_loss': 7.702732040915094e-06, 'avg_role_model_g_mag_loss': 0.008593563642352819, '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.002682924266991904, 'n_size': 80, 'n_batch': 20, 'duration': 19.29587149620056, 'duration_batch': 0.964793574810028, 'duration_size': 0.241198393702507, 'avg_pred_std': 0.03935151700861752}\n", "Epoch 6\n", "Train loss {'avg_role_model_loss': 0.00163584444890148, 'avg_role_model_std_loss': 0.32704864908948517, 'avg_role_model_mean_pred_loss': 3.7024563248498977e-06, 'avg_role_model_g_mag_loss': 0.008764190669171511, '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.0016616366719972575, 'n_size': 320, 'n_batch': 80, 'duration': 86.82903480529785, 'duration_batch': 1.085362935066223, 'duration_size': 0.27134073376655576, 'avg_pred_std': 0.09021815697196871}\n", "Val loss {'avg_role_model_loss': 0.0027584389958065004, 'avg_role_model_std_loss': 1.2948427033639747, 'avg_role_model_mean_pred_loss': 8.096104292887318e-06, 'avg_role_model_g_mag_loss': 0.007971254212316125, '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.002821568233775906, 'n_size': 80, 'n_batch': 20, 'duration': 19.269461393356323, 'duration_batch': 0.9634730696678162, 'duration_size': 0.24086826741695405, 'avg_pred_std': 0.03149411482736468}\n", "Epoch 7\n", "Train loss {'avg_role_model_loss': 0.001588404598624038, 'avg_role_model_std_loss': 0.30104452142173416, 'avg_role_model_mean_pred_loss': 2.1237631645752536e-06, 'avg_role_model_g_mag_loss': 0.008680318144615739, '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.0016122827923027217, 'n_size': 320, 'n_batch': 80, 'duration': 86.72441625595093, 'duration_batch': 1.0840552031993866, 'duration_size': 0.27101380079984666, 'avg_pred_std': 0.08948315244633705}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.002168826656998135, 'avg_role_model_std_loss': 1.1961765073471269, 'avg_role_model_mean_pred_loss': 3.218722386769124e-06, 'avg_role_model_g_mag_loss': 0.008597346721217036, '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.0022069613172789105, 'n_size': 80, 'n_batch': 20, 'duration': 19.133681535720825, 'duration_batch': 0.9566840767860413, 'duration_size': 0.23917101919651032, 'avg_pred_std': 0.03733009579591453}\n", "Epoch 8\n", "Train loss {'avg_role_model_loss': 0.001353109241972561, 'avg_role_model_std_loss': 0.2765715855718042, 'avg_role_model_mean_pred_loss': 2.087236364796191e-06, 'avg_role_model_g_mag_loss': 0.008927629049867391, '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.0013720194954657927, 'n_size': 320, 'n_batch': 80, 'duration': 86.93680453300476, 'duration_batch': 1.0867100566625596, 'duration_size': 0.2716775141656399, 'avg_pred_std': 0.09051385981729254}\n", "Val loss {'avg_role_model_loss': 0.0024928924576670397, 'avg_role_model_std_loss': 0.8476081335626077, 'avg_role_model_mean_pred_loss': 6.1137728412461815e-06, 'avg_role_model_g_mag_loss': 0.008560518850572407, '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.0025436472140427215, 'n_size': 80, 'n_batch': 20, 'duration': 19.220860481262207, 'duration_batch': 0.9610430240631104, 'duration_size': 0.2402607560157776, 'avg_pred_std': 0.03947796570137143}\n", "Epoch 9\n", "Train loss {'avg_role_model_loss': 0.0011078594061473268, 'avg_role_model_std_loss': 0.2964725857345002, 'avg_role_model_mean_pred_loss': 1.1485152926839908e-06, 'avg_role_model_g_mag_loss': 0.009000935748917981, '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.0011219609619729453, 'n_size': 320, 'n_batch': 80, 'duration': 86.97083497047424, 'duration_batch': 1.087135437130928, 'duration_size': 0.271783859282732, 'avg_pred_std': 0.08712627965724096}\n", "Val loss {'avg_role_model_loss': 0.002337238602922298, 'avg_role_model_std_loss': 0.6530551572132708, 'avg_role_model_mean_pred_loss': 6.45294174761446e-06, 'avg_role_model_g_mag_loss': 0.00837808190844953, '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.0023841866728616878, 'n_size': 80, 'n_batch': 20, 'duration': 19.421545267105103, 'duration_batch': 0.9710772633552551, 'duration_size': 0.24276931583881378, 'avg_pred_std': 0.04457564675249159}\n", "Epoch 10\n", "Train loss {'avg_role_model_loss': 0.0012053420616211952, 'avg_role_model_std_loss': 0.1931557533955261, 'avg_role_model_mean_pred_loss': 9.706161082351402e-07, 'avg_role_model_g_mag_loss': 0.008857980108587071, '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.001221423167589819, 'n_size': 320, 'n_batch': 80, 'duration': 87.4618911743164, 'duration_batch': 1.093273639678955, 'duration_size': 0.27331840991973877, 'avg_pred_std': 0.0897115994244814}\n", "Val loss {'avg_role_model_loss': 0.002253816397569608, 'avg_role_model_std_loss': 0.8841316987068751, 'avg_role_model_mean_pred_loss': 4.704099107730175e-06, 'avg_role_model_g_mag_loss': 0.008425972750410437, '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.0022973355487920346, 'n_size': 80, 'n_batch': 20, 'duration': 19.446954488754272, 'duration_batch': 0.9723477244377137, 'duration_size': 0.24308693110942842, 'avg_pred_std': 0.04312506481073797}\n", "Epoch 11\n", "Train loss {'avg_role_model_loss': 0.0009794028399483067, 'avg_role_model_std_loss': 0.1359832607921138, 'avg_role_model_mean_pred_loss': 1.01823794474289e-06, 'avg_role_model_g_mag_loss': 0.009016435348894448, '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.0009917656654579333, 'n_size': 320, 'n_batch': 80, 'duration': 87.36561322212219, 'duration_batch': 1.0920701652765274, 'duration_size': 0.27301754131913186, 'avg_pred_std': 0.08817402567947283}\n", "Val loss {'avg_role_model_loss': 0.0025446744170039893, 'avg_role_model_std_loss': 0.6562726007028459, 'avg_role_model_mean_pred_loss': 8.59153058119233e-06, 'avg_role_model_g_mag_loss': 0.00828958151396364, '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.002601461045560427, 'n_size': 80, 'n_batch': 20, 'duration': 19.171342372894287, 'duration_batch': 0.9585671186447143, 'duration_size': 0.23964177966117858, 'avg_pred_std': 0.046762616652995345}\n", "Epoch 12\n", "Train loss {'avg_role_model_loss': 0.0008729144968128821, 'avg_role_model_std_loss': 0.1683987133885907, 'avg_role_model_mean_pred_loss': 6.835936173131307e-07, 'avg_role_model_g_mag_loss': 0.009030447795521469, '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.0008834377124003368, 'n_size': 320, 'n_batch': 80, 'duration': 87.13745355606079, 'duration_batch': 1.0892181694507599, 'duration_size': 0.27230454236268997, 'avg_pred_std': 0.09424625603714958}\n", "Val loss {'avg_role_model_loss': 0.0025075858677155336, 'avg_role_model_std_loss': 0.6813347520466777, 'avg_role_model_mean_pred_loss': 9.080454932988875e-06, 'avg_role_model_g_mag_loss': 0.007943603885360062, '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.002564889276982285, 'n_size': 80, 'n_batch': 20, 'duration': 19.267545700073242, 'duration_batch': 0.9633772850036622, 'duration_size': 0.24084432125091554, 'avg_pred_std': 0.04623653790913522}\n", "Epoch 13\n", "Train loss {'avg_role_model_loss': 0.0008042755165661219, 'avg_role_model_std_loss': 0.2813704043714537, 'avg_role_model_mean_pred_loss': 3.3645215451869243e-07, 'avg_role_model_g_mag_loss': 0.009021570929326117, '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.0008135768726788229, 'n_size': 320, 'n_batch': 80, 'duration': 86.61275219917297, 'duration_batch': 1.082659402489662, 'duration_size': 0.2706648506224155, 'avg_pred_std': 0.08749473023926839}\n", "Val loss {'avg_role_model_loss': 0.0024872228954336607, 'avg_role_model_std_loss': 0.8424709204863575, 'avg_role_model_mean_pred_loss': 1.2303503870288169e-05, 'avg_role_model_g_mag_loss': 0.00836391884367913, '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.00254274607723346, 'n_size': 80, 'n_batch': 20, 'duration': 19.089064598083496, 'duration_batch': 0.9544532299041748, 'duration_size': 0.2386133074760437, 'avg_pred_std': 0.04271733276546001}\n", "Epoch 14\n", "Train loss {'avg_role_model_loss': 0.0008596906129241689, 'avg_role_model_std_loss': 0.12678315311761706, 'avg_role_model_mean_pred_loss': 7.324179896302241e-07, 'avg_role_model_g_mag_loss': 0.009051537868799642, '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.0008700103617229615, 'n_size': 320, 'n_batch': 80, 'duration': 86.11309504508972, 'duration_batch': 1.0764136880636215, 'duration_size': 0.26910342201590537, 'avg_pred_std': 0.09114952590316534}\n", "Val loss {'avg_role_model_loss': 0.003142218668654095, 'avg_role_model_std_loss': 0.5989244450749837, 'avg_role_model_mean_pred_loss': 1.701286636457411e-05, 'avg_role_model_g_mag_loss': 0.007768401200883091, '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.0032341236757929435, 'n_size': 80, 'n_batch': 20, 'duration': 18.97400975227356, 'duration_batch': 0.948700487613678, 'duration_size': 0.2371751219034195, 'avg_pred_std': 0.045658442331478}\n", "Epoch 15\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0007071739214552508, 'avg_role_model_std_loss': 0.11358937955730664, 'avg_role_model_mean_pred_loss': 8.504173889859433e-07, 'avg_role_model_g_mag_loss': 0.009156818711198866, '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.0007155208293625037, 'n_size': 320, 'n_batch': 80, 'duration': 85.8247458934784, 'duration_batch': 1.07280932366848, 'duration_size': 0.26820233091712, 'avg_pred_std': 0.08828951774630696}\n", "Val loss {'avg_role_model_loss': 0.0027607452910160648, 'avg_role_model_std_loss': 0.5599186637941784, 'avg_role_model_mean_pred_loss': 1.3696136823915239e-05, 'avg_role_model_g_mag_loss': 0.00771399496588856, '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.0028348844876745715, 'n_size': 80, 'n_batch': 20, 'duration': 18.95707416534424, 'duration_batch': 0.9478537082672119, 'duration_size': 0.23696342706680298, 'avg_pred_std': 0.04666830957867205}\n", "Epoch 16\n", "Train loss {'avg_role_model_loss': 0.0006871584620967042, 'avg_role_model_std_loss': 0.056319261586604344, 'avg_role_model_mean_pred_loss': 7.729947919388539e-07, 'avg_role_model_g_mag_loss': 0.009021204826422036, '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.0006950973430775775, 'n_size': 320, 'n_batch': 80, 'duration': 85.77924585342407, 'duration_batch': 1.0722405731678009, 'duration_size': 0.2680601432919502, 'avg_pred_std': 0.09376501713413746}\n", "Val loss {'avg_role_model_loss': 0.0029137152865587267, 'avg_role_model_std_loss': 0.6469025506016806, 'avg_role_model_mean_pred_loss': 9.816658314748538e-06, 'avg_role_model_g_mag_loss': 0.007721508503891528, '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.002987763029523194, 'n_size': 80, 'n_batch': 20, 'duration': 18.965726137161255, 'duration_batch': 0.9482863068580627, 'duration_size': 0.23707157671451567, 'avg_pred_std': 0.048026554053649306}\n", "Epoch 17\n", "Train loss {'avg_role_model_loss': 0.0006477722853333034, 'avg_role_model_std_loss': 0.08796985171551344, 'avg_role_model_mean_pred_loss': 5.949152889407616e-07, 'avg_role_model_g_mag_loss': 0.009104125620797276, '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.0006556250523999552, 'n_size': 320, 'n_batch': 80, 'duration': 86.42096662521362, 'duration_batch': 1.0802620828151703, 'duration_size': 0.2700655207037926, 'avg_pred_std': 0.09506104957545176}\n", "Val loss {'avg_role_model_loss': 0.003072608428192325, 'avg_role_model_std_loss': 0.6891105846539176, 'avg_role_model_mean_pred_loss': 1.3079660551437028e-05, 'avg_role_model_g_mag_loss': 0.007593843806535006, '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.0031587239500368014, 'n_size': 80, 'n_batch': 20, 'duration': 19.130789279937744, 'duration_batch': 0.9565394639968872, 'duration_size': 0.2391348659992218, 'avg_pred_std': 0.04223878695629537}\n", "Epoch 18\n", "Train loss {'avg_role_model_loss': 0.0006514384161164343, 'avg_role_model_std_loss': 0.09940106079761221, 'avg_role_model_mean_pred_loss': 1.795125833634764e-07, 'avg_role_model_g_mag_loss': 0.009067119332030416, '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.0006588086861484044, 'n_size': 320, 'n_batch': 80, 'duration': 87.44042205810547, 'duration_batch': 1.0930052757263184, 'duration_size': 0.2732513189315796, 'avg_pred_std': 0.09078157264739276}\n", "Val loss {'avg_role_model_loss': 0.0024777524726232515, 'avg_role_model_std_loss': 0.7228478452472927, 'avg_role_model_mean_pred_loss': 1.1093569846298834e-05, 'avg_role_model_g_mag_loss': 0.008034943602979183, '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.002537216582277324, 'n_size': 80, 'n_batch': 20, 'duration': 19.3044171333313, 'duration_batch': 0.965220856666565, 'duration_size': 0.24130521416664125, 'avg_pred_std': 0.04896460571326315}\n", "Epoch 19\n", "Train loss {'avg_role_model_loss': 0.0006081814904973726, 'avg_role_model_std_loss': 0.09099644586050033, 'avg_role_model_mean_pred_loss': 3.1757028354558596e-07, 'avg_role_model_g_mag_loss': 0.009112988878041507, '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.000615051853355908, 'n_size': 320, 'n_batch': 80, 'duration': 86.71533060073853, 'duration_batch': 1.0839416325092315, 'duration_size': 0.27098540812730787, 'avg_pred_std': 0.09587977258488536}\n", "Val loss {'avg_role_model_loss': 0.00240422225324437, 'avg_role_model_std_loss': 0.6358416218907224, 'avg_role_model_mean_pred_loss': 1.1121995321849986e-05, 'avg_role_model_g_mag_loss': 0.008140259771607816, '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.0024615431102574803, 'n_size': 80, 'n_batch': 20, 'duration': 19.22822141647339, 'duration_batch': 0.9614110708236694, 'duration_size': 0.24035276770591735, 'avg_pred_std': 0.04650567690841854}\n", "Epoch 20\n", "Train loss {'avg_role_model_loss': 0.0005358590460900814, 'avg_role_model_std_loss': 0.06825528511013328, 'avg_role_model_mean_pred_loss': 2.678394117848915e-07, 'avg_role_model_g_mag_loss': 0.009244002948980779, '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.0005420027183504316, 'n_size': 320, 'n_batch': 80, 'duration': 85.95558786392212, 'duration_batch': 1.0744448482990265, 'duration_size': 0.26861121207475663, 'avg_pred_std': 0.0906242580153048}\n", "Val loss {'avg_role_model_loss': 0.0025660589744802564, 'avg_role_model_std_loss': 0.6802260238559029, 'avg_role_model_mean_pred_loss': 9.92956469314521e-06, 'avg_role_model_g_mag_loss': 0.007699522981420159, '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.0026287092332495376, 'n_size': 80, 'n_batch': 20, 'duration': 18.98186469078064, 'duration_batch': 0.9490932345390319, 'duration_size': 0.23727330863475798, 'avg_pred_std': 0.04403721652925015}\n", "Epoch 21\n", "Train loss {'avg_role_model_loss': 0.0004775314865582914, 'avg_role_model_std_loss': 0.06455386250157247, 'avg_role_model_mean_pred_loss': 2.1060846659059965e-07, 'avg_role_model_g_mag_loss': 0.009264782385434956, '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.00048304505050964506, 'n_size': 320, 'n_batch': 80, 'duration': 85.94736814498901, 'duration_batch': 1.0743421018123627, 'duration_size': 0.26858552545309067, 'avg_pred_std': 0.09594059572555125}\n", "Val loss {'avg_role_model_loss': 0.0030469499950413594, 'avg_role_model_std_loss': 0.8013474333885384, 'avg_role_model_mean_pred_loss': 1.4471279196381915e-05, 'avg_role_model_g_mag_loss': 0.007496322155930102, '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.0031343029033450874, 'n_size': 80, 'n_batch': 20, 'duration': 19.01077938079834, 'duration_batch': 0.950538969039917, 'duration_size': 0.23763474225997924, 'avg_pred_std': 0.04275354435667396}\n", "Epoch 22\n", "Train loss {'avg_role_model_loss': 0.0005181060546192384, 'avg_role_model_std_loss': 0.049453351887659557, 'avg_role_model_mean_pred_loss': 3.420242802625219e-07, 'avg_role_model_g_mag_loss': 0.009284257958643138, '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.0005241578612640296, 'n_size': 320, 'n_batch': 80, 'duration': 85.98614287376404, 'duration_batch': 1.0748267859220504, 'duration_size': 0.2687066964805126, 'avg_pred_std': 0.09294412531889976}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Val loss {'avg_role_model_loss': 0.002864245133969234, 'avg_role_model_std_loss': 0.4667397131830512, 'avg_role_model_mean_pred_loss': 1.4686058315405149e-05, 'avg_role_model_g_mag_loss': 0.007691610814072191, '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.002942165515560191, 'n_size': 80, 'n_batch': 20, 'duration': 19.0608127117157, 'duration_batch': 0.9530406355857849, 'duration_size': 0.23826015889644622, 'avg_pred_std': 0.052058699540793896}\n", "Epoch 23\n", "Train loss {'avg_role_model_loss': 0.00043534455560347853, 'avg_role_model_std_loss': 0.07720435771696674, 'avg_role_model_mean_pred_loss': 3.792708702435137e-07, 'avg_role_model_g_mag_loss': 0.009331031411420554, '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.00044047548610706146, 'n_size': 320, 'n_batch': 80, 'duration': 85.86611938476562, 'duration_batch': 1.0733264923095702, 'duration_size': 0.26833162307739256, 'avg_pred_std': 0.09743042136542499}\n", "Val loss {'avg_role_model_loss': 0.0030215614737244324, 'avg_role_model_std_loss': 0.6433068920836377, 'avg_role_model_mean_pred_loss': 1.4186154598316848e-05, 'avg_role_model_g_mag_loss': 0.007460616645403206, '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.003107524223742075, 'n_size': 80, 'n_batch': 20, 'duration': 18.98639988899231, 'duration_batch': 0.9493199944496155, 'duration_size': 0.23732999861240386, 'avg_pred_std': 0.050000256625935435}\n", "Epoch 24\n", "Train loss {'avg_role_model_loss': 0.00042359301896794933, 'avg_role_model_std_loss': 0.04604176523210342, 'avg_role_model_mean_pred_loss': 1.3871310008198302e-07, 'avg_role_model_g_mag_loss': 0.009280809713527561, '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.000428745166027511, 'n_size': 320, 'n_batch': 80, 'duration': 86.06277060508728, 'duration_batch': 1.075784632563591, 'duration_size': 0.26894615814089773, 'avg_pred_std': 0.09038203665986658}\n", "Val loss {'avg_role_model_loss': 0.0026232202184473864, 'avg_role_model_std_loss': 0.575840337219779, 'avg_role_model_mean_pred_loss': 1.1411215524770312e-05, 'avg_role_model_g_mag_loss': 0.007816769555211068, '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.002690732198243495, 'n_size': 80, 'n_batch': 20, 'duration': 19.039226293563843, 'duration_batch': 0.9519613146781921, 'duration_size': 0.23799032866954803, 'avg_pred_std': 0.04816291746683419}\n", "Epoch 25\n", "Train loss {'avg_role_model_loss': 0.00037949440795728153, 'avg_role_model_std_loss': 0.024586391349637894, 'avg_role_model_mean_pred_loss': 1.68624920803169e-07, 'avg_role_model_g_mag_loss': 0.009385608148295432, '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.00038402225013669524, 'n_size': 320, 'n_batch': 80, 'duration': 86.02636766433716, 'duration_batch': 1.0753295958042144, 'duration_size': 0.2688323989510536, 'avg_pred_std': 0.09288427671417594}\n", "Val loss {'avg_role_model_loss': 0.0026626741448126266, 'avg_role_model_std_loss': 0.6883730123883651, 'avg_role_model_mean_pred_loss': 1.143276741413235e-05, 'avg_role_model_g_mag_loss': 0.0078037152998149395, '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.0027320246357703582, 'n_size': 80, 'n_batch': 20, 'duration': 19.006802558898926, 'duration_batch': 0.9503401279449463, 'duration_size': 0.23758503198623657, 'avg_pred_std': 0.04854826694354415}\n", "Epoch 26\n", "Train loss {'avg_role_model_loss': 0.00036825626919494424, 'avg_role_model_std_loss': 0.06836344334289635, 'avg_role_model_mean_pred_loss': 2.864049477936933e-07, 'avg_role_model_g_mag_loss': 0.009369707445148378, '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.0003726810866737651, 'n_size': 320, 'n_batch': 80, 'duration': 87.12945866584778, 'duration_batch': 1.0891182333230973, 'duration_size': 0.27227955833077433, 'avg_pred_std': 0.0932244597002864}\n", "Val loss {'avg_role_model_loss': 0.002895271330635296, 'avg_role_model_std_loss': 0.6430459570903622, 'avg_role_model_mean_pred_loss': 1.4183609434681444e-05, 'avg_role_model_g_mag_loss': 0.0074269796255975965, '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.002975074338610284, 'n_size': 80, 'n_batch': 20, 'duration': 19.336661100387573, 'duration_batch': 0.9668330550193787, 'duration_size': 0.24170826375484467, 'avg_pred_std': 0.051954638119786976}\n", "Epoch 27\n", "Train loss {'avg_role_model_loss': 0.00045546451366362817, 'avg_role_model_std_loss': 0.07809749107524873, 'avg_role_model_mean_pred_loss': 1.9649450981934686e-07, 'avg_role_model_g_mag_loss': 0.009275437286123633, '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.00046089367940567173, 'n_size': 320, 'n_batch': 80, 'duration': 86.8785035610199, 'duration_batch': 1.0859812945127487, 'duration_size': 0.2714953236281872, 'avg_pred_std': 0.09191167326644063}\n", "Val loss {'avg_role_model_loss': 0.0028493454796262086, 'avg_role_model_std_loss': 0.6770066560213991, 'avg_role_model_mean_pred_loss': 1.2013152249146231e-05, 'avg_role_model_g_mag_loss': 0.007457524072378874, '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.0029267561651067807, 'n_size': 80, 'n_batch': 20, 'duration': 19.251688241958618, 'duration_batch': 0.9625844120979309, 'duration_size': 0.24064610302448272, 'avg_pred_std': 0.04829146796837449}\n", "Epoch 28\n", "Train loss {'avg_role_model_loss': 0.00033174752630884543, 'avg_role_model_std_loss': 0.06612742295388116, 'avg_role_model_mean_pred_loss': 1.180179221131573e-07, 'avg_role_model_g_mag_loss': 0.009398166846949607, '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.0003358864170422748, 'n_size': 320, 'n_batch': 80, 'duration': 86.8982789516449, 'duration_batch': 1.0862284868955612, 'duration_size': 0.2715571217238903, 'avg_pred_std': 0.09198763176100329}\n", "Val loss {'avg_role_model_loss': 0.0027787499493570067, 'avg_role_model_std_loss': 0.7222041939938209, 'avg_role_model_mean_pred_loss': 1.1131508226305125e-05, 'avg_role_model_g_mag_loss': 0.0075377147179096935, '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.0028551170726132113, 'n_size': 80, 'n_batch': 20, 'duration': 19.059608459472656, 'duration_batch': 0.9529804229736328, 'duration_size': 0.2382451057434082, 'avg_pred_std': 0.04740339070558548}\n", "Epoch 29\n", "Train loss {'avg_role_model_loss': 0.0003597953202529425, 'avg_role_model_std_loss': 0.024496306587910778, 'avg_role_model_mean_pred_loss': 1.142882032886816e-07, 'avg_role_model_g_mag_loss': 0.009390755963977426, '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.00036418304370045007, 'n_size': 320, 'n_batch': 80, 'duration': 86.48576998710632, 'duration_batch': 1.081072124838829, 'duration_size': 0.27026803120970727, 'avg_pred_std': 0.09743952928110958}\n", "Val loss {'avg_role_model_loss': 0.0026345706894062458, 'avg_role_model_std_loss': 0.7635843992035003, 'avg_role_model_mean_pred_loss': 1.1359682959266593e-05, 'avg_role_model_g_mag_loss': 0.007559091807343066, '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.0027058403313276356, 'n_size': 80, 'n_batch': 20, 'duration': 18.992973566055298, 'duration_batch': 0.9496486783027649, 'duration_size': 0.23741216957569122, 'avg_pred_std': 0.046653942298144103}\n", "Epoch 30\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Train loss {'avg_role_model_loss': 0.0004039141500470578, 'avg_role_model_std_loss': 0.09576162853820311, 'avg_role_model_mean_pred_loss': 1.8995679496383588e-07, 'avg_role_model_g_mag_loss': 0.009361328079830856, '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.00040872053962175413, 'n_size': 320, 'n_batch': 80, 'duration': 86.09150242805481, 'duration_batch': 1.076143780350685, 'duration_size': 0.26903594508767126, 'avg_pred_std': 0.09370959255611525}\n", "Val loss {'avg_role_model_loss': 0.0027511596577824093, 'avg_role_model_std_loss': 0.6731958146176111, 'avg_role_model_mean_pred_loss': 1.417353958319545e-05, 'avg_role_model_g_mag_loss': 0.007637712243013084, '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.0028271504568692764, 'n_size': 80, 'n_batch': 20, 'duration': 18.946882724761963, 'duration_batch': 0.9473441362380981, 'duration_size': 0.23683603405952453, 'avg_pred_std': 0.047970831673592326}\n", "Epoch 31\n", "Train loss {'avg_role_model_loss': 0.00030792704831128503, 'avg_role_model_std_loss': 0.03007892958051279, 'avg_role_model_mean_pred_loss': 1.6044353357220544e-07, 'avg_role_model_g_mag_loss': 0.009489066211972385, '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.00031191278568485357, 'n_size': 320, 'n_batch': 80, 'duration': 86.08254933357239, 'duration_batch': 1.076031866669655, 'duration_size': 0.2690079666674137, 'avg_pred_std': 0.09290082987863571}\n", "Val loss {'avg_role_model_loss': 0.0027197946154046805, 'avg_role_model_std_loss': 0.6787573918956695, 'avg_role_model_mean_pred_loss': 9.246046926492114e-06, 'avg_role_model_g_mag_loss': 0.007403567247092724, '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.002790288768301252, 'n_size': 80, 'n_batch': 20, 'duration': 19.061045169830322, 'duration_batch': 0.9530522584915161, 'duration_size': 0.23826306462287902, 'avg_pred_std': 0.04738053930923343}\n", "Epoch 32\n", "Train loss {'avg_role_model_loss': 0.0002918601881447103, 'avg_role_model_std_loss': 0.02865394608418743, 'avg_role_model_mean_pred_loss': 1.377780366400853e-07, 'avg_role_model_g_mag_loss': 0.009482038370333613, '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.00029560920602307307, 'n_size': 320, 'n_batch': 80, 'duration': 85.58978748321533, 'duration_batch': 1.0698723435401916, 'duration_size': 0.2674680858850479, 'avg_pred_std': 0.09774628963787109}\n", "Val loss {'avg_role_model_loss': 0.002647562528727576, 'avg_role_model_std_loss': 0.6132856009367742, 'avg_role_model_mean_pred_loss': 1.2823440413711751e-05, 'avg_role_model_g_mag_loss': 0.007520708185620606, '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.0027170190507604273, 'n_size': 80, 'n_batch': 20, 'duration': 18.80093550682068, 'duration_batch': 0.940046775341034, 'duration_size': 0.2350116938352585, 'avg_pred_std': 0.0500286478549242}\n", "Epoch 33\n", "Train loss {'avg_role_model_loss': 0.0002785044133588599, 'avg_role_model_std_loss': 0.06320022720836534, 'avg_role_model_mean_pred_loss': 4.3557023588974905e-08, 'avg_role_model_g_mag_loss': 0.009524956706445663, '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.0002821075783458582, 'n_size': 320, 'n_batch': 80, 'duration': 85.059579372406, 'duration_batch': 1.063244742155075, 'duration_size': 0.26581118553876876, 'avg_pred_std': 0.09342062773648649}\n", "Time out: 3615.1168954372406/3600\n", "Eval loss {'role_model': 'tab_ddpm_concat', 'n_size': 399, 'n_batch': 100, 'role_model_metrics': {'avg_loss': 0.0013795483690064475, 'avg_g_mag_loss': 0.03192370239529646, 'avg_g_cos_loss': 0.010496431505914432, 'pred_duration': 1.911043405532837, 'grad_duration': 1.572967529296875, 'total_duration': 3.484010934829712, 'pred_std': 0.05930750072002411, 'std_loss': 0.007085928227752447, 'mean_pred_loss': 1.234028559338185e-06, 'pred_rmse': 0.03714227303862572, 'pred_mae': 0.02984810806810856, 'pred_mape': 0.06894627958536148, 'grad_rmse': 0.06608082354068756, 'grad_mae': 0.05324888974428177, 'grad_mape': 0.8990559577941895}, '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.0013795483690064475, 'avg_g_mag_loss': 0.03192370239529646, 'avg_g_cos_loss': 0.010496431505914432, 'avg_pred_duration': 1.911043405532837, 'avg_grad_duration': 1.572967529296875, 'avg_total_duration': 3.484010934829712, 'avg_pred_std': 0.05930750072002411, 'avg_std_loss': 0.007085928227752447, 'avg_mean_pred_loss': 1.234028559338185e-06}, 'min_metrics': {'avg_loss': 0.0013795483690064475, 'avg_g_mag_loss': 0.03192370239529646, 'avg_g_cos_loss': 0.010496431505914432, 'pred_duration': 1.911043405532837, 'grad_duration': 1.572967529296875, 'total_duration': 3.484010934829712, 'pred_std': 0.05930750072002411, 'std_loss': 0.007085928227752447, 'mean_pred_loss': 1.234028559338185e-06, 'pred_rmse': 0.03714227303862572, 'pred_mae': 0.02984810806810856, 'pred_mape': 0.06894627958536148, 'grad_rmse': 0.06608082354068756, 'grad_mae': 0.05324888974428177, 'grad_mape': 0.8990559577941895}, 'model_metrics': {'tab_ddpm_concat': {'avg_loss': 0.0013795483690064475, 'avg_g_mag_loss': 0.03192370239529646, 'avg_g_cos_loss': 0.010496431505914432, 'pred_duration': 1.911043405532837, 'grad_duration': 1.572967529296875, 'total_duration': 3.484010934829712, 'pred_std': 0.05930750072002411, 'std_loss': 0.007085928227752447, 'mean_pred_loss': 1.234028559338185e-06, 'pred_rmse': 0.03714227303862572, 'pred_mae': 0.02984810806810856, 'pred_mape': 0.06894627958536148, 'grad_rmse': 0.06608082354068756, 'grad_mae': 0.05324888974428177, 'grad_mape': 0.8990559577941895}}}\n" ] } ], "source": [ "import torch\n", "from ml_utility_loss.loss_learning.estimator.pipeline import train, train_2\n", "from ml_utility_loss.loss_learning.estimator.process_simple import train_epoch, eval as _eval\n", "from ml_utility_loss.params import GradientPenaltyMode\n", "from ml_utility_loss.util import clear_memory\n", "import time\n", "#torch.autograd.set_detect_anomaly(True)\n", "\n", "clear_memory()\n", "\n", "opt = params[\"Optim\"](model.parameters())\n", "loss = train_2(\n", " [train_set, val_set, test_set],\n", " preprocessor=preprocessor,\n", " whole_model=model,\n", " optim=opt,\n", " log_dir=\"logs\",\n", " checkpoint_dir=\"checkpoints\",\n", " verbose=True,\n", " allow_same_prediction=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-03T07:22:58.688280Z", "iopub.status.busy": "2024-03-03T07:22:58.688002Z", "iopub.status.idle": "2024-03-03T07:22:58.692209Z", "shell.execute_reply": "2024-03-03T07:22:58.691365Z" }, "papermill": { "duration": 0.027439, "end_time": "2024-03-03T07:22:58.694177", "exception": false, "start_time": "2024-03-03T07:22:58.666738", "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-03T07:22:58.736147Z", "iopub.status.busy": "2024-03-03T07:22:58.735234Z", "iopub.status.idle": "2024-03-03T07:22:58.808696Z", "shell.execute_reply": "2024-03-03T07:22:58.807708Z" }, "papermill": { "duration": 0.098126, "end_time": "2024-03-03T07:22:58.811111", "exception": false, "start_time": "2024-03-03T07:22:58.712985", "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-03T07:22:58.854026Z", "iopub.status.busy": "2024-03-03T07:22:58.853705Z", "iopub.status.idle": "2024-03-03T07:22:59.129282Z", "shell.execute_reply": "2024-03-03T07:22:59.128422Z" }, "papermill": { "duration": 0.299231, "end_time": "2024-03-03T07:22:59.131243", "exception": false, "start_time": "2024-03-03T07:22:58.832012", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAS0AAAESCAYAAACoz4OWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA4r0lEQVR4nO3de1xUdf4/8NfMMBdgmBkuwoByy0uaIikuLFn5LdmoqBWztVhXyTW1XWwrtt2yVWl3v98wu1nmL7/VN92tSLPNLmqtipdKERUwUZRVQ1BhQERmuMx9Pr8/DhwZGGBmgBmQ9/PxOI8Z5nzmzIfDzIvP+cznnI+AMcZACCFDhNDbFSCEEFdQaBFChhQKLULIkEKhRQgZUii0CCFDCoUWIWRIodAihAwpPt6ugKfYbDZUV1cjICAAAoHA29UhhHTCGENTUxMiIiIgFHbfnho2oVVdXY3IyEhvV4MQ0ouLFy9i1KhR3a4fNqEVEBAAgNshCoXCy7UhhHSm0+kQGRnJf1a7M2xCq/2QUKFQUGgRMoj11n1DHfGEkCGFQosQMqRQaBFChpRh06dF+sZqtcJsNnu7GmQIE4vFEIlEfd4OhRbpEWMMGo0GjY2N3q4KuQGoVCqo1eo+jZWk0CI9ag+s0NBQ+Pn50cBc4hbGGFpbW1FXVwcACA8Pd3tbFFqd6a8BmlJAKAaik71dG6+yWq18YAUHB3u7OmSI8/X1BQDU1dUhNDTU7UNF6ojvrLoE+MeDwI4/ersmXtfeh+Xn5+flmpAbRft7qS/9oxRanUnaRuOamrxbj0GEDglJf+mP9xKFVmfSttAyUmgRMhhRaHUmlXO3xmaAJioiZNCh0OqsvaVlMwMWo3frQoYsgUCAL774wtvV6Fcvvvgibr31Vm9Xg0KrC4n8+n1Ts/fqQUgfbdq0CSqVqt+29+yzzyI/P7/ftucuCq3OhCJA3PZtGfVrkWHAZDI5VU4ulw+KoS8UWo5QZ7xDjDG0mixeWVydCP3bb7/F7bffDpVKheDgYDzwwAM4f/48AOC2227Dc889Z1f+ypUrEIvF+O677wAANTU1SEtLg6+vL2JjY5GXl4eYmBisXbvWrX1XWlqKu+++G76+vggODsaSJUvQ3Hy9Jb9//34kJibC398fKpUK06dPR2VlJQDgxx9/xF133YWAgAAoFAokJCTg2LFjPb7e/v37sXDhQmi1WggEAggEArz44osAgJiYGPz973/HggULoFAosGTJEgDAc889h3HjxsHPzw833XQTVq5caTc0ofPh4WOPPYb09HS8+uqrCA8PR3BwMLKysgb8dC8aXOqIRA6glg4PO9Gbrbhl1b+98tplf0uFn8T5t2tLSwuys7MxefJkNDc3Y9WqVZg9ezaOHz+OefPmYc2aNVi9ejX/FfyWLVsQERGBO+64AwCwYMEC1NfXY//+/RCLxcjOzuZHc7uqpaUFqampSE5OxtGjR1FXV4fHH38cy5Ytw6ZNm2CxWJCeno7Fixfjk08+gclkwpEjR/i6zZs3D1OmTME777wDkUiE48ePQywW9/iat912G9auXYtVq1ahvLwcANdSavfqq69i1apVyMnJ4R8LCAjApk2bEBERgdLSUixevBgBAQH485//3O3r7Nu3D+Hh4di3bx/OnTuHRx55BLfeeisWL17s1r5yBoWWI9TSGvLmzJlj9/MHH3yAESNGoKysDHPnzsXTTz+NH374gQ+pvLw8ZGRkQCAQ4MyZM9izZw+OHj2KadOmAQDef/99jB071q265OXlwWAw4J///Cf8/f0BAG+//TYefPBBvPzyyxCLxdBqtXjggQcwevRoAMCECRP451dVVeFPf/oTxo8fDwBO1UMikUCpVEIgEECtVndZf/fdd+OPf7QfQL1ixQr+fkxMDJ599lls3ry5x9AKDAzE22+/DZFIhPHjxyMtLQ35+fkUWh5HoeWQr1iEsr+leu21XXH27FmsWrUKhYWFqK+vh81mA8AFwKRJk3DPPffg448/xh133IGKigoUFBTgf//3fwEA5eXl8PHxwdSpU/ntjRkzBoGBgW7V/fTp04iPj+cDCwCmT58Om82G8vJy3HnnnXjssceQmpqKX/ziF0hJScHcuXP58/Oys7Px+OOP48MPP0RKSgp+9atf8eHmrvYw7mjLli146623cP78eTQ3N8NisfR6ld+JEyfanY4THh6O0tLSPtWtN9Sn5QiFlkMCgQB+Eh+vLK6OpH7wwQfR0NCA9957D4WFhSgsLARwvdN53rx5+Oyzz2A2m5GXl4e4uDjExcX1+z5z1saNG1FQUIDbbrsNW7Zswbhx43D48GEAXF/SqVOnkJaWhr179+KWW27Btm3b+vR6HQMUAAoKCjBv3jzcf//92L59O0pKSvCXv/yl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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-03T07:22:59.172775Z", "iopub.status.busy": "2024-03-03T07:22:59.172172Z", "iopub.status.idle": "2024-03-03T07:24:33.452817Z", "shell.execute_reply": "2024-03-03T07:24:33.451754Z" }, "papermill": { "duration": 94.304329, "end_time": "2024-03-03T07:24:33.455239", "exception": false, "start_time": "2024-03-03T07:22:59.150910", "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-03T07:24:33.498790Z", "iopub.status.busy": "2024-03-03T07:24:33.498395Z", "iopub.status.idle": "2024-03-03T07:24:33.519717Z", "shell.execute_reply": "2024-03-03T07:24:33.518764Z" }, "papermill": { "duration": 0.045233, "end_time": "2024-03-03T07:24:33.521618", "exception": false, "start_time": "2024-03-03T07:24:33.476385", "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
tab_ddpm_concat0.0210140.0352950.001381.5304480.0532490.8990560.0660810.0000011.9069040.0298480.0689460.0371420.0593080.0070863.437351
\n", "
" ], "text/plain": [ " avg_g_cos_loss avg_g_mag_loss avg_loss grad_duration \\\n", "tab_ddpm_concat 0.021014 0.035295 0.00138 1.530448 \n", "\n", " grad_mae grad_mape grad_rmse mean_pred_loss \\\n", "tab_ddpm_concat 0.053249 0.899056 0.066081 0.000001 \n", "\n", " pred_duration pred_mae pred_mape pred_rmse pred_std \\\n", "tab_ddpm_concat 1.906904 0.029848 0.068946 0.037142 0.059308 \n", "\n", " std_loss total_duration \n", "tab_ddpm_concat 0.007086 3.437351 " ] }, "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-03T07:24:33.562297Z", "iopub.status.busy": "2024-03-03T07:24:33.561794Z", "iopub.status.idle": "2024-03-03T07:24:33.923484Z", "shell.execute_reply": "2024-03-03T07:24:33.922460Z" }, "papermill": { "duration": 0.384487, "end_time": "2024-03-03T07:24:33.925661", "exception": false, "start_time": "2024-03-03T07:24:33.541174", "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-03T07:24:33.968371Z", "iopub.status.busy": "2024-03-03T07:24:33.968023Z", "iopub.status.idle": "2024-03-03T07:26:10.283377Z", "shell.execute_reply": "2024-03-03T07:26:10.282542Z" }, "papermill": { "duration": 96.339632, "end_time": "2024-03-03T07:26:10.285845", "exception": false, "start_time": "2024-03-03T07:24:33.946213", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Caching in ../../../../contraceptive/_cache_test/tab_ddpm_concat/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-03T07:26:10.329880Z", "iopub.status.busy": "2024-03-03T07:26:10.329107Z", "iopub.status.idle": "2024-03-03T07:26:10.347050Z", "shell.execute_reply": "2024-03-03T07:26:10.346351Z" }, "papermill": { "duration": 0.04205, "end_time": "2024-03-03T07:26:10.349032", "exception": false, "start_time": "2024-03-03T07:26:10.306982", "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-03T07:26:10.390598Z", "iopub.status.busy": "2024-03-03T07:26:10.390251Z", "iopub.status.idle": "2024-03-03T07:26:10.395376Z", "shell.execute_reply": "2024-03-03T07:26:10.394444Z" }, "papermill": { "duration": 0.028231, "end_time": "2024-03-03T07:26:10.397658", "exception": false, "start_time": "2024-03-03T07:26:10.369427", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'tab_ddpm_concat': 0.42752763501982344}\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-03T07:26:10.442119Z", "iopub.status.busy": "2024-03-03T07:26:10.441234Z", "iopub.status.idle": "2024-03-03T07:26:10.820216Z", "shell.execute_reply": "2024-03-03T07:26:10.819351Z" }, "papermill": { "duration": 0.403394, "end_time": "2024-03-03T07:26:10.822165", "exception": false, "start_time": "2024-03-03T07:26:10.418771", "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-03T07:26:10.864904Z", "iopub.status.busy": "2024-03-03T07:26:10.864289Z", "iopub.status.idle": "2024-03-03T07:26:11.171093Z", "shell.execute_reply": "2024-03-03T07:26:11.170171Z" }, "papermill": { "duration": 0.330431, "end_time": "2024-03-03T07:26:11.173164", "exception": false, "start_time": "2024-03-03T07:26:10.842733", "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-03T07:26:11.219042Z", "iopub.status.busy": "2024-03-03T07:26:11.218703Z", "iopub.status.idle": "2024-03-03T07:26:11.438988Z", "shell.execute_reply": "2024-03-03T07:26:11.438043Z" }, "papermill": { "duration": 0.245959, "end_time": "2024-03-03T07:26:11.440967", "exception": false, "start_time": "2024-03-03T07:26:11.195008", "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-03T07:26:11.486182Z", "iopub.status.busy": "2024-03-03T07:26:11.485846Z", "iopub.status.idle": "2024-03-03T07:26:11.789269Z", "shell.execute_reply": "2024-03-03T07:26:11.788356Z" }, "papermill": { "duration": 0.328419, "end_time": "2024-03-03T07:26:11.791409", "exception": false, "start_time": "2024-03-03T07:26:11.462990", "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.022718, "end_time": "2024-03-03T07:26:11.837070", "exception": false, "start_time": "2024-03-03T07:26:11.814352", "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.0" }, "papermill": { "default_parameters": {}, "duration": 3923.024134, "end_time": "2024-03-03T07:26:14.584105", "environment_variables": {}, "exception": null, "input_path": "eval/contraceptive/tab_ddpm_concat/1/mlu-eval.ipynb", "output_path": "eval/contraceptive/tab_ddpm_concat/1/mlu-eval.ipynb", "parameters": { "allow_same_prediction": true, "dataset": "contraceptive", "dataset_name": "contraceptive", "debug": false, "folder": "eval", "gp": true, "gp_multiply": false, "log_wandb": false, "param_index": 3, "path": "eval/contraceptive/tab_ddpm_concat/1", "path_prefix": "../../../../", "random_seed": 1, "single_model": "tab_ddpm_concat" }, "start_time": "2024-03-03T06:20:51.559971", "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 }