{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Prototypical networks for few-shot cell type annotations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This notebook is a part of the ISMB tutorial [Meta-learning for bridging labeled and unlabeled data in biomedicine](http://snap.stanford.edu/metalearning-ismb/)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this notebook, we wil use [Prototypical networks](https://arxiv.org/abs/1703.05175) to learn cell type annotations from only few-labeled as examples. We will use meta-learning approach to learn across different tissues and then generalize to a new, yet unseen tissues given only few labels. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Loading Tabula Muris dataset" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will use [Tabula Muris](https://www.nature.com/articles/s41586-020-2496-1) mouse cell atlas single-cell data. This dataset can be downloaded at [http://snap.stanford.edu/mars/data/tms-facs-mars.tar.gz](http://snap.stanford.edu/mars/data/tms-facs-mars.tar.gz). " ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "import scanpy.api as sc\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# set the path to the data\n", "dataset_root = '../tabula-muris-senis-facs_mars.h5ad'" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "def load_sc_data(root):\n", " \"\"\"Preprocess single cell data\"\"\"\n", " sc_data = sc.read_h5ad(dataset_root)\n", " sc_data = sc_data[sc_data.obs['age']=='3m'] # reduce file size by taking only 3months old mouse to be able to locally run the example\n", " sc.pp.filter_cells(sc_data, min_counts=5000)\n", " sc.pp.filter_cells(sc_data, min_genes=500)\n", " \n", " sc.pp.normalize_per_cell(sc_data, counts_per_cell_after=1e4) \n", " sc_data = sc.pp.filter_genes_dispersion(sc_data, subset = False, min_disp=.5, max_disp=None, \n", " min_mean=.0125, max_mean=10, n_bins=20, n_top_genes=None, \n", " log=True, copy=True)\n", " sc_data = sc_data[:,sc_data.var.highly_variable]\n", " sc.pp.log1p(sc_data)\n", " sc.pp.scale(sc_data, max_value=10, zero_center=True)\n", " sc_data.X[np.isnan(sc_data.X)] = 0\n", " \n", " return sc_data" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Trying to set attribute `.obs` of view, making a copy.\n" ] } ], "source": [ "tm_data = load_sc_data(dataset_root)" ] }, { "cell_type": "code", "execution_count": 676, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sc.pp.pca(tm_data)\n", "sc.tl.tsne(tm_data)\n", "sc.pl.tsne(tm_data, color = 'tissue')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setting model and training parameters" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "from __future__ import print_function\n", "import numpy as np\n", "import torch\n", "import os\n", "import pandas as pd\n", "import warnings\n", "from tqdm import tqdm\n", "\n", "import torch.utils.data as data\n", "import torch.nn as nn\n", "from torch.nn import functional as F\n", "from torch.nn.modules import Module\n", "\n", "warnings.filterwarnings('ignore')" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "# Setting model parameters\n", "dataset_root = '/Users/maria/Desktop/tabula-muris-senis-facs_mars.h5ad'\n", "epochs= 100\n", "iterations = 100\n", "learning_rate = 0.001\n", "lr_scheduler_step = 20\n", "lr_scheduler_gamma = 0.5\n", "classes_per_it_tr = 5 # number of classes to sample at each iteration\n", "classes_per_it_val = 5\n", "num_support_tr = 1 # support set size during training\n", "num_query_tr = 1 # query set size\n", "num_support_val = 1 # support set size during evaluation\n", "num_query_val = 1\n", "manual_seed = 25" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "np.random.seed(manual_seed)\n", "torch.manual_seed(manual_seed)\n", "torch.cuda.manual_seed(manual_seed)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "# choosing cross-tisue split for training validation and test set\n", "data_split = {'train': ['Heart','Aorta','Kidney'],\n", " 'val':['Lung'],\n", " 'test':['Liver']}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data loaders " ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "class CellDataset(data.Dataset):\n", " \"\"\"Examples and labels for single cell dataset\"\"\"\n", " \n", " def __init__(self, adata, mode, min_samples=20):\n", " \n", " super(CellDataset, self).__init__()\n", " \n", " selected_tissues = set(data_split[mode])\n", " adata = adata[adata.obs['tissue'].isin(selected_tissues)]\n", " \n", " # filter cell types with less than min_samples cells\n", " filtered_index = adata.obs.groupby([\"cell_ontology_class_reannotated\"]) \\\n", " .filter(lambda group: len(group) >= min_samples) \\\n", " .reset_index()['index']\n", " adata = adata[filtered_index]\n", " \n", " # convert label to torch tensor y\n", " targets = adata.obs['cell_ontology_class_reannotated'].cat.codes\n", " adata.obs['label'] = targets\n", "\n", " self.x = adata.X\n", " self.y = adata.obs['label']\n", "\n", " print(\"*** Dataset: Found %d items \" % self.x.shape[0])\n", " print(\"*** Dataset: Found %d classes\" % len(np.unique(self.y)))\n", "\n", " shape = 1, self.x.shape[1]\n", " shape = self.x.shape[1]\n", " self.x = [torch.from_numpy(inst).view(shape) for inst in self.x]\n", " self.y = tuple(self.y.tolist())\n", "\n", "\n", " def __getitem__(self, idx):\n", " return self.x[idx], self.y[idx]\n", "\n", " def __len__(self):\n", " return self.nitems\n", "\n", " def get_dim(self):\n", " return self.x[0].shape[0]" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "class PrototypicalBatchSampler(object):\n", " \"\"\"Yield a batch of indexes at each iteration. At every iteration the batch indexes corresponds to 'num_support' + 'num_query' samples\n", " for 'classes_per_it' random classes.\"\"\"\n", "\n", " def __init__(self, labels, classes_per_it, num_samples, iterations):\n", " super(PrototypicalBatchSampler, self).__init__()\n", " self.labels = labels\n", " self.classes_per_it = classes_per_it\n", " self.sample_per_class = num_samples\n", " self.iterations = iterations\n", "\n", " self.classes, self.counts = np.unique(self.labels, return_counts=True)\n", " self.classes = torch.LongTensor(self.classes)\n", "\n", " # create a matrix, indexes, of dim: classes X max(elements per class)\n", " # fill it with nans\n", " # for every class c, fill the relative row with the indices samples belonging to c\n", " # in numel_per_class we store the number of samples for each class/row\n", " self.idxs = range(len(self.labels))\n", " print('Number of examples per class: ')\n", " print(self.counts)\n", " self.indexes = np.empty((len(self.classes), max(self.counts)), dtype=int) * np.nan\n", " self.indexes = torch.Tensor(self.indexes)\n", " self.numel_per_class = torch.zeros_like(self.classes)\n", " for idx, label in enumerate(self.labels):\n", " label_idx = np.argwhere(self.classes == label).item()\n", " self.indexes[label_idx, np.where(np.isnan(self.indexes[label_idx]))[0][0]] = idx\n", " self.numel_per_class[label_idx] += 1\n", "\n", " def __iter__(self):\n", " spc = self.sample_per_class\n", " cpi = self.classes_per_it\n", " \n", " for it in range(self.iterations):\n", " batch_size = spc * cpi\n", " batch = torch.LongTensor(batch_size)\n", " c_idxs = torch.randperm(len(self.classes))[:cpi]\n", " \n", " for i, c in enumerate(self.classes[c_idxs]):\n", " s = slice(i * spc, (i + 1) * spc)\n", " label_idx = torch.arange(len(self.classes)).long()[self.classes == c].item()\n", " sample_idxs = torch.randperm(self.numel_per_class[label_idx])[:spc] \n", " batch[s] = self.indexes[label_idx][sample_idxs] # error when a class does not have spc examples\n", " batch = batch[torch.randperm(len(batch))]\n", " \n", " yield batch\n", "\n", " def __len__(self):\n", " return self.iterations" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "def init_sampler(labels, mode):\n", " if mode=='train':\n", " classes_per_it = classes_per_it_tr\n", " num_samples = num_support_tr + num_query_tr\n", " else:\n", " classes_per_it = classes_per_it_val\n", " num_samples = num_support_val + num_query_val\n", "\n", " return PrototypicalBatchSampler(labels, classes_per_it, num_samples, iterations)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "def init_dataloader(dataset, mode):\n", " \"\"\"Initializing data loaders for train, val or test mode.\"\"\"\n", " \n", " dataset = CellDataset(dataset, mode)\n", " sampler = init_sampler(dataset.y, mode)\n", " \n", " n_classes = len(np.unique(dataset.y))\n", " if mode=='train' and n_classes < classes_per_it_tr:\n", " raise(Exception('There are not enough classes in the dataset to satisfy the chosen classes_per_it. Decrease the classes_per_it_tr option.'))\n", " if (mode=='val' or mode=='test') and n_classes < classes_per_it_val:\n", " raise(Exception('There are not enough classes in the dataset to satisfy the chosen classes_per_it. Decrease the classes_per_it_val option.'))\n", " dataloader = torch.utils.data.DataLoader(dataset, batch_sampler=sampler)\n", " \n", " return dataloader" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Model definition" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For model we will use simple 2-layer fully connected neural network." ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "def full_block(in_features, out_features, p_drop):\n", " return nn.Sequential(\n", " nn.Linear(in_features, out_features, bias=True),\n", " nn.ReLU(),\n", " nn.Dropout(p=p_drop),\n", " )" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "class ProtoNet(nn.Module):\n", " \n", " def __init__(self, x_dim, hid_dim=64, z_dim=64, p_drop=0.2):\n", " super(ProtoNet, self).__init__()\n", " self.encoder = nn.Sequential(\n", " full_block(x_dim, hid_dim, p_drop),\n", " full_block(hid_dim, z_dim, p_drop),\n", " )\n", "\n", " def forward(self, x):\n", " x = self.encoder(x)\n", " return x.view(x.size(0), -1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Loss definition" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "def euclidean_dist(x, y):\n", " \"\"\"Compute euclidean distance between two tensors.\"\"\"\n", " n = x.size(0)\n", " m = y.size(0)\n", " d = x.size(1)\n", " if d != y.size(1):\n", " raise Exception\n", "\n", " x = x.unsqueeze(1).expand(n, m, d)\n", " y = y.unsqueeze(0).expand(n, m, d)\n", "\n", " return torch.pow(x - y, 2).sum(2)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "def get_idxs(n_support, target):\n", " \"\"\"Get indexes of support and query sets.\"\"\"\n", " \n", " classes = torch.unique(target)\n", " support_idxs = list(map(lambda c: target.eq(c).nonzero()[:n_support].squeeze(1), classes))\n", " l = list(map(lambda c: target.eq(c).nonzero()[n_support:], classes))\n", " query_idxs = torch.cat(list(map(lambda c: target.eq(c).nonzero()[n_support:], classes)))\n", " query_idxs = query_idxs.view(-1)\n", " \n", " return support_idxs, query_idxs" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "def prototypical_loss(input1, target, n_support):\n", " \n", " support_idxs, query_idxs = get_idxs(n_support, target)\n", " prototypes = torch.stack([input1[idx_class].mean(0) for idx_class in support_idxs])\n", "\n", " query_samples = input1[query_idxs]\n", " dists = euclidean_dist(query_samples, prototypes)\n", " log_p_y = F.log_softmax(-dists, dim=1)\n", " \n", " target = target[query_idxs]\n", " uniq, counts = np.unique(target.numpy(), return_counts=True)\n", " uniq_counts = dict(zip(uniq, counts))\n", " uniq_app_order = pd.unique(target.numpy())\n", " target_inds = torch.Tensor()\n", " \n", " for idx, class_id in enumerate(uniq_app_order):\n", " target_inds = torch.cat((target_inds, torch.Tensor([idx]).repeat(uniq_counts[class_id])))\n", " target_inds = target_inds.long()\n", " \n", " loss = torch.nn.NLLLoss()\n", " loss_val = loss(log_p_y, target_inds)\n", " \n", " _, y_hat = log_p_y.max(1)\n", " acc_val = y_hat.eq(target_inds.squeeze()).float().mean()\n", " \n", " return loss_val, acc_val" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "class PrototypicalLoss(Module):\n", " \"\"\"Loss class.\"\"\"\n", " \n", " def __init__(self, n_support):\n", " super(PrototypicalLoss, self).__init__()\n", " self.n_support = n_support\n", "\n", " def forward(self, input, target):\n", " return prototypical_loss(input, target, self.n_support)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Model training and testing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Defining functions to train and test the model." ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "def train(tr_dataloader, val_dataloader, model, optim, lr_scheduler):\n", " '''\n", " Train the model with the prototypical learning algorithm\n", " '''\n", "\n", " train_loss = []\n", " train_acc = []\n", " val_loss = []\n", " val_acc = []\n", " best_acc = 0\n", "\n", " for epoch in range(epochs): # outer loop over epochs\n", " print('*** Epoch: {} ***'.format(epoch))\n", " tr_iter = iter(tr_dataloader)\n", " \n", " model.train() # model training\n", " \n", " for batch in tqdm(tr_iter): # inner loop over episodes\n", " optim.zero_grad()\n", " \n", " x, y = batch\n", " model_output = model(x) \n", " loss, acc = prototypical_loss(model_output, y, num_support_tr)\n", " loss.backward()\n", " optim.step()\n", " \n", " train_loss.append(loss.item())\n", " train_acc.append(acc.item())\n", " avg_loss = np.mean(train_loss[-iterations:])\n", " avg_acc = np.mean(train_acc[-iterations:])\n", " print('Avg train loss: {}, Avg train acc: {}'.format(avg_loss, avg_acc))\n", " lr_scheduler.step()\n", " \n", " val_iter = iter(val_dataloader)\n", " \n", " model.eval() # model evaluation\n", " for batch in tqdm(val_iter):\n", " x, y = batch\n", " model_output = model(x) \n", " loss, acc = prototypical_loss(model_output, y, num_support_val)\n", " val_loss.append(loss.item())\n", " val_acc.append(acc.item())\n", " avg_loss = np.mean(val_loss[-iterations:])\n", " avg_acc = np.mean(val_acc[-iterations:])\n", " info = ' (Best)' if avg_acc >= best_acc else ' (Best: {})'.format(best_acc)\n", " print('Avg val loss: {}, Avg val acc: {}{}'.format(avg_loss, avg_acc, info))\n", " if avg_acc >= best_acc:\n", " best_acc = avg_acc\n", " best_state = model.state_dict()\n", " \n", " return best_state" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "def test(test_dataloader, model):\n", " avg_acc = list()\n", " epoch = iter(test_dataloader)\n", " for batch in epoch:\n", " x, y = batch\n", " model_output = model(x)\n", " _, acc = prototypical_loss(model_output, y, num_support_val)\n", " avg_acc.append(acc.item())\n", " avg_acc = np.mean(avg_acc)\n", " print('Test accuracy: {}'.format(avg_acc))\n", "\n", " return avg_acc" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Train and test the model on the Tabula Muris data" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Trying to set attribute `.obs` of view, making a copy.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "*** Dataset: Found 5577 items \n", "*** Dataset: Found 21 classes\n", "Number of examples per class: \n", "[ 21 46 189 159 164 1179 46 113 2184 25 124 55 75 69\n", " 32 490 281 56 65 158 46]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Trying to set attribute `.obs` of view, making a copy.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "*** Dataset: Found 1675 items \n", "*** Dataset: Found 17 classes\n", "Number of examples per class: \n", "[ 55 36 27 140 420 21 68 51 129 52 362 29 56 39 55 96 39]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Trying to set attribute `.obs` of view, making a copy.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "*** Dataset: Found 702 items \n", "*** Dataset: Found 5 classes\n", "Number of examples per class: \n", "[ 34 47 189 401 31]\n" ] } ], "source": [ "# main\n", "tr_dataloader = init_dataloader(tm_data, 'train')\n", "val_dataloader = init_dataloader(tm_data, 'val')\n", "test_dataloader = init_dataloader(tm_data, 'test')" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "model = ProtoNet(tr_dataloader.dataset.get_dim())\n", "optim = torch.optim.Adam(params=model.parameters(), lr=learning_rate)\n", "lr_scheduler = torch.optim.lr_scheduler.StepLR(optimizer=optim,\n", " gamma=lr_scheduler_gamma,\n", " step_size=lr_scheduler_step)" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ " 21%|██ | 21/100 [00:00<00:00, 209.03it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "*** Epoch: 0 ***\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 100/100 [00:00<00:00, 238.17it/s]\n", "100%|██████████| 100/100 [00:00<00:00, 516.85it/s]\n", " 0%| | 0/100 [00:00