diff --git "a/examples/gene_classification.ipynb" "b/examples/gene_classification.ipynb" --- "a/examples/gene_classification.ipynb" +++ "b/examples/gene_classification.ipynb" @@ -2,207 +2,593 @@ "cells": [ { "cell_type": "markdown", - "id": "08f41458-5304-48c5-9e92-f9b56ab052c4", "metadata": {}, "source": [ "## Geneformer Fine-Tuning for Classification of Dosage-Sensitive vs. -Insensitive Transcription Factors (TFs)" ] }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "GPU_NUMBER = [0]\n", + "os.environ[\"CUDA_VISIBLE_DEVICES\"] = \",\".join([str(s) for s in GPU_NUMBER])\n", + "os.environ[\"NCCL_DEBUG\"] = \"INFO\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# imports\n", + "import datetime\n", + "import subprocess\n", + "import math\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "from datasets import load_from_disk\n", + "from sklearn import preprocessing\n", + "from sklearn.metrics import accuracy_score, auc, confusion_matrix, ConfusionMatrixDisplay, roc_curve\n", + "from sklearn.model_selection import StratifiedKFold\n", + "import torch\n", + "from transformers import BertForTokenClassification\n", + "from transformers import Trainer\n", + "from transformers.training_args import TrainingArguments\n", + "from tqdm.notebook import tqdm\n", + "\n", + "from geneformer import DataCollatorForGeneClassification\n", + "from geneformer.pretrainer import token_dictionary" + ] + }, { "cell_type": "markdown", - "id": "79539e95-2c9c-4162-835c-f0d158abb15d", "metadata": {}, "source": [ - "### Please note that, as usual with deep learning models, we **highly** recommend tuning learning hyperparameters for all fine-tuning applications as this can significantly improve model performance. Example below uses default hyperparameters, but please see the \"hyperparam_optimiz_for_disease_classifier\" script for an example of how to tune hyperparameters for downstream applications." + "## Load Gene Attribute Information" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "# table of corresponding Ensembl IDs, gene names, and gene types (e.g. coding, miRNA, etc.)\n", + "gene_info = pd.read_csv(\"/path/to/gene_info_table.csv\", index_col=0)\n", + "\n", + "# create dictionaries for corresponding attributes\n", + "gene_id_type_dict = dict(zip(gene_info[\"ensembl_id\"],gene_info[\"gene_type\"]))\n", + "gene_name_id_dict = dict(zip(gene_info[\"gene_name\"],gene_info[\"ensembl_id\"]))\n", + "gene_id_name_dict = {v: k for k,v in gene_name_id_dict.items()}" ] }, { "cell_type": "markdown", - "id": "51b4852a-9f03-4bc3-ba33-79eaa4582d50", "metadata": {}, "source": [ - "### Train gene classifier with 5-fold cross-validation:" + "## Load Training Data and Class Labels" ] }, { "cell_type": "code", - "execution_count": 1, - "id": "58d59e09-5e6c-4fba-ba2b-3aee103869fd", + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ - "import datetime\n", - "import pickle\n", - "from geneformer import Classifier\n", + "# function for preparing targets and labels\n", + "def prep_inputs(genegroup1, genegroup2, id_type):\n", + " if id_type == \"gene_name\":\n", + " targets1 = [gene_name_id_dict[gene] for gene in genegroup1 if gene_name_id_dict.get(gene) in token_dictionary]\n", + " targets2 = [gene_name_id_dict[gene] for gene in genegroup2 if gene_name_id_dict.get(gene) in token_dictionary]\n", + " elif id_type == \"ensembl_id\":\n", + " targets1 = [gene for gene in genegroup1 if gene in token_dictionary]\n", + " targets2 = [gene for gene in genegroup2 if gene in token_dictionary]\n", + " \n", + " targets1_id = [token_dictionary[gene] for gene in targets1]\n", + " targets2_id = [token_dictionary[gene] for gene in targets2]\n", + " \n", + " targets = np.array(targets1_id + targets2_id)\n", + " labels = np.array([0]*len(targets1_id) + [1]*len(targets2_id))\n", + " nsplits = min(5, min(len(targets1_id), len(targets2_id))-1)\n", + " assert nsplits > 2\n", + " print(f\"# targets1: {len(targets1_id)}\\n# targets2: {len(targets2_id)}\\n# splits: {nsplits}\")\n", + " return targets, labels, nsplits" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# preparing targets and labels for dosage sensitive vs insensitive TFs\n", + "dosage_tfs = pd.read_csv(\"/path/to/dosage_sens_tf_labels.csv\", header=0)\n", + "sensitive = dosage_tfs[\"dosage_sensitive\"].dropna()\n", + "insensitive = dosage_tfs[\"dosage_insensitive\"].dropna()\n", + "targets, labels, nsplits = prep_inputs(sensitive, insensitive, \"ensembl_id\")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# load training dataset\n", + "train_dataset=load_from_disk(\"/path/to/gene_train_data.dataset\")\n", + "shuffled_train_dataset = train_dataset.shuffle(seed=42)\n", + "subsampled_train_dataset = shuffled_train_dataset.select([i for i in range(50_000)])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Define Functions for Training and Cross-Validating Classifier" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "def preprocess_classifier_batch(cell_batch, max_len):\n", + " if max_len == None:\n", + " max_len = max([len(i) for i in cell_batch[\"input_ids\"]])\n", + " def pad_label_example(example):\n", + " example[\"labels\"] = np.pad(example[\"labels\"], \n", + " (0, max_len-len(example[\"input_ids\"])), \n", + " mode='constant', constant_values=-100)\n", + " example[\"input_ids\"] = np.pad(example[\"input_ids\"], \n", + " (0, max_len-len(example[\"input_ids\"])), \n", + " mode='constant', constant_values=token_dictionary.get(\"\"))\n", + " example[\"attention_mask\"] = (example[\"input_ids\"] != token_dictionary.get(\"\")).astype(int)\n", + " return example\n", + " padded_batch = cell_batch.map(pad_label_example)\n", + " return padded_batch\n", "\n", - "current_date = datetime.datetime.now()\n", - "datestamp = f\"{str(current_date.year)[-2:]}{current_date.month:02d}{current_date.day:02d}{current_date.hour:02d}{current_date.minute:02d}{current_date.second:02d}\"\n", - "datestamp_min = f\"{str(current_date.year)[-2:]}{current_date.month:02d}{current_date.day:02d}\"\n", + "# forward batch size is batch size for model inference (e.g. 200)\n", + "def classifier_predict(model, evalset, forward_batch_size, mean_fpr):\n", + " predict_logits = []\n", + " predict_labels = []\n", + " model.eval()\n", + " \n", + " # ensure there is at least 2 examples in each batch to avoid incorrect tensor dims\n", + " evalset_len = len(evalset)\n", + " max_divisible = find_largest_div(evalset_len, forward_batch_size)\n", + " if len(evalset) - max_divisible == 1:\n", + " evalset_len = max_divisible\n", + " \n", + " max_evalset_len = max(evalset.select([i for i in range(evalset_len)])[\"length\"])\n", + " \n", + " for i in range(0, evalset_len, forward_batch_size):\n", + " max_range = min(i+forward_batch_size, evalset_len)\n", + " batch_evalset = evalset.select([i for i in range(i, max_range)])\n", + " padded_batch = preprocess_classifier_batch(batch_evalset, max_evalset_len)\n", + " padded_batch.set_format(type=\"torch\")\n", + " \n", + " input_data_batch = padded_batch[\"input_ids\"]\n", + " attn_msk_batch = padded_batch[\"attention_mask\"]\n", + " label_batch = padded_batch[\"labels\"]\n", + " with torch.no_grad():\n", + " outputs = model(\n", + " input_ids = input_data_batch.to(\"cuda\"), \n", + " attention_mask = attn_msk_batch.to(\"cuda\"), \n", + " labels = label_batch.to(\"cuda\"), \n", + " )\n", + " predict_logits += [torch.squeeze(outputs.logits.to(\"cpu\"))]\n", + " predict_labels += [torch.squeeze(label_batch.to(\"cpu\"))]\n", + " \n", + " logits_by_cell = torch.cat(predict_logits)\n", + " all_logits = logits_by_cell.reshape(-1, logits_by_cell.shape[2])\n", + " labels_by_cell = torch.cat(predict_labels)\n", + " all_labels = torch.flatten(labels_by_cell)\n", + " logit_label_paired = [item for item in list(zip(all_logits.tolist(), all_labels.tolist())) if item[1]!=-100]\n", + " y_pred = [vote(item[0]) for item in logit_label_paired]\n", + " y_true = [item[1] for item in logit_label_paired]\n", + " logits_list = [item[0] for item in logit_label_paired]\n", + " # probability of class 1\n", + " y_score = [py_softmax(item)[1] for item in logits_list]\n", + " conf_mat = confusion_matrix(y_true, y_pred)\n", + " fpr, tpr, _ = roc_curve(y_true, y_score)\n", + " # plot roc_curve for this split\n", + " plt.plot(fpr, tpr)\n", + " plt.xlim([0.0, 1.0])\n", + " plt.ylim([0.0, 1.05])\n", + " plt.xlabel('False Positive Rate')\n", + " plt.ylabel('True Positive Rate')\n", + " plt.title('ROC')\n", + " plt.show()\n", + " # interpolate to graph\n", + " interp_tpr = np.interp(mean_fpr, fpr, tpr)\n", + " interp_tpr[0] = 0.0\n", + " return fpr, tpr, interp_tpr, conf_mat \n", "\n", - "output_prefix = \"tf_dosage_sens_test\"\n", - "output_dir = f\"/path/to/output_dir/{datestamp}\"\n", - "!mkdir $output_dir" + "def vote(logit_pair):\n", + " a, b = logit_pair\n", + " if a > b:\n", + " return 0\n", + " elif b > a:\n", + " return 1\n", + " elif a == b:\n", + " return \"tie\"\n", + " \n", + "def py_softmax(vector):\n", + "\te = np.exp(vector)\n", + "\treturn e / e.sum()\n", + " \n", + "# get cross-validated mean and sd metrics\n", + "def get_cross_valid_metrics(all_tpr, all_roc_auc, all_tpr_wt):\n", + " wts = [count/sum(all_tpr_wt) for count in all_tpr_wt]\n", + " print(wts)\n", + " all_weighted_tpr = [a*b for a,b in zip(all_tpr, wts)]\n", + " mean_tpr = np.sum(all_weighted_tpr, axis=0)\n", + " mean_tpr[-1] = 1.0\n", + " all_weighted_roc_auc = [a*b for a,b in zip(all_roc_auc, wts)]\n", + " roc_auc = np.sum(all_weighted_roc_auc)\n", + " roc_auc_sd = math.sqrt(np.average((all_roc_auc-roc_auc)**2, weights=wts))\n", + " return mean_tpr, roc_auc, roc_auc_sd\n", + "\n", + "# Function to find the largest number smaller\n", + "# than or equal to N that is divisible by k\n", + "def find_largest_div(N, K):\n", + " rem = N % K\n", + " if(rem == 0):\n", + " return N\n", + " else:\n", + " return N - rem" ] }, { "cell_type": "code", - "execution_count": 2, - "id": "9e33942f-39e4-4db4-a3de-5949bed9fa5d", + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ - "# Example input_data_file: https://huggingface.co/datasets/ctheodoris/Genecorpus-30M/blob/main/example_input_files/gene_classification/dosage_sensitive_tfs/dosage_sensitivity_TFs.pickle\n", - "with open(\"/path/to/dosage_sensitivity_TFs.pickle\", \"rb\") as fp:\n", - " gene_class_dict = pickle.load(fp)" + "# cross-validate gene classifier\n", + "def cross_validate(data, targets, labels, nsplits, subsample_size, training_args, freeze_layers, output_dir, num_proc):\n", + " # check if output directory already written to\n", + " # ensure not overwriting previously saved model\n", + " model_dir_test = os.path.join(output_dir, \"ksplit0/models/pytorch_model.bin\")\n", + " if os.path.isfile(model_dir_test) == True:\n", + " raise Exception(\"Model already saved to this directory.\")\n", + " \n", + " # initiate eval metrics to return\n", + " num_classes = len(set(labels))\n", + " mean_fpr = np.linspace(0, 1, 100)\n", + " all_tpr = []\n", + " all_roc_auc = []\n", + " all_tpr_wt = []\n", + " label_dicts = []\n", + " confusion = np.zeros((num_classes,num_classes))\n", + " \n", + " # set up cross-validation splits\n", + " skf = StratifiedKFold(n_splits=nsplits, random_state=0, shuffle=True)\n", + " # train and evaluate\n", + " iteration_num = 0\n", + " for train_index, eval_index in tqdm(skf.split(targets, labels)):\n", + " if len(labels) > 500:\n", + " print(\"early stopping activated due to large # of training examples\")\n", + " nsplits = 3\n", + " if iteration_num == 3:\n", + " break\n", + " print(f\"****** Crossval split: {iteration_num}/{nsplits-1} ******\\n\")\n", + " # generate cross-validation splits\n", + " targets_train, targets_eval = targets[train_index], targets[eval_index]\n", + " labels_train, labels_eval = labels[train_index], labels[eval_index]\n", + " label_dict_train = dict(zip(targets_train, labels_train))\n", + " label_dict_eval = dict(zip(targets_eval, labels_eval))\n", + " label_dicts += (iteration_num, targets_train, targets_eval, labels_train, labels_eval)\n", + " \n", + " # function to filter by whether contains train or eval labels\n", + " def if_contains_train_label(example):\n", + " a = label_dict_train.keys()\n", + " b = example['input_ids']\n", + " return not set(a).isdisjoint(b)\n", + "\n", + " def if_contains_eval_label(example):\n", + " a = label_dict_eval.keys()\n", + " b = example['input_ids']\n", + " return not set(a).isdisjoint(b)\n", + " \n", + " # filter dataset for examples containing classes for this split\n", + " print(f\"Filtering training data\")\n", + " trainset = data.filter(if_contains_train_label, num_proc=num_proc)\n", + " print(f\"Filtered {round((1-len(trainset)/len(data))*100)}%; {len(trainset)} remain\\n\")\n", + " print(f\"Filtering evalation data\")\n", + " evalset = data.filter(if_contains_eval_label, num_proc=num_proc)\n", + " print(f\"Filtered {round((1-len(evalset)/len(data))*100)}%; {len(evalset)} remain\\n\")\n", + "\n", + " # minimize to smaller training sample\n", + " training_size = min(subsample_size, len(trainset))\n", + " trainset_min = trainset.select([i for i in range(training_size)])\n", + " eval_size = min(training_size, len(evalset))\n", + " half_training_size = round(eval_size/2)\n", + " evalset_train_min = evalset.select([i for i in range(half_training_size)])\n", + " evalset_oos_min = evalset.select([i for i in range(half_training_size, eval_size)])\n", + " \n", + " # label conversion functions\n", + " def generate_train_labels(example):\n", + " example[\"labels\"] = [label_dict_train.get(token_id, -100) for token_id in example[\"input_ids\"]]\n", + " return example\n", + "\n", + " def generate_eval_labels(example):\n", + " example[\"labels\"] = [label_dict_eval.get(token_id, -100) for token_id in example[\"input_ids\"]]\n", + " return example\n", + " \n", + " # label datasets \n", + " print(f\"Labeling training data\")\n", + " trainset_labeled = trainset_min.map(generate_train_labels)\n", + " print(f\"Labeling evaluation data\")\n", + " evalset_train_labeled = evalset_train_min.map(generate_eval_labels)\n", + " print(f\"Labeling evaluation OOS data\")\n", + " evalset_oos_labeled = evalset_oos_min.map(generate_eval_labels)\n", + " \n", + " # create output directories\n", + " ksplit_output_dir = os.path.join(output_dir, f\"ksplit{iteration_num}\")\n", + " ksplit_model_dir = os.path.join(ksplit_output_dir, \"models/\") \n", + " \n", + " # ensure not overwriting previously saved model\n", + " model_output_file = os.path.join(ksplit_model_dir, \"pytorch_model.bin\")\n", + " if os.path.isfile(model_output_file) == True:\n", + " raise Exception(\"Model already saved to this directory.\")\n", + "\n", + " # make training and model output directories\n", + " subprocess.call(f'mkdir {ksplit_output_dir}', shell=True)\n", + " subprocess.call(f'mkdir {ksplit_model_dir}', shell=True)\n", + " \n", + " # load model\n", + " model = BertForTokenClassification.from_pretrained(\n", + " \"/gladstone/theodoris/lab/ctheodoris/archive/geneformer_files/geneformer/210602_111318_geneformer_27M_L6_emb256_SL2048_E3_B12_LR0.001_LSlinear_WU10000_Oadamw_DS12/models/\",\n", + " num_labels=2,\n", + " output_attentions = False,\n", + " output_hidden_states = False\n", + " )\n", + " if freeze_layers is not None:\n", + " modules_to_freeze = model.bert.encoder.layer[:freeze_layers]\n", + " for module in modules_to_freeze:\n", + " for param in module.parameters():\n", + " param.requires_grad = False\n", + " \n", + " model = model.to(\"cuda:0\")\n", + " \n", + " # add output directory to training args and initiate\n", + " training_args[\"output_dir\"] = ksplit_output_dir\n", + " training_args_init = TrainingArguments(**training_args)\n", + " \n", + " # create the trainer\n", + " trainer = Trainer(\n", + " model=model,\n", + " args=training_args_init,\n", + " data_collator=DataCollatorForGeneClassification(),\n", + " train_dataset=trainset_labeled,\n", + " eval_dataset=evalset_train_labeled\n", + " )\n", + "\n", + " # train the gene classifier\n", + " trainer.train()\n", + " \n", + " # save model\n", + " trainer.save_model(ksplit_model_dir)\n", + " \n", + " # evaluate model\n", + " fpr, tpr, interp_tpr, conf_mat = classifier_predict(trainer.model, evalset_oos_labeled, 200, mean_fpr)\n", + " \n", + " # append to tpr and roc lists\n", + " confusion = confusion + conf_mat\n", + " all_tpr.append(interp_tpr)\n", + " all_roc_auc.append(auc(fpr, tpr))\n", + " # append number of eval examples by which to weight tpr in averaged graphs\n", + " all_tpr_wt.append(len(tpr))\n", + " \n", + " iteration_num = iteration_num + 1\n", + " \n", + " # get overall metrics for cross-validation\n", + " mean_tpr, roc_auc, roc_auc_sd = get_cross_valid_metrics(all_tpr, all_roc_auc, all_tpr_wt)\n", + " return all_roc_auc, roc_auc, roc_auc_sd, mean_fpr, mean_tpr, confusion, label_dicts" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Define Functions for Plotting Results" ] }, { "cell_type": "code", - "execution_count": 3, - "id": "f4053ee9-3506-4c97-b544-8d667f0adfab", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "# plot ROC curve\n", + "def plot_ROC(bundled_data, title):\n", + " plt.figure()\n", + " lw = 2\n", + " for roc_auc, roc_auc_sd, mean_fpr, mean_tpr, sample, color in bundled_data:\n", + " plt.plot(mean_fpr, mean_tpr, color=color,\n", + " lw=lw, label=\"{0} (AUC {1:0.2f} $\\pm$ {2:0.2f})\".format(sample, roc_auc, roc_auc_sd))\n", + " plt.plot([0, 1], [0, 1], color='black', lw=lw, linestyle='--')\n", + " plt.xlim([0.0, 1.0])\n", + " plt.ylim([0.0, 1.05])\n", + " plt.xlabel('False Positive Rate')\n", + " plt.ylabel('True Positive Rate')\n", + " plt.title(title)\n", + " plt.legend(loc=\"lower right\")\n", + " plt.show()\n", + " \n", + "# plot confusion matrix\n", + "def plot_confusion_matrix(classes_list, conf_mat, title):\n", + " display_labels = []\n", + " i = 0\n", + " for label in classes_list:\n", + " display_labels += [\"{0}\\nn={1:.0f}\".format(label, sum(conf_mat[:,i]))]\n", + " i = i + 1\n", + " display = ConfusionMatrixDisplay(confusion_matrix=preprocessing.normalize(conf_mat, norm=\"l1\"), \n", + " display_labels=display_labels)\n", + " display.plot(cmap=\"Blues\",values_format=\".2g\")\n", + " plt.title(title)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Fine-Tune With Gene Classification Learning Objective and Quantify Predictive Performance" + ] + }, + { + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Hyperparameter tuning is highly recommended for optimal results. No training_args provided; using default hyperparameters.\n" - ] - } - ], "source": [ - "# OF NOTE: token_dictionary_file must be set to the gc-30M token dictionary if using a 30M series model\n", - "# (otherwise the Classifier will use the current default model dictionary)\n", - "# 30M token dictionary: https://huggingface.co/ctheodoris/Geneformer/blob/main/geneformer/gene_dictionaries_30m/token_dictionary_gc30M.pkl\n", - "cc = Classifier(classifier=\"gene\",\n", - " gene_class_dict = gene_class_dict,\n", - " max_ncells = 10_000,\n", - " freeze_layers = 4,\n", - " num_crossval_splits = 5,\n", - " forward_batch_size=200,\n", - " nproc=16)" + "### Please note that, as usual with deep learning models, we **highly** recommend tuning learning hyperparameters for all fine-tuning applications as this can significantly improve model performance. Example hyperparameters are defined below, but please see the \"hyperparam_optimiz_for_disease_classifier\" script for an example of how to tune hyperparameters for downstream applications." ] }, { "cell_type": "code", - "execution_count": 4, - "id": "e4855e53-1cd7-4af0-b786-02b6c0e55f8c", + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "6a3f7bcf2a314368b00f49c74a775571", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Saving the dataset (0/1 shards): 0%| | 0/33558 [00:00:45: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", " batch = {k: torch.tensor(v, dtype=torch.int64) for k, v in batch.items()}\n" ] }, @@ -213,55 +599,47 @@ "
\n", " \n", " \n", - " [834/834 02:37, Epoch 1/1]\n", + " [834/834 01:33, Epoch 1/1]\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", "
StepTraining Loss
830.729100
1660.667600
2490.5531001000.684000
3320.4091002000.617600
4150.2943003000.477400
4980.1970004000.334300
5810.1383005000.229500
6640.0999006000.152700
7470.0837007000.125600
8300.0723008000.104900

" @@ -274,77 +652,108 @@ "output_type": "display_data" }, { - "name": "stdout", + "name": "stderr", "output_type": "stream", "text": [ - "****** Validation split: 2/5 ******\n", - "\n" + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-4d8947ed4c65f4a4.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-8a83f628e23d5548.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-c6c437341faa1cfe.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-2010c177e27e09d1.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-15543d980ad3cbb0.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-a81a942ab15e4aa3.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-5d2c963673bb1115.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-6c7cc476a9d722c3.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-e274abd189113bba.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-1aedba9e0b982e5c.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-6668161997480231.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-d802b8093fb9c6f7.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-3ea48baa5fe880e2.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-86024b6184e99afe.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-7a47db2c9f9758a4.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-af1f6b8f743677db.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-67cffffa35fa22f7.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-81ed63bd02a44ee5.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-6e5a21d4d57e333d.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-eecde81c07e6d036.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-fcc19fab82bb7115.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-ea856d7fa4e78b24.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-698344adb3749f61.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-ee3f9e89abdbee4c.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-d98fd9d7fda61d3b.arrow\n" ] }, { "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "d186836393d84c19b9c0dffafb31a09c", - "version_major": 2, - "version_minor": 0 - }, + "image/png": "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", "text/plain": [ - "Filter (num_proc=16): 0%| | 0/33558 [00:00" ] }, "metadata": {}, "output_type": "display_data" }, { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "26cb17f7d5b7440192ed7ada0070fa7d", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Filter (num_proc=16): 0%| | 0/33558 [00:00:45: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", " batch = {k: torch.tensor(v, dtype=torch.int64) for k, v in batch.items()}\n" ] }, @@ -355,55 +764,47 @@ "

