{ "cells": [ { "cell_type": "markdown", "id": "f841971a-a869-483d-b22e-d3553e195dca", "metadata": {}, "source": [ "# Train the chromHMM multiclass classification model" ] }, { "cell_type": "markdown", "id": "25573c4e-ff0b-4a18-ab8e-f63299ec3d2f", "metadata": {}, "source": [ "## Set up wandb" ] }, { "cell_type": "code", "execution_count": 1, "id": "2e664d93-59e4-4a04-a7af-8396127a864c", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\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", "import pandas as pd\n", "import torch\n", "import numpy as np\n", "import os\n", "wandb.login(host=\"https://api.wandb.ai\")\n", "project_name = 'human-chromhmm-fullstack'\n", "os.environ[\"WANDB_NOTEBOOK_NAME\"] = \"/code/github/gReLU-applications/chromhmm/2_model.ipynb\"" ] }, { "cell_type": "code", "execution_count": 2, "id": "7f9dbf90-ef30-4fa1-81ee-5e942a755497", "metadata": {}, "outputs": [ { "data": { "text/html": [ "Changes to your `wandb` environment variables will be ignored because your `wandb` session has already started. For more information on how to modify your settings with `wandb.init()` arguments, please refer to the W&B docs." ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "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/chromhmm/wandb/run-20250306_192358-ki7f9dx7" ], "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-chromhmm-fullstack" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ " View run at https://wandb.ai/grelu/human-chromhmm-fullstack/runs/ki7f9dx7" ], "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_model.ipynb',\n", " program_abspath='/code/github/gReLU-applications/chromhmm/2_model.ipynb')\n", ")" ] }, { "cell_type": "markdown", "id": "72d3b587-f80f-4f2f-aa16-370dd2468860", "metadata": {}, "source": [ "## Load data" ] }, { "cell_type": "code", "execution_count": 3, "id": "eb43f839-b967-4f4c-90c9-d5e5e704bd56", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: 1 of 1 files downloaded. \n" ] }, { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
chromstartendstateinterval_idxenformer_splitsplit
0chr1792508793532GapArtf0NaNtrain
1chr1793908794932Acet1NaNtrain
2chr1794408795432EnhWk2NaNtrain
3chr1795908796932Quies3NaNtrain
4chr1798608799632GapArtf4NaNtrain
\n", "
" ], "text/plain": [ " chrom start end state interval_idx enformer_split split\n", "0 chr1 792508 793532 GapArtf 0 NaN train\n", "1 chr1 793908 794932 Acet 1 NaN train\n", "2 chr1 794408 795432 EnhWk 2 NaN train\n", "3 chr1 795908 796932 Quies 3 NaN train\n", "4 chr1 798608 799632 GapArtf 4 NaN train" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "artifact = run.use_artifact('dataset:latest')\n", "dir = artifact.download()\n", "\n", "chromhmm = pd.read_csv(dir + '/data.csv.gz')\n", "chromhmm['state'] = chromhmm['state'].astype('category')\n", "chromhmm.head()" ] }, { "cell_type": "code", "execution_count": 4, "id": "ce970589-3b89-4025-9514-4f7a48f51d90", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "state\n", "Quies 1485576\n", "Acet 639669\n", "EnhA 613794\n", "ReprPC 610147\n", "Tx 561526\n", "EnhWk 543113\n", "HET 521161\n", "TxWk 254518\n", "TxEnh 190465\n", "TxEx 121833\n", "PromF 88429\n", "GapArtf 51474\n", "BivProm 48242\n", "znf 34146\n", "TSS 24402\n", "DNase 20609\n", "Name: count, dtype: int64" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "chromhmm.state.value_counts()" ] }, { "cell_type": "markdown", "id": "5a545ffd-81c2-4928-93c7-865d5583b803", "metadata": {}, "source": [ "## Downsample" ] }, { "cell_type": "code", "execution_count": 5, "id": "34d11f41-7b28-48cb-b6da-5570471574c5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "state\n", "Acet 250000\n", "EnhA 250000\n", "EnhWk 250000\n", "HET 250000\n", "Quies 250000\n", "ReprPC 250000\n", "Tx 250000\n", "TxWk 250000\n", "TxEnh 190465\n", "TxEx 121833\n", "PromF 88429\n", "GapArtf 51474\n", "BivProm 48242\n", "znf 34146\n", "TSS 24402\n", "DNase 20609\n", "Name: count, dtype: int64" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "out = pd.DataFrame()\n", "rng = np.random.RandomState(0)\n", "\n", "for state in chromhmm.state.unique():\n", " if np.sum(chromhmm.state == state) > 250000:\n", " out = pd.concat([out, chromhmm[chromhmm.state==state].sample(\n", " 250000, random_state=rng)])\n", " else:\n", " out = pd.concat([out, chromhmm[chromhmm.state==state]])\n", "\n", "chromhmm = out.reset_index(drop=True).copy()\n", "chromhmm.state.value_counts()" ] }, { "cell_type": "markdown", "id": "50b88fbd-8a56-44ce-aed8-bad61068973c", "metadata": {}, "source": [ "## Split" ] }, { "cell_type": "code", "execution_count": 6, "id": "f698c35e-f3d3-4e32-8c5a-45bff98cfe70", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2230362 163688 185550\n" ] } ], "source": [ "train_intervals = chromhmm.loc[chromhmm.split=='train', ['chrom', 'start', 'end', 'state']].reset_index(drop=True)\n", "val_intervals = chromhmm.loc[chromhmm.split=='valid', ['chrom', 'start', 'end', 'state']].reset_index(drop=True)\n", "test_intervals = chromhmm.loc[chromhmm.split=='test', ['chrom', 'start', 'end', 'state']].reset_index(drop=True)\n", "\n", "print(len(train_intervals), len(val_intervals), len(test_intervals))" ] }, { "cell_type": "markdown", "id": "056f1a50-62b9-4177-be30-7152531bbc08", "metadata": {}, "source": [ "## Make pytorch datasets" ] }, { "cell_type": "code", "execution_count": 7, "id": "4c16bb47-2def-4199-bb9e-d6acc20fbf74", "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" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Sequences will be extracted from columns ['chrom', 'start', 'end']\n", "Labels are being treated as class names for multiclass classification.\n" ] } ], "source": [ "import grelu.data.dataset\n", "train_dataset = grelu.data.dataset.DFSeqDataset(\n", " train_intervals,\n", " genome='hg38',\n", " rc=True, # reverse complement\n", " max_seq_shift=3, # Shift the sequence\n", " augment_mode=\"random\", # Randomly select which augmentations to apply\n", ")" ] }, { "cell_type": "code", "execution_count": 8, "id": "cbbc34bf-267e-4edf-a5d7-c3652f5ffab9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sequences will be extracted from columns ['chrom', 'start', 'end']\n", "Labels are being treated as class names for multiclass classification.\n", "2230362 163688\n" ] } ], "source": [ "val_dataset = grelu.data.dataset.DFSeqDataset(val_intervals, genome='hg38')\n", "\n", "print(len(train_dataset), len(val_dataset))" ] }, { "cell_type": "code", "execution_count": 9, "id": "d8444be4-a8ab-49c0-8e9b-80f867bf936c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(2230362, 16, 1)\n", "[[0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", " [0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", " [0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]\n" ] } ], "source": [ "print(train_dataset.labels.shape)\n", "print(train_dataset.labels[:3].squeeze())" ] }, { "cell_type": "markdown", "id": "6ffa06e6-0746-4ad3-870f-32a6e25f9fe9", "metadata": {}, "source": [ "## Inversely weight classes" ] }, { "cell_type": "code", "execution_count": 10, "id": "9f13b9a2-8952-4617-b2c4-984c2b0d1ba4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 1.0071764, 5.430636 , 12.622309 , 1.0177703, 1.0143404,\n", " 4.821779 , 1.077121 , 2.9666567, 1.0206438, 1.0360477,\n", " 10.866564 , 1.0241259, 1.3642693, 2.1729102, 1.018658 ,\n", " 8.760603 ], dtype=float32)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class_prop = train_dataset.labels.squeeze().mean(0)\n", "class_weights = 1/(class_prop*10)\n", "class_weights" ] }, { "cell_type": "markdown", "id": "1db350f3-f92a-41c9-a31e-fe95563df918", "metadata": {}, "source": [ "## Build model" ] }, { "cell_type": "code", "execution_count": 11, "id": "359b07a1-ee56-4122-9e81-76dd05789602", "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", " state_dict = torch.load(Path(d) / \"human.h5\")\n" ] } ], "source": [ "model_params = {\n", " 'model_type':'EnformerPretrainedModel',\n", " 'n_tasks': len(chromhmm.state.unique()),\n", " 'crop_len': 0,\n", " 'n_transformers': 1,\n", "}\n", "\n", "train_params = {\n", " 'task':'multiclass',\n", " 'lr':1e-4,\n", " 'logger': 'wandb',\n", " 'batch_size': 512,\n", " 'num_workers': 16,\n", " 'devices': 4,\n", " 'save_dir': project_name,\n", " 'optimizer': 'adam',\n", " 'max_epochs': 10,\n", " 'class_weights':class_weights,\n", "}\n", "\n", "import grelu.lightning\n", "model = grelu.lightning.LightningModel(model_params=model_params, train_params=train_params) " ] }, { "cell_type": "markdown", "id": "ff432255-6d4c-4b0c-8a08-df57cb0d42a1", "metadata": {}, "source": [ "## Train model" ] }, { "cell_type": "code", "execution_count": 12, "id": "602bd79c-87c8-4d17-bb3e-2cd966f889a0", "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: 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: [0,1,2,3,4,5,6,7]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation DataLoader 0: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 320/320 [00:46<00:00, 6.87it/s]\n" ] }, { "data": { "text/html": [ "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
       "┃      Validate metric             DataLoader 0        ┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
       "│       val_accuracy            0.07802204042673111    │\n",
       "│         val_auroc             0.5256534814834595     │\n",
       "│        val_avgprec            0.07628291845321655    │\n",
       "│         val_loss               4.513631343841553     │\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.07802204042673111 \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.5256534814834595 \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.07628291845321655 \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 4.513631343841553 \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: [0,1,2,3,4,5,6,7]\n", "\n", " | Name | Type | Params | Mode \n", "-----------------------------------------------------------------\n", "0 | model | EnformerPretrainedModel | 71.5 M | train\n", "1 | loss | CrossEntropyLoss | 0 | train\n", "2 | activation | Softmax | 0 | train\n", "3 | val_metrics | MetricCollection | 0 | train\n", "4 | test_metrics | MetricCollection | 0 | train\n", "5 | transform | Identity | 0 | train\n", "-----------------------------------------------------------------\n", "71.5 M Trainable params\n", "0 Non-trainable params\n", "71.5 M Total params\n", "285.968 Total estimated model params size (MB)\n", "239 Modules in train mode\n", "0 Modules in eval mode\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " \r" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/opt/conda/lib/python3.11/site-packages/torchmetrics/utilities/prints.py:43: UserWarning: No positive samples in targets, true positive value should be meaningless. Returning zero tensor in true positive score\n", " warnings.warn(*args, **kwargs) # noqa: B028\n", "/opt/conda/lib/python3.11/site-packages/torchmetrics/utilities/prints.py:43: UserWarning: No negative samples in targets, false positive value should be meaningless. Returning zero tensor in false positive score\n", " warnings.warn(*args, **kwargs) # noqa: B028\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 0: 31%|█████████████████████████████████████████████▊ | 1329/4357 [09:01<20:34, 2.45it/s, v_num=9dx7, train_loss_step=2.510]" ] }, { "name": "stderr", "output_type": "stream", "text": [ "IOPub message rate exceeded.\n", "The Jupyter server will temporarily stop sending output\n", "to the client in order to avoid crashing it.\n", "To change this limit, set the config variable\n", "`--ServerApp.iopub_msg_rate_limit`.\n", "\n", "Current values:\n", "ServerApp.iopub_msg_rate_limit=1000.0 (msgs/sec)\n", "ServerApp.rate_limit_window=3.0 (secs)\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 2: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4357/4357 [29:40<00:00, 2.45it/s, v_num=9dx7, train_loss_step=2.710, train_loss_epoch=2.530]\n", "Validation: | | 0/? [00:00┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n", "┃ Test metric DataLoader 0 ┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n", "│ test_accuracy 0.4372537434101105 │\n", "│ test_auroc 0.860890805721283 │\n", "│ test_avgprec 0.41129541397094727 │\n", "│ test_loss 3.1207919120788574 │\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.4372537434101105 \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.860890805721283 \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.41129541397094727 \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 3.1207919120788574 \u001b[0m\u001b[35m \u001b[0m│\n", "└───────────────────────────┴───────────────────────────┘\n" ] }, "metadata": {}, "output_type": "display_data" }, { "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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
test_accuracytest_auroctest_avgprec
Acet0.2939460.7972980.209121
BivProm0.5431250.9373430.357540
DNase0.8528160.9905280.752660
EnhA0.2949860.8145040.336752
EnhWk0.2683250.8144220.294704
GapArtf0.7987670.9516640.702935
HET0.2454600.8236020.498241
PromF0.5939590.9556570.636856
Quies0.3661630.8511760.360967
ReprPC0.2874360.7652480.252218
TSS0.8301650.9951710.801493
Tx0.2589670.8071990.319703
TxEnh0.2694330.8251560.277007
TxEx0.5336320.8821150.356348
TxWk0.2510100.7780880.288003
znf0.3078710.7850840.136179
\n", "
" ], "text/plain": [ " test_accuracy test_auroc test_avgprec\n", "Acet 0.293946 0.797298 0.209121\n", "BivProm 0.543125 0.937343 0.357540\n", "DNase 0.852816 0.990528 0.752660\n", "EnhA 0.294986 0.814504 0.336752\n", "EnhWk 0.268325 0.814422 0.294704\n", "GapArtf 0.798767 0.951664 0.702935\n", "HET 0.245460 0.823602 0.498241\n", "PromF 0.593959 0.955657 0.636856\n", "Quies 0.366163 0.851176 0.360967\n", "ReprPC 0.287436 0.765248 0.252218\n", "TSS 0.830165 0.995171 0.801493\n", "Tx 0.258967 0.807199 0.319703\n", "TxEnh 0.269433 0.825156 0.277007\n", "TxEx 0.533632 0.882115 0.356348\n", "TxWk 0.251010 0.778088 0.288003\n", "znf 0.307871 0.785084 0.136179" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "test_dataset = grelu.data.dataset.DFSeqDataset(\n", " test_intervals, genome=\"hg38\")\n", "\n", "test_metrics = model.test_on_dataset(\n", " test_dataset, devices=4, num_workers=16, batch_size=512,\n", " write_path='model.ckpt'\n", ")\n", "test_metrics" ] }, { "cell_type": "code", "execution_count": 15, "id": "69453a5c-bbe1-4ea8-9e17-6cef81926aae", "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: [0,1,2,3,4,5,6,7]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Predicting DataLoader 0: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 182/182 [01:53<00:00, 1.61it/s]\n" ] } ], "source": [ "probs = model.predict_on_dataset(test_dataset, devices=0, num_workers=16, batch_size=1024)" ] }, { "cell_type": "code", "execution_count": 16, "id": "fd597dc8-cb4c-4cab-a76a-3843de9d213f", "metadata": {}, "outputs": [ { "data": { "image/png": "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ExQUxM6dOzl79ix37tzBMAyyZ89OqVKlqF69eqyKK/r4+LB582bOnz+Pv78/BQoUoGrVqhHWWKVEFy9eZM+ePdy+fZv79++TMWNGcubMSZkyZahUqRLOzs72DlEkSVECIiIiIiIiiUZTsEREREREJNEoARERERERkUSjBERERERERBKNEhAREREREUk0SkBERERERCTRKAEREREREZFEowREREREREQSjRIQERERERFJNEpAREREREQk0SgBERERERGRRKMEREREREREEo0SEBERERERSTRKQJKx6tWr4+LiQvXq1e0dioiIiIhIjCgBScZu3rzJtWvXuHnzpr1DEREREUm9TpyAcuXAYjG/SpWCI0fsHVWSpQRERERERMRWCxZAzZrw339mu1072LcPXnjBrmElZUpARERERERiKzAQBg+GLl3g0SNwdIQffoBlyyBrVntHl6SlsXcAIiIiIiLJypUr0KkT7NpltvPlg4ULoUED+8aVTGgEREREREQkptavh6pVnyQfDRrAgQNKPmJBCYiIiIiIyPOEhsJXX0GzZuDpaR776CPYuBHy57dvbMmMpmCJiIiIiETn7l3o0QPWrDHbWbKAuzu8/rpdw0qulICIiIiIiERl3z7o0AEuXTLbL7wAS5aYW+2KTTQFS0RERETkaYYBv/4KL730JPno1Qt27lTyEUcaARERERERCc/XF95+G2bPNtvp0sHEidCvn1loUOJECYiIiIiISJjTp6F9ezh2zGwXLWpOuapWza5hpSSagiUiIiIiAmYRwerVnyQfLVvC/v1KPuKZEhARERERSd2CguDDD82Rj4cPwcEBvv4a/vwTcuSwd3QpjqZgiYiIiEjqdf06vPkmbN9utnPnhvnzoXFj+8aVgikBEREREZHUacsW6NwZbt0y23XqwKJF4OJi17DiKjQ0FMMwcHR0tHcokdIULBERERFJXQwDvv/eHOUISz7ef99MSJJp8uHn54ebmxs1atQgbdq0pEmThhIlSvDNN99w584de4cXgcUwDMPeQYhtXFxcuHbtGgULFuTq1av2DkdEREQk6bt/H3r3hhUrzHamTODmBp062TOqOLl27RrNmzfn6NGjkZ7PmTMnK1eupE6dOokcWeQ0AiIiIiIiqcOhQ+YuV2HJR/nysHdvsk4+/Pz8ok0+AO7evUvz5s05e/ZsIkYWNSUg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eLwbEiNHwrp1kCePfWOTeDF79mw6d+5McHAwzs7OrFmzhmaq3ZIs2TQFa9KkSfj7+5MhQwY2btxImTJlYnRdzZo12bRpE4cPH7blsSIiIiLP8vQ0t9Ndv95sZ8sGHh7QurVdw5L48/vvvzNgwAAMwyBLliysWbOGunXr2jsssZFNCci6deuwWCx07do1xskHQMmSJQG4ePGiLY8VERERiWjXLnO9R1g9rCpVYMkSKF7cvnFJvJk4cSLvvfceYM6oWbduHdWrV7dzVBIXNk3BunDhAgD16tWL1XVZs2YFsC5aFxEREbGJYcCkSdCgwZPko18/+PdfJR8pyNixY63JR+7cudmyZYuSjxTAphGQR48eAZApU6ZYXef3eA/u9OnT2/JYEREREfDxgf79YcECs50+PUyZAn362DcuiTeGYfC///2PL774AoD8+fOzceNGypUrZ9/AJF7YlIDkzJmTmzdvcuvWrVhdd+ZxBdLcuXPb8lgRERFJ7U6eNKuanzxptkuUMKdcvfiiXcOS+GMYBp988ol1c6PChQuzceNG61R+Sf5smoJVvnx5ALZt2xar61auXInFYqFatWq2PFZERERSs4ULoUaNJ8lH27bmdrtKPlIMwzAYMmSINfkoXrw427ZtU/KRwtiUgDRv3hzDMFixYoV1VON5FixYwKFDhwBo0aKFLY8VERGR1Cgw0Kxg3rkzPHoEDg7w/fewfLm545WkCKGhobz99tv88ssvAJQtW5Zt27ZRpEgRO0cm8c2mBKRfv37kyJGDwMBA2rRpY12UHpWFCxfSv39/LBYLBQoUoGvXrjYFKyIiIqnM1avQqBE8/qOUvHlh40YYPhwsFruGJvEnODiY3r1789tvvwFQqVIltmzZQsGCBe0cmSQEm9aAZMmShalTp9K5c2dOnz5NxYoVef3110mXLp21z+TJk7ly5Qp///03R48exTAMHB0dmTFjBmnTpo23FyAiIiIp1IYN0KWLWecDoH59cxpW/vz2jUviVVBQEN26dWPx4sUAVKtWjbVr15IzZ047RyYJxWIYhmHrxb///juDBw8mMDAQSzSfQhiGgZOTE7/++iu9evWy9XHyFBcXF65du0bBggW5GrYFoYiISHIXGgrffguff25utwvw4YfwzTegDzFTlICAADp16sSff/4JQJ06dVi9ejXZNLUuRbNpClaY/v37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sy+++AKwjmdds2aN+Y1LZsaNG5euGzglJYXt27eb3/z4+Pjg4eFBXFycGVOJEiUYM2aM2pkLya+2dunSJRYvXszixYtxd3fH19eXGzdupFsFpm3btjz33HOZnq97WuGSn387bWyTz++77z4qVKiQbXnd0wqvJ554ItPnp06dmu7xu+++e1s9bgX9c5oSkEKuSpUqzJ07l5UrV7Jjxw4iIyPx8/OjevXqdOvWjWbNmuWqXh8fH6ZPn87atWsJDQ01J9LVqFGDdu3a0a1btwzfDKXVtm1bKleuzKpVq9i3bx8xMTFmd3bv3r0JCgrKVVziHPnRzmxDDgzDIDo6Osuyt34zVLduXZ544gkOHDjAmTNniImJIT4+Hj8/PypXrswDDzxAp06dNE7aBeVHWxsyZAi7d+/m8OHDXLlyhdjYWNzd3SlfvjzBwcE89NBDGcZJ30r3tMIlv/52wu3t/WGje5rcroL+Oc1iZDewUEREREREJI9oDoiIiIiIiDiMEhAREREREXEYJSAiIiIiIuIwSkBERERERMRhlICIiIiIiIjDKAERERERERGHUQIiIiIiIiIOowREREREREQcRgmIiIiIiIg4jBIQERERERFxGCUgIiIiIiLiMEpARERERETEYZSAiIgUEEOGDMFisWCxWDhx4kSG41u2bDGPv/322w6PryCZP3+++V7Mnz/f2eE43dtvv22+H1u2bHF2OKa8/neqVq0aFouFatWq5fp62dUhIvnPw9kBiIhkxWKx2D3m5+eHv78/9erVo0uXLjz55JMUL17cgdEVTrbkplq1agwZMsSpsYg4WkREBN988w0AvXr14h//+IdT4xEpjJSAiIjLiouLIy4ujlOnTrFu3TomT57MggUL6NSpk7NDc2nvvPMOAG3btlUCInediIgI8/+BatWqKQERyQdKQETEZaxevTrd49jYWCIiIli4cCGRkZFcuHCBnj17smXLFpo1a+akKPNPu3btMAzD2WGIOE1mQxOdUYeI3BklICLiMnr16pXhuSeffJLx48fTuXNn/vjjD65fv86oUaPYvn274wMUERGRbGkSuoi4vNKlS7NgwQLzcXh4OKdOnXJiRCIiImKPEhARKRRq165NzZo1zcd79uwxf89sZZydO3fy/PPPU6tWLYoVK2Z31ZyrV6/y/vvv06FDBypUqECRIkXw9/enUaNG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cu7cObvlw8PDzW+707J9ID148CAJCQlZXvOll16iWrVqAHz22WeMHTs2w2T8tG7cuMHy5cv5z3/+k+HY6NGjzd+HDRtmDl1J69ChQwwbNizLmO7EsGHDMiynDNYVmR577DEzSRw5ciSenp53dK0hQ4YQEBAAWJOCyZMnZ1pu8uTJfP/99wAEBATw9NNPZ1lvcnIy/fv3z3QVqf3796d7/954440MZWw9M5GRkbz//vuZXuP999/nv//9b5ZxZMaR729upU3Idu7ceVvntmrVirp16wLW/x9sCy2o90MkPU1CFxG5xT/+8Q8+/fRThg0bRnx8PIMGDeK9996je/fu3HPPPfj4+HD16lWOHDnCjh072Lp1K0lJSek2ArSZMWMG69ev5+TJk2zZsoXatWszbNgwgoODiY2N5YcffmDVqlWUKlWK+vXrs2XLljuK/csvv6RZs2YcPnyY8PBwatasyWOPPUbz5s0pVaoUsbGxHDhwgPXr17N371527dqVYYPEDh06sGfPHuLi4ujevTtPPfUUZcuWNYdm1a1b15yz4evry7fffkubNm2Ijo7mvffeY/HixfTt25f69etTvHhx4uPjOXXqFDt37uTnn38mJiYm0yRi4MCBLFu2jG+//ZZz587RoEEDhg4dag7FCQ8PZ968ecTHx/Poo4+aS5vmld69e7N69WoaNWrEkCFDaNGiBe7u7uzcuZMvvvjCXPWradOmvP7663d8vaJFi7JgwQK6detm9iD98MMPPPbYY5QvX57z58+zbNkytm/fDlg3/luwYEG2k7P79OnDypUrqVOnDsOGDaNhw4YkJyfz66+/Mn/+fBITE83X+9hjj2U4f+TIkeY8kDFjxrB582Y6d+5MQEAAJ0+eZPny5fz++++UL1+eunXrmmWz4+j3N7fq1q1LQEAAFy5cYPHixZQpU4ZmzZqlW52tc+fOds9/4YUXePHFF83HPj4+6XonRQRw2h7sIiI5AJg/uTVv3jyzjnnz5uX4vPXr1xsVKlRIF4O9nyJFihg//PBDpvUcOXLEqFmzpt1z/f39jY0bNxqDBw82nzt+/HiGejZv3mwef+utt+zGHRkZaXTq1ClHce/evTvD+WfOnDECAgLsnpPZe3jkyBGjadOmObqmxWIxJk6cmGns8fHxRteuXe2e6+7ubsycOTPX/6a3urWe2bNnG+7u7nav37x5c+Py5ct267OVa9u2bY5jWLt2rVGqVKks37NSpUoZa9eutVvHW2+9ZZbdvHmz8frrr2dZX8+ePY2EhAS79b399ttZnl+1alXjf//7X7ZtNq/f36pVq5rXz0xO2kV2dRiGYfzf//1flq8/KzExMUaxYsXMskOGDMmyvMjdSEOwRETs6NSpE8eOHePLL7+kb9++BAUFUbRoUTw8PChVqhQNGjRgyJAhLFy4kPPnz9v9VrRGjRrs2bOHGTNm0LBhQ4oVK4afnx/BwcGMHj2aiIiIPN3xuXTp0qxfv56NGzcydOhQatWqRbFixfDw8KB06dLmN8y//fYb9erVy3B+hQoV2LlzJ6+99hr16tWjWLFiWa6EZHuN4eHh/PjjjwwfPpzatWtTsmRJ3N3dKVasGMHBwfTu3Zs5c+Zw9OhR3nnnnUzr8fHxYd26dSxZsoQOHTpQunRpihQpQtWqVXniiScICwvL12/HR4wYQXh4OEOGDCEoKAhvb2/8/f1p27Yt//d//8e2bdvyfCWjbt26cezYMaZOnUrLli0pU6YMHh4elClThhYtWvDuu+9y7NgxunXrluM6Z86cyc8//0y/fv2oXLkyXl5elC1bls6dO/P111/zzTff4O3tbff8t956i02bNtGrVy8CAgLw9PSkbNmyNG3alOnTpxMREWHO2bkdznh/c2PYsGFs2LCBPn36UKVKlSzfq1sVK1aMZs2amY81/EokI4th5MHOXiIiIi5o/vz55pyKefPmmXN2RHLr4sWLVK5cmRs3blCvXr3bWilM5G6hHhARERGRPPLFF1+Yk89tq2KJSHpKQERERETyQFRUFB988AEA/v7+mnwuYodWwRIRERHJpdDQUOLj4zl9+jRz5szh0qVLAIwbN87cU0VE0lMCIiIiIpJLgwcP5q+//kr3XKtWrRg5cqRzAhJxAUpARERERO6Qt7c3QUFBDBgwgNdffx0PD33EErFHq2CJiIiIiIjDaBK6iIiIiIg4jBIQERERERFxGCUgIiIiIiLiMEpARERERETEYZSAiIiIiIiIwygBERERERERh1ECIiIiIiIiDvP/AXeqnTqdgjoMAAAAAElFTkSuQmCC" }, "metadata": { "image/png": { "height": 300, "width": 400 } }, "output_type": "display_data" } ], "source": [ "import grelu.visualize\n", "\n", "grelu.visualize.plot_calibration_curve(\n", " probs,\n", " test_dataset.labels,\n", " figsize=(4,3)\n", ")" ] }, { "cell_type": "markdown", "id": "e18f9266-e863-44b5-95e9-d6a8ec7d2146", "metadata": {}, "source": [ "## Save" ] }, { "cell_type": "code", "execution_count": 17, "id": "a40c1ad5-2402-4b4a-9fa2-e25b32aea0b0", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "artifact = wandb.Artifact('model', type='model')\n", "artifact.add_file('model.ckpt', 'model.ckpt') \n", "run.log_artifact(artifact)" ] }, { "cell_type": "code", "execution_count": 18, "id": "fa1f5575-1248-4331-8da5-23a2b675ba73", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m No relevant files were detected in the specified directory. No code will be logged to your run.\n" ] } ], "source": [ "run.log_code()" ] }, { "cell_type": "code", "execution_count": 19, "id": "76cbdab1-f237-4a8a-af5f-b67484bae220", "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_loss█▁▁▁▁▁▁▁▁▁▂

Run summary:


epoch9
train_loss_epoch2.21395
train_loss_step2.35459
trainer/global_step43569
val_accuracy0.44407
val_auroc0.86317
val_avgprec0.40967
val_loss2.83142

" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ " View run train at: https://wandb.ai/grelu/human-chromhmm-fullstack/runs/ki7f9dx7
View project at: https://wandb.ai/grelu/human-chromhmm-fullstack
Synced 6 W&B file(s), 0 media file(s), 6 artifact file(s) and 0 other file(s)" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "Find logs at: ./wandb/run-20250306_192358-ki7f9dx7/logs" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "run.finish()" ] }, { "cell_type": "code", "execution_count": null, "id": "6f811452-a14e-44ad-bd47-4c67495f6372", "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 }