{ "cells": [ { "cell_type": "markdown", "id": "142de582", "metadata": {}, "source": "# Tutorial 3: Tuning and training models\n\nOnce all of the data is QC, processed, and ingested, the real fun begins. This tutorial details, first, how to train a MuTopia model. \nThen, we'll go over more rigorous hyperparameter tuning techniques to ensure a better fit to your data.\n\n\n## Prerequisites\n\nBefore starting this tutorial, ensure you have:\n- MuTopia package installed\n- Download the pre-compiled data to the `tutorial_data` directory" }, { "cell_type": "markdown", "id": "18a4cd09", "metadata": {}, "source": [ "## 1. Training a MuTopia model\n", "\n", "### 1.1 Preparing and loading the data\n", "\n", "The first step in preparing the data for model training is to split train and test sets. This is easiest using the CLI as below. I like to use chromosome 1 as the test set and train on everything else." ] }, { "cell_type": "code", "execution_count": 1, "id": "b41f598c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Writing samples: 100%|████████████████████████████████████████████| 185/185 [01:02<00:00, 2.97it/s]\n", "Writing samples: 100%|████████████████████████████████████████████| 185/185 [00:28<00:00, 6.48it/s]\n" ] } ], "source": [ "!gtensor split tutorial_data/Liver.nc chr1" ] }, { "cell_type": "markdown", "id": "cd806498", "metadata": {}, "source": [ "Import `MuTopia`:" ] }, { "cell_type": "code", "execution_count": 1, "id": "f0acc3e7", "metadata": {}, "outputs": [], "source": [ "import mutopia.analysis as mu" ] }, { "cell_type": "markdown", "id": "08eaea3d", "metadata": {}, "source": [ "Now, you can use `gt.lazy_load` or `gt.load_dataset(..., with_samples=False)` to load the dataset, while keeping the samples on-disk:" ] }, { "cell_type": "code", "execution_count": 2, "id": "2e184150", "metadata": {}, "outputs": [], "source": [ "train = mu.gt.lazy_load(\"tutorial_data/Liver.train.nc\")\n", "test = mu.gt.lazy_load(\"tutorial_data/Liver.test.nc\")" ] }, { "cell_type": "markdown", "id": "e3b837da", "metadata": {}, "source": "### 1.2 Instantiating the model\n\nNow, we can instantiate a model. Make sure to use the correct data modality - in this case `{dataset}.modality()`, and make a `TopographyModel` object. \n\nThere are a ton of configurable parameters, but the main ones you'll often use are:\n* `num_components` - how many processes to fit.\n* `init_components` - a list of signatures to initialize the model with.\n* `locus_subsample` - to what degree to subsample the loci in the dataset for each update.\n* `batch_subsample` - to what degree to subsample the samples in the dataset. I shoot for a batch size of at least 32.\n* `threads` - number of threads to devote to update calculations.\n\n#### Rules of thumb for training models\n* Always use some form of subsampling as batch training leads to overfitting. - `locus_subsample` works by far the best.\n* Make sure your iteration time is below 30 seconds by adjusting `threads`, `locus_subsampling`, and `batch_subsample`. Iteration time is proportional to the number of mutations used for the parameter updates. Using more mutations has diminishing returns over the number of steps you perform. I usually shoot for about 20 seconds per iteration to start (iteration time decreases as the model converges as well).\n* Train until convergence (by not setting `num_epochs`) - MuTopia will automatically stop the model when it detects it has converged. \n* For really small datasets, use `init_components` to specify starting points for the spectra. You can list COSMIC components like: `[\"SBS1\", \"SBS3\", ...]`." }, { "cell_type": "code", "execution_count": null, "id": "9964a936", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO: Mutopia:JIT-compiling model operations ...\n" ] } ], "source": [ "SBS_model = mu.make_model_cls(train)\n", "\n", "model = SBS_model(\n", " num_components = 15,\n", " seed=42,\n", " locus_subsample=1/8,\n", " threads=5,\n", " eval_every=1, # just for illustration purposes; use a larger value in practice or your train time will increase\n", " num_epochs=10, # just for illustration purposes; use a larger value in practice (like 1000 just to be safe)\n", ")" ] }, { "cell_type": "markdown", "id": "7a254100", "metadata": {}, "source": [ "### 1.3 Training\n", "\n", "Now, we are ready to train. Supply the train and the test sets to the `fit` method:" ] }, { "cell_type": "code", "execution_count": 5, "id": "abf97399", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO: Mutopia:Initializing model parameters and transformations...\n", "INFO: Mutopia:Found strand features:\n", "\tGeneStrand, ReplicationStrand\n", "INFO: Mutopia:Found mesoscale features:[]\n", "INFO: Mutopia:Found locus features:\n", "\tATACAccessible, DNase, GeneExpression, GenePosition,\n", "\tH3K27ac, H3K27me3, H3K36me3, H3K4me1,\n", "\tH3K4me3, H3K9me3, NucleotideRatio, RepliseqG1b,\n", "\tRepliseqG2, RepliseqS1, RepliseqS2, RepliseqS3,\n", "\tRepliseqS4\n", "INFO: Mutopia:Validating datasets...\n", "INFO: Mutopia:Found n=185 training samples across 1 datasets.\n", "INFO: Mutopia:Preprocessing training datasets...\n", "INFO: Mutopia:Preprocessing testing datasets...\n", "WARNING: Mutopia:Calculating full factor normalizers for updates - this will increase the memory usage, but will reduce variance.\n", "INFO: Mutopia:Using SVI.\n", "INFO: Mutopia:Training model with 5 threads.\n", "INFO: Mutopia:The first few epochs take longer as things get warmed up -\n", "\texpect the time per epoch to decrease about 4-fold.\n", "INFO: Mutopia:Model will stop training if no improvement in the last 50 epochs.\n", "INFO: Mutopia:Training usually coverges much sooner than 10 epochs.\n", "Epoch: 10/10 |██████████| [01:48<00:00, 10.85s/it] Scores, Best=0.027843, Recent=0.027172, 0.027352, 0.027563, 0.027724, 0.027843\n", "INFO: Mutopia:Finalizing models ...\n" ] } ], "source": [ "model = model.fit(train, test)" ] }, { "cell_type": "markdown", "id": "f99e1bd5", "metadata": {}, "source": [ "For score, higher is better - Don't worry about the \"low\" score values this is mostly reflective of the sparse nature of the data.\n", "\n", "You can save a model to disk using the `model.save` method:" ] }, { "cell_type": "code", "execution_count": 6, "id": "50ea4f50", "metadata": {}, "outputs": [], "source": [ "model.save(\"tutorial_data/trained_model.pkl\")" ] }, { "cell_type": "markdown", "id": "e6a3f8b3", "metadata": {}, "source": [ "Alternatively, you can perform the same training from the CLI using the command below:\n", "\n", "**Note:** Make sure to use the `--lazy` flag! " ] }, { "cell_type": "code", "execution_count": 7, "id": "65c64792", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training model with parameters: \n", "Parameter Value\n", "--------------------- ---------\n", "num_components 15\n", "threads 5\n", "seed 42\n", "locus_subsample 0.125\n", "eval_every 1\n", "num_epochs 10\n", "locus_model_type gbt\n", "use_groups True\n", "add_corpus_intercepts False\n", "empirical_bayes True\n", "stop_condition 50\n", "test_chroms ('chr1',)\n", "INFO: Mutopia:Training with 1 dataset pairs\n", "INFO: Mutopia:JIT-compiling model operations ...\n", "INFO: Mutopia:Initializing model parameters and transformations...\n", "INFO: Mutopia:Found strand features:\n", "\tGeneStrand, ReplicationStrand\n", "INFO: Mutopia:Found mesoscale features:[]\n", "INFO: Mutopia:Found locus features:\n", "\tATACAccessible, DNase, GeneExpression, GenePosition,\n", "\tH3K27ac, H3K27me3, H3K36me3, H3K4me1,\n", "\tH3K4me3, H3K9me3, NucleotideRatio, RepliseqG1b,\n", "\tRepliseqG2, RepliseqS1, RepliseqS2, RepliseqS3,\n", "\tRepliseqS4\n", "INFO: Mutopia:Validating datasets...\n", "INFO: Mutopia:Found n=185 training samples across 1 datasets.\n", "INFO: Mutopia:Preprocessing training datasets...\n", "INFO: Mutopia:Preprocessing testing datasets...\n", "WARNING: Mutopia:Calculating full factor normalizers for updates - this will increase the memory usage, but will reduce variance.\n", "INFO: Mutopia:Using SVI.\n", "INFO: Mutopia:Training model with 5 threads.\n", "INFO: Mutopia:The first few epochs take longer as things get warmed up -\n", "\texpect the time per epoch to decrease about 4-fold.\n", "INFO: Mutopia:Model will stop training if no improvement in the last 50 epochs.\n", "INFO: Mutopia:Training usually coverges much sooner than 10 epochs.\n", "Epoch: 10/10 |█| [01:48<00:00, 10.89s/it] Scores, Best=0.027843, Recent=0.027172\n", "INFO: Mutopia:Finalizing models ...\n", "Training completed successfully. Best test score: 0.02784\n" ] } ], "source": [ "!topo-model train \\\n", " -ds tutorial_data/Liver.train.nc tutorial_data/Liver.test.nc \\\n", " -k 15 \\\n", " -o tutorial_data/cli_trained_model.pkl \\\n", " -@ 5 \\\n", " --seed 42 \\\n", " --locus-subsample 0.125 \\\n", " --eval-every 1 \\\n", " --num-epochs 10 \\\n", " --lazy" ] }, { "cell_type": "markdown", "id": "cb7ef7b3", "metadata": {}, "source": "## 2. Model hyperparameter tuning\n\nHyperparameter optimization provides a convenient way to launch many trial trainings to find the best hyperparameter configurations among them. \n\nTrials are organized under a \"study\". Create a study using the `topo-model study create` command. The most important parameters to specify are the study path (\"studies/liver/01\"), the datasets (you can provide multiple train/test pairs by providing multiple `-ds` flags), the minimum and maximum number of components to try out (`-min` and `-max`, respectively), `--save-model`, which will write models to disk under `studies/` when trials complete, and whatever other parameter values you would like to fix across trials (in this case, just the locus subsample rate, `-lsub`).\n\n**Optional:** By adding `-e` flags (e.g. `-e`, `-ee`, etc.) you can increase how \"extensive\" the hyperparameter tuning is. For no `e`, MuTopia only tunes the number of components. For one `e`, MuTopia tunes the next most important hyperparameters, and so on. If you have the time, one `-e` is a good balance." }, { "cell_type": "code", "execution_count": 8, "id": "a4b2bd05", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Fixing parameters: \n", "Parameter Value\n", "--------------------- ---------\n", "locus_subsample 0.125\n", "init_components ()\n", "fix_components ()\n", "pi_prior 1.0\n", "locus_model_type gbt\n", "use_groups False\n", "add_corpus_intercepts False\n", "empirical_bayes True\n", "stop_condition 50\n", "num_epochs 2000\n", "test_chroms ('chr1',)\n", "\u001b[32m[I 2025-10-20 10:14:26,742]\u001b[0m Using an existing study with name 'mutopia_tuning_study' instead of creating a new one.\u001b[0m\n", "Successfully created optimization study: studies/liver/01\n" ] } ], "source": [ "!topo-model study create \\\n", " \"studies/liver/01\" \\\n", " -ds tutorial_data/Liver.train.nc tutorial_data/Liver.test.nc \\\n", " -min 5 -max 20 \\\n", " --save-model \\\n", " -lsub 0.125" ] }, { "cell_type": "markdown", "id": "b7a9f8cc", "metadata": {}, "source": [ "Now, you can launch trials from the CLI, which makes this easy to parallelize using slurm jobs on a server. Just refer the `study_name` using the path and your runtime options (laziness and number of threads), and you're off!" ] }, { "cell_type": "code", "execution_count": 9, "id": "18a9c84e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "INFO: Mutopia:JIT-compiling model operations ...\n", "INFO: Mutopia:Running trial 1 with params:\n", "\tnum_components: 16\n", "INFO: Mutopia:Initializing model parameters and transformations...\n", "INFO: Mutopia:Found strand features:\n", "\tGeneStrand, ReplicationStrand\n", "INFO: Mutopia:Found mesoscale features:[]\n", "INFO: Mutopia:Found locus features:\n", "\tATACAccessible, DNase, GeneExpression, GenePosition,\n", "\tH3K27ac, H3K27me3, H3K36me3, H3K4me1,\n", "\tH3K4me3, H3K9me3, NucleotideRatio, RepliseqG1b,\n", "\tRepliseqG2, RepliseqS1, RepliseqS2, RepliseqS3,\n", "\tRepliseqS4\n", "INFO: Mutopia:Validating datasets...\n", "INFO: Mutopia:Found n=185 training samples across 1 datasets.\n", "INFO: Mutopia:Preprocessing training datasets...\n", "INFO: Mutopia:Preprocessing testing datasets...\n", "WARNING: Mutopia:Calculating full factor normalizers for updates - this will increase the memory usage, but will reduce variance.\n", "INFO: Mutopia:Using SVI.\n", "INFO: Mutopia:Training model with 5 threads.\n", "INFO: Mutopia:The first few epochs take longer as things get warmed up -\n", "\texpect the time per epoch to decrease about 4-fold.\n", "INFO: Mutopia:Model will stop training if no improvement in the last 50 epochs.\n", "INFO: Mutopia:Training usually coverges much sooner than 2000 epochs.\n", "Epoch: 49/2000 | | [07:30<4:44:44, 8.76s/it] Scores, Best=0.029113, Recent=0.02INFO: Mutopia:Beginning to update priors.\n", "Epoch: 67/2000 | | [10:07<4:43:04, 8.79s/it] Scores, Best=0.029312, Recent=0.02^C\n", "Epoch: 67/2000 | | [10:14<4:55:25, 9.17s/it] Scores, Best=0.029312, Recent=0.02\n", "INFO: Mutopia:Finalizing models ...\n" ] } ], "source": [ "!topo-model study run \"studies/liver/01\" --lazy -@ 5" ] }, { "cell_type": "markdown", "id": "175110dd", "metadata": {}, "source": [ "I usually use this wrapper script to launch job arrays on SLURM servers:\n", "```bash\n", "#!/bin/bash\n", "#SBATCH --ntasks=1\n", "#SBATCH --cpus-per-task=5\n", "#SBATCH --mem-per-cpu=500\n", "#SBATCH --time=05:00:00\n", "#SBATCH --output=logs/%x/%j_%a.log\n", "\n", "study_name=${SLURM_JOB_NAME}\n", "time_limit=$((60*5 - 10)) # in minutes\n", "\n", "echo \"Running trial for study: ${study_name}, time limit: ${time_limit} minutes\"\n", "topo-model study run ${study_name} -@ 5 --lazy --time-limit ${time_limit}\n", "```\n", "\n", "Save this wrapper as `run-trials.sh`. Then, you can launch array jobs for different studies using:\n", "\n", "```bash\n", "$ study_path=\"studies/liver/01\"\n", "$ sbatch --job-name=$study_path --array=1-5%20 run-trials.sh\n", "```\n", "\n", "Start slow, launching a few jobs to see what sort of memory you require, then scale up! Make sure to adjust the job time if needed.\n", "\n", "To look at the results of a study, you can use `topo-model study summary`. You can check out the results by referring to a study via it's path:" ] }, { "cell_type": "code", "execution_count": 14, "id": "01853a8c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Results saved to: results.csv\n", "number,value,state,user_attrs_model_path,num_components\n", "0,0.0023026805200607736,COMPLETE,studies/liver/01/trial=0.pkl,15\n", "1,,RUNNING,studies/liver/01/trial=1.pkl,16\n" ] } ], "source": [ "!topo-model study summary \"studies/liver/01\" -o results.csv\n", "!head -n 3 results.csv" ] }, { "cell_type": "markdown", "id": "10c72905", "metadata": {}, "source": [ "Obviously, this is more exciting if you've run more trials. I included the results from a full tuning run on the the tutorial data to demonstrate how to choose the best model." ] }, { "cell_type": "code", "execution_count": 11, "id": "078c35f6", "metadata": {}, "outputs": [ { "data": { "image/png": "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604U9NmnZcKECS697uPHj0eLFi24UmxERAT69OmDEydO2O2Tm5vL/09DQ0Ph5+eHRx55BHFxcUUe92b/jwjC7UaEiguoX78+YmJirMu2bdsK3XfHjh0YMGAAhg0bhgMHDvCXEC1HjhxBSbNnzx67ea9du5bHH3300UJfQ1UvbV9z4cKFEplrVlYWGjduzDe4gvj888/x7bffYsqUKfj777/5pt+tWzf+Qi+MBQsW4LXXXuO0zv379/Px6TXx8fElNvfs7Gw+97hx4/jn4sWL+abUu3fv2/q5K465WyBhYjuPX3/9tchjusN1J2znTMusWbNYeNBN35XXffPmzSxCdu3axf8nScx27dqV34+FV199FX/++Sc/9ND+JGwffvjhIo97M/9HBKFYoPRkoeR47733zI0bN3Z4/379+pl79OhhN9aqVSvzM888Y3Y1L7/8srl69epmk8lU4PbZs2ebAwMDza6GPuZLliyxrtN8o6KizBMmTLCOpaammjUajfnXX38t9DgtW7Y0jxw50rpuNBrN0dHR5vHjx5fY3Ati9+7dvN+FCxdu2+euuOY+ePBg84MPPujUcdz1utP76Ny5c5H7uOK6x8fH8/w3b95s/Wyr1WrzokWLrPscO3aM99m5c2eBx7jZ/yOCUByIRcUFkPmUzMvVqlXDE088gYsXLxa6786dO9nkags91dC4K9HpdPjpp58wdOjQIhuTZWZmonLlytwA7cEHH8TRo0fhas6dO4fY2Fi76xoYGMguhcKuK73fffv22b2GejnRuqv/FtTFlv4GQUFBt+1zV5xs2rSJXRS1a9fGc889h6SkpEL3ddfrTm6TFStWsKXzRpT0dafPAxESEsI/6fqRlcX2GpL7qVKlSoVew5v5PyIIxYUIlRKG/qNT7MaqVaswefJk/kJo3749MjIyCtyfviwiIyPtxmidxl0J+e9TU1M55qAw6EZE5vE//viDRQ11k27bti0uX74MV2K5ds5c18TERBiNRrf7W5AZnmJWyD1YVHM5Zz93xQW5febNm4f169fjs88+YzdE9+7d+dqWpus+d+5cjgm5kfukpK87/R975ZVXcPfdd6NBgwY8RtfJ09PzOiFb1DW8mf8jglBcSPfkEoa+lC00atSIv8jI4rBw4UKHns7chZkzZ/J7oSfFwmjTpg0vFkik1K1bF1OnTsWHH35YQjMt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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import pandas as pd\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "\n", "results = pd.read_csv(\"tutorial_data/study_results.csv\")\n", "_, ax = plt.subplots(figsize=(4,4))\n", "sns.scatterplot(\n", " data=results,\n", " x=\"num_components\",\n", " y=\"value\",\n", " style=\"state\",\n", " hue=\"state\",\n", " palette=mu.pl.categorical_palette,\n", ")\n", "ax.legend(\n", " title=\"Trial status\",\n", " bbox_to_anchor=(1.05, 1),\n", " loc='upper left'\n", ")\n", "ax.set(\n", " xlabel=\"Number of components\",\n", " ylabel=\"Test score \\u2192\",\n", ")\n", "sns.despine()" ] }, { "cell_type": "code", "execution_count": 12, "id": "07d10df4", "metadata": {}, "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", " \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", "
numbervaluestateuser_attrs_model_pathnum_components
0930.030026COMPLETEstudies/liver/01/trial=93.pkl19
11510.029974COMPLETEstudies/liver/01/trial=151.pkl18
2730.029966COMPLETEstudies/liver/01/trial=73.pkl19
31300.029955COMPLETEstudies/liver/01/trial=130.pkl17
41260.029942COMPLETEstudies/liver/01/trial=126.pkl17
51100.029941COMPLETEstudies/liver/01/trial=110.pkl15
6850.029934COMPLETEstudies/liver/01/trial=85.pkl19
71370.029909PRUNEDNaN20
8970.029904COMPLETEstudies/liver/01/trial=97.pkl19
91140.029896COMPLETEstudies/liver/01/trial=114.pkl17
\n", "
" ], "text/plain": [ " number value state user_attrs_model_path num_components\n", "0 93 0.030026 COMPLETE studies/liver/01/trial=93.pkl 19\n", "1 151 0.029974 COMPLETE studies/liver/01/trial=151.pkl 18\n", "2 73 0.029966 COMPLETE studies/liver/01/trial=73.pkl 19\n", "3 130 0.029955 COMPLETE studies/liver/01/trial=130.pkl 17\n", "4 126 0.029942 COMPLETE studies/liver/01/trial=126.pkl 17\n", "5 110 0.029941 COMPLETE studies/liver/01/trial=110.pkl 15\n", "6 85 0.029934 COMPLETE studies/liver/01/trial=85.pkl 19\n", "7 137 0.029909 PRUNED NaN 20\n", "8 97 0.029904 COMPLETE studies/liver/01/trial=97.pkl 19\n", "9 114 0.029896 COMPLETE studies/liver/01/trial=114.pkl 17" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results.head(10)" ] }, { "cell_type": "markdown", "id": "c71d8420", "metadata": {}, "source": [ "You can select the best model using the \"elbow\" method (`value` versus the `num_components`), and load it from the `user_attrs_model_path` column. In this case, you should choose the model with the least topics that achieves close to the maximum score. Above, the best model with 15 components meets these criteria.\n", "\n", "**Note:** The \"Pruned\" models were determined by the optimization engine to be under-performing, and so their execution was terminated to save computational resources!\n", "\n", "#### MORE IMPORTANT NOTE: HIGHER SCORES ARE BETTER!\n", "\n", "\n", "If a promising model failed to save for some reason (early termination, memory overflow, etc.) you can re-train it with the same parameters using:" ] }, { "cell_type": "code", "execution_count": 15, "id": "bff87b31", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "INFO: Mutopia:JIT-compiling model operations ...\n", "INFO: Mutopia:Initializing model parameters and transformations...\n", "INFO: Mutopia:Found strand features:\n", "\tGeneStrand, ReplicationStrand\n", "INFO: Mutopia:Found mesoscale features:[]\n", "INFO: Mutopia:Found locus features:\n", "\tATACAccessible, DNase, GeneExpression, GenePosition,\n", "\tH3K27ac, H3K27me3, H3K36me3, H3K4me1,\n", "\tH3K4me3, H3K9me3, NucleotideRatio, RepliseqG1b,\n", "\tRepliseqG2, RepliseqS1, RepliseqS2, RepliseqS3,\n", "\tRepliseqS4\n", "INFO: Mutopia:Validating datasets...\n", "INFO: Mutopia:Found n=185 training samples across 1 datasets.\n", "INFO: Mutopia:Preprocessing training datasets...\n", "INFO: Mutopia:Preprocessing testing datasets...\n", "WARNING: Mutopia:Calculating full factor normalizers for updates - this will increase the memory usage, but will reduce variance.\n", "INFO: Mutopia:Using SVI.\n", "INFO: Mutopia:Training model with 5 threads.\n", "INFO: Mutopia:The first few epochs take longer as things get warmed up -\n", "\texpect the time per epoch to decrease about 4-fold.\n", "INFO: Mutopia:Model will stop training if no improvement in the last 50 epochs.\n", "INFO: Mutopia:Training usually coverges much sooner than 2000 epochs.\n", "Epoch: 10/2000 | | [02:06<5:47:50, 10.49s/it] Scores, Best=0.027611, Recent=0.00^C\n", "\n", "Aborted!\n" ] } ], "source": [ "!topo-model study retrain \"studies/liver/01\" 0 \"best_model.pkl\" --lazy -@ 5" ] }, { "cell_type": "markdown", "id": "628688a3", "metadata": {}, "source": [ "To investigate model performance more thoroughly, you can load the `Optuna` study directly using the python API:" ] }, { "cell_type": "code", "execution_count": 16, "id": "bceae9e3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "study, *_ = mu.tuning.load_study(\"studies/liver/01\")\n", "study" ] } ], "metadata": { "kernelspec": { "display_name": "my-mutopia", "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.11" } }, "nbformat": 4, "nbformat_minor": 5 }