\n", " \n", " \n", - " [834/834 02:34, Epoch 1/1]\n", + " [834/834 01:33, Epoch 1/1]\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", "
StepTraining Loss
830.695400
1660.6346001000.658900
2490.5402002000.585400
3320.4148003000.474600
4150.2985004000.346600
4980.1991005000.257400
5810.1332006000.185800
6640.0963007000.134200
7470.078100
8300.0681008000.114500

" @@ -416,77 +817,96 @@ "output_type": "display_data" }, { - "name": "stdout", + "name": "stderr", "output_type": "stream", "text": [ - "****** Validation split: 3/5 ******\n", - "\n" + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-cbfcb02a16dd9d81.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-b151d664d8c68613.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-52266cf801a76344.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-5c7ceff44bad692c.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-81bcbb23e61bfc0c.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-e99a8c7eedd34769.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-6d7d5150907035d9.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-735b525b0abf0f74.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-9a47cf8290cd2f6b.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-56deb15eec02ca33.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-2aea162267b33f73.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-3bc7a169c841323d.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-1f67206928846c7a.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-88375062775280fb.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-bb45ebd2db699b53.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-fd6e4344cc2f8033.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-b8a9338cde5e5801.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-c013876f43a71ad7.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-148c328cb89da5c3.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-488b3d116a6d3b19.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-835e3e1538e24397.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-d176e8ab14f1ce28.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-3451fb13f869a5b0.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-56f270f895acc3ff.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-db497551e7a1e808.arrow\n" ] }, { "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "93e9c12bc6e243b39224994add37ce21", - "version_major": 2, - "version_minor": 0 - }, + "image/png": "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", "text/plain": [ - "Filter (num_proc=16): 0%| | 0/33558 [00:00" ] }, "metadata": {}, "output_type": "display_data" }, { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "dc429098c2a14f00be1e5921cde897dc", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Filter (num_proc=16): 0%| | 0/33558 [00:00:45: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", " batch = {k: torch.tensor(v, dtype=torch.int64) for k, v in batch.items()}\n" ] }, @@ -497,55 +917,47 @@ "

\n", " \n", " \n", - " [834/834 02:35, Epoch 1/1]\n", + " [834/834 01:33, Epoch 1/1]\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", "
StepTraining Loss
830.708600
1660.656300
2490.5536001000.645900
3320.4306002000.582800
4150.3000003000.461700
4980.2029004000.350200
5810.1447005000.262800
6640.1099006000.180400
7470.0960007000.140900
8300.0867008000.109600

" @@ -558,77 +970,84 @@ "output_type": "display_data" }, { - "name": "stdout", + "name": "stderr", "output_type": "stream", "text": [ - "****** Validation split: 4/5 ******\n", - "\n" + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-8e85e7414566994a.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-e2704cdfc217c3e3.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-e213b038886d7cd4.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-d6c9eba9fe9ffafc.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-442181417de57bb6.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-0d8563be811b9c30.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-85690e0bf5863858.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-3bdda0a32e054f19.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-3abe0ffb170c29f0.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-b132478871346000.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-09db8f6a69301008.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-34ae599619e2ced6.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-c74b97625f913f63.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-228b6002a6690208.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-d644cc9c55478a2a.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-d3d097800ebd687c.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-2e536900ba2b88cc.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-0434f2adbb78af27.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-926036de71570e84.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-d7f012de8332824e.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-57a002ae2aa9ba42.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-0476d5fed302e1c5.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-69341790285e8ce2.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-ee190fa69ba78df3.arrow\n", + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-4b3dc879e23e8e63.arrow\n" ] }, { "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "1a9cebe980534274907ae3858a706c37", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Filter (num_proc=16): 0%| | 0/33558 [00:00" ] }, "metadata": {}, "output_type": "display_data" }, { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "7e3be2a6e2084240b6f657964466ccf2", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Map (num_proc=16): 0%| | 0/10000 [00:00:45: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", " batch = {k: torch.tensor(v, dtype=torch.int64) for k, v in batch.items()}\n" ] }, @@ -639,55 +1058,47 @@ "

\n", " \n", " \n", - " [834/834 02:35, Epoch 1/1]\n", + " [834/834 01:32, Epoch 1/1]\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", "
StepTraining Loss
830.6975001000.660300
1660.6320002000.588000
2490.5246003000.465400
3320.3943004000.331400
4150.2647005000.241100
4980.1801006000.168800
5810.1283007000.136600
6640.094200
7470.082200
8300.0785008000.113900

