{ "cells": [ { "cell_type": "markdown", "id": "69ba860c-ffee-4024-af74-3eb544ba4365", "metadata": {}, "source": [ "# Train a model on CATLAS binary accessibility data" ] }, { "cell_type": "markdown", "id": "b2a97767-6436-42f5-aac7-ca07e22c932a", "metadata": {}, "source": [ "## Set up wandb" ] }, { "cell_type": "code", "execution_count": 1, "id": "ca38366e-3365-476e-adac-a64c4986636b", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/opt/conda/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", " from .autonotebook import tqdm as notebook_tqdm\n", "\u001b[34m\u001b[1mwandb\u001b[0m: Using wandb-core as the SDK backend. Please refer to https://wandb.me/wandb-core for more information.\n", "\u001b[34m\u001b[1mwandb\u001b[0m: Currently logged in as: \u001b[33mavantikalal\u001b[0m (\u001b[33mgrelu\u001b[0m) to \u001b[32mhttps://api.wandb.ai\u001b[0m. Use \u001b[1m`wandb login --relogin`\u001b[0m to force relogin\n" ] } ], "source": [ "import wandb\n", "\n", "import anndata\n", "import os\n", "import pandas as pd\n", "import numpy as np\n", "%matplotlib inline\n", "\n", "from grelu.data.dataset import AnnDataSeqDataset\n", "from grelu.lightning import LightningModel\n", "from grelu.visualize import plot_distribution, plot_calibration_curve\n", "\n", "os.environ[\"CUDA_VISIBLE_DEVICES\"]=\"1\"\n", "wandb.login(host=\"https://api.wandb.ai\")\n", "project_name=\"human-atac-catlas\"" ] }, { "cell_type": "code", "execution_count": 2, "id": "579a4364-62d6-4528-a692-576e7ae29489", "metadata": {}, "outputs": [ { "data": { "text/html": [ "Tracking run with wandb version 0.19.7" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "Run data is saved locally in /code/github/gReLU-applications/catlas/wandb/run-20250306_000617-xx0mt24e" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "Syncing run train to Weights & Biases (docs)
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ " View project at https://wandb.ai/grelu/human-atac-catlas" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ " View run at https://wandb.ai/grelu/human-atac-catlas/runs/xx0mt24e" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "run = wandb.init(\n", " entity='grelu', project=project_name, job_type='training', name='train',\n", " settings=wandb.Settings(\n", " program_relpath='2_train.ipynb',\n", " program_abspath='/code/github/gReLU-applications/catlas/2_train.ipynb')\n", ")" ] }, { "cell_type": "markdown", "id": "30afd8a2-6808-42b0-9dff-ff5906f786d3", "metadata": {}, "source": [ "## Load preprocessed data" ] }, { "cell_type": "code", "execution_count": 3, "id": "0b1bc498-d014-4434-8fc4-ff3c9b48336c", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: Downloading large artifact dataset:latest, 179.17MB. 1 files... \n", "\u001b[34m\u001b[1mwandb\u001b[0m: 1 of 1 files downloaded. \n", "Done. 0:0:0.3\n", "/opt/conda/lib/python3.11/site-packages/anndata/_core/aligned_df.py:68: ImplicitModificationWarning: Transforming to str index.\n" ] } ], "source": [ "artifact = run.use_artifact('dataset:latest')\n", "dir = artifact.download()\n", "ad = anndata.read_h5ad(os.path.join(dir, \"data.h5ad\"))" ] }, { "cell_type": "markdown", "id": "b98e21c0-3e79-48f7-b9d6-965949b6c8ca", "metadata": {}, "source": [ "## Make datasets" ] }, { "cell_type": "code", "execution_count": 4, "id": "1ac787c9-aa63-43c5-bcc6-579081ff43ad", "metadata": {}, "outputs": [], "source": [ "train_dataset = AnnDataSeqDataset(\n", " ad[:, ad.var.split=='train'].copy(),\n", " genome='hg38',\n", " rc=True, # reverse complement\n", " max_seq_shift=2, # Shift the sequence\n", " augment_mode=\"random\", # Randomly select which augmentations to apply\n", ")\n", "\n", "val_dataset = AnnDataSeqDataset(\n", " ad[:, ad.var.split=='valid'].copy(), genome='hg38',\n", ")" ] }, { "cell_type": "markdown", "id": "c227d5e4-f5ee-46f7-a332-d0636a1ed11b", "metadata": {}, "source": [ "## Build the model" ] }, { "cell_type": "code", "execution_count": 5, "id": "fff4e937-28cb-4fa9-be6a-556219f61df0", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m Calling wandb.login() after wandb.init() has no effect.\n", "\u001b[34m\u001b[1mwandb\u001b[0m: Downloading large artifact human_state_dict:latest, 939.29MB. 1 files... \n", "\u001b[34m\u001b[1mwandb\u001b[0m: 1 of 1 files downloaded. \n", "Done. 0:0:0.7\n", "/opt/conda/lib/python3.11/site-packages/grelu/model/models.py:771: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n" ] } ], "source": [ "model_params = {\n", " 'model_type':'EnformerPretrainedModel', # Type of model\n", " 'n_tasks': ad.shape[0], # Number of cell types to predict\n", " 'crop_len':0, # No cropping of the model output\n", " 'n_transformers': 1, # Number of transformer layers; the published Enformer model has 11\n", "}\n", "\n", "train_params = {\n", " 'task':'binary', # binary classification\n", " 'lr':1e-4, # learning rate\n", " 'logger': 'wandb', # Logs will be written to wandb\n", " 'batch_size': 3072,\n", " 'num_workers': 32,\n", " 'devices': 0, # GPU index\n", " 'save_dir': project_name,\n", " 'optimizer': 'adam',\n", " 'max_epochs': 10,\n", " 'checkpoint': True, # Save checkpoints\n", "}\n", "\n", "model = LightningModel(model_params=model_params, train_params=train_params)" ] }, { "cell_type": "markdown", "id": "7928936f-d5b6-42de-a402-3cc853aad15d", "metadata": {}, "source": [ "## Train the model" ] }, { "cell_type": "code", "execution_count": 6, "id": "4f2bb0ab-8c6f-4b2e-ae21-a8fd06792d33", "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "GPU available: True (cuda), used: True\n", "TPU available: False, using: 0 TPU cores\n", "HPU available: False, using: 0 HPUs\n", "/opt/conda/lib/python3.11/site-packages/pytorch_lightning/loggers/wandb.py:397: UserWarning: There is a wandb run already in progress and newly created instances of `WandbLogger` will reuse this run. If this is not desired, call `wandb.finish()` before instantiating `WandbLogger`.\n", "LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [1]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation DataLoader 0: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 24/24 [00:08<00:00, 2.84it/s]\n" ] }, { "data": { "text/html": [ "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
       "┃      Validate metric             DataLoader 0        ┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
       "│       val_accuracy            0.4883847236633301     │\n",
       "│         val_auroc             0.5049463510513306     │\n",
       "│        val_avgprec            0.11118414252996445    │\n",
       "│        val_best_f1            0.17346523702144623    │\n",
       "│         val_loss              0.6949121952056885     │\n",
       "└───────────────────────────┴───────────────────────────┘\n",
       "
\n" ], "text/plain": [ "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n", "┃\u001b[1m \u001b[0m\u001b[1m Validate metric \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m DataLoader 0 \u001b[0m\u001b[1m \u001b[0m┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n", "│\u001b[36m \u001b[0m\u001b[36m val_accuracy \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.4883847236633301 \u001b[0m\u001b[35m \u001b[0m│\n", "│\u001b[36m \u001b[0m\u001b[36m val_auroc \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.5049463510513306 \u001b[0m\u001b[35m \u001b[0m│\n", "│\u001b[36m \u001b[0m\u001b[36m val_avgprec \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.11118414252996445 \u001b[0m\u001b[35m \u001b[0m│\n", "│\u001b[36m \u001b[0m\u001b[36m val_best_f1 \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.17346523702144623 \u001b[0m\u001b[35m \u001b[0m│\n", "│\u001b[36m \u001b[0m\u001b[36m val_loss \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.6949121952056885 \u001b[0m\u001b[35m \u001b[0m│\n", "└───────────────────────────┴───────────────────────────┘\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [1]\n", "\n", " | Name | Type | Params | Mode \n", "-----------------------------------------------------------------\n", "0 | model | EnformerPretrainedModel | 72.1 M | train\n", "1 | loss | BCEWithLogitsLoss | 0 | train\n", "2 | val_metrics | MetricCollection | 0 | train\n", "3 | test_metrics | MetricCollection | 0 | train\n", "4 | transform | Identity | 0 | train\n", "-----------------------------------------------------------------\n", "72.1 M Trainable params\n", "0 Non-trainable params\n", "72.1 M Total params\n", "288.279 Total estimated model params size (MB)\n", "240 Modules in train mode\n", "0 Modules in eval mode\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 0: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 319/319 [03:07<00:00, 1.70it/s, v_num=t24e, train_loss_step=0.137]\n", "Validation: | | 0/? [00:00┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n", "┃ Test metric DataLoader 0 ┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n", "│ test_accuracy 0.9416285753250122 │\n", "│ test_auroc 0.9053414463996887 │\n", "│ test_avgprec 0.6097266674041748 │\n", "│ test_best_f1 0.5716205835342407 │\n", "│ test_loss 0.16409701108932495 │\n", "└───────────────────────────┴───────────────────────────┘\n", "\n" ], "text/plain": [ "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n", "┃\u001b[1m \u001b[0m\u001b[1m Test metric \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m DataLoader 0 \u001b[0m\u001b[1m \u001b[0m┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n", "│\u001b[36m \u001b[0m\u001b[36m test_accuracy \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.9416285753250122 \u001b[0m\u001b[35m \u001b[0m│\n", "│\u001b[36m \u001b[0m\u001b[36m test_auroc \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.9053414463996887 \u001b[0m\u001b[35m \u001b[0m│\n", "│\u001b[36m \u001b[0m\u001b[36m test_avgprec \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.6097266674041748 \u001b[0m\u001b[35m \u001b[0m│\n", "│\u001b[36m \u001b[0m\u001b[36m test_best_f1 \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.5716205835342407 \u001b[0m\u001b[35m \u001b[0m│\n", "│\u001b[36m \u001b[0m\u001b[36m test_loss \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.16409701108932495 \u001b[0m\u001b[35m \u001b[0m│\n", "└───────────────────────────┴───────────────────────────┘\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 13.7 s, sys: 1.66 s, total: 15.4 s\n", "Wall time: 15.7 s\n" ] } ], "source": [ "%%time\n", "test_metrics = model.test_on_dataset(\n", " test_dataset,\n", " batch_size=256,\n", " devices=0,\n", " num_workers=8,\n", " write_path = 'model.ckpt' # Update the checkpoint with the results\n", ")" ] }, { "cell_type": "code", "execution_count": 12, "id": "974c8e9c-0c90-4cd7-8b90-2206319b7d1a", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/opt/conda/lib/python3.11/site-packages/plotnine/stats/stat_bin.py:109: PlotnineWarning: 'stat_bin()' using 'bins = 19'. Pick better value with 'binwidth'.\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAB7CAAAewgFu0HU+AAA5I0lEQVR4nO3de5RX5X0v/vd3BhgE5FZA1EEEo7ZG8Ra8RAsoWo+ooSFq10GipjUnxibxkiY5R41NArrSnsYmOboObbISL0gbJRqiQZEa0B41GrwEjcYLFwFFAQdRwBm5fH9/+JspBAaB77CHmXm91pq1vnyf59n7s5O1Hd48+9lPqVwulwMAAFCAqtYuAAAA6DgEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOA7Gaf+MQnUltbm0984hOtXQoAALS6Tq1dQHv35ptv5vXXX2/tMgAAYI9gBgQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhOrV2AQBA2zB+/PjWLmGPMXXq1NYuAdosMyAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACF6dTaBewOkyZNypNPPpkkOfXUU3PFFVc02/fxxx/P/fffn/nz56ehoSH9+vXL8OHDc95556Vnz54FVQwAAB1Duwsgjz76aFP4+CiTJ0/OjBkzkiRVVVWpqanJG2+8kenTp+fhhx/O9ddfn0GDBu3OcgEAoENpV49grV27Nj/60Y/SvXv31NbWbrfvzJkzM2PGjJRKpUyYMCE/+9nP8rOf/Sw/+MEPMnjw4LzzzjuZNGlS1q9fX1D1AADQ/rWrAHLLLbekrq4uEyZMSO/evZvtt379+kydOjVJMmbMmJx//vmpqalJkgwZMiTf/OY3U1NTk2XLlmXWrFlFlA4AAB1CuwkgL7zwQh588MEcfPDBOfPMM7fbd968eVm1alVKpVLGjRu3VfuAAQMyYsSIJMmcOXN2R7kAANAhtYsAsn79+tx0000plUq57LLLUlW1/cuaN29ekmTQoEHp37//NvscffTRSZKXXnop9fX1LVswAAB0UO0igNx1111ZunRpzjrrrBx00EEf2X/JkiVJksGDBzfbp7GtXC5n6dKlLVMoAAB0cG0+gCxZsiTTpk1L3759c8EFF+zQmLq6uiRJ3759m+2zeduqVasqKxIAAEjSxl/DWy6Xc/PNN2fDhg255JJL0q1btx0a1/hIVePC823ZvG3dunXbPd6UKVOaFrX/sZUrV+5QTQAA0BG06QAyc+bMvPDCCzn22GNz8sknt1oda9euzfLly7fZtmnTpoKrAQCAPVebDSB1dXW59dZb06VLl3zhC1/YqbFdu3ZNkjQ0NDTbZ/O2j5pZ6d69ewYMGLDNto9aEA8AAB1Jmw0gt912W9auXZvzzjsvvXr1yvvvv79Fe+PMw8aNG5vaampqUlVVlb59+2bBggVNa0G2ZfO2Pn36bLeWCRMmZMKECdtsq62tzeuvv75D1wQAAO1dmw0gjY883XXXXbnrrrua7ffwww/n4YcfTpJ8//vfz9ChQzNo0KDMnTs3ixcvbnZcY1upVPrIXdUBAIAd0yGfDxo2bFiSD0NGc4vEn3nmmSTJoYce2vTIFgAAUJk2OwNyww03bLf96quvzvPPP59TTz01V1xxxRZtw4YNS58+fbJq1arcc889+fznP79F+4oVK/LII48kSUaNGtWSZQMAQIfWIWdAOnfunPHjxydJ7rvvvkybNq1p0fnChQszceLE1NfXZ999983pp5/emqUCAEC70mZnQCp1xhlnZOHChZkxY0Zuu+223HHHHampqWna86N379659tpr07lz51auFAAA2o8OG0CS5NJLL82RRx6ZGTNmZMGCBU2zHscdd1zOPffc9OrVq7VLBACAdqXdBpCPWiPS6MQTT8yJJ564m6sBAACSDroGBAAAaB0CCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwnVq7gEq9+uqrefLJJ/PKK6/kjTfeyLvvvpuGhobsvffeGTp0aEaMGJGRI0emqqr5rPX444/n/vvvz/z589PQ0JB+/fpl+PDhOe+889KzZ88CrwYAANq3Nh9AHnzwwTzwwANNf+7atWs6deqUVatW5amnnspTTz2VWbNm5dprr023bt22Gj958uTMmDEjSVJVVZWampq88cYbmT59eh5++OFcf/31GTRoUGHXAwAA7VmbDyCHHnpo9t9//xx22GHZf//9m0LGO++8k1mzZuWOO+7I888/n5/85Cf50pe+tMXYmTNnZsaMGSmVSrngggsyduzY1NTUZOHChbnxxhvz2muvZdKkSbnpppvSuXPn1rg8AABoV9r8GpDRo0dn7NixOfjgg7eY4ejdu3fOO++8nHvuuUmSOXPmZMOGDU3t69evz9SpU5MkY8aMyfnnn5+ampokyZAhQ/LNb34zNTU1WbZsWWbNmlXgFQEAQPvV5gPIRzn44IOTJB988EHee++9pu/nzZuXVatWpVQqZdy4cVuNGzBgQEaMGJHkw/ACAABUrt0HkD/84Q9JPlwb0rt376bv582blyQZNGhQ+vfvv82xRx99dJLkpZdeSn19/e4tFAAAOoB2GUAaGhqydOnS3H777bnnnnuSJGeddVZKpVJTnyVLliRJBg8e3OxxGtvK5XKWLl26GysGAICOoc0vQm+0Zs2ajB8/fqvvO3XqlLPPPjsTJkzY4vu6urokSd++fZs95uZtq1atarbflClTmtaT/LGVK1dut24AAOhI2k0AqaqqanrEat26dfnggw9SKpVy9tln59Of/nSqq6u36N/4SFXjwvNt2bxt3bp1zfZbu3Ztli9fvs22TZs27eglAABAu9duAki3bt1y2223Jfnwkanly5fn3nvvzb333puHHnoo11xzTQ477LDdcu7u3btnwIAB22zb3gaIAADQ0bSbALK5UqmUffbZJ5dcckkGDBiQH//4x/nf//t/Z/LkyU2zGl27dk3y4XqR5mzetq1NDBtNmDBhq0e8GtXW1ub111/flcsAAIB2p93/8/x/+2//LZ07d87bb7+dp556qun7xvUdjWtBtmXztj59+uy+IgEAoINo9wGkS5cu2XvvvZMky5Yta/p+0KBBSZLFixc3O7axrVQqpba2djdWCQAAHUO7DyDvv/9+3n333STJXnvt1fT9sGHDknwYMpp7U9UzzzyTJDn00EObHtkCAAB2XZsOIBs3bky5XN5un+nTp2fDhg1Jko9//ONN3w8bNix9+vRJuVxu2itkcytWrMgjjzySJBk1alTLFQ0AAB1Ymw4gK1euzJVXXpkHH3wwK1asaPq+XC5nyZIlmTx5cv7t3/4tSXLiiSduselg586dm/YNue+++zJt2rSmRecLFy7MxIkTU19fn3333Tenn356gVcFAADtV5t/C9aCBQty0003JflwvUfXrl1TX1+fDz74oKnP8OHDc+WVV2419owzzsjChQszY8aM3HbbbbnjjjtSU1PTtOdH7969c+2116Zz587FXAwAALRzbTqA9O3bN1//+tczb968vPzyy1m1alXefffddO7cOfvvv38OOeSQjBw5Msccc0yzx7j00ktz5JFHZsaMGVmwYEHTrMdxxx2Xc889N7169SrwigAAoH1r0wGkc+fOOfnkk3PyySdXdJwTTzwxJ554YgtVBQAANKdNrwEBAADaFgEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwnVq7AABg+8aPH9/aJQC0GDMgAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCVLQR4SOPPJIkOfzww9O3b98dHvfOO+9k3rx5SZIRI0ZUUgIAANCGVBRARo0alVKplHvuuSef+tSndnjcE088kTPPPDNVVVXZsGFDJSUAAABtSEUBpFLlcrk1Tw8AsEvGjx/f2iUkSaZOndraJcBOa5U1II3Bo1QqtcbpAQCAVtIqAeSdd95JknTr1q01Tg8AALSSVgkgd999d5LkgAMOaI3TAwAArWSH14BMnz4906dP32bbD3/4w/ziF7/Y7vhyuZy1a9fm2Wefzfz581MqlbwBCwAAOpgdDiDPPvtsbrnllq3WbZTL5cyePXunTloul9O9e/dcddVVOzUOAABo23b6Eaxyudz0s63vPuqnZ8+eGTduXB577LF87GMfa9GLAQAA9mw7PANyxRVX5OKLL276c7lcztChQ1MqlfIv//IvOf3007c7vqqqKj169EifPn12uVgAAKBt2+EA0qtXr/Tq1Wur78vlcgYMGJDBgwe3aGEAAED7U9FGhAsXLkySDBgwoEWKAQAA2reKAohZDwAAYGe0yj4gAABAx1TRDMgfW7ZsWZ5//vmsWrUq9fX1OzTmwgsvbMkSAACAPViLBJB///d/z3e/+90899xzOzWuVCoJIAAA0IFUHEC+8pWv5Oabb06SLfYGAQAA+GMVBZBf/vKXuemmm5r+fPzxx+f0009PbW1tampqKi4OAABoXyoKIP/yL/+SJKmurs4tt9ySCy64oEWKAgAA2qeK3oI1d+7clEqlTJgwQfgAAAA+UkUBZPXq1UmS0aNHt0gxAABA+1ZRANlnn32SJJ07d26RYgAAgPatogBy/PHHJ0lefPHFFikGAABo3yoKIF/84hdTLpczZcqUrF+/vqVqAgAA2qmKAsgpp5ySL33pS1mwYEEuvvhiIQQAANiuil7Du3jx4nz1q19NXV1dpk6dmqeffjqXXXZZTjzxxPTr1y9VVR+dbw444IBKSgAAANqQigLIgQcemFKplCQplUp5+eWXc8UVV+zw+FKplA0bNlRSAgAA0IZUFECSpFwut0QdAABAB1BRALnoootaqg4AAKADqCiA/PSnP22pOgAAgA6gordgAQAA7AwBBAAAKIwAAgAAFEYAAQAAClPRIvShQ4dWdPJSqZT58+dXdAwAAKDtqCiALFq0KKVS6SP3AmncrPCP+zV+DwAAdAwVBZADDjjgI0PExo0bU1dXl3Xr1iX5MHTst99+6dSp4j0QAQCANqbiGZAd9eyzz+Z73/te7rjjjhx88MG5++6707t370pODwAAtDGFLUI/6qijcvvtt+fGG2/MnDlzMm7cuI98dAsAAGhfCn8L1hVXXJETTjghDz/8cG699daiTw8AALSiVnkN73nnnZdyuSyAAABAB9MqAWTQoEFJkhdeeKE1Tg8AALSSVgkgq1atSpK8++67rXF6AACglbRKALnrrruSJPvss09rnB4AAGglhQaQNWvW5Mtf/nL+4z/+I6VSKSNHjizy9AAAQCuraB+Qv/7rv96hfh988EFef/31PPnkk6mvr0+SVFdX5+/+7u8qOT0AANDGVBRAbrnllo/cCX1zjft+dO3aNT/60Y9yxBFHVHJ6AACgjakogCTZqc0Ehw4dmjPPPDOXX355Pvaxj1V6agAAoI2pKIAsXLhwh/rV1NSkd+/e6dq1ayWn26YVK1bk8ccfz7x587Jo0aLU1dWlU6dO6d+/f4466qicc845GThw4HaP8fjjj+f+++/P/Pnz09DQkH79+mX48OE577zz0rNnzxavGQAAOqpSeWemMPYwK1asyCWXXLLFLEy3bt3ywQcfZMOGDUmSLl265IorrsjJJ5+8zWNMnjw5M2bMSJJUVVWlpqYm77//fpKkd+/euf7665v2LdkVtbW1ef3117P//vtn6dKlu3wcADqu8ePHt3YJ7KGmTp3a2iXATqv4EazWtGnTpiTJMccck1NPPTVHHXVUevbsmY0bN+bFF1/Mv/7rv2bRokW58cYbU1tbmwMPPHCL8TNnzsyMGTNSKpVywQUXZOzYsampqcnChQtz44035rXXXsukSZNy0003pXPnzq1whQAA0L60yj4gLaVHjx7553/+53zrW9/KiBEjmh6Xqq6uzuGHH55vf/vb6dWrVzZs2JDp06dvMXb9+vVN/2owZsyYnH/++ampqUmSDBkyJN/85jdTU1OTZcuWZdasWcVeGAAAtFMtOgOyYcOGPProo/nNb36TZcuW5b333svee++d/fbbL8cff3xOOumkdOrUcqfs3r17hg4d2mx7nz59cuyxx+bXv/515s+fv0XbvHnzsmrVqpRKpYwbN26rsQMGDMiIESMya9aszJkzJ2PGjGmxugEAoKNqkTRQLpfzve99LzfeeGPeeuutZvsNHDgwX/3qV3PllVfu1Ot7K9E4K7Jx48Ytvp83b16SZNCgQenfv/82xx599NGZNWtWXnrppdTX1++WRfQAANCRVPwI1vvvv5/TTjst3/jGN/LWW2+lXC43+7Ns2bJ87Wtfy+mnn960IeHu9vzzzydJBg8evMX3S5Ys2eb3m2tsK5fLFpADAEALqHgG5LOf/Wxmz56dJCmVSjn11FNzxhln5JBDDkmPHj2yZs2avPzyy5k5c2Zmz56dcrmc2bNn57Of/Wzuuuuuii9ge37zm9/k1VdfTZKMHj16i7a6urokSd++fZsdv3nbqlWrmu03ZcqUZt9CsXLlyh2uFwAA2ruKAsivf/3r3H333SmVSjnggAPy7//+7zn++OO32fdrX/tannzyyfz3//7fs3Dhwtx9992ZPXt2TjnllEpKaNaKFSty8803J0mOP/74HHvssVu0N87ANC4835bN29atW9dsv7Vr12b58uXbbGt8UxcAAFBhALntttuSfPg2qjlz5mz3caYkOe644/LQQw/lyCOPzJo1a3LrrbfulgCyZs2aTJw4MatXr87AgQPzla98pcXPsbnu3btnwIAB22yrqmrTLxoDAIAWVVEAefTRR1MqlfK5z33uI8NHowMPPDCf+9zn8sMf/jD/7//9v0pOv03vv/9+vv3tb2fRokXp27dvvvOd72Tvvffeql/jgvKGhoZmj7V5W7du3ZrtN2HChEyYMGGbbY0bEQIAABUuQl+2bFmSD2c2dkZj/+29MWtXNDQ05Dvf+U5eeuml9OrVKxMnTszAgQO32bdxfUfjWpBt2bytT58+LVorAAB0RBUFkMZX6e7sOodyuVzJabepoaEhEydOzO9///v06NEj3/nOdzJo0KBm+ze2LV68uNk+jW2lUim1tbUtWzAAAHRAFQWQxtmF3/72tzs17sknn9xifKXWr1+fG264IfPmzUu3bt3yrW99K0OGDNnumGHDhiX5MGQ096aqZ555Jkly6KGH2gMEAABaQEUB5OSTT065XM4tt9yy3ZmEzb322mv56U9/mlKplJNPPrmS0yf5cPf17373u3nmmWfStWvXXHfddTnkkEM+ctywYcPSp0+flMvl3HPPPVu1r1ixIo888kiSZNSoURXXCQAAVBhALrzwwiQfvnXqlFNOydy5c7fbf+7cuRk9enTWrFmTJLnooosqOX02btyYf/qnf8pvf/vbdOnSJddee20OO+ywHRrbuXPnjB8/Pkly3333Zdq0aU2LzhcuXJiJEyemvr4+++67b04//fSK6gQAAD5UKle4IOMzn/lM7rnnnpRKpZRKpYwaNSp/8Rd/kUMOOSTdu3fP2rVr88orr+TBBx9s2ogwST796U9n2rRpFRX//PPP5+qrr07yYaDo3r37dvs3vjZ4c5MnT86MGTOSJNXV1ampqWna86N37965/vrrt7uW5KM0vgVr//33t5s6ALuk8R/M4I81txEy7Mkq3gl9ypQpOfPMM/PII4807XLeuDP6H2sMHyNHjsztt99e6am3WMy+fv36vPPOOzt9jEsvvTRHHnlkZsyYkQULFjTNehx33HE599xz06tXr4rrBAAAPlTxDEjy4Vuwvve97+Wf//mf8+abbzbbb999981VV12VK6+8ssNs0GcGBIBKmQGhOWZAaIsqngFJPtzt+2tf+1quvPLKPPbYY3niiSeybNmyvPfee9l7772z77775vjjj88nP/nJdOrUIqcEAADaoBZNA506dcqIESMyYsSIljwsAADQTnSM56AAAIA9QkUBZNmyZTn22GNz7LHH5v7779+hMQ888ECOOeaYDB8+PG+//XYlpwcAANqYigLI1KlT88wzz2ThwoUZPXr0Do059dRTs3jx4jz99NMWTgEAQAdTUQD59a9/nVKplLPOOitdunTZoTFdunTJ2WefnXK5nFmzZlVyegAAoI2pKIA899xzSZLjjjtup8Z94hOf2GI8AADQMVQUQJYvX57kw/09dsY+++yTJHnrrbcqOT0AANDGVBRAGvf0aGho2KlxH3zwQZItdzIHAADav4oCSP/+/ZMkL7300k6N+8Mf/pAk6devXyWnBwAA2piKAsgxxxyTcrmcu+66a4dnMzZt2pS77rorpVIpw4YNq+T0AABAG1NRABkzZkyS5OWXX84NN9ywQ2NuuOGGvPzyy0mSc845p5LTAwAAbUxFAeSzn/1s9ttvvyTJddddl6985SvNbi749ttv58tf/nL+/u//PqVSKQMHDsznPve5Sk4PAAC0MZ0qGdylS5fcfvvtOeOMM7Jx48bcfPPN+fGPf5xPfvKTOeyww9KjR4+sWbMmL7zwQh577LE0NDSkXC6nc+fOue2221JTU9NS1wEAALQBFQWQJDnllFNy55135qKLLsp7772X+vr6zJ49O7Nnz96iX+MakZ49e+bWW2/d4Z3TAQCA9qOiR7Aa/eVf/mWee+65fOELX0jPnj1TLpe3+unVq1cuu+yyPPfccxk7dmxLnBYAAGhjKp4BaXTAAQfk//7f/5ubb7458+bNy9KlS/Puu++mZ8+eqa2tzbBhw1JV1SJ5BwAAaKNaLIA0qqqqylFHHZWjjjqqpQ8NAAC0caYkAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABSmU2sXAAB7qvHjx7d2CQDtjhkQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUJhOrV0AAAC7Zvz48a1dQqZOndraJdDGmAEBAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIXp1NoFAMC2jB8/vrVLAGA3MAMCAAAUps3PgKxZsybPP/98Xn311cyfPz+vvvpqVq9enSS5/vrrc8QRR3zkMR5//PHcf//9mT9/fhoaGtKvX78MHz485513Xnr27Lm7LwEAADqMNh9AnnjiifzgBz/Y5fGTJ0/OjBkzkiRVVVWpqanJG2+8kenTp+fhhx/O9ddfn0GDBrVUuQAA0KG1+QCSJH369MlBBx2Uj33sY9lvv/1y44037tC4mTNnZsaMGSmVSrngggsyduzY1NTUZOHChbnxxhvz2muvZdKkSbnpppvSuXPn3XwVAADQ/rX5ADJq1KiMHj266c9r1qzZoXHr16/P1KlTkyRjxozJ+eef39Q2ZMiQfPOb38zf/u3fZtmyZZk1a1bGjBnTsoUDAEAH1OYXoVdXV+/SuHnz5mXVqlUplUoZN27cVu0DBgzIiBEjkiRz5syppEQAAOD/1+YDyK6aN29ekmTQoEHp37//NvscffTRSZKXXnop9fX1hdUGAADtVYcNIEuWLEmSDB48uNk+jW3lcjlLly4tpC4AAGjPOmwAqaurS5L07du32T6bt61atWq31wQAAO1dm1+EvqsaH6mqqalpts/mbevWrWu235QpU5oWtP+xlStX7mKFAADQ/nTYANKS1q5dm+XLl2+zbdOmTQVXA1CZ8ePHt3YJALRjHTaAdO3aNUnS0NDQbJ/N27p169Zsv+7du2fAgAHbbKuq6rBPuQEAwFY6bADp27dvFixY0LQWZFs2b+vTp0+z/SZMmJAJEyZss622tjavv/76rhcKAADtSIf95/lBgwYlSRYvXtxsn8a2UqmU2traQuoCAID2rMMGkGHDhiX5MGQ0t1D8mWeeSZIceuihTY9sAQAAu65DB5A+ffqkXC7nnnvu2ap9xYoVeeSRR5Iko0aNKrg6AABon9pFAHn33XebftasWdP0/dq1a7do27BhQ1Nb586dm970ct9992XatGlNi84XLlyYiRMnpr6+Pvvuu29OP/30Yi8IAADaqVK5XC63dhGV+tSnPrVD/a6//vocccQRW3w3efLkzJgxI0lSXV2dmpqapj0/evfuneuvv75pvciuaFyEvv/++9tNHWgTvIYX2BnN7YUGzemwb8FqdOmll+bII4/MjBkzsmDBgqZZj+OOOy7nnntuevXq1dolAgBAu9EuAsgvf/nLisafeOKJOfHEE1uoGgAAoDntYg0IAADQNgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AA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uCP33ntvhgwZktNOO22XzvG9730v++yzTwtXDjRnd97XdXV1ufrqq1NXV5dDDz00EyZMyOGHH57q6uo0NDTktddey2OPPeYfF6CF7a77+uqrr95u+5133pkpU6akc+fOGTlyZKWX0WKsAYE2bObMmXnzzTdTU1OT6667LkOGDEmS1NTU5Pzzz8+ZZ56ZJJkyZUo2bNjQmqUCO2h33teTJ09OXV1dDjvssNxwww058sgjU11d3XT8Qw45JBdffHF69uzZshcFHVxr/b6ePXt2kmT48OHZe++9W+y4lRJAoA2bM2dOkmTEiBHp37//Vu2f+cxnUiqVUldXl+eee67g6oBdsbvu69deey2/+c1vkiSXXXZZOnfu3CL1Ah+tNX5fv/jii02PWu7qUxC7iwACbdT777+fV155JUlyzDHHbLNP//79U1tbmyT53e9+V1htwK7Znfd141+AhgwZkgMOOKCyQoEd1lq/rx966KEkSd++fXP00Ue3yDFbijUg0EYtXbo05XI5STJ48OBm+w0ePDhLlizJkiVLduk8//iP/5g33ngjDQ0N6dWrVw455JCcdtppGT58+C4dD2je7ryvX3zxxSTJ0KFDs3bt2tx55515/PHHs3LlynTv3j0HH3xwxowZk0984hOVXQSwhaJ+X2+uoaEhjz76aJJk1KhRTY9a7ikEEGij6urqmj737du32X6NbatWrdql87zyyivp1q1bqqqq8vbbb+fxxx/P448/npNOOilXXXWVxzigBe3O+3rZsmVNn6+88sq8+eabqa6uzl577ZV33303c+fOzdy5czN27Nj8zd/8zS5UD2xLUb+vN/eb3/wma9euTfLh63f3NAIItFH19fVNn7f3uszGtvfff3+Hj92lS5eMGTMmf/7nf54hQ4akW7duST58heDPf/7zzJ49O48++mi6d++eL33pS7t4BcAf2533deOrOGfPnp1SqZRLLrkkZ5xxRmpqalJXV5dbb701s2fPzvTp03PQQQdl1KhRu3YRwBZ2533dnP/4j/9IkhxyyCEZNGhQxcdradaAAFvp06dPLr300nz84x9vCh9JcsABB+TKK6/M2LFjkySzZs3K0qVLW6tMYCc0PgKyadOmfPrTn86nPvWppr/w9O3bN1dccUU+9rGPJUnuuuuuVqsTqMyKFSuaFrLvibMfiQACbVbXrl2bPjc0NDTbr7Ftr732arFzX3DBBenSpUvK5XJ++9vftthxoaPbnff15n0b/xFhc6VSqen7JUuWbPHYCLDriv59PXv27GzatCldunTJn//5n1d0rN1FAIE2avPnSLf3F4XGtj59+rTYubt27dr0Fp233nqrxY4LHd3uvK8bj7333nunV69e2+zT+BaeJFm5cuUOHxtoXtG/r3/9618nSY4//vj06NGjomPtLgIItFG1tbUplUpJPlyb0ZzGtj3xGVBgS7vzvt7ZV+821gFUpsjf1y+88ELeeOONJHve3h+bE0Cgjdprr71y8MEHJ0mefvrpbfZZuXJl0+v8jjzyyBY7d319fdN/KPfZZ58WOy50dLvzvj7qqKOSJO+9915Wr169zT6br+na1mZpwM4r8vd1494f/fr1a9Hf+y1NAIE2rPEtNY888khWrFixVfvdd9+dcrmcvn375ogjjtjh4zYuVm3Ov/3bv+WDDz5IqVSyHwi0sN11X5944olNz5b/4he/2Kq9XC5n+vTpSZKDDz44vXv33unagW3bXff15jbf++OUU05JVdWe+9f8Pbcy4COdccYZGThwYOrr6zNx4sQsXLgwyYf/EZo2bVp+9atfJUkmTJiQTp22fOv2JZdckk996lP5/ve/v9Vxr7766tx5551ZuHBhNm7c2PT94sWL84Mf/CD33HNPkuT000/f4plxoHK7677u0aNHzj///CQfBpB77723adHrqlWr8v3vfz+vvvpqSqVSxo8fvxuvEDqe3XVfb+6xxx7LunXrkuy5b79qZB8QaMM6d+6ca6+9Ntdcc00WLVqUyy+/PN26dUt9fX02bdqUJDn77LN3+jnQFStWZMqUKZkyZUqqq6vTrVu3fPDBB1u8vWPkyJH5whe+0KLXA+y++zpJxo0bl6VLl+ahhx7Kj370o/z0pz/NXnvtlTVr1qRcLqeqqip//dd/nWOPPbalLws6tN15XzdqXHz+Z3/2Z9lvv/1apO7dRQCBNu6AAw7I//k//yc///nP8+STT2blypXp3r17hg4dmrPOOisnnHDCTh/z4osvzu9+97u88sorWbVqVd57771UV1dn3333zZ/+6Z9m9OjRGTZs2G64GiDZPfd18uHC8ssvvzzDhw/PzJkzM3/+/Kxbty59+/bNxz/+8YwdO7bpWXWgZe2u+zppG3t/bK5U/qiHvQEAAFqINSAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAVWLRoUUqlUkqlUi6++OLWLgdgj9eptQsAgN3plltuyaJFi5Ik3/rWt1q1FgAEEADauVtuuSUPP/xwEgEEYE8ggABABQ488MCUy+XWLgOgzbAGBAAAKIwAAgAAFEYAAWC75syZ0/SWp8Y1FK+++mouv/zyHHrooenevXsGDhyYv/iLv8iDDz641fjHHnss48ePz0EHHZSuXbtmn332yXnnnZff/e53O3T++fPn53/+z/+Z4cOHp3///unSpUv22WefnHrqqfnBD36QdevWbXPcqFGjUiqVmtZ/JGm6js1//vjNVQceeGBKpVIOPPDAJElDQ0NuvvnmjBo1Kvvuu2+qq6ub2pKdfwvWc889l69+9as59thj079//3Tu3Dm9evXK0UcfnS9+8Yt54IEHsmnTph363wagTSoDwHbMnj27nKScpPz3f//35bvvvrvco0ePpu/++GfSpEnlcrlc3rRpU/m6665rtl/nzp3Lv/zlL5s978aNG8v/63/9r3KnTp2aPUaScm1tbXnu3LlbjR85cuR2xzX+XHTRRVuMGzx4cDlJefDgweWFCxeWDz/88K3GDB48uKn/woULmz3W5tatW1f+3Oc+Vy6VSh9Z0y9+8Yud+v8IoC2xCB2AHfb000/nH/7hH1JdXZ0vfelLOe6441JdXZ05c+bkpz/9aTZs2JBrr702J510Up5++ul85zvfyeDBg3PxxRfnT//0T7N27drceeedefDBB7N+/fpcfPHFeemll9KvX7+tznXRRRdlypQpSZK+ffvmr/7qr3LsscemZ8+eWb58eX71q1/l/vvvz9KlS3PKKadk7ty5OeSQQ5rGT5o0KStXrsy1116b3//+90mSe+65Z6vzHHDAAdu81oaGhowbNy7PP/98TjjhhJx77rmpra1NXV1d0/F2VENDQ04//fQ8+uijSZJOnTpl3LhxGTlyZPr3759169blD3/4Q2bNmpWnnnrKonagfWvtBATAnm3zGZAk5QMPPLC8YMGCrfrdeuutTX0OP/zwck1NTfmss84qr1u3bqu+F154YVPff/zHf9yqffLkyU3t55xzTnnVqlXbrO3nP/950wzJSSedtM0+m8+E7IjGGZDGn+9+97vb7b8jMyBf/vKXm/occsgh5T/84Q/NHm/evHnll156aYdqBWiLrAEBYKfccccdGTJkyFbfX3jhhTn44IOTJM8//3x69eqVqVOnZq+99tqq76RJk1IqlZIkDzzwwBZtDQ0N+fa3v50k+bM/+7NMmzYtvXv33mYt48aNy9e//vUkyaOPPponnnhil69rW8aOHZtvfOMbFR1jyZIlmTx5cpJk7733zv33359DDz202f5HHHHEFjM5AO2NAALADjvmmGPyyU9+stn2k046qenzhRdemJ49e26z36BBgzJ48OAkyQsvvLBF24MPPphly5YlSa644op06dJluzVddNFFTZ9nzpy5/QvYSV/5ylcqPsbPfvazrF+/Pkny+c9/PkOHDq34mABtmTUgAOywE044YbvtAwcObPp83HHHfWTfRYsWZdWqVVt8/8gjjzR9fu+99/KLX/xiu8dp/Mt9snWYqUR1dfV2w9aO+s///M+mz2PHjq34eABtnQACwA77kz/5k+2219TU7HTfhoaGLb5ftGhR0+e/+7u/26n66urqdqr/9vzJn/xJunbtWvFxli5d2vT5sMMOq/h4AG2dR7AA2GFVVTv+a2Nn+m7unXfe2aVxSfLBBx/s8tg/tq21K7vi3Xffbfrco0ePFjkmQFtmBgSAPcrmf0mfN29ejjjiiFaspnKbr4NZs2ZNi8yqALRlZkAA2KPU1tY2fV6yZEkrVtIyNr+ellyjAtBWCSAA7FFGjhzZ9Pn++++v+HibPwpWboUN/kaMGNH0efr06YWfH2BPI4AAsEc588wz079//yTJT37yk7z66qsVHW/zR7rWrl1b0bF2xV/91V81vUr4X//1X7NgwYLCawDYkwggAOxRunfvnm9961tJknXr1uWMM87IM888s90xr776aq666qosX758q7bNN018+umnW7TWHVFbW5svfvGLST5cA3LmmWfmpZdearb/73//+7zyyitFlQdQOIvQAdjjXHbZZXnqqafyk5/8JAsWLMixxx6bM844I6NHj05tbW1KpVLq6ury4osv5j//8z/z7LPPJkmuuuqqrY512mmn5Yc//GGS5G/+5m9y+eWXZ8iQIamurk6S7L///rt9ofs//MM/5Le//W0ee+yxvPzyyzniiCPy6U9/OiNHjsyAAQOybt26vPzyy3nooYfyxBNP5O67727aVR6gvRFAANgj/fjHP86hhx6ab3/721m3bl0eeOCBPPDAA83279ev3zbfMDVmzJiMHDkyDz/8cF599dV8+ctf3qL9oosuyi233NLS5W+hpqYms2bNyhe+8IVMmTIl69evz5133pk777xzm/139RXGAG2B/8IBsEcqlUr5+te/nkWLFuW73/1uTjvttOy3336pqalJTU1N9tlnn5x00km5/PLLc9999+WNN95Iv379tjpOdXV1Zs6cmX/6p3/KSSedlL59+6ZTp+L//a1bt265/fbbM3fu3Pzt3/5tPv7xj6dXr16prq5O7969c8wxx+Syyy7LQw89lHPOOafw+gCKUiq3xitBAACADskMCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACF+f8ACagoAMlHE6QAAAAASUVORK5CYII=" }, "metadata": { "image/png": { "height": 300, "width": 400 } }, "output_type": "display_data" } ], "source": [ "plot_distribution(test_metrics.test_avgprec, method='histogram')" ] }, { "cell_type": "code", "execution_count": 13, "id": "48f3b53b-164f-4427-aff9-1becc224432e", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "GPU available: True (cuda), used: True\n", "TPU available: False, using: 0 TPU cores\n", "HPU available: False, using: 0 HPUs\n", "LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [1]\n", "/opt/conda/lib/python3.11/site-packages/pytorch_lightning/trainer/connectors/data_connector.py:425: PossibleUserWarning: The 'predict_dataloader' does not have many workers which may be a bottleneck. Consider increasing the value of the `num_workers` argument` to `num_workers=255` in the `DataLoader` to improve performance.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Predicting DataLoader 0: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 71/71 [00:04<00:00, 14.21it/s]\n" ] } ], "source": [ "probs = model.predict_on_dataset(test_dataset, devices=0, batch_size=1024)" ] }, { "cell_type": "code", "execution_count": 14, "id": "83f05ff6-c558-4c64-9d09-ec56c63a0fe3", "metadata": {}, "outputs": [ { "data": { "image/png": "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jRYtWsRKj1JsyJ8/P3PnzqVt27YEBgbi7+/PBx98wMSJE2nWrBmFChUiVapU3L17l2PHjvHXX39x/fr1l3qgQiRLloyPP/6YoUOHAmYvSMmSJXFzc6NMmTIYhsHZs2dZsWIF//77L05OTnz88ceMHTs2Lr9sChcuTJUqVazDxJ6f/xKZ3o8Q6dKlY8WKFdStW5f79+9z79492rZty8iRI3njjTcoXrw4adOmxdfXFy8vL44fP86+ffv4999/gZd78kSSLENEJIGZNm2akTlzZgOI0oeDg4PRvXt34/r162Het1u3bpG6T4ECBYxz584ZnTt3th7r3LlzuPV+/vnn1vNq164d7nnz5s2znpc3b95In/f48WPjtddee2XdTk5OxtKlS1/5/X3+mm3btr3y/Bdrc3BweGUtqVOnNn7//fdIf82GYRj+/v5GvXr1IrxvWN/fvHnzWl+fN29ehM+4d++eUa1atUj/nWrVqpXh7+8f4T0j++f/ouj8ObzKunXrjDRp0kT664zozyYwMNB46623XnmPZMmSGXPmzDG2bdsW6nh4InteZE2dOvWlmiwWi/Hvv/9G+V5nzpwxihYtGuWfQQUKFIj21yGSGNh//ICISBT17duXixcv8uWXX1K+fPlXDunInTs3I0aM4NSpU8yePZscOXKEed7s2bP57rvvQq33/7zUqVPTq1cvjhw5QqFChaL9dcSU1KlTs337doYPH066dOnCPKdatWrs37+ftm3bxmotXbp0Yf369RQrVizM1x0dHXnzzTc5dOgQzZo1i9K9nZ2d2bRpE4sXL6Zly5bky5ePVKlSxeiQngwZMvD333/z/fffRzhJv2jRoixdupQVK1ZEasnm+KZp06acO3eOPn36RLh3iZOTE/Xr12fy5MnhnuPo6MiKFSsYNWpUqOWMn1elShX+/vtvu2462bZt25d2U69ZsyZ58uSJ8r2KFCnC0aNH+eGHH165nHWyZMmoVasWkydPjvMVwETiK4thvLD8i4hIAnPnzh0OHDjA7du38fLyIjAwkPTp05MjRw4qVqwY5dWe/Pz8+Oeffzh58iRPnjwhc+bM5M6dm9q1a4fa9yA+8vX1Zdu2bfz77788fPiQ7NmzU61atXADQWwxDINDhw5x6NAh7t69S9q0acmZMyevvfYa2bNnj9NaouPw4cMcPXqU27dv4+joSLZs2ahYsSLFixe3d2kxJiAggD179nD+/Hnu3LmDYRhkyJCBwoULU6lSpShtrvjkyRO2bdvGxYsX8fPzI2fOnFSoUCHUHKvE6PLly+zfv5/bt2/z4MEDUqZMSaZMmShatCilS5cmVapU9i5RJF5RABERERERkTijIVgiIiIiIhJnFEBERERERCTOKICIiIiIiEicUQAREREREZE4owAiIiIiIiJxRgFERERERETijAKIiIiIiIjEGQUQERERERGJMwogIiIiIiISZxRAREREREQkziiAiIiIiIhInFEAERERERGROKMAkoBVqlQJV1dXKlWqZO9SREREREQiRQEkAbt58ybXrl3j5s2b9i5FREREROJScDBMmADJkoHFYn60aQMPHti7sldysncBIiIiIiISBbduQceOsHmz2U6RAr7/Hrp3N4NIPKcAIiIiIiKSUGzaBJ06mSEEoFQpWL4cSpSwb11RoCFYIiIiIiLxXUAAfPQRNGr0LHz07g379yeo8AHqARERERERid8uXYJ27WDfPrOdPj3Mng2tW9u1LFupB0REREREJL765RcoV+5Z+KheHdzdE2z4AAUQEREREZH4x8cH3n/fXNnq0SNzcvnIkbBjB+TNa+/qokVDsERERERE4pNjx6BtWzh50mxnzw6LFkH9+vatK4aoB0REREREJD4wDJgxA6pUeRY+GjcGD49EEz5AAURERERExP7u34d334UPPgA/P3Bygm+/hXXrIGtWe1cXozQES0RERETEnnbvNle58vQ02wUKwLJlULmyfeuKJeoBERERERGxh6Ag+OorqFXrWfho1w6OHEm04QPUAyIiIiIiEvdu3ICOHWHLFrOdMiVMmwZdupgrXiViCiAiIiIiInFpwwbo3Bnu3DHbZcrA8uVQrJh964ojGoIlIiIiIhIXnj6FYcOgSZNn4aNvX3OTwRgMH8HBwQQFBcXY/WKaAoiIiIiISGy7cAFefx0mTTLbGTLAqlXmsKvkyaN9e19fX+bMmUPlypVJliwZTk5OFCxYkK+++oo7IWEnnrAYhmHYuwixjaurK9euXSNXrlxcvXrV3uWIiIiISFiWLoVeveDxY7NdowYsXgx58sTI7a9du0bjxo05duxYmK9nypSJtWvXUr169Rh5XnSpB0REREREJDZ4e0O3btC+vRk+LBb47DPYti3Gwoevr2+E4QPg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3LgRgDfeeIP169eTJk0aO1eWOGkIloiIiIjY5uhRc0nd06fNdo4csGgR1Ktn37qi4OHDhzRp0oTdu3cD0KxZM3799VdcXFzsXFnipR4QEREREYkaw4AffjD38QgJH02agIdHggof9+7do0GDBtbw8c477/Dbb78pfMQyBRARERERibx796B1a+jbF/z9IVkymDwZ1q6FLFnsXV2k3b59m7p163Lw4EEA3NzcWLp0Kc7OznauLPHTECwRERERiZxdu8y5HleumO2CBc3J55Uq2beuKLp+/ToNGjTg1KlTAPTo0YMZM2bg6Oho58qSBgUQEREREYlYUBCMHw+jR5ufA7RvDz/+CGnT2rW08Fy7do0dO3bg7e1N9uzZadiwIcmTJ8fT05P69etz/vx5APr168fUqVNxcNDAoLiiACIiIiIi4bt+HdzcYNs2s50yJUyfDp07mytexTPnz59nxIgRrFmzhqCQsARkypSJNm3asG7dOjw9PQH48MMPmTBhApZ4+HUkZhbDMAx7FyG2cXV15dq1a+TKlYurV6/auxwRERFJbP74A7p0AS8vs122LCxfDkWL2rWs8Bw7doy6dety9+7dV5772WefMXr0aIUPO1Bfk4iIiIiE9vQpDB0Kb731LHz07w9798bb8BEQEECLFi0iFT5q1KjBmDFjFD7sREOwREREROSZ8+ehbVs4dMhsZ8wIc+dCixb2resVVq9ezaVLlyJ1roeHB48fP9ZGg3aiHhARERERMS1eDOXLPwsfNWuCu3u8Dx8ACxcujPS5jx8/Zs2aNbFYjUREAUREREQkqXvyxJzr4eZmfu7gAJ9/Dlu3Qu7c9q4uUqI6H/ZKyFLCEuc0BEtEREQkKXN3hzZt4OxZs50rl9kTUru2XcuKquTJk0fp/BQpUsRSJfIq6gERERERSYoMA/73P6ha9Vn4eOstM5AksPABULNmzVg9X2KOAoiIiIhIUnP3LrRsCQMGmCteOTvD1Knw+++QObO9q7NJy5YtI31u5cqVqVixYuwVIxHSECwRERGRpGTnTujQAULmTBQubO7tUb68feuKhoMHD/LOO+9E6lxnZ2e+++67WK5IIqIeEBEREZGkICgIxoyBunWfhY9OncwVrxJw+Pjll1+oVasW169fB4iwZyNt2rSsWbOG119/Pa7KkzAogIiIiIgkdlevQv36MHo0BAdD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Gzao+5WIiIiki9YBycW0Dsg9LiAAnn7ausAgQJUq1rU9ate26/Qff/yRPn36cOrUKQCKFy/OwoULadOmjZkmNjaWrVu3cvz4cRwdHalbty5169bFYrFk9N2IiIjIPUIBSC6mAOQeFRMDkyfDpElgW4Ojb194/32wYzXy27dv8+abbzJt2jRzDY8uXbrwySefUKRIkcwsuYiIiIgGoYvkKmfPWls9du60bufPDx99BHZ2h/rjjz94+umn2ffv9Lz58+dnzpw59OvXT60aIiIikiUUgIjkFmvXwjPPQEiIdbtOHWuXq8qVUz3VMAw++ugjxowZYy422KRJE7744gsqVKiQmaUWERERSUCD0EVyuqgoeP5562BzW/AxejTs3m1X8HHx4kX8/f0ZNmwYkZGRODo6MmnSJAICAhR8iIiISJZTC4hITvbnn9a1PYKCrNtFisDCheDvb9fp3377Lc8++yzBwcEAVK5cmSVLltCgQYPMKa+IiIhIKtQCIpITGQYsWgR16/4XfDz0kHVtDzuCj5s3b/Lss8/y+OOPm8HHkCFD2L9/v4IPERERyVZqARHJaW7cgKFDYelS67aDA7z5JowfD46OqZ4eGBhIr169OHHiBABFixbl888/p0OHDplZahERERG7KAARyUl++83a5er4cet2mTKwbBk0bZrqqTExMUyePJnJkycTGxsLQIcOHfjss8/w8fHJzFKLiIiI2E0BiEhOEBcHs2bByy9DdLR13+OPw2efgbd3qqf/9ddf9O7dmz179gDg7u7Oe++9x7PPPqvpdUVERCRHUQAikt2uXIF+/WDDBut2vnwwc6a1G1YqwYNhGMyfP59Ro0YRHh4OQP369VmyZAlVqlTJ5IKLiIiIpJ0CEJHstH27dWHBCxes235+8NVXULNmqqdeuXKFgQMHsnbtWgAcHByYMGECr776Ks7OzplZahEREZF0UwAikh1iYqwDy6dMsc54BTBgAMyeDR4eqZ6+YcMG+vfvz6VLlwCoUKECX3zxBU2aNMnMUouIiIjcNU3DK5LVTp+Gli1h8mRr8OHpCcuXW8d7pBJ8REREMGzYMPz9/c3go3///gQFBSn4EBERkVxBLSAiWWn1aujfH65ft27Xr28NPipWTPXUX3/9lV69evHnn38CULhwYebNm0eXLl0yscAiIiIiGUstICJZITIShg2DLl3+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" }, "metadata": { "image/png": { "height": 300, "width": 400 } }, "output_type": "display_data" } ], "source": [ "plot_calibration_curve(\n", " probs,\n", " test_dataset.labels,\n", " figsize=(4,3),\n", " aggregate=True\n", ")" ] }, { "cell_type": "markdown", "id": "d50622c6-503b-4525-be81-847ecfa18967", "metadata": {}, "source": [ "## Save" ] }, { "cell_type": "code", "execution_count": 16, "id": "2fabeb1e-bfc9-4b42-8c04-09306861ec0a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "artifact = wandb.Artifact('model', type='model')\n", "artifact.add_file('model.ckpt', name=\"model.ckpt\")\n", "run.log_artifact(artifact)" ] }, { "cell_type": "code", "execution_count": 17, "id": "8e88febd-e844-43c1-8185-cd2ac9fc40a6", "metadata": {}, "outputs": [ { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Run history:


epoch▁▁▁▁▁▂▂▂▂▃▃▃▃▃▄▄▅▅▅▅▅▅▆▆▆▆▆▆▆▆▆▆▇▇▇█████
train_loss_epoch█▂▂▂▂▁▁▁▁▁
train_loss_step█▇▆▅▄▄▃▃▂▃▃▃▃▃▂▃▂▁▃▂▂▃▂▂▂▃▂▂▂▂▃▂▂▂▁▂▁▃▁▂
trainer/global_step▁▁▁▁▂▂▂▂▂▂▃▃▃▃▃▄▄▄▄▄▅▅▅▅▅▆▆▆▆▆▇▇▇▇▇▇▇▇██
val_accuracy▁██████████
val_auroc▁██████████
val_avgprec▁▇█████████
val_best_f1▁▇█████████
val_loss█▁▁▁▁▁▁▁▁▁▁

Run summary:


epoch9
train_loss_epoch0.14265
train_loss_step0.14165
trainer/global_step3189
val_accuracy0.94825
val_auroc0.89354
val_avgprec0.55242
val_best_f10.52531
val_loss0.152

" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ " View run train at: https://wandb.ai/grelu/human-atac-catlas/runs/xx0mt24e
View project at: https://wandb.ai/grelu/human-atac-catlas
Synced 6 W&B file(s), 0 media file(s), 4 artifact file(s) and 0 other file(s)" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "Find logs at: ./wandb/run-20250306_000617-xx0mt24e/logs" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "run.finish()" ] }, { "cell_type": "code", "execution_count": null, "id": "6905eb42-ca4c-45f4-ac4c-adc495a62876", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "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.11.9" } }, "nbformat": 4, "nbformat_minor": 5 }