[de45a9]: / DL_Genomics_v9_basic-fastai.ipynb

Download this file

1082 lines (1081 with data), 118.9 kB

{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Deep learning in genomics - Basic model with PyTorch and fastai"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This notebook is based on the [jupyter notebook](https://nbviewer.jupyter.org/github/abidlabs/deep-learning-genomics-primer/blob/master/A_Primer_on_Deep_Learning_in_Genomics_Public.ipynb) from the publication [\"A primer on deep learning in genomics\"](https://www.nature.com/articles/s41588-018-0295-5) but uses the [fastai](https://www.fast.ai) library based on [PyTorch](https://pytorch.org)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Notebook setup"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%reload_ext autoreload\n",
    "%autoreload 2\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from fastai import *\n",
    "from fastai.vision import *"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import LabelEncoder, OneHotEncoder"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pdb"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'1.0.39.dev0'"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# fastai version\n",
    "__version__"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Data setup"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Loading data from the web, generating dthe ataframe, and saving it to disk is carried out in [Basic model with PyTorch jupyter notebook](https://nbviewer.jupyter.org/github/MicPie/genomics/blob/master/DL_Genomics_v8_basic-pytorch.ipynb)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Data frame setup"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "seq_df = pd.read_csv('seq_df.csv', index_col=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# add column NoTarget which is not(Target)\n",
    "seq_df['NotTarget'] = seq_df['Target'].apply(lambda x: int(not(bool(x))))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sequences</th>\n",
       "      <th>Target</th>\n",
       "      <th>NotTarget</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>CCGAGGGCTATGGTTTGGAAGTTAGAACCCTGGGGCTTCTCGCGGA...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>GAGTTTATATGGCGCGAGCCTAGTGGTTTTTGTACTTGTTTGTCGC...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>GATCAGTAGGGAAACAAACAGAGGGCCCAGCCACATCTAGCAGGTA...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>GTCCACGACCGAACTCCCACCTTGACCGCAGAGGTACCACCAGAGC...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>GGCGACCGAACTCCAACTAGAACCTGCATAACTGGCCTGGGAGATA...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                           Sequences  Target  NotTarget\n",
       "0  CCGAGGGCTATGGTTTGGAAGTTAGAACCCTGGGGCTTCTCGCGGA...       0          1\n",
       "1  GAGTTTATATGGCGCGAGCCTAGTGGTTTTTGTACTTGTTTGTCGC...       0          1\n",
       "2  GATCAGTAGGGAAACAAACAGAGGGCCCAGCCACATCTAGCAGGTA...       0          1\n",
       "3  GTCCACGACCGAACTCCCACCTTGACCGCAGAGGTACCACCAGAGC...       1          0\n",
       "4  GGCGACCGAACTCCAACTAGAACCTGCATAACTGGCCTGGGAGATA...       1          0"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "seq_df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## fastai data object"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Setup custom fastai data object"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [],
   "source": [
    "# open sequence image function\n",
    "def open_seq_image(seq:str, cls:type=Image)->Image:\n",
    "    \"Return `Image` object created from sequence string `seq`.\"\n",
    "    \n",
    "    int_enc = LabelEncoder() # setup class instance to encode the four different bases to integer values (1D)\n",
    "    one_hot_enc = OneHotEncoder(categories=[range(4)]) # setup one hot encoder to encode integer encoded classes (1D) to one hot encoded array (4D)\n",
    "    \n",
    "    enc = int_enc.fit_transform(list(seq)) # bases (ACGT) to int (0,1,2,3)\n",
    "    enc = np.array(enc).reshape(-1,1) # reshape to get rank 2 array (from rank 1 array)\n",
    "    enc = one_hot_enc.fit_transform(enc) # encoded integer encoded bases to sparse matrix (sparse matrix dtype)\n",
    "    enc = enc.toarray().T.reshape(4,-1,1) # export sparse matrix to np array\n",
    "    \n",
    "    # https://stackoverflow.com/questions/22902040/convert-black-and-white-array-into-an-image-in-python\n",
    "    x = PIL.Image.fromarray(enc.astype('uint8')).convert('CMYK')\n",
    "    x = pil2tensor(x,np.float32)\n",
    "    \n",
    "    pdb.set_trace()\n",
    "    \n",
    "    # optional functions not needed\n",
    "    #x = x.view(4,-1) # remove first dimension\n",
    "    #x = x.expand(3, 4, 50) # expand to 3 channel image\n",
    "    \n",
    "    return cls(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "ename": "TypeError",
     "evalue": "Cannot handle this data type",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/PIL/Image.py\u001b[0m in \u001b[0;36mfromarray\u001b[0;34m(obj, mode)\u001b[0m\n\u001b[1;32m   2427\u001b[0m             \u001b[0mtypekey\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marr\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'typestr'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2428\u001b[0;31m             \u001b[0mmode\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrawmode\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_fromarray_typemap\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mtypekey\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2429\u001b[0m         \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mKeyError\u001b[0m: ((1, 1, 1), '|u1')",
      "\nDuring handling of the above exception, another exception occurred:\n",
      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-49-306b37cea0cc>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0;31m# test open sequence image function\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mopen_seq_image\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'CCGAGGGCTATGGTTTGGAAGTTAGAACCCTGGGGCTTCTCGCGGACACC'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m<ipython-input-48-fdeb92fe6151>\u001b[0m in \u001b[0;36mopen_seq_image\u001b[0;34m(seq, cls)\u001b[0m\n\u001b[1;32m     12\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     13\u001b[0m     \u001b[0;31m# https://stackoverflow.com/questions/22902040/convert-black-and-white-array-into-an-image-in-python\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 14\u001b[0;31m     \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mPIL\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mImage\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfromarray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0menc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mastype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'uint8'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconvert\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'CMYK'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     15\u001b[0m     \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpil2tensor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfloat32\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     16\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/PIL/Image.py\u001b[0m in \u001b[0;36mfromarray\u001b[0;34m(obj, mode)\u001b[0m\n\u001b[1;32m   2429\u001b[0m         \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2430\u001b[0m             \u001b[0;31m# print(typekey)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2431\u001b[0;31m             \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Cannot handle this data type\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2432\u001b[0m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2433\u001b[0m         \u001b[0mrawmode\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mTypeError\u001b[0m: Cannot handle this data type"
     ]
    }
   ],
   "source": [
    "# test open sequence image function\n",
    "open_seq_image('CCGAGGGCTATGGTTTGGAAGTTAGAACCCTGGGGCTTCTCGCGGACACC')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "class SeqItemList(ImageItemList):\n",
    "    \"Sequence Item List\"\n",
    "    _bunch,_square_show = ImageDataBunch,True\n",
    "    def __post_init__(self):\n",
    "        super().__post_init__()\n",
    "        self.sizes={}\n",
    "    \n",
    "    def open(self, seq): return open_seq_image(seq)\n",
    "    \n",
    "    def get(self, i):\n",
    "        seq = self.items[i][0]\n",
    "        res = self.open(seq)\n",
    "        return res\n",
    "    \n",
    "    @classmethod\n",
    "    def import_from_df(cls, df:DataFrame, cols:IntsOrStrs=0, **kwargs)->'ItemList':\n",
    "        \"Get the sequences in `col` of `df` and return cls and df.\"\n",
    "        return cls(items=df[cols].values, xtra=df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "bs = 64"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = (SeqItemList.import_from_df(seq_df, ['Sequences'])\n",
    "        .random_split_by_pct(valid_pct=0.25)\n",
    "        #.split_by_idxs(range(1500), range(1500,2000))\n",
    "        .label_from_df(['Target', 'NotTarget']) #one_hot=True !\n",
    "        .databunch(bs=bs))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Verify data object"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Check data object"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "ImageDataBunch;\n",
       "\n",
       "Train: LabelList\n",
       "y: MultiCategoryList (1500 items)\n",
       "[MultiCategory NotTarget, MultiCategory NotTarget, MultiCategory NotTarget, MultiCategory Target, MultiCategory Target]...\n",
       "Path: .\n",
       "x: SeqItemList (1500 items)\n",
       "[Image (4, 1, 50), Image (4, 1, 50), Image (4, 1, 50), Image (4, 1, 50), Image (4, 1, 50)]...\n",
       "Path: .;\n",
       "\n",
       "Valid: LabelList\n",
       "y: MultiCategoryList (500 items)\n",
       "[MultiCategory Target, MultiCategory Target, MultiCategory Target, MultiCategory Target, MultiCategory NotTarget]...\n",
       "Path: .\n",
       "x: SeqItemList (500 items)\n",
       "[Image (4, 1, 50), Image (4, 1, 50), Image (4, 1, 50), Image (4, 1, 50), Image (4, 1, 50)]...\n",
       "Path: .;\n",
       "\n",
       "Test: None"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2, ['Target', 'NotTarget'])"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# check classes\n",
    "data.c, data.classes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "64"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# check batch size\n",
    "data.train_dl.batch_size"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Check data points"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n"
     ]
    },
    {
     "data": {
      "image/jpeg": "/9j/4AAQSkZJRgABAQEAZABkAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCAABADIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KKKKACiiigAooooAKKKKAP/2Q==\n",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAADIAAAABCAYAAACc0f2yAAAABHNCSVQICAgIfAhkiAAAAA9JREFUCJlj/P//P8NwAABUWwL/YUnPDQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "Image (4, 1, 50)"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "i = 2\n",
    "data.x[i]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "MultiCategory NotTarget"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.y[i]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n"
     ]
    },
    {
     "data": {
      "image/jpeg": "/9j/4AAQSkZJRgABAQEAZABkAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCAABADIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KKKKACiiigAooooAKKKKAP/2Q==\n",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAADIAAAABCAYAAACc0f2yAAAABHNCSVQICAgIfAhkiAAAAA9JREFUCJlj/P//P8NwAABUWwL/YUnPDQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "Image (4, 1, 50)"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "i = 3\n",
    "data.x[i]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "MultiCategory Target"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.y[i]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "data.show_batch(rows=2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Model setup"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Basic model for fastai training"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "def Flatten(): return Lambda(lambda x: x.view((x.size(0), -1)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "# resize input sequence array from (bs, 1, 4, 50) to (bs, 4, 50) for Conv1d layer\n",
    "def ResizeInput(): return Lambda(lambda x: x.view((-1,)+x.size()[-2:]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "drop_p = 0.2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [],
   "source": [
    "net_basic_fastai = nn.Sequential(ResizeInput(),\n",
    "                    nn.Conv1d(in_channels=4, out_channels=32, kernel_size=12),\n",
    "                    nn.MaxPool1d(kernel_size=4),\n",
    "                    Flatten(),\n",
    "                    nn.Dropout(drop_p),\n",
    "                    nn.Linear(in_features=288, out_features=16),\n",
    "                    nn.ReLU(),\n",
    "                    nn.Dropout(drop_p),\n",
    "                    nn.Linear(in_features=16, out_features=2),\n",
    "                    #Debugger()\n",
    "                   )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Sequential(\n",
       "  (0): Lambda()\n",
       "  (1): Conv1d(4, 32, kernel_size=(12,), stride=(1,))\n",
       "  (2): MaxPool1d(kernel_size=4, stride=4, padding=0, dilation=1, ceil_mode=False)\n",
       "  (3): Lambda()\n",
       "  (4): Dropout(p=0.2)\n",
       "  (5): Linear(in_features=288, out_features=16, bias=True)\n",
       "  (6): ReLU()\n",
       "  (7): Dropout(p=0.2)\n",
       "  (8): Linear(in_features=16, out_features=2, bias=True)\n",
       ")"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "net_basic_fastai"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [],
   "source": [
    "# initialize weights with kaiming normal initialization\n",
    "apply_init(net_basic_fastai, nn.init.kaiming_normal_)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Model training"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Train basic model with fastai"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "learn = Learner(data, net_basic_fastai, loss_func=F.binary_cross_entropy_with_logits, metrics=accuracy_thresh)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "======================================================================\n",
      "Layer (type)         Output Shape         Param #    Trainable \n",
      "======================================================================\n",
      "Lambda               [64, 4, 50]          0          False     \n",
      "______________________________________________________________________\n",
      "Conv1d               [64, 32, 39]         1568       True      \n",
      "______________________________________________________________________\n",
      "MaxPool1d            [64, 32, 9]          0          False     \n",
      "______________________________________________________________________\n",
      "Lambda               [64, 288]            0          False     \n",
      "______________________________________________________________________\n",
      "Dropout              [64, 288]            0          False     \n",
      "______________________________________________________________________\n",
      "Linear               [64, 16]             4624       True      \n",
      "______________________________________________________________________\n",
      "ReLU                 [64, 16]             0          False     \n",
      "______________________________________________________________________\n",
      "Dropout              [64, 16]             0          False     \n",
      "______________________________________________________________________\n",
      "Linear               [64, 2]              34         True      \n",
      "______________________________________________________________________\n",
      "\n",
      "Total params:  6226\n",
      "Total trainable params:  6226\n",
      "Total non-trainable params:  0\n"
     ]
    }
   ],
   "source": [
    "learn.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "LR Finder is complete, type {learner_name}.recorder.plot() to see the graph.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "learn.lr_find()\n",
    "learn.recorder.plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "Total time: 00:21 <p><table style='width:300px; margin-bottom:10px'>\n",
       "  <tr>\n",
       "    <th>epoch</th>\n",
       "    <th>train_loss</th>\n",
       "    <th>valid_loss</th>\n",
       "    <th>accuracy_thresh</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>1</th>\n",
       "    <th>0.742820</th>\n",
       "    <th>0.689423</th>\n",
       "    <th>0.520000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>2</th>\n",
       "    <th>0.702752</th>\n",
       "    <th>0.614599</th>\n",
       "    <th>0.720000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>3</th>\n",
       "    <th>0.606981</th>\n",
       "    <th>0.370353</th>\n",
       "    <th>0.823000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>4</th>\n",
       "    <th>0.467502</th>\n",
       "    <th>0.177233</th>\n",
       "    <th>0.934000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>5</th>\n",
       "    <th>0.344312</th>\n",
       "    <th>0.149260</th>\n",
       "    <th>0.942000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>6</th>\n",
       "    <th>0.255275</th>\n",
       "    <th>0.107296</th>\n",
       "    <th>0.956000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>7</th>\n",
       "    <th>0.190585</th>\n",
       "    <th>0.071223</th>\n",
       "    <th>0.972000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>8</th>\n",
       "    <th>0.136017</th>\n",
       "    <th>0.057507</th>\n",
       "    <th>0.978000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>9</th>\n",
       "    <th>0.101842</th>\n",
       "    <th>0.055553</th>\n",
       "    <th>0.982000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>10</th>\n",
       "    <th>0.081582</th>\n",
       "    <th>0.054308</th>\n",
       "    <th>0.980000</th>\n",
       "  </tr>\n",
       "</table>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "learn.fit_one_cycle(10, max_lr=1e-2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "learn.recorder.plot_losses()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "learn.recorder.plot_metrics()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "Total time: 00:22 <p><table style='width:300px; margin-bottom:10px'>\n",
       "  <tr>\n",
       "    <th>epoch</th>\n",
       "    <th>train_loss</th>\n",
       "    <th>valid_loss</th>\n",
       "    <th>accuracy_thresh</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>1</th>\n",
       "    <th>0.667970</th>\n",
       "    <th>0.518991</th>\n",
       "    <th>0.803000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>2</th>\n",
       "    <th>0.508439</th>\n",
       "    <th>0.284481</th>\n",
       "    <th>0.897000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>3</th>\n",
       "    <th>0.377611</th>\n",
       "    <th>0.139968</th>\n",
       "    <th>0.950000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>4</th>\n",
       "    <th>0.277437</th>\n",
       "    <th>0.092011</th>\n",
       "    <th>0.964000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>5</th>\n",
       "    <th>0.201627</th>\n",
       "    <th>0.076286</th>\n",
       "    <th>0.966000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>6</th>\n",
       "    <th>0.159187</th>\n",
       "    <th>0.098888</th>\n",
       "    <th>0.958000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>7</th>\n",
       "    <th>0.123264</th>\n",
       "    <th>0.055225</th>\n",
       "    <th>0.984000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>8</th>\n",
       "    <th>0.094242</th>\n",
       "    <th>0.079985</th>\n",
       "    <th>0.972000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>9</th>\n",
       "    <th>0.071857</th>\n",
       "    <th>0.086352</th>\n",
       "    <th>0.960000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>10</th>\n",
       "    <th>0.059841</th>\n",
       "    <th>0.086224</th>\n",
       "    <th>0.962000</th>\n",
       "  </tr>\n",
       "</table>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "learn.fit(10, lr=1e-2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "learn.recorder.plot_losses()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "learn.recorder.plot_metrics()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Interpretation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "metadata": {},
   "outputs": [],
   "source": [
    "interpret = learn.interpret()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 133,
   "metadata": {},
   "outputs": [],
   "source": [
    "#interpret.confusion_matrix() # does not work yet!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}