" @@ -700,530 +1111,1300 @@ "output_type": "display_data" }, { - "name": "stdout", + "name": "stderr", "output_type": "stream", "text": [ - "****** Validation split: 5/5 ******\n", - "\n" + "Loading cached processed dataset at /n/holyscratch01/xiaoleliu_lab/Users/ctheodoris/datasets/geneformer_corpus_2048_sorted.dataset/cache-c438e6f7f8463bbc.arrow\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "455067153dc145cba4e3cfdc63f129cc", + "model_id": "6f8a9dd0a5754dec845c0022470a8c96", "version_major": 2, "version_minor": 0 }, "text/plain": [ - "Filter (num_proc=16): 0%| | 0/33558 [00:00\n", - " \n", - " \n", - " [834/834 02:35, Epoch 1/1]\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", - "
StepTraining Loss
830.711400
1660.644000
2490.535900
3320.395400
4150.275400
4980.193600
5810.129300
6640.093300
7470.070000
8300.067100

" - ], + "application/vnd.jupyter.widget-view+json": { + "model_id": "17799d65feac4638a0071df44f6432db", + "version_major": 2, + "version_minor": 0 + }, "text/plain": [ - "" + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" - } - ], - "source": [ - "# 6 layer 30M Geneformer model: https://huggingface.co/ctheodoris/Geneformer/blob/main/gf-6L-30M-i2048/model.safetensors\n", - "all_metrics = cc.validate(model_directory=\"/path/to/Geneformer\",\n", - " prepared_input_data_file=f\"{output_dir}/{output_prefix}_labeled.dataset\",\n", - " id_class_dict_file=f\"{output_dir}/{output_prefix}_id_class_dict.pkl\",\n", - " output_directory=output_dir,\n", - " output_prefix=output_prefix)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "11a1329b-4968-45f3-ac7a-2438b574404e", - "metadata": {}, - "outputs": [ + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, { "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "e103daf395794272989c209b32c12afc", + "version_major": 2, + "version_minor": 0 + }, "text/plain": [ - "

" + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, { "data": { - "image/png": "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VYlvpVIpxo0bh8zMTISGhuLTTz/FwYMHsXDhwjKPe/LkCaKiotCpUyeEhIQgODgYhYWFGD58OK5fv16hPjCDSkRERESCPXv2QCqVIiYmBjo6OgAAVVVVBAYGwt/fHxYWFiUeZ2pqiuPHj6Nhw4ZCWadOndCzZ0/s2rULwcHB5e4DM6hERERESkZUxVdVxMbGwt3dXQhOAcDLywtisRinTp0q9ThNTU254BQA1NXVYWFhgefPn1eoDwxQiYiIiJRNLUaoCQkJCllSsVgMMzMzJCQkVKitrKws3Lx5E61atarQcRziJyIiIvoXSkpKwkcffVTq5ydOnCixXCqVQiKRKJRLJBKkp6dXqA/r1q3D69evMXr06AodxwCViIiISMnU9ir+kshkMogq8AzWgwcPIiIiAosXL0aLFi0qdC4GqERERERKpgJxYKmMjIxKzZKWRSKRQCqVKpRnZGSUukDqn86cOYP58+fDz88Po0aNqnAfOAeViIiISMnU5iIpCwsLhbmmubm5ePDgQbkC1KtXr2L69Ono06cPPvnkk0r1gQEqEREREQk8PDwQFxeH1NRUoez48ePIzc2Fp6dnmccmJCRg0qRJcHJyQnBwcIWmBLyJASoRERGREhGh6hv1VyWLOnz4cGhrayMgIACnT59GTEwMli9fDl9fX7kM6meffQYbGxvh/cuXL+Hn5wc1NTV8+OGHuH79Oi5fvozLly/jxo0bFeoD56ASERERKZ3aWyQlkUgQERGBoKAgzJgxAxoaGvDx8UFgYKBcvcLCQhQUFAjv7927h6SkJADA+PHj5eqamJjg5MmT5e4DA1QiIiIikmNubo7w8PAy66xcuRIrV64U3ru5ueH27dvVcn4GqERERERKpjpW8ddlDFCJiIiIlEw9j0+5SIqIiIiIlAszqERERERKhkP8RERERKRERNXwqNO6HeFyiJ+IiIiIlAozqERERETKpm4nQKuMASoRERGRkqnn8SkDVCIiIiKlIqqGRVJ1PMLlHFQiIiIiUirMoBIREREpmaqv4q/bGKASERERKZv6HZ9yiJ+IiIiIlAszqERERERKRISqJ1DregKWASoRERGRkqnvjzrlED8RERERKRVmUImIiIiUDFfxExEREZFS4RA/EREREZESYYBKREREREqFQ/xERERESqa+D/EzQCUiIiJSMvV9kRSH+ImIiIhI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", + "application/vnd.jupyter.widget-view+json": { + "model_id": "81053043727a4c1dbe23304e5ad6282a", + "version_major": 2, + "version_minor": 0 + }, "text/plain": [ - "
" + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, { "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "5d1d3f2835b74004b267d67d04c24663", + "version_major": 2, + "version_minor": 0 + }, "text/plain": [ - "
" + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" - } - ], - "source": [ - "cc.plot_conf_mat(\n", - " conf_mat_dict={\"Geneformer\": all_metrics[\"conf_matrix\"]},\n", - " output_directory=output_dir,\n", - " output_prefix=output_prefix,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "edf6ffd9-8b84-4d31-8b39-11959140382f", - "metadata": {}, - "outputs": [ + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA5cAAALvCAYAAADxkzH9AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd1hTZxsG8DtMGSLTrRUVUHGBe1J3pYoTZx11a7WOah211dpqHXXUOmtddSKKW9u66lYEHDgQF+7BVkCZ5/sjH8eEBAgkcALcv+vKRfK+b855AgnJk3fJBEEQQERERERERKQFA6kDICIiIiIiooKPySURERERERFpjcklERERERERaY3JJREREREREWmNySURERERERFpjcklERERERERaY3JJREREREREWmNySURERERERFpjcklERERERERaY3JJRFREda6dWu4uLjAxcUFz54909lxp02bJh7Xz89PZ8cl/TBgwADx73v58mWpw6EspP+dXFxcdHrcovocSE1Nha+vL4YMGYKmTZuiZs2a4u9h2rRpUodHJDkjqQMg0tSAAQPg7++vts7ExATFixeHpaUl7OzsUKNGDdSoUQONGzdGuXLl8jlSIiIiKmySkpIwfPhwXLp0SepQiPQWk0sqFJKSkhAZGYnIyEg8fvwYQUFBAAADAwM0a9YMAwYMgIeHh8RREhVM06ZNw969ewEAv/zyC7p37y5xRESkS4pf3v71119o1KiRxBHpp40bNyollg0bNkTFihVhamoKAKhTp45UoWns2bNnaNOmDQCgXLlyOHnypMQRUWHD5JIKpFq1aqF27dri7bS0NLx79w7v3r3D/fv38fz5c7H87NmzOHv2LLp06YLvv/8exYsXlypsIiIiKqDSv2QDgAULFqBr167SBUOkp5hcUoHk4eGBcePGZVofHh6O/fv3Y8uWLXj16hUAYP/+/bh//z62bdsGMzOz/AqVSK/l1bfW8+fPx/z58/Pk2CS9LVu2SB0Caeju3bt5ctyi9hx4//49Hj16BAAwNjaGl5eXxBER6Scu6EOFkoODA4YNG4YjR47gs88+E8tv3bqFqVOnShgZERERFTRv374Vr9vb28PAgB+hidThK4MKNQsLCyxbtgytWrUSy/75558itbIdERERaSc5OVm8zsSSKHMyQRAEqYMg0oTiggNjx47NclhsRjEx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tWrV4Ofnh3PnzuH48eMICgrCmzdv8O7dO5iYmMDGxgaOjo6oU6cOmjdvDjc3N52viNumTRtYWloqzfvUpHemVKlSuHz5Mi5duoSAgADcunULT548EedGWVhYoGzZsqhVqxY8PT3RtGlTncatz1avXo3bt2/j4sWLuHHjBh48eIBXr17h/fv3MDExga2tLZydneHh4YHOnTtrNJT6iy++QNeuXbF//35cuHABISEhiIqKQlJSEiwsLFCqVCk4OTmhYcOG8PDwyNX7SW7kxWPNzoQJE+Du7o49e/bg5s2biIyMzNG+hprI7esiIyneY3LKzc0Nhw8fxubNm3Hq1CnxCzkHBwe4urrCy8srR1sSpatWrRr27duH48eP4/jx47h27RoiIiLw/v17WFpaonz58qhduzZatWqV6RdzlpaW8PX1xY4dO3Dq1Ck8ePAA7969y3b+pa4+G+VGnTp1cOHCBVy4cEHc6/XJkyeIiYlBWloaLC0tUaFCBdStWxdeXl5KK4hT/pIJBXmZNCLKF2FhYeKCKo6OjmrnZxIRERFR0ca+YiLKluKiSNoOiyIiIiKiwonJJRFl6fnz59iwYYN4u1OnThJGQ0RERET6isklURE2YcIE/PPPP5luLXH27Fn069dPnG/p7Oyco8VViIiIiKjo4JxLoiKsdevWeP78OSwsLODq6opy5crBxMQEMTExCA4OVtqI2NzcHNu3b5dkYQQiIiIi0n9cLZaIEB8fD39//0zrK1SogGXLljGxJCIiIqJMseeSqAh7+vQpjh07hoCAADx9+hTR0dGIiYmBsbExbG1t4erqilatWqFTp075sn8jERERERVcTC4LoPr16yMpKQkODg5Sh0JERERERBIKDw+HiYkJAgICpA6Fw2ILosTERKSmpkodBhERERERSSwlJQX60l/I5LIAKlmyJADgxIkTEkdCRERERERSatOmjdQhiLgVCREREREREWmNySURERERERFpjcklERERERERaY3JJREREREREWmNySURERERERFpjcklERERERERaY3JJREREREREWmNySURERERERFpjcklERERERERaY3JJREREREREWmNySURERERERFpjcklERERERERaY3JJREREREREWmNySURERERERFpjcklERERERERaY3JJREREREREWmNySURERERERFpzUjqAHQt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ysvLC1WrVhU5MiIiIiIyFBJZ7sXtSOd1794dAODn55e9o2pV4N27/9/gzBnAxUWEyEiXPXz4EC1btsTUqVOxYMECGBsb5HdLRERERKWKUm4gIn66NAQsi6X/I5PJIJFIVB5zcHDAkydPUKlSJS1HRURERESlgUHNFlsqyWQsiyUAwJ07d9CuXTu8fPkyzzZMLImIiIiopDC51HfJydkJpjwml6WKTCaDh4cHWrdujevXr2Pw4MFIS0sTOywiIiIiKmWYXOq73CWxAMtiS5HExESMGTMG48aNQ0pKCgAgICAAP/74o8iREREREVFpw3su9V3ukliAI5elxIMHD+Dm5oZ79+4pHfv333+RnJyMcuXKiRAZEREREZVGHLnUd7lHLiUSgAmFwduzZw9atmypMrGcMmUKLl++zMSSiIiIiLSKI5f6LndyaWYGGPE7A0OVkpKC7777Dlu2bFE6Zmlpie3bt8PNzU2EyIiIiIiotGNyqe84U2yp8eTJE7i5ueHWrVtKxz755BN4e3ujXr162g+MiIiIiAgsi9V/XOOyVPD29oazs7PKxPLrr7/GtWvXmFgSERERkaiYXOq73MklRy4NSmpqKqZOnYrBgwcjPj5e4Zi5uTk8PT2xefNm3l9JRERERKJjWay+Y1msQfP09MS6deuU9js6OsLb2xsNGzYUISoiIiIiImUcudR3LIs1aGPGjEHv3r0V9o0aNQr+/v5MLImIiIhIpzC51HccuTRoRkZG2LVrF+zt7WFqaort27djx44dMOeXCERERESkY1gWq+94z6XBs7W1xcGDB2FqaoqmTZuKHQ4RERERkUpMLvUdy2INwunTp2FtbY02bdqoPN6qVSstR0REREREVDQsi9V3LIvVaxkZGfj555/h6uqKwYMHIyoqSuyQiIiIiIiKhcmlvmNZrN4KCwuDi4sLfv31V8hkMrx+/RqjRo1CVlaW2KERERERERUZk0t9x7JYvXTu3Dk4OTnhwoULCvtPnTqFgwcPihMUEREREZEamFzqO5bF6pWsrCwsWrQILi4uCA8PVzhmbGyM1atXY9CgQSJFR0RERERUfJzQR9+xLFZvREREYOTIkThz5ozSsRo1auDAgQN5TuhDRERERKTrOHKp71gWqxeuXLkCJycnlYmlq6srgoKCmFgSERERkV5jcqnvWBar07KysrB8+XJ06dIF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JiQk4JtvvhH+UwQANzc33Lx5s0RmIyMqrfbs2SMkMp07d0azZs003kdAQABmzJiB8PBwhf1paWl4/PgxHj9+jL179+K7777LdyIFeVeuXMH06dMRExOjsD8kJAQhISE4duwYdu3ale9kHSURV2Fs2bIFa9euRXp6usL+iIgIRERE4PLly9i2bRs2bNhQ6NlKjx49innz5gkzWBbk3Llz+N///qeQhCclJSEgIAABAQEYPnw45s2bB4lEAh8fHyxYsEAh3pSUFFy7dg3Xrl3DpEmT8N133+XbX0m81kX9mfNz9uxZYbtVq1ZFeq58SWxOQvP5558LXzr4+PigY8eOasdYHHv27BHet44dO2q1fE9+5KdTp075tu3cubOwLX/fd1HExMQI10KFChVgbW2db/vatWsL2+fPn9fo77ih0PZ7KFafOV6+fClsqxotlde6dWucP38eqampuHTpkk5N3qVtTC71VSkaubx37x4GDRqktL7Yo0ePsHLlSvzyyy8iRUZkeK5cuSJs5/dNf3FdvHgR3377LdLT0yGRSNCuXTt06NABVapUQVpaGu7evYujR48iLi4Oq1atAoACP+Q9ePAAHh4eSE9Px4ABA9C8eXOYm5vjxYsX8PLywvv37/Hy5Uv89NNPCmVymoyrXr16wuQvu3btgr+/P4DsyUQqVqwotKtatapCv+vXr1cYWevRowc6duwIKysrvHr1CocPH8aLFy8QGhqK4cOHw9vbG3Xq1Mn39QgKCsKmTZsgkUgUXo/Xr1+rvGfo/v372LZtGwBgyJAhcHZ2homJCYKCgnDgwAGkpqZi7969aNasGczMzDBnzhyUL18eAwcORMOGDSGRSHD9+nUcOXJEKGFr06YNWrduXSKvtSZ+5oLI/x588sknhX7es2fPhJLT5s2bC6WWrVu3RvXq1fHmzRv4+fkhOjoaFSpUKHJc6pL/uQYMGKDVvh89eiRsN2nSJN+2tra2qFq1KsLCwhAVFVWs10t+tL0wI8/y7R89egSZTFakEevSQNvvoVh9AtlLnuR8yWRqalrgcnbyfycuX77M5JL0UCmZ0Gfnzp345ptvkJycrHTs+++/x5w5c0SIikSRmQlER4sdhfZVqABoacbjpKQkPHjwQHjs5OSk0fO/f/8eP/74I9LT02FpaYl169ahbdu2Cm0+//xzfP311xg/fjwePnyI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/fQToqKilNqtXLkSDx48AAA4OzsrjHjK8/f3h4ODAxwcHNCtW7c8+50yZYqwvXDhQrx8+VKpjaenJ86fPw8AsLe3x8CBAwv3QxEREREREekBg1vncvDgwfD19cXVq1fx+PFj9O/fH25ubqhbty5iYmJw8uRJ/PfffwCyZ2tduHCh2n127twZAwcOxKFDhxAREYEvvvgCbm5uaNSoEZKTk3Hu3DkhsTQxMcGvv/6qMwudEhERERERaYJElt9NgnoqISEBM2bMEBI6VapUqYLVq1fD2dk5zzb+/v4YNWoUAKB69eo4d+5cnm0zMjIwb948HDx4MM825cuXx5IlS9CjR49C/BRERERERET6wyCTyxy+vr44evQogoODERUVBXNzc9SsWRMuLi4YOnRogetMFiW5lH+Oj48PAgMDERERgbJly6J69ero1q0bhg4dikqVKmnkZyMiIiIiItIlBp1cEhERERERkXYY1IQ+REREREREJA4ml0RERERERKQ2g5stVtf5+vri2LFjCA4ORmRkJCwsLFCzZk306NGjUPeBFoe/vz8OHjyI//77DxERETA1NRXuAx0yZAjvAzVQ2rrWUlNTcf36dVy/fh3BwcF4/vw5YmNjYWJiggoVKqBx48bo1asXevToARMTE430SbpFjL9rua1duxYbNmwQHg8YMABLly4t8X5Ju8S61l68eIFjx47h8uXLePv2LWJjY1G+fHlUrFgRTZo0QatWrdCzZ0+UK1euRPon7dP2tRYVFYWDBw/iypUrePLkCeLi4iCVSmFjY4P69euja9eu6NevH8zNzTXaL4kjMzMTT58+xd27d3Hv3j3cvXsXISEhSElJAVCy/4eVdF7Aey61RFMz2BZFRkYG5s+fDx8fnzzbcAZbw6PNa+3kyZOYO3cuEhMTC2xbv359rFy5Eg4ODmr1SbpDjL9rqoSEhGDQoEFIT08X9jG5NCxiXWtpaWlYvXo1du/erXB9qXLkyBE0bNhQY32TOMS41o4fP45ffvkF8fHx+barVKkSVq5cidatW2ukXxLPlClTcObMmTyPl8T/YdrKC5hcakFGRga+/vprXL16FQBga2srrL0ZGxuLEydOIDAwEABgZWWFvXv3ol69emr3O2vWLBw6dAhA9pqegwYNUlh788KFCwCy197ctm0b2rRpo3afJC5tX2tbtmzB77//DgCw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ERERERERqY3JJREREREREamNySURERERERGpjcklERERERERqY3JJREREREREamNySURERERERGpjcklERERERERqY3JJREREREREamNySURUSlz6NAhODg4wMHBATNnzhQ7HFKDu7u78F76+/tr7Lzr1q0Tzrtu3TqNnZeIiAybsdgBEBEZOnd3dwQEBBT5eUeOHEHDhg1LIKLSYd26dVi/fn2ex8uWLQsrKyvUrl0bzZs3x8CBA1GjRg0tRki6wt/fH6NGjcrzuLGxMSwsLFC5cmU4OjqiV69e6NixI4yM+B09EZE8/lUkIqJSKTU1FREREfD398fGjRvRs2dPLFu2DGlpaWKHplEchVRfRkYGYmJi8PDhQxw6dAhff/01BgwYgMePH2s9Fr6fRKTLOHJJRKRFTZo0QdOmTQvVtkKFCiUcTelRqVIluLi4KOxLTk7G06dPcefOHchkMmRlZcHDwwPv37/HypUrIZFIRIqWxDZixAiFx+np6QgPD0dgYCDi4+MBACEhIRg1ahT279+PmjVrihEmEZHOYXJJRKRFnTt3xpQpU8QOo9T5+OOPMW/ePJXHHj16hB9++EEYhTpx4gR69OiB3r17azPEYtm9e3eJnHfKlCml+jrN61pJSkrC6tWrsWvXLgBAdHQ0lixZgk2bNmkzPCIincWyWCIiKtXq16+P7du3w9LSUti3c+dOESMiXWVmZoY5c+agR48ewr7z588jPDxcxKiIiHQHk0siIir1KleujIEDBwqP79y5g4SEBBEjIl325ZdfKjy+efOmSJEQEekWlsUSEemBqKgoXLhwAQEBAXj48CHevn2LxMRElCtXDra2tnBycoKrqys6duyo0X7v3LmDI0eOICgoCKGhoUhKSoK5uTlsbGxQoUIFNG3aFB06dEDLli1hamqa77mSkpJw5MgRXLp0CQ8fPkR0dDSMjIxgZ2eH5s2bo1+/fmjbtq1G4y+KZs2aCSOWmZmZePv2LerXr6/U7u3bt/D29sbVq1cRGhqKuLg4WFlZwd7eHh06dICbmxuqVq1aqD7VfX3lZyLetWsXWrdurfJYjvXr16ucQXfAgAFYunSp8Fh+pt3JkycrlMjevXsXX3zxBQDA0tISV69eRdmyZQv8WZOTk9GuXTskJSUBNdjTbAAAE35JREFUAI4dOwYHBweVbWUyGXx9feHr64tb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8OFDvHnzBomJiZBIJLCyskLt2rXRpk0bfP7556hevXqB52zTpg3+/vtvnD17FhcuXMDt27cRGRmJhIQEmJqawtbWFrVr14aTkxM6deqkMEOrLpk0aRL69+8Pb29vXLlyBaGhoYiPj4elpSVq1KiBDh06wM3NTZg9VZWSeH0L0rlzZxw6dAienp4IDAzEmzdvkJSUpNHRqUqVKqFt27a4evWqsK99+/YKS9IURvXq1bFjxw4EBQXh9OnTuHHjBt69e4e4uDhIpVJYW1vjo48+QuPGjdGhQwe0atVKY9d+cYwbNw579+5FcnIy4uPjsWvXLnz77bfCcScnJ5w8eRI7d+7E+fPnhS+J7Ozs4OjoiH79+qFbt25F6rO476e+vbZEpH8kMtY9EBERERERkZo4oQ8RERERERGpjcklERERERERqY3JJREREREREamNySURERERERGpjcklERERERERqY3JJREREREREamNySURERERERGpjcklERERERERqY3JJREREREREamNySURERERERGpjcklERERERERqY3JJREREREREamNySURERERERGpjcklERERERERqY3JJREREREREamNySURERERERGp7f8BmJFuKXTa7dcAAAAASUVORK5CYII=", + "application/vnd.jupyter.widget-view+json": { + "model_id": "14f38354b0354bc187be9db34990fcce", + "version_major": 2, + "version_minor": 0 + }, "text/plain": [ - "
" + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, { "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "4e3d47f0ecdc489ca34de778ebfb3021", + "version_major": 2, + "version_minor": 0 + }, "text/plain": [ - "
" + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" - } - ], - "source": [ - "cc.plot_roc(\n", - " roc_metric_dict={\"Geneformer\": all_metrics[\"all_roc_metrics\"]},\n", - " model_style_dict={\"Geneformer\": {\"color\": \"red\", \"linestyle\": \"-\"}},\n", - " title=\"Dosage-sensitive vs -insensitive factors\",\n", - " output_directory=output_dir,\n", - " output_prefix=output_prefix,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "d10ac27f-8d70-400e-8a00-d0b84c1d02b4", - "metadata": {}, - "outputs": [ + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "5997f34a471f4a918fd32043fc519bb3", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "affe20b63e08414cb0863e1f6c1aad18", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "fca7f8cafa504738b7eaddd3f7b708fc", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "11f299f23b124674ab9e334bdbe09288", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "01a88ef05cb64f24adecfb5674265a02", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "2f88e6525cbd486c9f03491a04681283", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "8bb884df7370471d986c51c10431ba10", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "4b82e5fe600b4270bb6268e68f76d093", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "cd15c803ecc34a8d878df577ffd80252", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "246cac7b5a0b4fd799e7e2081badbdbf", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "fbc93f4256724314a5141ac29062bae9", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "b38551b3ac134fef8aa0c6ea3b7fa2a0", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "16ddc360a6b64906bd3f1d1adcc94efe", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "44b3af87a1794fc09d00dd3743c4705d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEWCAYAAAB42tAoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAuX0lEQVR4nO3df3zNdeP/8cfZZhhjaD8YCZElGiF98qsx1MwYGlep67q4CqVPF24hJUr50lWuui5CxIeiXZeWaEhURkJEY6j8mB9jx6+xOft99v7+sZrWfpxh55yd7Xm/3brdds55nfd57n3L+7n3+33er7fJMAwDERGRErg5O4CIiFRsKgoRESmVikJEREqlohARkVKpKEREpFQqChERKZWKQkRESuXh7AAiFVlISAgXL17E3d0dLy8vunXrxssvv0ytWrUA+OGHH/jnP//JgQMHcHNzo1OnTkycOJE777yzYBnXrl3jnXfe4csvv+Tq1avcdttt9OzZkzFjxlC/fn1n/WoiZaY9ChEbFixYwL59+1izZg2HDh1i0aJFAOzbt4+RI0fSq1cvtm3bxpYtW7jrrrsYPnw4p0+fBiA7O5snn3ySo0ePsnjxYvbu3cvHH3+Mj48PBw4ccOavJVJm2qMQKSNfX1+6du3K4cOHAXjzzTeJiIjgySefLBjz97//nYSEBP71r38xZ84cPvvsM86dO8fy5csL9kIaNGjAM88845TfQeRmaI9CpIySk5PZtm0bt99+OxkZGezbt49+/foVGffwww+zY8cOAHbs2EG3bt0KSkLEFWmPQsSG3/76T09Pp0uXLjz33HNcvXqVvLw8fH19i4z39fUlJSUFgCtXrtCmTRuH5hUpb9qjELFh3rx57Nu3jxUrVnD8+HFSUlKoU6cObm5uXLhwocj4CxcuUK9ePQB8fHyKHSPiSlQUImXUuXNnIiMjmT17Nl5eXgQHB7Nx48Yi4zZs2ECXLl0A+J//+R+2b99Oenq6o+OKlBsVhcgNePLJJ9mxYweHDx9mwoQJrFmzhuXLl3Pt2jWuXr3K3Llz2b9/P88++ywAERERBAQEMG7cOI4dO0ZeXh4pKSksWLCArVu3Ovm3ESkbFYXIDahfvz4RERHMnz+fjh07snjxYr788ku6devGQw89xOHDh1m5ciV33HEHAJ6enixbtozmzZvz17/+lfvuu4+hQ4eSkpJCu3btnPvLiJSRSTcuEhGR0miPQkRESqWiEBGRUqkoRESkVCoKEREplctdmX3//fcTGBjo7BgiIi4lKSmJXbt23dR7Xa4oAgMDiYmJcXYMERGXEhkZedPv1aEnEREplYpCRERKpaIQEZFSqShERKRUKgoRESmVikJEREplt6KYMmUKDzzwAP379y/2dcMwmDlzJqGhoYSHh5OQkGCvKCIicgvsdh1FZGQkjz/+OJMmTSr29bi4OBITE9m0aRM//vgj06dP57///a+94oiI2FTSZNolzbFd0tTbJS6nxPElLf/G8tiL3YqiU6dOnDlzpsTXt2zZwsCBAzGZTAQHB5Oamsr58+fx8/OzVyQRh8jLM8jMtZKWmUtWTh7Z1jxyrHlczcjBMCDn18fJqZl4uruRmZvH6cvpeFf3wGoY5OUZWA0Dax7kGQa5VoNTl9O5rbYn1l9fy8szyDMgLTOHi9eyqVuzGnmG8et/+RuqPIM/PDbIy4PESxb869S4Pj4v/3XrH95rzTO4mpGDh5sJdzdTod+xxO1UOW3w7L0Broo63MJ7nXZlttlsJiAgoOBxQEAAZrO52KKIjo4mOjoaoOCm9SKOdOlaFklXMkhKyeCX89c4dzWDjGwryamZ5FrzN6hXM3I4n5ZVLp/n7mbC3WTCzQ083NwwDANLtpWGdWvgZsrfcLu7mTABaVm5ZORYqedVDZPJhJsJ3NzccDOZMJnA7bfnTCZMJhMN69bgakYOgfVq4v7rc7+97ub2u59/7YarGTn4161RJGP+pxdlKv7pEkaXNr58ll/SG5yVp8TxJb1wo8sp4ZO//PmGFl+I04qiuL8MSlpRUVFRREVFAbd2GbpIaTJzrCRdyeDAmascu3CNA0lXSUrJ4HxaFlczcop9T5P6NcnJNWjTqA5+dapTo5o7lqxcmvvWJs8w8K5RjTo1PPB0d8vfsJtM1K9VjWq/Pq7l6YFXdXequ7vjVd3913K4sQ2GSFl8+e7Nv9dpRREQEEBycnLB4+TkZB12Eoc4n5rJ+gPn+Pn8NU5dSic7N4+DZ6+Snm0tMvaOBl70axNAM99aNK3vRQ1Pd4IC6hBQzF/YIpWV04oiJCSEDz/8kLCwMH788Ue8vb1VFFKurqbn8M3P57l4LZtvj17kQloWOdY8jiSnFRoXUKcGoXf7U6dGNZr71qK5b23aBdalXi1PJyUXqVjsVhTjx49n9+7dpKSk0L17d8aNG0dubi4Aw4cPp0ePHmzdupXQ0FBq1qzJG2+8Ya8oUkWkWLLZefwSXx4yE3vgHFm5eUXGtPKvzeNdbqdfm4YE3+5D7eouN4GyiMPZ7V/J22+/XerrJpOJV155xV4fL1VEXp7B+9uOs+mQmb0n87/oYDLB/c3qc0eDWrS/3YduLX3x866Oh7uuLxW5GfpzSlxOWmYOGw4ks+3oRdb9eLbg+WGdmtC15W30aOWLd41qTkwoUrmoKMQlpGfn8kVCMv/+6ihJVzLIzMmjRjU3Hr4nAD/v6ozvcxd1a6ocROxBRSEVkjk1k53HL7H3ZAoJZ1MLDisBtPSrzSvhbXigRYMiF4KJSPlTUUiFkJljZe3+s+w8cYlj56/x45mrBa+1DvDmyQea0raxD/3uCdAJaBEH0784cZqsXCuf/3iOD749QcLZ1ILnvTzdGdyhMQ/fE0CnZvV1SEnEyVQU4lDXsnJZ9+NZdh6/xNdHzpOamVvw2lPdmzOmRwtdvyBSwagoxCEupGUxM/YQsfHnyM0zqOZuIqS1HxHBgfQK8qO6h7uzI4pICVQUYjcXr2Xxnz2n2Xgwmfhfzznc5e/N6J7NCWvbCE8PXdcg4gpUFFKurHkGa/YlEf39aXYnXgbgnsA6jOrajAHBjWjX2Me5AUXkhqkopFycu5rBu1uO8nn8WdJ+Pe8Q2T6Qv3VvTlDDOk5OJyK3QkUhN+18WiYffneSb36+UHBoqeudt/FopyY8fE8A1TRlhkiloKKQm/Lt0YuM/egHrmbkENzEh7E9WzAguBGtA7T3IFLZqCjkhr2z+Rfmbv6ZujWr8cmYB7ivaX1nRxIRO1JRyA1ZuPUYczf/zL1NfFg04j786+gGPiKVnYpCysQwDOZ/c4w3v/gJkwlWjrqfWppKQ6RK0L90senboxeZsS6Bn83XuLthHd4c2k4lIVKF6F+7lOqn5DQeW7wLgNcH3cOwTrdrxlaRKkZFISU6fTmdIQt24Onhxv+LbEtkh8bOjiQiTqCikGLlWPMYsWQXaZm5fPxUF7o0b+DsSCLiJLoiSor1ytoEEi+lM7xzE5WESBWnopAiTl9OZ+WuU/h5V2dWZDtnxxERJ1NRSBF/W74HgJkD73FyEhGpCFQUUsjibcc5kpxG5zvq06dNgLPjiEgFoKKQApsPmZkZe5jWAd4s+XNHZ8cRkQpCRSEAJF3JYNSvh5zeGdYe7xq6T7WI5FNRCIZh8FRBSQRzV4C3kxOJSEWiohAWxR0n4Wwqj3e5nYjgQGfHEZEKRkUhbDiYDMAr4W2cnEREKiIVRRW34+hF9p++QkRwI92RTkSKpS1DFZaXZ/D6+sMAvNCvtZPTiEhFpaKowp77eB8JZ1Pp1vI2An1qOjuOiFRQKooqas2+JD6PP4enuxtL/9zJ2XFEpAKza1HExcXRt29fQkNDWbRoUZHX09LSGD16NAMGDCAsLIxPPvnEnnHkVxnZVp6P3g/A7qm98NC5CREphd22EFarlVdffZXFixcTGxvL559/ztGjRwuN+eijj2jRogVr165lxYoVzJ49m+zsbHtFkl+9v+04ALMHt8XHy9PJaUSkorNbUcTHx9O0aVOaNGmCp6cnYWFhbNmypdAYk8mExWLBMAwsFgt169bFw0O3yLCnK+nZvP3lz9Ss5s7Q+5o4O46IuAC7bZXNZjMBAdcnlfP39yc+Pr7QmMcee4wxY8bQrVs3LBYLc+fOxc2taHdFR0cTHR0NQEpKir0iVwn/3PwLABP6tMJNtzQVkTKwW1EYhlHkOZOp8IZp+/btBAUFsXz5ck6dOsVf/vIXOnbsSO3atQuNi4qKIioqCoDIyEh7Ra70MnOsLNuRSP1anozq1tzZcUTERdjt0FNAQADJyckFj81mM35+foXGxMTE0KdPH0wmE02bNqVx48YcP37cXpGqvP+34QgAI7o0dXISEXEldiuKtm3bkpiYyOnTp8nOziY2NpaQkJBCYxo2bMh3330HwMWLFzlx4gSNGze2V6QqLTUzh//7LpHmvrV4vndLZ8cRERdit0NPHh4eTJs2jVGjRmG1Whk8eDAtW7Zk1apVAAwfPpyxY8cyZcoUwsPDMQyDiRMnUr9+fXtFqtJejDmAYeTP5/THQ4AiIqWx61eMevToQY8ePQo9N3z48IKf/f39+eCDD+wZQYBTl9L5PP4cdzTwokcrX2fHEREXoyutqoCpaw4AMCNC98AWkRunoqjkVu89w7ZfLtKmUR3tTYjITVFRVHJvfpH/TafZg9s5OYmIuCoVRSW2+ZAZc2oWD97ZgHsC6zo7joi4KBVFJXU+NZNRv94He9Yg7U2IyM1TUVRChmHwp8W7AJgzpB23N/ByciIRcWUqikro9djDHD1/jQ63+zD0Pl3AKCK3RkVRySzYeozF208Q1LAOq0f/jy6uE5FbVuaiSE9Pt2cOKQcbDpzj/204QjV3E//3106aHVZEyoXNovjhhx945JFHeOSRRwA4cuQI06dPt3cuuUEJZ68y5qMf8K7uwebxPfDzruHsSCJSSdgsilmzZrFkyRJ8fHwAaN26NXv27LF3LrkBaZk5zFh7CIB/DgumaYNaTk4kIpVJmeZ6atiwYaHHxd1cSJzDkpXLiCW72X/6Cs/3bkmvIH9nRxKRSsZmUTRs2JAffvgBk8lEdnY2K1asoEWLFo7IJjYYhsHoD/ey//QVngu5k+d7t3J2JBGphGzuGkyfPp2PPvoIs9lMjx49OHz4MK+88oojskkpzqdm0mduHNt+uUj/dg0Z3+cuZ0cSkUrK5h7FiRMneOuttwo9t3fvXu677z67hZLSWfPy9yR+OX+N50LuZFwv3YhIROzH5h7FzJkzy/ScOIYlK5c/L93ND6euENkhkPF97qKau84ZiYj9lLhHsW/fPvbt28fly5dZunRpwfPXrl3DarU6JJwUdvKShcj5O7hkyWZEl6a8NlD3lxAR+yuxKHJyckhPT8dqtWKxWAqer127Nu+++65Dwsl1Jy9ZiFq4k0uWbF4beA8jujR1diQRqSJKLIrOnTvTuXNnBg0aRGBgoCMzye8YhsHy707yytoEAF6LaKOSEBGHsnkyu2bNmsyePZujR4+SlZVV8Pzy5cvtGkwgL89gckw8/9lzhrv8vZkbFczdjeo4O5aIVDE2z4JOnDiR5s2bc+bMGZ599lkCAwNp27atI7JVaYkXLTzy7jb+s+cMoXf7s25cV5WEiDiFzaK4cuUKQ4cOxcPDg86dOzNr1ix+/PFHR2SrshIvWoh8bwfHL1qY1v9uFo24D08PfbNJRJzD5qEnD4/8IX5+fnzzzTf4+fmRnJxs92BV1Ue7TjL104MALPtLJ3re5efkRCJS1dksijFjxpCWlsakSZN47bXXsFgsvPjii47IVuV8uu8MUz89SAvfWrwzrL3ucy0iFYLNonjooYcA8Pb2ZsWKFUD+ldlSfgzD4IkPdrPtl4sArHqqi6YJF5EKo8SisFqtbNiwAbPZTLdu3WjVqhVff/01CxcuJDMzkzVr1jgwZuWVnp1Lu+mbyM0zuLdxXd4Z1l4lISIVSolFMXXqVM6dO0e7du2YOXMmgYGB7Nu3j4kTJ9K7d29HZqy0Dp9LZfSHe8nNM+jfriHvDmuvu9KJSIVTYlEcPHiQtWvX4ubmRlZWFl26dGHTpk34+vo6Ml+ldTUjh4ff2UaNam7Mf6wDj7RtaPtNIiJOUOJ3LqtVq1Zwg6Lq1atzxx13qCTK0V+XfQ/AnCH3qiREpEIrcY/i+PHjhIeHFzw+depUocfr1q2zb7JKbMXOk+w9mYKPVzUG3NvI2XFEREpVYlGsX7/ekTmqjKQrGby85iA1qrmxZXwPZ8cREbGpxKLQRIDl7+j5NELnxgHw4cj7aVC7upMTiYjYZtd5IeLi4ujbty+hoaEsWrSo2DG7du0iIiKCsLAwHn/8cXvGcapDZ1MZOG8HhgHvDm9PxzvqOzuSiEiZ2Lzg7mZZrVZeffVVli5dir+/P0OGDCEkJIQ777yzYExqaiozZsxg8eLFNGrUiEuXLtkrjlP9NsGfyQRvDb1X5yVExKWUaY8iMzOT48eP39CC4+Pjadq0KU2aNMHT05OwsDC2bNlSaMy6desIDQ2lUaP8DWeDBg1u6DNcwaaEZPq9k3+4acHj9zH4vsZOTiQicmNsFsVXX31FREQEo0aNAuDw4cOMHj3a5oLNZjMBAQEFj/39/TGbzYXGJCYmkpqayogRI4iMjKx0V3vP+/ooT63Yi09NT778e3f6tgmw/SYRkQrG5qGnf//736xevZoRI0YAEBQURFJSks0FG4ZR5DmTqfBVx1arlYSEBJYtW0ZmZibDhg3j3nvvpVmzZoXGRUdHEx0dDUBKSorNz3Y2a57BI+9s4ydzGm0D67L8r52pV8vT2bFERG6KzaJwd3fH29v7hhccEBBQaDpys9mMn59fkTH16tXDy8sLLy8vOnbsyJEjR4oURVRUFFFRUQBERkbecBZHi3xvBz+Z0+jcrD4f/62LpuUQEZdm89BTy5YtWbduHVarlcTERF577TXat29vc8Ft27YlMTGR06dPk52dTWxsLCEhIYXG9OrViz179pCbm0tGRgbx8fG0aNHi5n+bCuCz/Un8ePoK1T3ciH5KJSEirs/mHsXLL7/MggUL8PT0ZMKECXTt2pWxY8faXrCHB9OmTWPUqFFYrVYGDx5My5YtWbVqFQDDhw+nRYsWdOvWjQEDBuDm5saQIUNo1arVrf9WTnLpWhb/+/F+AL6e2LPIoTYREVdkMoo7mfA7hw4d4u6773ZUHpsiIyOJiYlxdoxiDV2wg+8TU1g04j766MS1iFQgt7LttLlHMWvWLC5cuEC/fv0ICwujZcuWN/VBld3ibcf5PjGFe5v4qCREpFKxWRQrVqzgwoULbNiwgZdffhmLxcLDDz9cpsNPVcX+01eYGXuY2+t78fHfujg7johIuSrTBXe+vr488cQTzJgxg9atWzN//nx753IZKZZsBs77FoB5f+pATU93JycSESlfNvcojh07xvr16/niiy/w8fHhkUceYfLkyY7I5hKeWrEHgGceakHbxnWdnEZEpPzZLIopU6YQFhbGkiVL8Pf3d0Qml3HykoXvE/MvAJzY5y4npxERsQ+bRfGf//zHETlczvEL14j4d/4hp8VPdNRXYUWk0iqxKP73f/+Xd955p9Bd7X6vKt/h7mpGDiOW7CYtK5f/+2tnerTSLWJFpPIqsSimTp0KwIIFCxwWxhWkZ+fy9Io9JF3J4LWINioJEan0SvzW02/zMq1cuZLAwMBC/61cudJhASuSA2eu0nHmZnYev8zTPZoz4oE7nB1JRMTubH49dseOHUWei4uLs0uYiuxCWhZDFuwgPdvKkic7MuXhIGdHEhFxiBIPPa1cuZJVq1Zx+vTpQucpLBYLHTp0cEi4iiIvz+DPS3eTlZvHv4a3p1eQvv0lIlVHiUURHh5O9+7defvtt5kwYULB87Vq1cLHx8cR2SqMCf/9kYSzqYwPbUW4bmMqIlVMiUVhMplo3Lgx06ZNK/LalStXqkxZxP18gU/3JfHQXb6MC7nT9htERCqZEotiwoQJLFy4kMjISEwmU6E71plMpiL3v66sXvv8EABvDr1X10qISJVUYlEsXLgQyL9ndlX1yd4z/HL+GoM7NOa22tWdHUdExClsfutp7969pKenA/DZZ58xa9Yszp49a/dgFcGbX/wEwOSHWzs5iYiI89gsiunTp1OzZk2OHDnC4sWLadSoES+88IIjsjnV1z+dJzk1ky7N6+Prrb0JEam6bBaFh4cHJpOJzZs388QTT/Dkk09isVgckc2p3vvmGAAvhVWcu/uJiDiDzaKoVasWCxcuZO3atfTs2ROr1Upubq4jsjnNJ3vPsPvEZYZ3bsI9gZo6XESqNptFMXfuXDw9PXnjjTfw9fXFbDYzcuRIR2Rziv/bkciE//4IwKhuzZ2cRkTE+WwWha+vL+Hh4aSlpfH1119TvXp1Bg4c6IBojmdOzeSVtQkA7JgcQgvf2k5OJCLifDaLYv369QwdOpSNGzeyYcOGgp8rm8wcK396fyeQf0vTRj41nZxIRKRisHnjogULFrB69WoaNGgAwOXLl/nzn/9Mv3797B7OkZZsP8GxCxYGtQ8krF1DZ8cREakwbO5RGIZRUBIAPj4+ha7Srgzifr7Am1/8xJ1+tXn70XudHUdEpEKxuUfRtWtXRo4cSVhYGJB/KKp79+52D+ZIL6yOB2D+Yx00TYeIyB/YLIpJkyaxadMm9u7di2EYREVFERoa6ohsDvGzOY3k1ExCWvvRyt/b2XFERCqcEosiMTGR2bNnc/r0aVq1asWkSZPw969892F4e9PPADyrmWFFRIpV4jmKF198kYceeoh3332XNm3a8Nprrzkyl0Mcv3CNjQnJhLT2o8Pt9ZwdR0SkQipxj8JisfDoo48C0Lx5cwYNGuSwUI7yl2XfA/Byf03TISJSkhKLIisri0OHDhV8wykzM7PQ4zZt2jgmoZ0cu3CNk5fSqV3dg2a31XJ2HBGRCqvEovD19WXWrFkFj2+77baCxyaTieXLl9s/nR3NWn8YgFV/6+LkJCIiFVuJRbFixQpH5nCojGwrmw+fB6BtY036JyJSGpsX3FVGE1fnT/r3996tnJxERKTis2tRxMXF0bdvX0JDQ1m0aFGJ4+Lj4wkKCnLIHFIplmxi488B8MxDLez+eSIirs5uRWG1Wnn11VdZvHgxsbGxfP755xw9erTYcf/4xz/o2rWrvaIU8tjiXQD8a3h7PNyr5A6ViMgNKdNcT5999hn//ve/ATh79izx8fE2FxwfH0/Tpk1p0qQJnp6ehIWFsWXLliLjVqxYQd++fQvNJ2Uvy749waFzqfRrE0D4vY3s/nkiIpVBme6ZvX//fmJjY4H8O97NmDHD5oLNZjMBAQEFj/39/TGbzUXGbN68mWHDhpW6rOjoaCIjI4mMjCQlJcXmZxfHMAymrzuEl6c77wwPvqlliIhURTaLIj4+nldeeYXq1asDULduXXJycmwuuLgZZv844d7rr7/OxIkTcXd3L3VZUVFRxMTEEBMTQ716N3cF9c7jlwEYcG8jqnuU/nkiInKdzUkBPTw8sFqtBRv5y5cv4+Zm+9h+QEAAycnJBY/NZjN+fn6Fxhw8eJDx48cDkJKSwtatW/Hw8KB379439EvYYsnKZdIn+YfLxvbUnE4iIjfCZlGMGDGCZ555hkuXLjF37lw2btzI888/b3PBbdu2JTExkdOnT+Pv709sbCxvvfVWoTFfffVVwc+TJ0+mZ8+e5V4SAM+s/IFTl9N57P7bub2BV7kvX0SkMrNZFAMGDKBNmzbs3LkTwzCYP38+LVrY/lqph4cH06ZNY9SoUVitVgYPHkzLli1ZtWoVAMOHD7/19GWwJ/Ey3/x0gdYB3rw+qK1DPlNEpDIxGTZuV3f27Nlin2/UyDnfGoqMjCQmJqbM45/4YDdxP1/gqwk9aO5b247JREQqrhvddv6ezT2Kp59+uuDnrKwszpw5Q7NmzQq+BVWRHT6XStzPF+jW8jaVhIjITbJZFOvWrSv0OCEhgejoaLsFKk/Lvk0E4K9dmzk3iIiIC7vhS5PbtGnDgQMH7JGlXKVn5/Lp/iS8q3vw0F1+tt8gIiLFsrlHsXTp0oKf8/LyOHToEPXr17drqPKw/LuTZOfm8XJYkLOjiIi4NJtFYbFYCn52d3enR48e9O3b166hblVensHsjUcAiGgf6OQ0IiKurdSisFqtWCwWJk2a5Kg85eL19YcxDHgu5E7q1Kjm7DgiIi6txHMUubm5uLu7c+jQIUfmuWWGYbBk+wkAxvVq6eQ0IiKur8Q9iqFDh/Lpp58SFBTE6NGj6devH15e169q7tOnj0MC3qi4Xy4CENk+kGqaRlxE5JbZPEdx9epV6tWrx65duwo9X1GLYlNC/vxS4/vo7nUiIuWhxKK4dOkSS5cupWXLlphMpkKzwf5xFtiK5KNdp2jlX5vG9TSnk4hIeSixKPLy8gp948kVfPHr3sR9TSv+13dFRFxFiUXh6+vLs88+68gst2zzofwbIz3fWyexRUTKS4lne23MFVjh5Fjz+O/eM/jXqY5/nRrOjiMiUmmUWBTLli1zYIxb9/H3pwF4urvtKdBFRKTsSiwKHx8fB8a4ddt+vgDAEw80dXISEZHKpVJcaHA+LZNNh8wMuLcRHrp2QkSkXFWKreoH2xMBGKR5nUREyl2lKIoFW48B0KOVr5OTiIhUPi5fFAeTrgIQ1q4hbm4V90JAERFX5fJFMffLnwEY00PfdhIRsQeXLopcax47j18i0Kcm9wTWdXYcEZFKyaWL4qsj57FkW3mu153OjiIiUmm5dFH8dpHdI20bOjmJiEjl5dJF8e3Ri9xe3wtv3cVORMRuXLYosnKtZOXm0fGOes6OIiJSqblsURy/kD8Feks/bycnERGp3Fy2KL46ch6AB+9s4OQkIiKVm8sWxfZfLhLoU5N2jX2cHUVEpFJz2aLYc/IyLf1rOzuGiEil55JFcdmSTY7VwN9bNygSEbE3lyyKj78/BUDnZro3toiIvblkUVzLzAUgsoOmFRcRsTe7FkVcXBx9+/YlNDSURYsWFXl97dq1hIeHEx4ezrBhwzhy5EiZlvvtsUt4ebpjMmm2WBERe7NbUVitVl599VUWL15MbGwsn3/+OUePHi00pnHjxnz44YesW7eOMWPG8PLLL5dt4YZB3Zq6GltExBHsVhTx8fE0bdqUJk2a4OnpSVhYGFu2bCk0pkOHDtStmz/ra3BwMMnJyWVa9qnL6bRrrNliRUQcwcNeCzabzQQEBBQ89vf3Jz4+vsTxq1evpnv37sW+Fh0dTXR0NAApKSmkpOfQtEGt8g0sIiLFsltRGIZR5LmSzins3LmT1atXs3LlymJfj4qKIioqCoDwiIEAVPdwyfPwIiIux25FERAQUOhQktlsxs/Pr8i4I0eO8NJLL/H+++9Tr57tCf6uZVkB6K77Y4uIOITd/ixv27YtiYmJnD59muzsbGJjYwkJCSk05uzZs4wbN445c+bQrFmzMi03Kze/KIIa1in3zCIiUpTd9ig8PDyYNm0ao0aNwmq1MnjwYFq2bMmqVasAGD58OPPmzePKlSvMmDEDAHd3d2JiYkpf8K9HtGpXt1t0ERH5HZNR3MmECqx9977kPjSeAzP6OjuKiIjLiIyMtP2HeAlc7oxwbp5BNZ3IFhFxGJfb4hqGQT0vXWwnIuIoLlcUWbl5BDfR7U9FRBzF5YoCIM+1TquIiLg0lyyKoIa6T7aIiKO4ZFF4uLlkbBERl+SSW9w7bvNydgQRkSrDJYuiZjVdbCci4iguWRSNfHSvbBERR3HJotBNi0REHMcli6Kau0vGFhFxSS65xdWtskVEHMc1iwI1hYiIo7hmUagnREQcxiWLQkREHMcli0J7FCIijuOaRaFzFCIiDuOaRaGeEBFxGNcsCmcHEBGpQlyzKLRLISLiMK5ZFM4OICJShbhmUagpREQcxkWLQk0hIuIoLlkUIiLiOCoKEREplYpCRERK5XJFobMTIiKO5XJFISIijuV6RaFdChERh3K9olBTiIg4lAsWhYiIOJLLFYX2J0REHMvlikJERBzLrkURFxdH3759CQ0NZdGiRUVeNwyDmTNnEhoaSnh4OAkJCfaMIyIiN8FuRWG1Wnn11VdZvHgxsbGxfP755xw9erTQmLi4OBITE9m0aROvvfYa06dPt1ccERG5SXYrivj4eJo2bUqTJk3w9PQkLCyMLVu2FBqzZcsWBg4ciMlkIjg4mNTUVM6fP1/qcnWOQkTEsTzstWCz2UxAQEDBY39/f+Lj40sdExAQgNlsxs/Pr9C46OhooqOj8wNfSyYyMtJesV1KSkoK9erVc3aMCkHr4jqti+u0Lq47ceLETb/XbkVhGEaR5/44PXhZxgBERUURFRUFQGRkJDExMeWU0rVpXVyndXGd1sV1WhfX3cof2HY79BQQEEBycnLB4+L2FP44Jjk5ucgYERFxLrsVRdu2bUlMTOT06dNkZ2cTGxtLSEhIoTEhISGsWbMGwzDYv38/3t7eKgoRkQrGboeePDw8mDZtGqNGjcJqtTJ48GBatmzJqlWrABg+fDg9evRg69athIaGUrNmTd544w2by/3tEJRoXfye1sV1WhfXaV1cdyvrwmQUd6JARETkV7oyW0RESqWiEBGRUlXYotD0H9fZWhdr164lPDyc8PBwhg0bxpEjR5yQ0jFsrYvfxMfHExQUxMaNGx2YzrHKsi527dpFREQEYWFhPP744w5O6Di21kVaWhqjR49mwIABhIWF8cknnzghpf1NmTKFBx54gP79+xf7+k1vN40KKDc31+jVq5dx6tQpIysrywgPDzd++eWXQmO++eYbY+TIkUZeXp6xb98+Y8iQIU5Ka19lWRd79+41rly5YhhG/nqpyuvit3EjRowwRo0aZWzYsMEJSe2vLOvi6tWrxsMPP2wkJSUZhmEYFy9edEZUuyvLunjvvfeMOXPmGIZhGJcuXTI6depkZGVlOSOuXe3evds4ePCgERYWVuzrN7vdrJB7FPaa/sMVlWVddOjQgbp16wIQHBxc6NqUyqQs6wJgxYoV9O3blwYNGjghpWOUZV2sW7eO0NBQGjVqBFBp10dZ1oXJZMJisWAYBhaLhbp16+LhYbcvfTpNp06dCrYFxbnZ7WaFLIripv8wm82ljvlt+o/Kpizr4vdWr15N9+7dHRHN4cr6/8XmzZsZNmyYo+M5VFnWRWJiIqmpqYwYMYLIyEjWrFnj4JSOUZZ18dhjj3Hs2DG6devGgAEDmDp1Km5uFXLzZ1c3u92skJVqlOP0H67uRn7PnTt3snr1alauXGnvWE5RlnXx+uuvM3HiRNzd3R0VyynKsi6sVisJCQksW7aMzMxMhg0bxr333kuzZs0cFdMhyrIutm/fTlBQEMuXL+fUqVP85S9/oWPHjtSuXdtRMSuEm91uVsii0PQf15VlXQAcOXKEl156iffff7/SToJWlnVx8OBBxo8fD+RPCLd161Y8PDzo3bu3Q7PaW1n/jdSrVw8vLy+8vLzo2LEjR44cqXRFUZZ1ERMTw1NPPYXJZKJp06Y0btyY48eP065dO0fHdaqb3W5WyH0vTf9xXVnWxdmzZxk3bhxz5sypdBuB3yvLuvjqq68K/uvbty+vvPJKpSsJKNu66NWrF3v27CE3N5eMjAzi4+Np0aKFkxLbT1nWRcOGDfnuu+8AuHjxIidOnKBx48bOiOtUN7vdrJB7FPaa/sMVlWVdzJs3jytXrjBjxgwA3N3dK+WMmWVZF1VFWdZFixYtCo7Ju7m5MWTIEFq1auXk5OWvLOti7NixTJkyhfDwcAzDYOLEidSvX9/Jycvf+PHj2b17NykpKXTv3p1x48aRm5sL3Np2U1N4iIhIqSrkoScREak4VBQiIlIqFYWIiJRKRSEiIqVSUYiISKlUFFIhBQUFERERUfDfmTNnShzbvn37W/68yZMnExISQkREBIMGDWLfvn03vIypU6dy9OhRABYsWFDotfKaUuS39dK/f39Gjx5NampqqeMPHz7M1q1by+WzperS12OlQmrfvn2ZN9Y3MrYkkydPpmfPnvTr14/t27cze/Zs1q1bd9PLK49MtpY7adIk7rjjDsaMGVPi+JiYGA4ePMi0adPKPYtUHdqjEJdgsVh48sknGTRoEOHh4WzevLnImPPnz/PYY48V/MW9Z88eIH+en6ioKAYNGsRzzz2HxWIp9bM6derEqVOnAFi6dCn9+/enf//+LFu2DID09HSeeuopBgwYQP/+/Vm/fj0AI0aM4MCBA/zjH/8gMzOTiIgIJkyYAFzf63n++ecL/YU/efJkvvjiC6xWK7Nnz2bw4MGEh4fz8ccf21wnwcHBBRO6xcfHM2zYMAYOHMiwYcM4fvw42dnZvPvuu6xfv56IiAjWr19Peno6U6ZMYfDgwQwcOLDY9ShSxC1Nfi5iJ61btzYGDBhgDBgwwBg7dqyRk5NjpKWlGYaRfz+B3r17G3l5eYZhGEZwcLBhGIaxZMkSY/78+YZh5N+jIC0tzbh06ZLxpz/9ybBYLIZhGMbChQuNf/3rX0U+b9KkSQX3rli/fr0xZMgQ48CBA0b//v0Ni8ViXLt2zXjkkUeMhIQEY+PGjcbUqVML3puammoYhmE8/vjjRnx8fKFMv/nt8aZNm4wXXnjBMAzDyMrKMrp3725kZGQYH3/8sTFv3ryC5wcNGmScOnWqSM7flpObm2uMGzfO2Lp1q2EYhpGWlmbk5OQYhmEY3377rfHss88ahmEYn3zyiTFjxoyC97/11lvGmjVrDMPIv19Fnz59CtaNSEkq5BQeIjVq1OCzzz4reJyTk8Pbb7/N999/j5ubG2azmYsXL+Lr61swpm3btrz44ovk5ubSu3dvgoKC+Prrrzl69GjB9B45OTkEBwcX+5lz5szhvffeo379+rz++ut899139O7dGy8vLwBCQ0PZs2cP3bp1Y/bs2bz55ps89NBDdOzYscy/V/fu3Zk5cybZ2dnExcXRsWNHatSowbfffstPP/3EF198AeTfke3kyZM0adKk0Pt/21NJSkqiTZs2PPjggwXjJ02axMmTJzGZTOTk5BT7+du3b+err77igw8+ACArK4tz585VyjmgpPyoKMQlrFu3jsuXLxMTE0O1atUICQkhKyur0JhOnTrx4YcfsnXrVl544QVGjhxJnTp1ePDBB3n77bdtfsYLL7xAv379Ch7v2LGj2HHNmjUjJiaGrVu38tZbb/Hggw/y7LPPlun3qF69Op07d2bbtm1s2LCBsLAwIH/655deeolu3bqV+v7fCjQtLY2nn36ajz76iCeeeIJ33nmH+++/n3nz5nHmzBmeeOKJEpfx7rvv0rx58zLlFQGdoxAXkZaWRoMGDahWrRo7d+4kKSmpyJikpCQaNGjAo48+yuDBg0lISCA4OJgffviBkydPApCRkcGJEyfK9JmdOnVi8+bNZGRkkJ6ezubNm+nYsSNms5maNWsSERHByJEjOXToUJH3enh4lPhXfVhYGDExMezZs4euXbsC0LVrV1atWlXwnhMnTpCenl5iNm9vb1566SU++OADcnJySEtLw9/fH4BPP/20YFytWrUKnZPp2rUrH374YcF9CYrLLvJH2qMQlxAeHs6YMWOIjIwkKCio2L+Id+/ezZIlS/Dw8MDLy4vZs2dTv359Zs2axfjx48nOzgbyTyiXZTr2Nm3aEBkZydChQwEYMmQId999N9u2bWPOnDm4ubnh4eHB9OnTi7z30UcfZcCAAdx999289dZbhV578MEHmTRpEiEhIXh6egIwdOhQkpKSiIyMxDAM6tWrx/z580vNd/fdd9O6dWtiY2MZNWoUkydPZunSpXTp0qVgzP3338+iRYuIiIjg6aefZuzYsbzxxhsMGDAAwzAIDAxk4cKFNteFVG36eqyIiJRKh55ERKRUKgoRESmVikJEREqlohARkVKpKEREpFQqChERKZWKQkRESvX/Aa/+QEs9g50JAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "****** Crossval split: 4/4 ******\n", + "\n", + "Filtering training data\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "be5426abaf5b41ebb51e2567dd73b0a4", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=50.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Filtered 35%; 32428 remain\n", + "\n", + "Filtering evalation data\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ff5aad423e4f4bbab54518bc5f0fd028", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=50.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Filtered 53%; 23660 remain\n", + "\n", + "Labeling training data\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "78c25d0976854653be92baf65ca71158", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=10000.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Labeling evaluation data\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "c445de0805e145249f4647e5552292a2", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=5000.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Labeling evaluation OOS data\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "c553f188f56e47acafa77fab9cb2b21f", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=5000.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Some weights of the model checkpoint at /n/home01/ctheodoris/models/210602_111318_geneformer_27M_L6_emb256_SL2048_E3_B12_LR0.001_LSlinear_WU10000_Oadamw_DS12/models/ were not used when initializing BertForTokenClassification: ['cls.predictions.transform.dense.bias', 'cls.predictions.decoder.weight', 'cls.predictions.transform.LayerNorm.bias', 'cls.predictions.transform.dense.weight', 'cls.predictions.decoder.bias', 'cls.predictions.bias', 'cls.predictions.transform.LayerNorm.weight']\n", + "- This IS expected if you are initializing BertForTokenClassification from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n", + "- This IS NOT expected if you are initializing BertForTokenClassification from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n", + "Some weights of BertForTokenClassification were not initialized from the model checkpoint at /n/home01/ctheodoris/models/210602_111318_geneformer_27M_L6_emb256_SL2048_E3_B12_LR0.001_LSlinear_WU10000_Oadamw_DS12/models/ and are newly initialized: ['classifier.weight', 'classifier.bias']\n", + "You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n", + ":45: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", + " batch = {k: torch.tensor(v, dtype=torch.int64) for k, v in batch.items()}\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "
\n", + " \n", + " \n", + " [834/834 01:35, Epoch 1/1]\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", + "
StepTraining Loss
1000.663500
2000.601800
3000.486200
4000.340400
5000.242700
6000.202300
7000.153600
8000.124400

" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "0e1c475ab2ff4bfa8c65a24d587c8ad0", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "2ee8ff99342d4741a3f4ec4176b5d746", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "78a1a6af9439481ebe87731bb2d37c95", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "411ed284d33740eca1f0cef18df500a4", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "aafdf3014691426c9c6acca3834c45f2", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "5aa3add5de134f589eaab69087b66549", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "7d255e53e1c2408697da1fa08860c9c0", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "29b8945f64354ae1b840a1dc316dedbf", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "de251d1fba3d4a67893047ee8275d606", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "8928cf69ea8746b2bef14028c0c0274a", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "0c0c4e21626f4ab99ce0696ee9322e0c", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "9e3499a2376d43bab0086cba34d1b522", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "f33d4f879c294c6a8a6455b3692488d5", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "38dd78e3ebf44c2bad58f9576a525ab3", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "b052e8b179584043945b49de9af31676", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "e3e11781b4394db1a01454ef37a490f2", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, { "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "915efb0adfb44c5caa01cf213c3cd56b", + "version_major": 2, + "version_minor": 0 + }, "text/plain": [ - "{'conf_matrix': Dosage-sensitive TFs Dosage-insensitive TFs\n", - " Dosage-sensitive TFs 61229.0 14801.0\n", - " Dosage-insensitive TFs 9094.0 73907.0,\n", - " 'macro_f1': [0.8489695337205987,\n", - " 0.8637730998133415,\n", - " 0.9122635701525341,\n", - " 0.8180200155972593,\n", - " 0.7913574275548942],\n", - " 'acc': [0.8544562281799618,\n", - " 0.8647275498539312,\n", - " 0.9122812348079727,\n", - " 0.8182044035899506,\n", - " 0.798060129740519],\n", - " 'all_roc_metrics': {'mean_tpr': array([0. , 0.29330305, 0.39824459, 0.48477052, 0.53910681,\n", - " 0.58654819, 0.62233428, 0.65499297, 0.68383714, 0.7105218 ,\n", - " 0.7331015 , 0.75404762, 0.77191402, 0.79007262, 0.80530801,\n", - " 0.81812243, 0.83182971, 0.84348565, 0.85308334, 0.86179954,\n", - " 0.87018186, 0.87841599, 0.88666193, 0.89398957, 0.90104605,\n", - " 0.90768847, 0.91468381, 0.92081589, 0.92687436, 0.93170239,\n", - " 0.93600138, 0.93963402, 0.9430781 , 0.94641134, 0.94881205,\n", - " 0.95143243, 0.95361201, 0.95556462, 0.95766077, 0.95966244,\n", - " 0.96118109, 0.96277551, 0.96448544, 0.96590662, 0.96726595,\n", - " 0.96852001, 0.96991619, 0.97113487, 0.9723888 , 0.97361378,\n", - " 0.97487929, 0.97591807, 0.97725326, 0.97856005, 0.97952476,\n", - " 0.98071045, 0.98164245, 0.98264028, 0.98393822, 0.9850845 ,\n", - " 0.98620898, 0.9872157 , 0.98857151, 0.98954745, 0.99058733,\n", - " 0.99138259, 0.99226871, 0.99306583, 0.99380789, 0.99461065,\n", - " 0.99527049, 0.99592002, 0.99655526, 0.99691174, 0.99757778,\n", - " 0.9978895 , 0.99816814, 0.99852539, 0.99874352, 0.99896924,\n", - " 0.99925024, 0.9993954 , 0.99949426, 0.99964604, 0.99974177,\n", - " 0.99977018, 0.9998233 , 0.99984802, 0.99990114, 0.99994688,\n", - " 0.99996108, 0.99997159, 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ]),\n", - " 'mean_fpr': array([0. , 0.01010101, 0.02020202, 0.03030303, 0.04040404,\n", - " 0.05050505, 0.06060606, 0.07070707, 0.08080808, 0.09090909,\n", - " 0.1010101 , 0.11111111, 0.12121212, 0.13131313, 0.14141414,\n", - " 0.15151515, 0.16161616, 0.17171717, 0.18181818, 0.19191919,\n", - " 0.2020202 , 0.21212121, 0.22222222, 0.23232323, 0.24242424,\n", - " 0.25252525, 0.26262626, 0.27272727, 0.28282828, 0.29292929,\n", - " 0.3030303 , 0.31313131, 0.32323232, 0.33333333, 0.34343434,\n", - " 0.35353535, 0.36363636, 0.37373737, 0.38383838, 0.39393939,\n", - " 0.4040404 , 0.41414141, 0.42424242, 0.43434343, 0.44444444,\n", - " 0.45454545, 0.46464646, 0.47474747, 0.48484848, 0.49494949,\n", - " 0.50505051, 0.51515152, 0.52525253, 0.53535354, 0.54545455,\n", - " 0.55555556, 0.56565657, 0.57575758, 0.58585859, 0.5959596 ,\n", - " 0.60606061, 0.61616162, 0.62626263, 0.63636364, 0.64646465,\n", - " 0.65656566, 0.66666667, 0.67676768, 0.68686869, 0.6969697 ,\n", - " 0.70707071, 0.71717172, 0.72727273, 0.73737374, 0.74747475,\n", - " 0.75757576, 0.76767677, 0.77777778, 0.78787879, 0.7979798 ,\n", - " 0.80808081, 0.81818182, 0.82828283, 0.83838384, 0.84848485,\n", - " 0.85858586, 0.86868687, 0.87878788, 0.88888889, 0.8989899 ,\n", - " 0.90909091, 0.91919192, 0.92929293, 0.93939394, 0.94949495,\n", - " 0.95959596, 0.96969697, 0.97979798, 0.98989899, 1. ]),\n", - " 'all_roc_auc': [0.9373324264902606,\n", - " 0.9410936383111078,\n", - " 0.9635257667493496,\n", - " 0.8903987740960708,\n", - " 0.8781592994811886],\n", - " 'roc_auc': 0.9141830130444975,\n", - " 'roc_auc_sd': 0.03204329033266111}}" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "all_metrics" - ] - }, - { - "cell_type": "markdown", - "id": "7007e45e-16c2-47a3-962c-92b9fe867bde", - "metadata": {}, - "source": [ - "### Train gene classifier with all data:" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "6df82c21-937c-4563-ba6b-a52ce287f542", - "metadata": {}, - "outputs": [], - "source": [ - "import datetime\n", - "import pickle\n", - "from geneformer import Classifier\n", - "\n", - "current_date = datetime.datetime.now()\n", - "datestamp = f\"{str(current_date.year)[-2:]}{current_date.month:02d}{current_date.day:02d}{current_date.hour:02d}{current_date.minute:02d}{current_date.second:02d}\"\n", - "datestamp_min = f\"{str(current_date.year)[-2:]}{current_date.month:02d}{current_date.day:02d}\"\n", - "\n", - "\n", - "output_prefix = \"tf_dosage_sens_alldata\"\n", - "output_dir = f\"/path/to/output_dir/{datestamp}\"\n", - "!mkdir $output_dir" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "f031131c-54fd-4ad1-a925-bf0846cc3235", - "metadata": {}, - "outputs": [], - "source": [ - "# Example input_data_file: https://huggingface.co/datasets/ctheodoris/Genecorpus-30M/blob/main/example_input_files/gene_classification/dosage_sensitive_tfs/dosage_sensitivity_TFs.pickle\n", - "with open(\"/path/to/dosage_sensitivity_TFs.pickle\", \"rb\") as fp:\n", - " gene_class_dict = pickle.load(fp)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "cd27b15c-52d4-46a6-af8c-812c8731f82c", - "metadata": {}, - "outputs": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, { - "name": "stderr", + "name": "stdout", "output_type": "stream", "text": [ - "Hyperparameter tuning is highly recommended for optimal results. No training_args provided; using default hyperparameters.\n" + "\n" ] - } - ], - "source": [ - "cc = Classifier(classifier=\"gene\",\n", - " gene_class_dict = gene_class_dict,\n", - " max_ncells = 10_000,\n", - " freeze_layers = 4,\n", - " num_crossval_splits = 0,\n", - " forward_batch_size=200,\n", - " nproc=16)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "3d542bda-fbab-4d63-ab58-00d4caa996b9", - "metadata": {}, - "outputs": [ + }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7f77eaec105642b199a9e797fccdbf4b", + "model_id": "ceb10f0f87d044ebab534aefef5ec69c", "version_major": 2, "version_minor": 0 }, "text/plain": [ - "Saving the dataset (0/1 shards): 0%| | 0/33558 [00:00\n", - " \n", - " \n", - " [834/834 02:35, Epoch 1/1]\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", - "
StepTraining Loss
830.700600
1660.643100
2490.544700
3320.412900
4150.298600
4980.205700
5810.138900
6640.103200
7470.090000
8300.083100

" - ], + "application/vnd.jupyter.widget-view+json": { + "model_id": "9da6bd7370db44889cab2fb81dcebe11", + "version_major": 2, + "version_minor": 0 + }, "text/plain": [ - "" + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "12bddf69336d481fb0076dced187523c", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "b89b616cd8064d248b37cc642a09b9bf", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "9346181e5b8b4f1b9a562ca676f87d38", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "de9f0442fc1e43f8bb06e4cecf719d67", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=200.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEWCAYAAAB42tAoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAt90lEQVR4nO3de1jUdd7/8efAAIKigHLwFJ5XdC0ztVpPSZIWIooaepd1t/qrdHPvXXNTs0w7ubpb3bVbqWvppaWxGVnmIdNKM0tv08JjqykeUEZRTg7nme/vDxQjhBnNmWHw9bgurouZ+cx33vMpvy8+38PnYzIMw0BERKQaPp4uQEREajcFhYiI1EhBISIiNVJQiIhIjRQUIiJSIwWFiIjUSEEhIiI1Mnu6AJHaLDY2lqysLHx9fQkKCqJPnz48/fTT1K9fH4CdO3fyv//7v+zevRsfHx969OjB5MmTadeuXcU2zp8/z6uvvspnn31Gbm4uTZo04Y477mD8+PGEhYV56quJOE0jChEH5s2bx65du1i5ciX79u1jwYIFAOzatYuxY8dy55138tVXX7Fx40Z+85vfMHr0aI4fPw5ASUkJDz74IIcOHWLhwoV89913vPfee4SEhLB7925Pfi0Rp2lEIeKk8PBwevfuzf79+wH429/+RmJiIg8++GBFmz//+c/s3buXf/zjH8ydO5ePPvqIU6dOsWTJkopRSOPGjfnDH/7gke8gcjU0ohBxUmZmJl999RU33HADhYWF7Nq1i0GDBlVpd/fdd7N161YAtm7dSp8+fSpCQsQbaUQh4sDFv/4LCgq47bbb+OMf/0hubi52u53w8PAq7cPDw8nOzgYgJyeHzp07u7VekWtNIwoRB15//XV27drF0qVLOXz4MNnZ2TRs2BAfHx/OnDlTpf2ZM2cIDQ0FICQk5LJtRLyJgkLEST179iQpKYk5c+YQFBRE165dWbduXZV2a9eu5bbbbgPgd7/7HVu2bKGgoMDd5YpcMwoKkSvw4IMPsnXrVvbv38/jjz/OypUrWbJkCefPnyc3N5dXXnmF77//nsceewyAxMREoqKimDhxIj/99BN2u53s7GzmzZvHpk2bPPxtRJyjoBC5AmFhYSQmJvLGG2/QvXt3Fi5cyGeffUafPn3o378/+/fvZ9myZbRq1QoAf39/Fi9eTJs2bfj973/PLbfcwsiRI8nOzubGG2/07JcRcZJJCxeJiEhNNKIQEZEaKShERKRGCgoREamRgkJERGrkdXdm33rrrTRv3tzTZYiIeJWMjAy2bdt2Ve/1uqBo3rw5qampni5DRMSrJCUlXfV7dehJRERqpKAQEZEaKShERKRGCgoREamRgkJERGqkoBARkRq5LCimTZvG7bffzuDBgy/7umEYPP/888TFxZGQkMDevXtdVYqIiPwKLruPIikpifvvv58pU6Zc9vXNmzeTnp7O+vXr+eGHH5g5cybvv/++q8oREfnVLk62bRhgNwzK7NfH5NsuC4oePXpw4sSJal/fuHEjQ4cOxWQy0bVrV/Ly8jh9+jQRERGuKklELjAMA2uJjcISG6U2OyVldvKKSim1GRSX2cjMLcLHZKLMbmC3l+8QbYaBzWbHZsDxcwU0CvSjxGantMxOcZmd/KJSyuxGxU7UZjewG+WfZTN+9rvdID3LSnjDehiGcaHtpdfsF9raDYOSMjuncosIq++Pj6l8B2387Dtc+r3yY2pqR3mNF5pVNLz4fHXv83bdfsV7PXZntsViISoqquJxVFQUFovlskGRkpJCSkoKQMWi9SJSWZnNzsHT5zl61sqJ7EJOZBdy8HQ+9cy+7D+Vh7/Zh/SzBfj7+lBis1+Tz/TzNeHn64Ofrw8NAswEmH3w8THhYwIfk6n8x+dnv194vllIIOcKSrghLAhfkwmTyYTvxXY+5W19L7QtKrMBEBLkjwkwmcCECSp+58Lvl56D8jaXfv/Z86YL766h3eW2z8X3XXjebkB+USkRwfWuSV+62mf/ufr3eiwoLrde0sX/0L+UnJxMcnIy8OtuQxfxRoZh8NMZK0eyrJwvLqWo1E52QQl7MnJJzyrg+LkCisvsVXb+vj4mmjTwp7DExm+igjEMuKllCP6+PjQNCaSwpIxmIYEE+vnib/bBZjdoFOhHcD0/Avx8CDD7EBzgh6+vCV+TCV+fSz9mHxNB/r7V/puV2uez167+vR4LiqioKDIzMyseZ2Zm6rCTXPcMw+Do2QK2HMpi/6k81u+zcCa/+LJt/c0++PmYiG5cn9ZN6hMeHEBkw3p0bBpMu/AGtAgN1I5crgmPBUVsbCzvvPMO8fHx/PDDDwQHByso5LpSUmZn36k8thw8w6HT5/nhRC5HsqyV2kQ2DKBfh3B6tWtM15ahNGngTz0/X4LrmQmu5+ehyuV647KgmDRpEtu3byc7O5u+ffsyceJEysrKABg9ejT9+vVj06ZNxMXFERgYyIsvvuiqUkRqheIyGzvSs1nyTTqZuUX8cCK30uv+vj60blKfm1uGcFfnKHq2DiOsvr+HqhW5xGVB8fLLL9f4uslk4plnnnHVx4t4jM1ucOj0ebLOF3Miu4AN+0/z/fGcKoeQRt7SghahQcTf2JS24fV1mEhqLa9bj0KkNskrKuXHzHwseUVs3H+aL348TU5BaZV2TRvVI+GmZtzWJowBMZFENvSOK2VEQEEh4pBhGBSW2sjILuTo2QJ2HM0m7UQOP2bmc9ZaUqltgNmHHq1CuSU6jF7tGtMyNIhmIYH4mzVbjngvBYXIz1iLy9iTkcvOYzl8fSiLw2fOk1tYirXEVqVt2/D6DPptFJ2bNaJDZAM6NWtIkL/+SUndo/+r5bpQarOTmVtERk4hBy352OwGp/OLyS4o4YfjuTSoZ+boWSuWvMrnEQL9fOneKpTftW2Crw+0btKAjlHBtAwL8tA3EXE/BYV4pfyiUk5kF5KRXcipvCKOnbXi5+tDUamdg6fzCfL35fi5QvadysNkqn4KhiYN/Akw+3K+uIxOTRsysHMQN98Qwq2tGxPZsB6+PjrBLKKgkFrh4txDWRf+yj97voSTuYVYi23kFJZw0HKes+eLycgpIuv85W9AA2gQYMbP10SpzeDGFo0YcUsLDANaNQ7CZhjc1DKE5iGBhAT60SjIjwCzrxu/pYh3UlCISxiGQU5BKeeLyzhrLeGctZiTOUUcOn2ec9YS7IbBgcx8CktsnC8uI7ew6pVCvxRg9qFDZDC3RIcQHhxA+4hgmjaqR6sm9WnaqJ5uQBNxEQWFXLVSm50tB7PYdSybk7lFlJSVz0G0/cg5isscTzrXuVlDzD4m2oTXp31EMAAdo4Jp3MCfIH8z9QN8uSEsiIb1/PDRISARj1FQiFPO5BdjySsi/ayVbw+fJe1ELmm/uLMYoFPThvRpH46/2UTLsCDaNmmAv9mHiOAAWjWpT2iQP4H+Otwj4k0UFFJJbkEpWw5lsfNYNmfPF3PWWsJXB7OqtPPzNXF7m8YM69acvu3DCQ8O0IlfkTpKQXEdMwyDM/nFbPrPGX44kcO6PZYqJ4oD/Xy5vU1j6vn5MPTm5jQK9KNbdCgNdT5A5LqhoLiO/HTmPFsOZvHZPguHz5znZG5RpdfbNKnPb5s3ZPCNzejboYnXLMgiIq6loKjDDMNg7Z5MPvo+g/9Lz+bchekmgvx9iWxYj56tw+jSvBEDYiLp1KwhjQI1ShCRqhQUdYzNbrDtyFne33GCD3dlAFDf35fb2zahW3QIfdqFE9M0GLOv5h4SEecoKOqIUpudl9b/h3mbfgLAxwQ3tWjE7W2bMCmugyalE5GrpqDwYnlFpXy4M4ONB07z/bFs8orK8Df78FCvVky4o50OJYnINaGg8EIncwpZsPkwy7cfo7jMjp+viZ6tw7jv1mgGdY7SzWkick0pKLyEzW7wwXcnePvrIxzIzAdgQEwkY26PplfbxjrnICIuo6DwAq9uOMhbWw6TV1S+5njPVmE8flcHbm3T2MOVicj1QEFRi9nsBrNW7WXJN0cBmDO8CyNuaak7oEXErRQUtVBmbhGvfPYfUnYcByA4wMw3T95JgwD95xIR99Oep5b5/ICF3y/eAUCzRvUY0b0lE+5oSz0/TaQnIp6hoKglSm12xr+zkw37LYQE+fHaqJvp2yHc02WJiCgoaoN1e04x8+N9ZOYVcUt0KK+O6kqLUK3JLCK1g4LCg8psdu6d/w07j+UA8MKw33LfrdGeLUpE5BcUFB5yzlpC7EtfklNQSrcbQpg74ibaRTTwdFkiIlUoKDzg/R3HmZa6mzK7wQO3R/Ns4m89XZKISLUUFG42b9NP/HXtAXx9THww/nfcEh3q6ZJERGqkoHCj5z7Zx1tbjhARHMCKR3/HDY11wlpEaj8FhZtM+vf3pO7MIDTIj88m9dPMriLiNRQUbrB+byapOzMIDjCzffoA/DSBn4h4EQWFCxmGwbvbjvHUyj00aeDPmj/2UUiIiNdxaVBs3ryZF154AbvdzsiRI3n44YcrvZ6fn89f/vIXTp48ic1m4/e//z3Dhw93ZUlu8/WhLF7dcJDt6efw9/VhwQPdiWhYz9NliYhcMZcFhc1m49lnn2XRokVERkYyYsQIYmNjadeuXUWbd999l7Zt2zJv3jzOnTvHoEGDSEhIwN/f31VlucX3x3O4b+E2AP5fn9ZMvTtGM76KiNdyWVCkpaURHR1Ny5YtAYiPj2fjxo2VgsJkMmG1WjEMA6vVSqNGjTCbvfto2LvbjjL9wz0AfDD+dm6JDvNwRSIiv47L9soWi4WoqKiKx5GRkaSlpVVqc9999zF+/Hj69OmD1WrllVdewcen6jH8lJQUUlJSAMjOznZVyb/aoq+PMGvVPgAWP9RDISEidYLLgsIwjCrPmUyVD79s2bKFmJgYlixZwrFjx3jooYfo3r07DRpUnsoiOTmZ5ORkAJKSklxV8q9yJr+4IiS2T7+TiGCdjxCRusFll+BERUWRmZlZ8dhisRAREVGpTWpqKnfddRcmk4no6GhatGjB4cOHXVWSSw1/cysAfxtxo0JCROoUlwVFly5dSE9P5/jx45SUlLB69WpiY2MrtWnatCnffPMNAFlZWRw5coQWLVq4qiSXmb12P8fOFTC8WwtGdm/p6XJERK4plx16MpvNzJgxg3HjxmGz2Rg+fDjt27dn+fLlAIwePZoJEyYwbdo0EhISMAyDyZMnExbmXcf1U3eeYP6mw/ibfXgxSZP7iUjd49JLjPr160e/fv0qPTd69OiK3yMjI3n77bddWYJLXZzgLzTIj/cf/R0BZi1XKiJ1j3dfi+pBf//0R/75xSF8fUxsfqI/wfU0d5OI1E0Kiqvw7Kp9vP31EVqEBrLyD70UEiJSpykortDpvCLe/voIYfX9+WLyHZq7SUTqPO3lrkBRqa1iao45w29USIjIdUF7uiswa9U+Dp4+z//c2Z64TpGeLkdExC0UFE46nV/E8u3H8Df78Oe4Dp4uR0TEbRQUTigps/OX98vnqXrzvm4erkZExL0UFE6Y8O5ONv3nDLEdI4jtGOH4DSIidYjTQVFQUODKOmqt93ccZ8N+CzFNG/LWg92rTGwoIlLXOQyKnTt3cs8993DPPfcAcODAAWbOnOnqumqFF9fs5y8r0mhc35+UR25TSIjIdclhUMyePZu33nqLkJAQADp27MiOHTtcXZfHHTp9ngWby2eyTXnkdhrqpjoRuU45deipadOmld90mcWF6prHlu0EYNFDPWgX0cBBaxGRusvhndlNmzZl586dmEwmSkpKWLp0KW3btnVHbR7z55TvOZCZz6geLen/G528FpHrm8OhwcyZM3n33XexWCz069eP/fv388wzz7ijNo84e76YD3dlADDtnhgPVyMi4nkORxRHjhzhpZdeqvTcd999xy233OKyojxpxLzyhZT+9UB3GgXqvISIiMMRxfPPP+/Uc3XBrmPZHMmyknBTM03RISJyQbUjil27drFr1y7OnTvHokWLKp4/f/48NpvNLcW5k7W4jFELvgXgiYG/8XA1IiK1R7VBUVpaSkFBATabDavVWvF8gwYNeO2119xSnDv9KeV7isvs/DWpCy3DgjxdjohIrVFtUPTs2ZOePXsybNgwmjdv7s6a3M5uN/jyx9MEB5gZ1fMGT5cjIlKrODyZHRgYyJw5czh06BDFxcUVzy9ZssSlhbnT0m+PUmoz+EP/1p4uRUSk1nF4Mnvy5Mm0adOGEydO8Nhjj9G8eXO6dOnijtrcwlpcxt8//RGACXe083A1IiK1j8OgyMnJYeTIkZjNZnr27Mns2bP54Ycf3FGbW7y4Zj/5xWW8knwT/ua6f8e5iMiVcnjoyWwubxIREcGXX35JREQEmZmZLi/MXdJO5AIwtGvdPg8jInK1HAbF+PHjyc/PZ8qUKTz33HNYrVaefPJJd9Tmcpa8InZn5PJft96gmWFFRKrhMCj69+8PQHBwMEuXLgXK78z2doZh8PTKPQDc/dsoD1cjIlJ7VRsUNpuNtWvXYrFY6NOnDx06dOCLL75g/vz5FBUVsXLlSjeWee19knaK9fssNKxnpne7Jp4uR0Sk1qo2KKZPn86pU6e48cYbef7552nevDm7du1i8uTJDBgwwJ01usTFtSbW/amvDjuJiNSg2qDYs2cPH3/8MT4+PhQXF3Pbbbexfv16wsPD3VmfS5SU2dmdkUvj+v40Cwn0dDkiIrVatdeD+vn5VSxQFBAQQKtWrepESAD84/ODADzct42HKxERqf2qHVEcPnyYhISEisfHjh2r9HjVqlWurcxFSm12/vH5IQDG9VFQiIg4Um1QrFmzxp11uM2HO8sXJRrUOQpfH52bEBFxpNqgqIsTAdrtBv/6qvwk9pwRN3q4GhER7+DSOSs2b97MwIEDiYuLY8GCBZdts23bNhITE4mPj+f+++93ZTm8s+0oB0+fJ/7Gplq9TkTESQ5vuLtaNpuNZ599lkWLFhEZGcmIESOIjY2lXbtLE+/l5eUxa9YsFi5cSLNmzTh79qyryqHUZmf+pvLRxMv33uSyzxERqWucGlEUFRVx+PDhK9pwWloa0dHRtGzZEn9/f+Lj49m4cWOlNqtWrSIuLo5mzZoB0Lhx4yv6jCsx5q1tZOQUMvmuDgSYfV32OSIidY3DoPj8889JTExk3LhxAOzfv59HH33U4YYtFgtRUZemxoiMjMRisVRqk56eTl5eHmPGjCEpKclld3sfOp3Pt4fP0bRRPf7QX1OJi4hcCYeHnv75z3+yYsUKxowZA0BMTAwZGRkON2wYRpXnfnkHtM1mY+/evSxevJiioiJGjRrFTTfdROvWlRcQSklJISUlBYDs7GyHn/1Lz32yH4DX7+umu7BFRK6Qw6Dw9fUlODj4ijccFRVVaTpyi8VCRERElTahoaEEBQURFBRE9+7dOXDgQJWgSE5OJjk5GYCkpKQrqsMwDL4+lEXHqGC63RB6xd9DROR65/DQU/v27Vm1ahU2m4309HSee+45br75Zocb7tKlC+np6Rw/fpySkhJWr15NbGxspTZ33nknO3bsoKysjMLCQtLS0mjbtu3Vf5vLWLw1nTK7wbCb697lviIi7uBwRPH0008zb948/P39efzxx+nduzcTJkxwvGGzmRkzZjBu3DhsNhvDhw+nffv2LF++HIDRo0fTtm1b+vTpw5AhQ/Dx8WHEiBF06NDh13+rCwzDYNaqfQCM7a31sEVErobJuNzJhJ/Zt28fnTp1clc9DiUlJZGamupU283/OcMDb2+nR6tQ3n/0dy6uTESk9rqSfecvORxRzJ49mzNnzjBo0CDi4+Np3779VX2QJ8zb9BMAC8Z093AlIiLey2FQLF26lDNnzrB27VqefvpprFYrd999t1OHnzxp609ZbP3pLENuakZofX9PlyMi4rWcuuEuPDycBx54gFmzZtGxY0feeOMNV9f1q735Zflo4s9x1+6ch4jI9cjhiOKnn35izZo1fPrpp4SEhHDPPfcwdepUd9R21X7MzOerg1n0bB1G6yb1PV2OiIhXcxgU06ZNIz4+nrfeeovIyEh31PSrLd56BIDnh/7Ww5WIiHg/h0Hx73//2x11XFPbj5zjphaN6BB55TcKiohIZdUGxf/8z//w6quvVlrV7udq6wp3J7IL+OmMlYd6tfJ0KSIidUK1QTF9+nQA5s2b57ZiroVXN5Svhz28WwsPVyIiUjdUe9XTxXmZli1bRvPmzSv9LFu2zG0FXql9p/IwmeC3zRt5uhQRkTrB4eWxW7durfLc5s2bXVLMtbD3ZB6/0bkJEZFrptpDT8uWLWP58uUcP3680nkKq9VKt27d3FLclSooKQOgXUQDD1ciIlJ3VBsUCQkJ9O3bl5dffpnHH3+84vn69esTEhLijtqu2PYj5wDoHq3pxEVErpVqg8JkMtGiRQtmzJhR5bWcnJxaGRZvbSm/f2JIV00pLiJyrVQbFI8//jjz588nKSkJk8lUacU6k8lUZf1rT1u3J5OvDmZxV6dIwjS3k4jINVNtUMyfPx8oXzPbGyzYXD63k+7GFhG5thxe9fTdd99RUFAAwEcffcTs2bM5efKkywu7UjuP5WAyQUTDep4uRUSkTnEYFDNnziQwMJADBw6wcOFCmjVrxhNPPOGO2px2Or8IgLs6ecdcVCIi3sRhUJjNZkwmExs2bOCBBx7gwQcfxGq1uqM2p63fawHgni5NPVyJiEjd4zAo6tevz/z58/n444+54447sNlslJWVuaM2p5Ta7MxZewCAATEaUYiIXGsOg+KVV17B39+fF198kfDwcCwWC2PHjnVHbU754sBp8ovLeLhvG+oHOJwMV0RErpDDoAgPDychIYH8/Hy++OILAgICGDp0qBtKc873x3MAuP/WaM8WIiJSRzkMijVr1jBy5EjWrVvH2rVrK36vLb46mEU9Px9ahgV6uhQRkTrJ4bGaefPmsWLFCho3bgzAuXPn+O///m8GDRrk8uKcsTsjlz7tm2AymTxdiohIneRwRGEYRkVIAISEhFS6S9uTcgtKAbQutoiICzkcUfTu3ZuxY8cSHx8PlB+K6tu3r8sLc0ZGTiEA7TVbrIiIyzgMiilTprB+/Xq+++47DMMgOTmZuLg4d9Tm0H8s+QC0bqKgEBFxlWqDIj09nTlz5nD8+HE6dOjAlClTiIysXfcpfPHjaQC6aDU7ERGXqfYcxZNPPkn//v157bXX6Ny5M88995w763LK+r0W6vv70ijIz9OliIjUWdWOKKxWK/feey8Abdq0YdiwYW4ryhnW4jIKS230bB3m6VJEROq0aoOiuLiYffv2VVzhVFRUVOlx586d3VNhNbILSgBI7NrMo3WIiNR11QZFeHg4s2fPrnjcpEmTiscmk4klS5a4vroa7DyWA0A9s69H6xARqeuqDYqlS5e6s44rticjF4De7Zt4uBIRkbrN4Q13tVVhiQ2ASC1UJCLiUi4Nis2bNzNw4EDi4uJYsGBBte3S0tKIiYm5ojmkjp4rIMhfh51ERFzNZUFhs9l49tlnWbhwIatXr+aTTz7h0KFDl23397//nd69e1/R9guKyzR1h4iIGzg119NHH33EP//5TwBOnjxJWlqaww2npaURHR1Ny5Yt8ff3Jz4+no0bN1Zpt3TpUgYOHFhpPilnHMmyUs9PIwoREVdzas3s77//ntWrVwPlK97NmjXL4YYtFgtRUVEVjyMjI7FYLFXabNiwgVGjRtW4rZSUFJKSkkhKSiI7OxuAs9YSGgXqRjsREVdzGBRpaWk888wzBAQEANCoUSNKS0sdbvhyM8z+cirwF154gcmTJ+PrW/PIIDk5mdTUVFJTUwkNDaXMZgegRajWoBARcTWHkwKazWZsNlvFTv7cuXP4+Dg+tREVFUVmZmbFY4vFQkRERKU2e/bsYdKkSQBkZ2ezadMmzGYzAwYMqHHbmXlFAITV93dYh4iI/DoOg2LMmDH84Q9/4OzZs7zyyiusW7eOP/3pTw433KVLF9LT0zl+/DiRkZGsXr2al156qVKbzz//vOL3qVOncscddzgMCYBjZwsAaNVYJ7NFRFzNYVAMGTKEzp078+2332IYBm+88QZt27Z1vGGzmRkzZjBu3DhsNhvDhw+nffv2LF++HIDRo0dfddHZFxYsuqFx0FVvQ0REnOMwKE6ePElgYCD9+/ev9FyzZo7nWOrXrx/9+vWr9Fx1AfHXv/7V4fYu+vHCOhQ6mS0i4noOg+KRRx6p+L24uJgTJ07QunXriqugPGHroSwAWoZqRCEi4moOg2LVqlWVHu/du5eUlBSXFeSM/1jyaRBgxt/stTOQiIh4jSve03bu3Jndu3e7ohan5RWV0UeTAYqIuIXDEcWiRYsqfrfb7ezbt4+wMM8tFnTx9gydnxARcQ+HQWG1Wit+9/X1pV+/fgwcONClRdWkuKz8Zrtu0aEeq0FE5HpSY1DYbDasVitTpkxxVz0O2S8MKSKCAzxciYjI9aHacxRlZWX4+vqyb98+d9bjUMmF6Tv8fXUiW0TEHaodUYwcOZIPP/yQmJgYHn30UQYNGkRQ0KXLUe+66y63FPhLNlv5iKJlmC6NFRFxB4fnKHJzcwkNDWXbtm2VnvdUUBSWlq9spwkBRUTco9qgOHv2LIsWLaJ9+/aYTKZKs8H+chZYd7p46MmTNYiIXE+qDQq73V7piqfawm4YRDbUiWwREXepNijCw8N57LHH3FmLcwzoEBns6SpERK4b1V46dLmFh2qDEpud4HoOT62IiMg1Um1QLF682I1lXAEDsq2OV9gTEZFro9qgCAkJcWMZzjOAmKYNPV2GiMh1w+vuWrMbBgF+Xle2iIjX8so9bnGp3dMliIhcN7wyKJrrZjsREbfxyqDw1b12IiJu451B4aOkEBFxFy8NCq8sW0TEK3nlHlczjIuIuI9X7nJ9NCGgiIjbeGVQFF2YalxERFzPK4OiaSNdHisi4i5eGRS+uj5WRMRtvDIozLo8VkTEbbwyKHQfhYiI+3hlUJh1H4WIiNt45R7XXksXVRIRqYu8MijC6vt7ugQRkeuGVwaFbrgTEXEflwbF5s2bGThwIHFxcSxYsKDK6x9//DEJCQkkJCQwatQoDhw44NR2dTJbRMR9XBYUNpuNZ599loULF7J69Wo++eQTDh06VKlNixYteOedd1i1ahXjx4/n6aefdmrbvhpRiIi4jcuCIi0tjejoaFq2bIm/vz/x8fFs3LixUptu3brRqFEjALp27UpmZqZT29ZFTyIi7mN21YYtFgtRUVEVjyMjI0lLS6u2/YoVK+jbt+9lX0tJSSElJaXisQ49iYi4j8uCwrjMJaymag4Zffvtt6xYsYJly5Zd9vXk5GSSk5MBaH/rnTr0JCLiRi4LiqioqEqHkiwWCxEREVXaHThwgKeeeop//etfhIaGOrXtev6+16xOERGpmcuO9nfp0oX09HSOHz9OSUkJq1evJjY2tlKbkydPMnHiRObOnUvr1q2d3rafTlKIiLiNy0YUZrOZGTNmMG7cOGw2G8OHD6d9+/YsX74cgNGjR/P666+Tk5PDrFmzAPD19SU1NdXhtnXkSUTEfUzG5U4m1GLtb72T3VvWU89Ph59ERJyVlJTk1B/il6NjOCIiUiMFhYiI1Mgrg0LnKERE3Mc7gwIlhYiIu3hlUIiIiPt4ZVDo0JOIiPt4ZVCIiIj7eGVQaEAhIuI+3hkUOvYkIuI2XhkUIiLiPl4ZFBpPiIi4j1cGhYiIuI9XBoVOUYiIuI+XBoWSQkTEXbwyKERExH0UFCIiUiMFhYiI1EhBISIiNVJQiIhIjRQUIiJSI68LCl0YKyLiXl4XFCIi4l4KChERqZH3BYWOPYmIuJX3BYWIiLiVFwaFhhQiIu7khUEhIiLupKAQEZEaeV1Q6MCTiIh7eV1QiIiIeykoRESkRgoKERGpkYJCRERq5NKg2Lx5MwMHDiQuLo4FCxZUed0wDJ5//nni4uJISEhg7969rixHRESugsuCwmaz8eyzz7Jw4UJWr17NJ598wqFDhyq12bx5M+np6axfv57nnnuOmTNnuqocERG5Si4LirS0NKKjo2nZsiX+/v7Ex8ezcePGSm02btzI0KFDMZlMdO3alby8PE6fPl3jdnV5rIiIe5ldtWGLxUJUVFTF48jISNLS0mpsExUVhcViISIiolK7lJQUUlJSygs+n0lSUpKryvYq2dnZhIaGerqMWkF9cYn64hL1xSVHjhy56ve6LCgMw6jynMlkuuI2AMnJySQnJwOQlJREamrqNarSu6kvLlFfXKK+uER9ccmv+QPbZYeeoqKiyMzMrHh8uZHCL9tkZmZWaSMiIp7lsqDo0qUL6enpHD9+nJKSElavXk1sbGylNrGxsaxcuRLDMPj+++8JDg5WUIiI1DIuO/RkNpuZMWMG48aNw2azMXz4cNq3b8/y5csBGD16NP369WPTpk3ExcURGBjIiy++6HC7Fw9Bifri59QXl6gvLlFfXPJr+sJkXO5EgYiIyAW6M1tERGqkoBARkRrV2qDQ9B+XOOqLjz/+mISEBBISEhg1ahQHDhzwQJXu4agvLkpLSyMmJoZ169a5sTr3cqYvtm3bRmJiIvHx8dx///1urtB9HPVFfn4+jz76KEOGDCE+Pp4PPvjAA1W63rRp07j99tsZPHjwZV+/6v2mUQuVlZUZd955p3Hs2DGjuLjYSEhIMA4ePFipzZdffmmMHTvWsNvtxq5du4wRI0Z4qFrXcqYvvvvuOyMnJ8cwjPJ+uZ774mK7MWPGGOPGjTPWrl3rgUpdz5m+yM3NNe6++24jIyPDMAzDyMrK8kSpLudMX7z55pvG3LlzDcMwjLNnzxo9evQwiouLPVGuS23fvt3Ys2ePER8ff9nXr3a/WStHFK6a/sMbOdMX3bp1o1GjRgB07dq10r0pdYkzfQGwdOlSBg4cSOPGjT1QpXs40xerVq0iLi6OZs2aAdTZ/nCmL0wmE1arFcMwsFqtNGrUCLPZZRd9ekyPHj0q9gWXc7X7zVoZFJeb/sNisdTY5uL0H3WNM33xcytWrKBv377uKM3tnP3/YsOGDYwaNcrd5bmVM32Rnp5OXl4eY8aMISkpiZUrV7q5Svdwpi/uu+8+fvrpJ/r06cOQIUOYPn06Pj61cvfnUle736yVkWpcw+k/vN2VfM9vv/2WFStWsGzZMleX5RHO9MULL7zA5MmT8fX1dVdZHuFMX9hsNvbu3cvixYspKipi1KhR3HTTTbRu3dpdZbqFM32xZcsWYmJiWLJkCceOHeOhhx6ie/fuNGjQwF1l1gpXu9+slUGh6T8ucaYvAA4cOMBTTz3Fv/71rzo7CZozfbFnzx4mTZoElE8It2nTJsxmMwMGDHBrra7m7L+R0NBQgoKCCAoKonv37hw4cKDOBYUzfZGamsrDDz+MyWQiOjqaFi1acPjwYW688UZ3l+tRV7vfrJVjL03/cYkzfXHy5EkmTpzI3Llz69xO4Oec6YvPP/+84mfgwIE888wzdS4kwLm+uPPOO9mxYwdlZWUUFhaSlpZG27ZtPVSx6zjTF02bNuWbb74BICsriyNHjtCiRQtPlOtRV7vfrJUjCldN/+GNnOmL119/nZycHGbNmgWAr69vnZwx05m+uF440xdt27atOCbv4+PDiBEj6NChg4crv/ac6YsJEyYwbdo0EhISMAyDyZMnExYW5uHKr71Jkyaxfft2srOz6du3LxMnTqSsrAz4dftNTeEhIiI1qpWHnkREpPZQUIiISI0UFCIiUiMFhYiI1EhBISIiNVJQSK0UExNDYmJixc+JEyeqbXvzzTf/6s+bOnUqsbGxJCYmMmzYMHbt2nXF25g+fTqHDh0CYN68eZVeu1ZTilzsl8GDB/Poo4+Sl5dXY/v9+/ezadOma/LZcv3S5bFSK918881O76yvpG11pk6dyh133MGgQYPYsmULc+bMYdWqVVe9vWtRk6PtTpkyhVatWjF+/Phq26emprJnzx5mzJhxzWuR64dGFOIVrFYrDz74IMOGDSMhIYENGzZUaXP69Gnuu+++ir+4d+zYAZTP85OcnMywYcP44x//iNVqrfGzevTowbFjxwBYtGgRgwcPZvDgwSxevBiAgoICHn74YYYMGcLgwYNZs2YNAGPGjGH37t38/e9/p6ioiMTERB5//HHg0qjnT3/6U6W/8KdOncqnn36KzWZjzpw5DB8+nISEBN577z2HfdK1a9eKCd3S0tIYNWoUQ4cOZdSoURw+fJiSkhJee+011qxZQ2JiImvWrKGgoIBp06YxfPhwhg4detl+FKniV01+LuIiHTt2NIYMGWIMGTLEmDBhglFaWmrk5+cbhlG+nsCAAQMMu91uGIZhdO3a1TAMw3jrrbeMN954wzCM8jUK8vPzjbNnzxr/9V//ZVitVsMwDGP+/PnGP/7xjyqfN2XKlIq1K9asWWOMGDHC2L17tzF48GDDarUa58+fN+655x5j7969xrp164zp06dXvDcvL88wDMO4//77jbS0tEo1XXTx8fr1640nnnjCMAzDKC4uNvr27WsUFhYa7733nvH6669XPD9s2DDj2LFjVeq8uJ2ysjJj4sSJxqZNmwzDMIz8/HyjtLTUMAzD+Prrr43HHnvMMAzD+OCDD4xZs2ZVvP+ll14yVq5caRhG+XoVd911V0XfiFSnVk7hIVKvXj0++uijiselpaW8/PLL/N///R8+Pj5YLBaysrIIDw+vaNOlSxeefPJJysrKGDBgADExMXzxxRccOnSoYnqP0tJSunbtetnPnDt3Lm+++SZhYWG88MILfPPNNwwYMICgoCAA4uLi2LFjB3369GHOnDn87W9/o3///nTv3t3p79W3b1+ef/55SkpK2Lx5M927d6devXp8/fXX/Pjjj3z66adA+YpsR48epWXLlpXef3GkkpGRQefOnenVq1dF+ylTpnD06FFMJhOlpaWX/fwtW7bw+eef8/bbbwNQXFzMqVOn6uQcUHLtKCjEK6xatYpz586RmpqKn58fsbGxFBcXV2rTo0cP3nnnHTZt2sQTTzzB2LFjadiwIb169eLll192+BlPPPEEgwYNqni8devWy7Zr3bo1qampbNq0iZdeeolevXrx2GOPOfU9AgIC6NmzJ1999RVr164lPj4eKJ/++amnnqJPnz41vv9igObn5/PII4/w7rvv8sADD/Dqq69y66238vrrr3PixAkeeOCBarfx2muv0aZNG6fqFQGdoxAvkZ+fT+PGjfHz8+Pbb78lIyOjSpuMjAwaN27Mvffey/Dhw9m7dy9du3Zl586dHD16FIDCwkKOHDni1Gf26NGDDRs2UFhYSEFBARs2bKB79+5YLBYCAwNJTExk7Nix7Nu3r8p7zWZztX/Vx8fHk5qayo4dO+jduzcAvXv3Zvny5RXvOXLkCAUFBdXWFhwczFNPPcXbb79NaWkp+fn5REZGAvDhhx9WtKtfv36lczK9e/fmnXfeqViX4HK1i/ySRhTiFRISEhg/fjxJSUnExMRc9i/i7du389Zbb2E2mwkKCmLOnDmEhYUxe/ZsJk2aRElJCVB+QtmZ6dg7d+5MUlISI0eOBGDEiBF06tSJr776irlz5+Lj44PZbGbmzJlV3nvvvfcyZMgQOnXqxEsvvVTptV69ejFlyhRiY2Px9/cHYOTIkWRkZJCUlIRhGISGhvLGG2/UWF+nTp3o2LEjq1evZty4cUydOpVFixZx2223VbS59dZbWbBgAYmJiTzyyCNMmDCBF198kSFDhmAYBs2bN2f+/PkO+0Kub7o8VkREaqRDTyIiUiMFhYiI1EhBISIiNVJQiIhIjRQUIiJSIwWFiIjUSEEhIiI1+v+zGiMYDpa1vQAAAABJRU5ErkJggg==", + "text/plain": [ + "

" ] }, "metadata": {}, "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[0.24272061700106187, 0.1890124629743475, 0.1665455764824233, 0.212820656122506, 0.18890068741966132]\n" + ] } ], "source": [ - "# 6 layer Geneformer: https://huggingface.co/ctheodoris/Geneformer/blob/main/model.safetensors\n", - "trainer_test = cc.train_all_data(model_directory=\"/path/to/Geneformer\",\n", - " prepared_input_data_file=f\"{output_dir}/{output_prefix}_labeled.dataset\",\n", - " id_class_dict_file=f\"{output_dir}/{output_prefix}_id_class_dict.pkl\",\n", - " output_directory=output_dir,\n", - " output_prefix=output_prefix)" + "# cross-validate gene classifier\n", + "all_roc_auc, roc_auc, roc_auc_sd, mean_fpr, mean_tpr, confusion, label_dicts \\\n", + " = cross_validate(subsampled_train_dataset, targets, labels, nsplits, subsample_size, training_args, freeze_layers, training_output_dir, 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "# bundle data for plotting\n", + "bundled_data = []\n", + "bundled_data += [(roc_auc, roc_auc_sd, mean_fpr, mean_tpr, \"Geneformer\", \"red\")]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# plot ROC curve\n", + "plot_ROC(bundled_data, 'Dosage Sensitive vs Insensitive TFs')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# plot confusion matrix\n", + "classes_list = [\"Dosage Sensitive\", \"Dosage Insensitive\"]\n", + "plot_confusion_matrix(classes_list, confusion, \"Geneformer\")" ] } ], @@ -1243,9 +2424,14 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.15" + "version": "3.10.11" + }, + "vscode": { + "interpreter": { + "hash": "eba1599a1f7e611c14c87ccff6793920aa63510b01fc0e229d6dd014149b8829" + } } }, "nbformat": 4, - "nbformat_minor": 5 + "nbformat_minor": 4 }