[de45a9]: / DL_Genomics_v10_basic-fastai-fastq.ipynb

Download this file

1980 lines (1979 with data), 181.6 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": 92,
   "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": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# From https://forum.pyro.ai/t/a-clever-trick-to-debug-tensor-memory/556\n",
    "def debug_memory():\n",
    "    import collections, gc, torch\n",
    "    tensors = collections.Counter((str(o.device), o.dtype, tuple(o.shape))\n",
    "                                  for o in gc.get_objects()\n",
    "                                  if torch.is_tensor(o))\n",
    "    for line in sorted(tensors.items()):\n",
    "        print('{}\\t{}'.format(*line))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Data setup"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "heading_collapsed": true
   },
   "source": [
    "## Data frame setup from raw data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 274,
   "metadata": {
    "hidden": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "PosixPath('/Volumes/HDD08/ugenomfit/data')"
      ]
     },
     "execution_count": 274,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "PATH_raw_data = Path('/Volumes/HDD08/ugenomfit/data/'); PATH_raw_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 275,
   "metadata": {
    "hidden": true
   },
   "outputs": [],
   "source": [
    "from Bio import SeqIO"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 276,
   "metadata": {
    "hidden": true
   },
   "outputs": [],
   "source": [
    "def get_seqs(path, seq_per_file=500):\n",
    "    label, seq, score = [], [], []\n",
    "    for n, fn in enumerate((path).glob('*.fastq')):\n",
    "        \n",
    "        # print file number n\n",
    "        #print(n)\n",
    "        \n",
    "        # print file number n and filename fn\n",
    "        print(n, fn)\n",
    "        \n",
    "        # append sequences\n",
    "        for m, record in enumerate(SeqIO.parse(fn, 'fastq')):\n",
    "            \n",
    "            #print(m)\n",
    "            if m == seq_per_file: break # only read in the first m sequences per fastq file\n",
    "            \n",
    "            # append sequences\n",
    "            seq.append(str(record.seq))\n",
    "            score.append(record.letter_annotations['phred_quality'])\n",
    "            \n",
    "            # print genome name including contig number and sequence length\n",
    "            #print(\"%s %i\" % (record.id, len(record)))\n",
    "        \n",
    "            # append genome labels\n",
    "            label.append(str(record.id))\n",
    "            \n",
    "            #pdb.set_trace() # start debugger\n",
    "                    \n",
    "        # break loop\n",
    "        #if n == 1: break\n",
    "    return label, seq, score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 277,
   "metadata": {
    "hidden": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 /Volumes/HDD08/ugenomfit/data/SRR1993099.sra_1.fastq\n",
      "1 /Volumes/HDD08/ugenomfit/data/SRR1993099.sra_2.fastq\n",
      "2 /Volumes/HDD08/ugenomfit/data/SRR5665975.sra_1.fastq\n",
      "3 /Volumes/HDD08/ugenomfit/data/SRR5665975.sra_2.fastq\n"
     ]
    }
   ],
   "source": [
    "label, seq, score = get_seqs(PATH_raw_data, seq_per_file=5000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 278,
   "metadata": {
    "hidden": true
   },
   "outputs": [],
   "source": [
    "#label[:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 279,
   "metadata": {
    "hidden": true
   },
   "outputs": [],
   "source": [
    "#seq[:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 280,
   "metadata": {
    "hidden": true
   },
   "outputs": [],
   "source": [
    "#score[:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 281,
   "metadata": {
    "hidden": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(20000, 20000, 20000)"
      ]
     },
     "execution_count": 281,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(label), len(seq), len(score)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 282,
   "metadata": {
    "hidden": true
   },
   "outputs": [],
   "source": [
    "col_names = ['label', 'sequence', 'score']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 283,
   "metadata": {
    "hidden": true
   },
   "outputs": [],
   "source": [
    "seq_score = [(a,b) for a,b in zip(seq, score)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 284,
   "metadata": {
    "hidden": true
   },
   "outputs": [],
   "source": [
    "fastq_df = pd.DataFrame({'label': label, 'seq_score': seq_score})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 285,
   "metadata": {
    "hidden": true
   },
   "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>label</th>\n",
       "      <th>seq_score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>SRR1993099.sra.1</td>\n",
       "      <td>(ATCTACAAGAAGGGTGAAGTGCTTTTCGAATTTTGCCACTGCAAG...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>SRR1993099.sra.2</td>\n",
       "      <td>(TGTGCTCCATGTCGATATTTCGTGGAGCAAACCAAAAAAGATGCG...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>SRR1993099.sra.3</td>\n",
       "      <td>(NACCCTTTATAAAAGCCTAGATGTAGCAGTGCGAAGCGAACTCGA...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>SRR1993099.sra.4</td>\n",
       "      <td>(CGAATGGGACCTTGAATGGATTAACGAGATTCCCACTGTCCCTAT...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>SRR1993099.sra.5</td>\n",
       "      <td>(CACACCGCAGTAGATGGAAAACTCGAGTTTTACATGGAACAGGTA...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              label                                          seq_score\n",
       "0  SRR1993099.sra.1  (ATCTACAAGAAGGGTGAAGTGCTTTTCGAATTTTGCCACTGCAAG...\n",
       "1  SRR1993099.sra.2  (TGTGCTCCATGTCGATATTTCGTGGAGCAAACCAAAAAAGATGCG...\n",
       "2  SRR1993099.sra.3  (NACCCTTTATAAAAGCCTAGATGTAGCAGTGCGAAGCGAACTCGA...\n",
       "3  SRR1993099.sra.4  (CGAATGGGACCTTGAATGGATTAACGAGATTCCCACTGTCCCTAT...\n",
       "4  SRR1993099.sra.5  (CACACCGCAGTAGATGGAAAACTCGAGTTTTACATGGAACAGGTA..."
      ]
     },
     "execution_count": 285,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fastq_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 286,
   "metadata": {
    "hidden": true
   },
   "outputs": [],
   "source": [
    "def recode_label(label, inv=False):\n",
    "\n",
    "    if label.find('SRR1993099') != -1:\n",
    "        return 0 if inv == False else 1\n",
    "       \n",
    "    elif label.find('SRR5665975') != -1:\n",
    "        return 1 if inv == False else 0\n",
    "    \n",
    "    else:\n",
    "        return np.nan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 287,
   "metadata": {
    "hidden": true
   },
   "outputs": [],
   "source": [
    "fastq_df['target'] = fastq_df['label'].apply(recode_label)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 288,
   "metadata": {
    "hidden": true
   },
   "outputs": [],
   "source": [
    "fastq_df['nottarget'] = fastq_df['label'].apply(partial(recode_label,inv=True))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 289,
   "metadata": {
    "hidden": true
   },
   "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>label</th>\n",
       "      <th>seq_score</th>\n",
       "      <th>target</th>\n",
       "      <th>nottarget</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>SRR1993099.sra.1</td>\n",
       "      <td>(ATCTACAAGAAGGGTGAAGTGCTTTTCGAATTTTGCCACTGCAAG...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>SRR1993099.sra.2</td>\n",
       "      <td>(TGTGCTCCATGTCGATATTTCGTGGAGCAAACCAAAAAAGATGCG...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>SRR1993099.sra.3</td>\n",
       "      <td>(NACCCTTTATAAAAGCCTAGATGTAGCAGTGCGAAGCGAACTCGA...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>SRR1993099.sra.4</td>\n",
       "      <td>(CGAATGGGACCTTGAATGGATTAACGAGATTCCCACTGTCCCTAT...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>SRR1993099.sra.5</td>\n",
       "      <td>(CACACCGCAGTAGATGGAAAACTCGAGTTTTACATGGAACAGGTA...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              label                                          seq_score  \\\n",
       "0  SRR1993099.sra.1  (ATCTACAAGAAGGGTGAAGTGCTTTTCGAATTTTGCCACTGCAAG...   \n",
       "1  SRR1993099.sra.2  (TGTGCTCCATGTCGATATTTCGTGGAGCAAACCAAAAAAGATGCG...   \n",
       "2  SRR1993099.sra.3  (NACCCTTTATAAAAGCCTAGATGTAGCAGTGCGAAGCGAACTCGA...   \n",
       "3  SRR1993099.sra.4  (CGAATGGGACCTTGAATGGATTAACGAGATTCCCACTGTCCCTAT...   \n",
       "4  SRR1993099.sra.5  (CACACCGCAGTAGATGGAAAACTCGAGTTTTACATGGAACAGGTA...   \n",
       "\n",
       "   target  nottarget  \n",
       "0       0          1  \n",
       "1       0          1  \n",
       "2       0          1  \n",
       "3       0          1  \n",
       "4       0          1  "
      ]
     },
     "execution_count": 289,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fastq_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 290,
   "metadata": {
    "hidden": true
   },
   "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>label</th>\n",
       "      <th>seq_score</th>\n",
       "      <th>target</th>\n",
       "      <th>nottarget</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>19995</th>\n",
       "      <td>SRR5665975.sra.4996</td>\n",
       "      <td>(TTTCTACCATCTCCAGCGGAGCAGAATCGGTGGCGGTTTCCGCTT...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19996</th>\n",
       "      <td>SRR5665975.sra.4997</td>\n",
       "      <td>(CCCGTGCGCGCGGCTATACGCCGGGACGTTTCAGCTTTAACGTTC...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19997</th>\n",
       "      <td>SRR5665975.sra.4998</td>\n",
       "      <td>(ATTTTCCGCAAACCAGGCTTTAACCGCGCCAGCGAAGGCTATTTT...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19998</th>\n",
       "      <td>SRR5665975.sra.4999</td>\n",
       "      <td>(TGCAAAATGGTGCTAATTTTGGCCCCTGGCGATTACGCAACTATT...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19999</th>\n",
       "      <td>SRR5665975.sra.5000</td>\n",
       "      <td>(AACGGCAAAATTATCGCCGTTGCCAGCAATATCCCTTCTGACATT...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     label                                          seq_score  \\\n",
       "19995  SRR5665975.sra.4996  (TTTCTACCATCTCCAGCGGAGCAGAATCGGTGGCGGTTTCCGCTT...   \n",
       "19996  SRR5665975.sra.4997  (CCCGTGCGCGCGGCTATACGCCGGGACGTTTCAGCTTTAACGTTC...   \n",
       "19997  SRR5665975.sra.4998  (ATTTTCCGCAAACCAGGCTTTAACCGCGCCAGCGAAGGCTATTTT...   \n",
       "19998  SRR5665975.sra.4999  (TGCAAAATGGTGCTAATTTTGGCCCCTGGCGATTACGCAACTATT...   \n",
       "19999  SRR5665975.sra.5000  (AACGGCAAAATTATCGCCGTTGCCAGCAATATCCCTTCTGACATT...   \n",
       "\n",
       "       target  nottarget  \n",
       "19995       1          0  \n",
       "19996       1          0  \n",
       "19997       1          0  \n",
       "19998       1          0  \n",
       "19999       1          0  "
      ]
     },
     "execution_count": 290,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fastq_df.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 291,
   "metadata": {
    "hidden": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 20000 entries, 0 to 19999\n",
      "Data columns (total 4 columns):\n",
      "label        20000 non-null object\n",
      "seq_score    20000 non-null object\n",
      "target       20000 non-null int64\n",
      "nottarget    20000 non-null int64\n",
      "dtypes: int64(2), object(2)\n",
      "memory usage: 625.1+ KB\n"
     ]
    }
   ],
   "source": [
    "fastq_df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 292,
   "metadata": {
    "hidden": true
   },
   "outputs": [],
   "source": [
    "# pickle data frame to disk\n",
    "fastq_df.to_pickle('fastq_df.pkl')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Load data frame"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 293,
   "metadata": {},
   "outputs": [],
   "source": [
    "# load pickled data frame\n",
    "fastq_df = pd.read_pickle('fastq_df.pkl')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 294,
   "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>label</th>\n",
       "      <th>seq_score</th>\n",
       "      <th>target</th>\n",
       "      <th>nottarget</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>SRR1993099.sra.1</td>\n",
       "      <td>(ATCTACAAGAAGGGTGAAGTGCTTTTCGAATTTTGCCACTGCAAG...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>SRR1993099.sra.2</td>\n",
       "      <td>(TGTGCTCCATGTCGATATTTCGTGGAGCAAACCAAAAAAGATGCG...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>SRR1993099.sra.3</td>\n",
       "      <td>(NACCCTTTATAAAAGCCTAGATGTAGCAGTGCGAAGCGAACTCGA...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>SRR1993099.sra.4</td>\n",
       "      <td>(CGAATGGGACCTTGAATGGATTAACGAGATTCCCACTGTCCCTAT...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>SRR1993099.sra.5</td>\n",
       "      <td>(CACACCGCAGTAGATGGAAAACTCGAGTTTTACATGGAACAGGTA...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              label                                          seq_score  \\\n",
       "0  SRR1993099.sra.1  (ATCTACAAGAAGGGTGAAGTGCTTTTCGAATTTTGCCACTGCAAG...   \n",
       "1  SRR1993099.sra.2  (TGTGCTCCATGTCGATATTTCGTGGAGCAAACCAAAAAAGATGCG...   \n",
       "2  SRR1993099.sra.3  (NACCCTTTATAAAAGCCTAGATGTAGCAGTGCGAAGCGAACTCGA...   \n",
       "3  SRR1993099.sra.4  (CGAATGGGACCTTGAATGGATTAACGAGATTCCCACTGTCCCTAT...   \n",
       "4  SRR1993099.sra.5  (CACACCGCAGTAGATGGAAAACTCGAGTTTTACATGGAACAGGTA...   \n",
       "\n",
       "   target  nottarget  \n",
       "0       0          1  \n",
       "1       0          1  \n",
       "2       0          1  \n",
       "3       0          1  \n",
       "4       0          1  "
      ]
     },
     "execution_count": 294,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# show pandas data frame head\n",
    "fastq_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 295,
   "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>label</th>\n",
       "      <th>seq_score</th>\n",
       "      <th>target</th>\n",
       "      <th>nottarget</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>19995</th>\n",
       "      <td>SRR5665975.sra.4996</td>\n",
       "      <td>(TTTCTACCATCTCCAGCGGAGCAGAATCGGTGGCGGTTTCCGCTT...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19996</th>\n",
       "      <td>SRR5665975.sra.4997</td>\n",
       "      <td>(CCCGTGCGCGCGGCTATACGCCGGGACGTTTCAGCTTTAACGTTC...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19997</th>\n",
       "      <td>SRR5665975.sra.4998</td>\n",
       "      <td>(ATTTTCCGCAAACCAGGCTTTAACCGCGCCAGCGAAGGCTATTTT...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19998</th>\n",
       "      <td>SRR5665975.sra.4999</td>\n",
       "      <td>(TGCAAAATGGTGCTAATTTTGGCCCCTGGCGATTACGCAACTATT...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19999</th>\n",
       "      <td>SRR5665975.sra.5000</td>\n",
       "      <td>(AACGGCAAAATTATCGCCGTTGCCAGCAATATCCCTTCTGACATT...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     label                                          seq_score  \\\n",
       "19995  SRR5665975.sra.4996  (TTTCTACCATCTCCAGCGGAGCAGAATCGGTGGCGGTTTCCGCTT...   \n",
       "19996  SRR5665975.sra.4997  (CCCGTGCGCGCGGCTATACGCCGGGACGTTTCAGCTTTAACGTTC...   \n",
       "19997  SRR5665975.sra.4998  (ATTTTCCGCAAACCAGGCTTTAACCGCGCCAGCGAAGGCTATTTT...   \n",
       "19998  SRR5665975.sra.4999  (TGCAAAATGGTGCTAATTTTGGCCCCTGGCGATTACGCAACTATT...   \n",
       "19999  SRR5665975.sra.5000  (AACGGCAAAATTATCGCCGTTGCCAGCAATATCCCTTCTGACATT...   \n",
       "\n",
       "       target  nottarget  \n",
       "19995       1          0  \n",
       "19996       1          0  \n",
       "19997       1          0  \n",
       "19998       1          0  \n",
       "19999       1          0  "
      ]
     },
     "execution_count": 295,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fastq_df.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 296,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 20000 entries, 0 to 19999\n",
      "Data columns (total 4 columns):\n",
      "label        20000 non-null object\n",
      "seq_score    20000 non-null object\n",
      "target       20000 non-null int64\n",
      "nottarget    20000 non-null int64\n",
      "dtypes: int64(2), object(2)\n",
      "memory usage: 625.1+ KB\n"
     ]
    }
   ],
   "source": [
    "fastq_df.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## fastai data object"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Setup custom fastai data object"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 165,
   "metadata": {},
   "outputs": [],
   "source": [
    "# open sequence image function\n",
    "def open_fastq_image(seq_score:list, seq_len:int=50, cls:type=Image)->Image:\n",
    "    \"Return `Image` object created from sequence string `seq`.\"\n",
    "    \n",
    "    # unpack tuple of lists to separate tuples\n",
    "    if isinstance(seq_score,(np.ndarray)): # fastai dataset loads tuple in np.array???\n",
    "        seq, score = seq_score[0]\n",
    "    else:\n",
    "        seq, score = seq_score\n",
    "    \n",
    "    if seq_len != None:\n",
    "        seq = seq[:seq_len]\n",
    "        score = score[:seq_len]\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(1,-1,4) # export sparse matrix to np array\n",
    "    \n",
    "    # one-hot-encode base position\n",
    "    adenosine = enc == 0\n",
    "    thymine = enc == 3\n",
    "    cytosine = enc == 1\n",
    "    \n",
    "    # base pair encoding: AT = False, GC = True\n",
    "    # https://stackoverflow.com/questions/32192163/python-and-operator-on-two-boolean-lists-how\n",
    "    basepair_enc = np.array([not(a or t) for a, t in zip(adenosine, thymine)]).astype('int')*255\n",
    "    \n",
    "    # strandpostion encodes the position of A/C or T/G on the the strand: A or C = False, T or G = True\n",
    "    strandposition_enc = np.array([not(a or c) for a, c in zip(adenosine, cytosine)]).astype('int')*255\n",
    "    \n",
    "    score_enc = np.array(score)\n",
    "    \n",
    "    enc = np.stack((basepair_enc, strandposition_enc, score_enc), axis=0)\n",
    "    \n",
    "    enc = enc.reshape(1,-1,3)\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('RGB')\n",
    "    x = pil2tensor(x,np.float32)\n",
    "    x.div_(255)\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": 297,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/jpeg": "/9j/4AAQSkZJRgABAQEAZABkAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCAABADIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD4q/YJ/wCTS/i7/wBj74T/APTP4spNG/5RFfGr/r/H/pP4Goor+vuLP+UjOJP+wqr/AOqTBn3fGP8Ayizw9/2G4j/1IifV3/BE7/kzfxb/ANlT+D3/AKdPh/W9+17/AMnk6D/2kH8df+mrwrRRX4rw58Oaf1/zM6p8pwN8XHX/AGFZl/6rpn5ZePv+Q3af9i5pH/putq564/1H/bvH/MUUV+f8Sf8AI/x//X6v/wCpOINOI/8AkbV/8X/tlMZB/qE/3B/Kiiivianxv1f5s8mXxM//2Q==\n",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAADIAAAABCAYAAACc0f2yAAAABHNCSVQICAgIfAhkiAAAAGlJREFUCJlNzEEKwkAQRNHXyaggwRzB3P9yQjAEJUO7yETtRUHXL36Q6e8yg4BECClFq1IGsaMjfos8PiKaS9KU2cDXmTvL+2QqRUGphZ61qy7xYBl1w9kb61YN+dKdmLen3ui6VNtt8QEKyixbTwHqlAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "Image (3, 1, 50)"
      ]
     },
     "execution_count": 297,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# test open sequence image function\n",
    "open_fastq_image(fastq_df.seq_score[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 298,
   "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_score): return open_fastq_image(seq_score)\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, seq_score:IntsOrStrs=0, **kwargs)->'ItemList':\n",
    "        \"Get the sequences in `col` of `df` and return cls and df.\"\n",
    "        return cls(items=zip(df[seq_score].values), xtra=df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 299,
   "metadata": {},
   "outputs": [],
   "source": [
    "bs = 64"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 300,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = (SeqItemList.import_from_df(fastq_df, ['seq_score'], seq_len=50)\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": 301,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "ImageDataBunch;\n",
       "\n",
       "Train: LabelList\n",
       "y: MultiCategoryList (15000 items)\n",
       "[MultiCategory nottarget, MultiCategory nottarget, MultiCategory nottarget, MultiCategory nottarget, MultiCategory nottarget]...\n",
       "Path: .\n",
       "x: SeqItemList (15000 items)\n",
       "[Image (3, 1, 50), Image (3, 1, 50), Image (3, 1, 50), Image (3, 1, 50), Image (3, 1, 50)]...\n",
       "Path: .;\n",
       "\n",
       "Valid: LabelList\n",
       "y: MultiCategoryList (5000 items)\n",
       "[MultiCategory target, MultiCategory target, MultiCategory nottarget, MultiCategory target, MultiCategory nottarget]...\n",
       "Path: .\n",
       "x: SeqItemList (5000 items)\n",
       "[Image (3, 1, 50), Image (3, 1, 50), Image (3, 1, 50), Image (3, 1, 50), Image (3, 1, 50)]...\n",
       "Path: .;\n",
       "\n",
       "Test: None"
      ]
     },
     "execution_count": 301,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 302,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2, ['target', 'nottarget'])"
      ]
     },
     "execution_count": 302,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# check classes\n",
    "data.c, data.classes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 303,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "64"
      ]
     },
     "execution_count": 303,
     "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": 304,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/jpeg": "/9j/4AAQSkZJRgABAQEAZABkAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCAABADIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDA/wCC2X/KOrRP+y8/GH/07+Jq7X9uH/k3v9pT/sMWH/q47eiivxTgX/kTVf8ArzmP/q4y8+v4d/3bB/8AY6w//peWnafsHf8ANB/+yZ6x/wC9Or4c/Zb/AOPzwR/2aX8O/wD1ammUUV/QHAX/ACa7Mv8ArzD/ANImeV9KX/k5HEH/AHM/+k5mfLvx6/5Kxf8A/XrY/wDpJBXKXH+rP+6P60UV8rkf/Iow3/XuH/pKPofFP/k5ed/9heJ/9PTFXoPpRRRXqnwB/9k=\n",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAADIAAAABCAYAAACc0f2yAAAABHNCSVQICAgIfAhkiAAAAGBJREFUCJlNzTEOwlAQA9HnjRTEKcL9L0hB+KZIClyNrJGdVpNqAwKpiqC9yrQa0qhKov7SktxeaO+t2+/FXF9JaTQ4Dq99t8MaM7X6lu1pcloexsdaY2az1hecZUtk4geo+jB3hBcTdAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "Image (3, 1, 50)"
      ]
     },
     "execution_count": 304,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "i = 2\n",
    "data.x[i]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 305,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "MultiCategory nottarget"
      ]
     },
     "execution_count": 305,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.y[i]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 306,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/jpeg": "/9j/4AAQSkZJRgABAQEAZABkAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCAABADIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDP/bT/AOSb6N/2bx4B/wDVnaRX5w6d/wAi/wDtH/8Acc/9L7uiivs/Cf8A5I7xJ/7GWJ/9Oo/srhz4eHf+vOI/9VWfifsN/wDJhH7SH/ZNIf8A06LX6eftVf8AIreA/wDsk3gv/wBRz43UUV+g+LP+54f/ALAMp/8AVfjD+QMX/wAi3KP+wqX55efl7+0B/wAnI/EX/soGt/8ApfPXH9n/AN5f6UUV/OuTf8iPC/8AXml/6apHyvCX/JK5f/14of8ApmkPj/1a/wC6KKKK9Y9s/9k=\n",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAADIAAAABCAYAAACc0f2yAAAABHNCSVQICAgIfAhkiAAAAF9JREFUCJlFyzEOwkAAA8HxXaDiFeH/v6MBEpkiEFxY8mqdalMqxJGSUAWRA/p6etJ/enZK83v12EiirSS0h1PcV+ucJsYYGMaA3d5h5mV/LnKtWETtW43Lw3u7WWZ8ALB/KHh7WYNvAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "Image (3, 1, 50)"
      ]
     },
     "execution_count": 306,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "i = 3\n",
    "data.x[i]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 307,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "MultiCategory nottarget"
      ]
     },
     "execution_count": 307,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.y[i]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 325,
   "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": 311,
   "metadata": {},
   "outputs": [],
   "source": [
    "# resize input sequence array from (bs, 3, 1, 50) to (bs, 3, 50) for Conv1d layer\n",
    "def ResizeInput(): return Lambda(lambda x: x.permute(0,2,1,3).view((-1,)+x.permute(0,2,1,3).size()[-2:]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 312,
   "metadata": {},
   "outputs": [],
   "source": [
    "drop_p = 0.2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 313,
   "metadata": {},
   "outputs": [],
   "source": [
    "net_basic_fastai = nn.Sequential(ResizeInput(),\n",
    "                    nn.Conv1d(in_channels=3, 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": 314,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Sequential(\n",
       "  (0): Lambda()\n",
       "  (1): Conv1d(3, 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": 314,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "net_basic_fastai"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 244,
   "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": 315,
   "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": 316,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "======================================================================\n",
      "Layer (type)         Output Shape         Param #    Trainable \n",
      "======================================================================\n",
      "Lambda               [64, 3, 50]          0          False     \n",
      "______________________________________________________________________\n",
      "Conv1d               [64, 32, 39]         1184       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:  5842\n",
      "Total trainable params:  5842\n",
      "Total non-trainable params:  0\n"
     ]
    }
   ],
   "source": [
    "learn.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 317,
   "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": 318,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "Total time: 01:02 <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.571930</th>\n",
       "    <th>0.521825</th>\n",
       "    <th>0.764000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>2</th>\n",
       "    <th>0.522738</th>\n",
       "    <th>0.527210</th>\n",
       "    <th>0.759600</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>3</th>\n",
       "    <th>0.504971</th>\n",
       "    <th>0.574019</th>\n",
       "    <th>0.715300</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>4</th>\n",
       "    <th>0.500220</th>\n",
       "    <th>0.502050</th>\n",
       "    <th>0.774200</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>5</th>\n",
       "    <th>0.477877</th>\n",
       "    <th>0.475824</th>\n",
       "    <th>0.788400</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>6</th>\n",
       "    <th>0.438131</th>\n",
       "    <th>0.456172</th>\n",
       "    <th>0.803000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>7</th>\n",
       "    <th>0.435762</th>\n",
       "    <th>0.448004</th>\n",
       "    <th>0.798400</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>8</th>\n",
       "    <th>0.391101</th>\n",
       "    <th>0.413436</th>\n",
       "    <th>0.816400</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>9</th>\n",
       "    <th>0.374293</th>\n",
       "    <th>0.393267</th>\n",
       "    <th>0.826000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>10</th>\n",
       "    <th>0.360177</th>\n",
       "    <th>0.389903</th>\n",
       "    <th>0.827400</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": 319,
   "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": 320,
   "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": 321,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "Total time: 02:13 <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.365177</th>\n",
       "    <th>0.379553</th>\n",
       "    <th>0.830800</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>2</th>\n",
       "    <th>0.354358</th>\n",
       "    <th>0.384583</th>\n",
       "    <th>0.829800</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>3</th>\n",
       "    <th>0.345974</th>\n",
       "    <th>0.354708</th>\n",
       "    <th>0.834800</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>4</th>\n",
       "    <th>0.362023</th>\n",
       "    <th>0.346883</th>\n",
       "    <th>0.842400</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>5</th>\n",
       "    <th>0.363330</th>\n",
       "    <th>0.336041</th>\n",
       "    <th>0.849400</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>6</th>\n",
       "    <th>0.355574</th>\n",
       "    <th>0.322405</th>\n",
       "    <th>0.847400</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>7</th>\n",
       "    <th>0.363510</th>\n",
       "    <th>0.348670</th>\n",
       "    <th>0.853600</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>8</th>\n",
       "    <th>0.364006</th>\n",
       "    <th>0.314748</th>\n",
       "    <th>0.856600</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>9</th>\n",
       "    <th>0.332879</th>\n",
       "    <th>0.274864</th>\n",
       "    <th>0.879200</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>10</th>\n",
       "    <th>0.302273</th>\n",
       "    <th>0.258379</th>\n",
       "    <th>0.888200</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>11</th>\n",
       "    <th>0.288669</th>\n",
       "    <th>0.265280</th>\n",
       "    <th>0.883600</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>12</th>\n",
       "    <th>0.288181</th>\n",
       "    <th>0.253432</th>\n",
       "    <th>0.886400</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>13</th>\n",
       "    <th>0.255933</th>\n",
       "    <th>0.225955</th>\n",
       "    <th>0.903400</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>14</th>\n",
       "    <th>0.227440</th>\n",
       "    <th>0.232363</th>\n",
       "    <th>0.903400</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>15</th>\n",
       "    <th>0.214933</th>\n",
       "    <th>0.215383</th>\n",
       "    <th>0.910800</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>16</th>\n",
       "    <th>0.210227</th>\n",
       "    <th>0.216426</th>\n",
       "    <th>0.905600</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>17</th>\n",
       "    <th>0.200344</th>\n",
       "    <th>0.212238</th>\n",
       "    <th>0.907200</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>18</th>\n",
       "    <th>0.182619</th>\n",
       "    <th>0.210066</th>\n",
       "    <th>0.912200</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>19</th>\n",
       "    <th>0.173861</th>\n",
       "    <th>0.208573</th>\n",
       "    <th>0.912400</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>20</th>\n",
       "    <th>0.170795</th>\n",
       "    <th>0.206019</th>\n",
       "    <th>0.914000</th>\n",
       "  </tr>\n",
       "</table>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "learn.fit_one_cycle(20, max_lr=1e-2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 322,
   "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": 324,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAD8CAYAAACb4nSYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xl8VPW9//HXJzsQCAkJa4Cwyo5AWNwXrEX0ilq1gPtardpWu2h/tV6vvVd77XKtFlvpFTdE6lIrVayXRVtFBcK+hCVsIQSykBBIQvbv748ZbGTLkEyY7f18PPLIme98Z/I55wHvOfM953yPOecQEZHIEBXoAkRE5PRR6IuIRBCFvohIBFHoi4hEEIW+iEgEUeiLiEQQhb6ISARR6IuIRBCFvohIBIkJdAFHS01NdRkZGYEuQ0QkpKxYsaLYOZfWVL+gC/2MjAyysrICXYaISEgxs12+9NPwjohIBFHoi4hEEIW+iEgEUeiLiEQQhb6ISARR6IuIRBCFvohIBAm68/RFRCJJXX0D2XsPsXxnCV06JHD5iG6t+vcU+iIip1FFdR2rdx9g+c4SsnaWsjK3lMqaegCuHNldoS8iEsqKDlWTtbOE5TtLydpVwob8g9Q3OMxgcNcOXDcmncyMFDIzkumW1KbV61Hoi4j4iXOOHcUVZO0sZfnOEpbvLGHn/koA4mOiGNWrI9+9sB+ZGSmM6tWRDgmxp71Ghb6ICLCjuIKcwnJq6hqorqunpq6BmvoGqmuP/K6n+muP/9VeU99AVW09WwvK2V9RA0By21gyM1KYPr4XmRkpDOueRFxM4M+dUeiLSERraHC88M/t/Ob/NlPX4E7aNz4miriYKOJjoomPiWr02PP7gjPSGJeRQmZGCv3S2mFmp2ktfKfQF5GIVXSomofeXM2nW4uZPLwr3zm/H23ioomL/nqYx8dEExttQRnip0qhLyIR6dOtRTz45zUcqqrlyauHM21cz7AI9aYo9EWkxfaVVXHzrKUM6tqB/7p6GO0DcIDSV7X1Dfzm/7bwx39sY2CXRF6/czxndG0f6LJOG4W+iLTIgcoabnpxKXmlh9lWVMG6PWU8f8NoBnfrEOjSjrG7pJIH3ljF6t0HmDauF49dMYQ2cdGBLuu0CvyhZBEJWRXVddz60nJ2lVQy69axzLlzPBXVdVw1YwlvZu0OdHlf88HavUz+3adsKypnxvTRPHXN8IgLfFDoi0gz1dQ1cM/sFazNO8Bz00ZxVr9OjO/biQ++dx5jeifzk7fX8uO31nDYe7VpoByuqeenf1nHfXNW0q9zIvO/d16rX/UazDS8IyKnrL7BfXXWy9PXjuCbQ7t+9Vxa+3heu2M8zyzcwnOLc74a7umblnja69y87xAPvLGSLQXl3HthPx76xkBioyN7Xzey115ETplzjsfeW8/7a/fy/yYP4vrMnsf0iY4yfnjpGbx821gKDlZx5e+X8MHavae1xteX7uLK339GSUUtr90xjocnDYr4wAeFvoicov9ZsIXXl+ZyzwX9uPv8fifte+EZnfnge+cxoEsi981ZyePzNlBT19Cq9ZUdruW+OSv52bvrGdcnhQ+/fx7nDUhr1b8ZSjS8IyI+m/XZDp5dnMO3M3vy8KQzfHpN945t+PPdZ/HLDzcxa8kOVu8+wIwbRtOjo/8nF1uxq5TvvbGKgoNVPHLZIO4+ry9RUeF/7v2p0J6+iPjk3VV5PPH+RiYN7cp/XT3slC5kiouJ4rF/G8IfbhjNtsJyLn/2Uz7eXOiXug7X1PPFtv08NT+b61/4AjN4656zuOeCfgr849Cevog0afGmAn701lrO7teJZ6aeSUwzx8YvG96Nwd06cO/rK7ntpeXcd1E/Hrxk4Cm93/7yarJ2lX41XfH6PWVfzZlz5cju/OfVwwIye2WoUOiLyEkt21HCvbNXMrR7B2benElCbMvObc9Ibce73z2bx+dtYMbH21ixq5Rnp42ic/uEY/o658gtqfTMRe+dqnhbUQUAcdFRjOyZxF3n92VsRjJjeqWQ1FZh3xRz7uSzyp1umZmZLisrK9BliAiwMf8g3575BWnt43nrO2fRKTHer+//9oo8Hv3rOtonxPLctFFk9k7+6taBWbs8e/JFh6oBSGoTS2bvZDIzUhibkcywHkkt/gAKJ2a2wjmX2VQ/7emLyHHt2l/BzbOWkRgfw2t3jPd74ANcOyadYT068N3XVzL9T1+SEBv91a0D05PbcG7/VDIzkhmbkUL/tESN0fuBQl9EjlF4sIobX1xKfUMDc+8+q1XOtDliUNcOzLv/XJ5ZsIWa+gbGnsZbB0Yihb6IfE1ZZS03z1rG/vIa3rhrAv07t/4MlInxMTx6xZBW/zuiUzZFpJHDNfXc/spythdVMPOmTEb27BjoksTPFPoiAnjmmb/39RWsyi3ld1PP5NwBqYEuSVqBhndEwsTzn+Sw3Xs6Y3Ps2l/B8p2lPHXNcC4bHrmzUIY7hb5IGNiQX8bTf99MamIc8THNO43RDB67YgjTxvXyc3USTBT6ImFgztJc4mOiWPTQhbpASU5KY/oiIa6iuo73Vudz+YhuCnxpkkJfJMT9bU0+5dV1TNewjPjAp9A3s0lmttnMcszskeM839vMFpnZWjP7xMzSGz13i5lt9f7c4s/iRQTmLMtlYJdExvRODnQpEgKaDH0ziwZmAJcBQ4BpZnb0VRS/Bl51zo0AngCe8r42Bfh3YDwwDvh3M9O/TBE/Wb+njLV5ZUwf1+uUpjqWyOXLnv44IMc5t905VwPMBaYc1WcIsMi7/HGj578JLHDOlTjnSoEFwKSWly0i4NnLT4iN4urR6U13FsG30O8B7G70OM/b1tga4Fve5auB9mbWycfXikgzlFfX8d6qPVwxojtJbXQAV3zjS+gf7zvj0fMx/wi4wMxWARcAe4A6H1+Lmd1tZllmllVUVORDSSIyb3U+FTX1Oq9eTokvoZ8HNL7dfTqQ37iDcy7fOXeNc24U8DNvW5kvr/X2nemcy3TOZaal6QbGIr6Ys2wXg7q2Z3QvzY8jvvMl9JcDA8ysj5nFAVOBeY07mFmqmR15r58Cs7zLHwGXmlmy9wDupd42EWmBdXllrN9zkOnjdQBXTk2Toe+cqwPuxxPW2cCbzrkNZvaEmV3p7XYhsNnMtgBdgP/yvrYE+AWeD47lwBPeNhFpgTnLdpEQG8VVo3SITE6NT9MwOOfmA/OPanus0fLbwNsneO0s/rXnLyItdKiqlvdW5/NvI7rrBuByynRFrkiIeW91PpU19UwfrwO4cuoU+iIhxDnHnKW5DO7WgTN1gxNpBoW+SAhZm1fGxr06gCvNp9AXCSFzlubSJjaaKWd2D3QpEqIU+iIh4mBVLfPW5HPlSB3AleZT6IuEiPdW7eFwrQ7gSsso9EVCgHOO15fmMrR7B0akJwW6HAlhCn2RELB69wE27TukA7jSYgp9kRAwZ2kubeOiuXKkDuBKyyj0RYJc2eFa/rY2nylndqe9DuBKCyn0RYLce6v3UFXbwPRxvQNdioQBhb5IEDtyBe7wHkkM1wFc8QOFvkgQW5nrOYCrG6WIvyj0RYLYnKW5tIuL5kpdgSt+otAXCVJllbW8vzafKaN6kBjv0yzoIk1S6IsEqXdX5VFd18B0De2IHyn0RYKQc445y3IZmZ7EsB46gCv+o9AXCUIrdpWypaBcB3DF7xT6IkFozrJcEuNj+DddgSt+ptAXCTJllbV8sHYvV43qTjsdwBU/U+iLBJl3Vh45gKsrcMX/FPoiQeSrA7g9OzKke4dAlyNhSKEvAhQequKK5z7lib9t5HBNfcDqyNpVSk5hOTfoAK60EoW+RLz6Bsf331jN5n2HmLVkB5Of/ZQVu0oCUsucpbm0j4/hipHdAvL3Jfwp9CXi/W7hFr7Yvp8nrx7OnDvHU1PXwHV//IKn5mdTVXv69vpLK2r4YN1erh7dg7ZxOoArrUOhLxHtH1uKeO7jHK4bk851mT05u38qHz14Pt8e24sX/rmdK577jDW7D5yWWt5ZmUdNXYPOzZdWpdCXiLW37DAP/nk1Azu354kpw75qT4yP4alrhvPq7eOoqK7jmj98zq8+2kR1Xevs9TvnWJJTzMuf72RUr44M7qYDuNJ69B1SIlJtfQMPzFlFdW09z984mjZx0cf0OX9gGn//wfn85/sbmfHxNhZlF/Lr60b6bVqEsspa3lqxmzlLc9leXEHHtrH88poRfnlvkRNR6EtE+vVHm8naVcrvpp5Jv7TEE/ZLahPLr64byaRhXXnkL+u4asYS7r+4P/dd1J/Y6FP/ouycY01eGbO/3MXf1uRTXdfAqF4d+c11I7l8RDcSYo/98BHxJ4W+RJwFGwt44Z/buXFCL6ac2cOn10wc3IUFDybz+LwNPLNwKws2FvCb60cyqKtvQzGVNXXMW53P7KW7WL/nIG3jovnWmHRuGN+Lod01oZqcPuacC3QNX5OZmemysrICXYaEqd0llVz+7Kf06tSWt+85u1l71n9fv4+fvbuOg1W1/OCSgXzn/L7EnGCvP6fwELO/zOWdlXkcqqrjjC7tuXFCL64a1UM3ORe/MrMVzrnMpvppT18iRnVdPffNWYkDnp8+ptlDKZOGdWVsRjKPvbeBX320mf/bWMBvrhtB/87tAaipa+CjDfuY/eUulu4oIS46isuGd+XGCb3J7J2MmflxrUROjUJfIsaTH2SzNq+MF24aQ69ObVv0Xp0S45lxw2guW5vPz/+6nsnPfsYPLhlAZXU9c5fvpri8mp4pbXh40iCuy0wnNTHeT2sh0jIKfYkI76/N55UvdnHnuX345tCufnvfK0Z0Z3yfTvy/d9fx9N83E2Vw8aDO3DChNxcMSCMqSnv1ElwU+hL2theV88g76xjdqyMPXzbI7++f1j6emTeNYWVuKV06JJCe3LJvESKtSaEvYa2qtp7vvr6S2Gjj99NHN+s0S1+YGWN6p7TKe4v4k0Jfwtrj8zawad8hXrptLN07tgl0OSIBp2kYJGy9syKPuct3c99F/bjojM6BLkckKPgU+mY2ycw2m1mOmT1ynOd7mdnHZrbKzNaa2WRve6yZvWJm68ws28x+6u8VEDmeLQWHePSv6xnfJ4UHLxkY6HJEgkaToW9m0cAM4DJgCDDNzIYc1e1R4E3n3ChgKvC8t/06IN45NxwYA3zHzDL8U7rI8VVU1/Hd11fSLj6a56aNOuGFUyKRyJf/DeOAHOfcdudcDTAXmHJUHwccuR49Cchv1N7OzGKANkANcLDFVYucgHOOn727jm1F5Tw7dRSdOyQEuiSRoOJL6PcAdjd6nOdta+xx4EYzywPmAw94298GKoC9QC7wa+dcYG5JJBHhjWW7+evqfB68ZCBn908NdDkiQceX0D/e1SVHT9gzDXjZOZcOTAZeM7MoPN8S6oHuQB/gh2bW95g/YHa3mWWZWVZRUdEprYDIEev3lPH43zZw3oBU7r+of6DLEQlKvoR+HtCz0eN0/jV8c8QdwJsAzrkvgAQgFZgO/N05V+ucKwSWAMdMCOScm+mcy3TOZaalpZ36WkjEq61v4P45K0lpG8cz3z5TV8KKnIAvob8cGGBmfcwsDs+B2nlH9ckFJgKY2WA8oV/kbb/YPNoBE4BN/ipe5IhlO0rYub+Sn18xhE6a50bkhJoMfedcHXA/8BGQjecsnQ1m9oSZXent9kPgLjNbA7wB3Oo8czbPABKB9Xg+PF5yzq1thfWQCLcwu4C4mCguGqRviiIn49MVuc65+XgO0DZue6zR8kbgnOO8rhzPaZsircY5x6LsQs7p14m2cbrIXORkdAKzhLycwnJySyqZOLhLoEsRCXoKfQl5C7ILAJg4WFMtiDRFoS8hb1F2IcN6dKBbkiZUE2mKQl9C2v7yalbmljJxkIZ2RHyh0JeQtnhTIc7BN4Yo9EV8odCXkLYou5CuHRIY2r1D051FRKEvoau6rp5PtxZx8eDOmOkKXBFfKPQlZH25vYSKmnou0Vk7Ij5T6EvIWrixgDax0ZzdT7NpivhKoS8hyXMVbgHnDkglITY60OWIhAyFvoSk7L2HyC+r0tCOyClS6EtIWphdgBlcrPPzRU6JQl9C0qLsAkamdyStvaZRFjkVCn0JOYUHq1iTV6ahHZFmUOhLyFm8qRCAS3QVrsgpU+hLyFmYXUCPjm04o0v7QJciEnIU+hJSqmrr+SynmEt0Fa5Isyj0JaQsySmmqrZBN0wRaSaFvoSUhdkFJMbHML5vSqBLEQlJCn0JGQ0Nnnvhnj8wlfgYXYUr0hwKfQkZ6/PLKDxUrRumiLSAQl9CxsLsQqIMLhqk8/NFmkuhLyFj4cYCxvROJqVdXKBLEQlZCn0JCfkHDrNx70GdtSPSQgp9CQmLjlyFq6kXRFpEoS8hYeHGAjI6taVfWmKgSxEJaQp9CXoV1XV8sW0/Ewd30VW4Ii2k0Jeg9+nWYmrqG5iooR2RFlPoS9BblF1Ah4QYxmboKlyRllLoS1Crb3As3lTIhWd0JjZa/1xFWkr/iySord59gP0VNRraEfEThb4EtUXZBcREGRcOVOiL+INCX4LawuwCxmakkNQ2NtCliIQFhb4Erd0llWwpKNfQjogfKfQlaC3MLgDgEk29IOI3Cn0JWouyC+nfOZGM1HaBLkUkbCj0JSgdrKrly+37NbQj4mcKfQlK/9xSRF2D09COiJ/5FPpmNsnMNptZjpk9cpzne5nZx2a2yszWmtnkRs+NMLMvzGyDma0zswR/roCEp0XZhSS3jWV0r+RAlyISVmKa6mBm0cAM4BtAHrDczOY55zY26vYo8KZz7g9mNgSYD2SYWQwwG7jJObfGzDoBtX5fCwkrdfUNLN5UyMTBnYmO0gRrIv7ky57+OCDHObfdOVcDzAWmHNXHAR28y0lAvnf5UmCtc24NgHNuv3OuvuVlSzhbsauUssO1GtoRaQW+hH4PYHejx3netsYeB240szw8e/kPeNsHAs7MPjKzlWb2kxbWKxFg0aZC4qKjOH9gWqBLEQk7voT+8b5fu6MeTwNeds6lA5OB18wsCs/w0bnADd7fV5vZxGP+gNndZpZlZllFRUWntAISfhZmFzC+bwqJ8U2OPorIKfIl9POAno0ep/Ov4Zsj7gDeBHDOfQEkAKne1/7DOVfsnKvE8y1g9NF/wDk30zmX6ZzLTEvT3l0k215UzvaiCg3tiLQSX0J/OTDAzPqYWRwwFZh3VJ9cYCKAmQ3GE/pFwEfACDNr6z2oewGwEZETWJTtuReuzs8XaR1Nfn92ztWZ2f14AjwamOWc22BmTwBZzrl5wA+BP5nZg3iGfm51zjmg1Mx+i+eDwwHznXMftNbKSOhbmF3AoK7tSU9uG+hSRMKST4Omzrn5eIZmGrc91mh5I3DOCV47G89pmyIndaCyhqxdpdx7Qb9AlyIStnRFrgSNTzYXUd/gNLQj0ooU+hI0FmYXkJoYz8j0joEuRSRsKfQl4OobHAs2FvDJ5iImDupMlK7CFWk1OhFaAqaiuo63snbz0uc72bW/ku5JCdxydkagyxIJawp9Oe3ySit55fOdzF2+m0NVdYzq1ZEff/MMJg3tSky0vnyKtCaFvpwWzjlW5pby4mc7+Pv6fZgZk4d347ZzMjSTpshppNCXVlVb38D8dXuZ9dkO1uSV0SEhhrvO78stZ2XQvWObQJcnEnEU+tIqDlTWMGdZLq9+vot9B6vom9qOX0wZyrfGpNM2Tv/sRAJF//vEr3IKy3lpyQ7eWZlHVW0D5/ZP5clrhnHhQJ2VIxIMFPriFyUVNfzk7TUszC4kLiaKq8/swW3nZjCoa4emXywip41CX1osr7SSm19cxp4Dh3nwkoHcMKEXqYnxgS5LRI5DoS8tsnnfIW6etZTDNfXMvnM8YzNSAl2SiJyEQl+abfnOEu54eTlt4qJ5856zNJQjEgIU+tIsCzYWcP+clfRIbsOrt4/TVMgiIUKhL6fsz8tz+elf1jE8vSMv3TqWlHZxgS5JRHyk0BefOed4/pNt/OqjzZw/MI0/3DCadrqPrUhI0f9Y8UlDg+MXH2zkpSU7mXJmd3517UjiYjRPjkioUehLk2rqGvjRW2uYtyaf28/pw6OXD9aFViIhSqEvJ1VeXce9s1fw6dZiHp40iHsu6IuZAl8kVCn0w8SO4gp+/NYaendqx8WDOnPewFQ6JMS26D33l1dz28vL2ZB/kKevHcH1mT39VK2IBIpCPwzsLqlk+p++pKK6jq2F5byzMo+YKCMzI5mLB3Xm4kGd6ZeWeEp76LtLKrl51jLyDxzmhRvHcMmQLq24BiJyuij0Q9yeA4eZOvNLKmvqmXv3WQzsksiq3QdYvKmQjzcV8uT8TTw5fxM9U9pw8RmduWhQZyb07URCbPQJ3zN770FumbWMqtp6Xr9zPJm6ylYkbJhzLtA1fE1mZqbLysoKdBkhYV9ZFd+e+QUlFTXMuXMCw9OTjumz58BhPvZ+ACzZVkxVbQNtYqM5p38nLvJ+C+iW9K957ZftKOGOV5bTNi6aV28fzxld25/OVRKRZjKzFc65zCb7KfRDU+GhKqa+8CWFh6p57Y5xjPLh7lNVtfV8sW0/H28uZPGmQvJKDwMwqGt7b/gn8IsPsknXVbYiIUehH8b2l1czdeaX7DlwmFduH9esSc6cc+QUlrN4k+cDIGtXKfUNjpE9dZWtSCjyNfQ1ph9iSitquOF/l7K7tJKXbm1e4AOYGQO6tGdAl/Z854J+lB2uZUN+GaN6JtMm7sTj/SIS2hT6IaTscC03zVrK9uIKXrwlk7P6dfLbeye1ieXsfql+ez8RCU66jj5EHKqq5eZZy9i87xAv3DiG8wakBbokEQlBCv0QUFFdx20vLWfDnjJmTB/NRYM6B7okEQlRGt4Jcodr6rnjleWs2n2A56aN4tKhXQNdkoiEMO3pB7Gq2nruejWLZTtK+O31I5k8vFugSxKREKc9/SBVXVfPPbNXsGRbMb+6diRTzuwR6JJEJAxoTz8I1dQ1cN/rq/hkcxFPXT2ca8ekB7okEQkTCv0gU1ffwPfnrmJhdgG/mDKUqeN6BbokEQkjCv0gUt/geOjNNXy4fh8/v2IIN52VEeiSRCTMKPSDREOD4ydvr2XemnweuWwQd5zbJ9AliUgYUugHAecc//lBNu+szOOhbwzkngv6BbokEQlTCv0g8KdPtzNryQ5uOyeDBy7uH+hyRCSM+RT6ZjbJzDabWY6ZPXKc53uZ2cdmtsrM1prZ5OM8X25mP/JX4eHi3VV5PDl/E5eP6MbPLx+i+8+KSKtqMvTNLBqYAVwGDAGmmdmQo7o9CrzpnBsFTAWeP+r5/wE+bHm54eWfW4r48VtrOatvJ357/UiiohT4ItK6fNnTHwfkOOe2O+dqgLnAlKP6OKCDdzkJyD/yhJldBWwHNrS83PCxNu8A98xewYAu7Xnh5jHEx2g6YxFpfb6Efg9gd6PHed62xh4HbjSzPGA+8ACAmbUDHgb+o8WVhpFd+yu4/eXlJLeN45XbxtIhITbQJYlIhPAl9I835nD07bamAS8759KBycBrZhaFJ+z/xzlXftI/YHa3mWWZWVZRUZEvdYes4vJqbp61jPoGx6t3jKNzh4RAlyQiEcSXuXfygJ6NHqfTaPjG6w5gEoBz7gszSwBSgfHAtWb2NNARaDCzKufc7xu/2Dk3E5gJntslNmdFQsGRKZILDlYx564J9EtLDHRJIhJhfAn95cAAM+sD7MFzoHb6UX1ygYnAy2Y2GEgAipxz5x3pYGaPA+VHB36kqKlr4J7ZK9i49yAzbxrDaB9uZC4i4m9NDu845+qA+4GPgGw8Z+lsMLMnzOxKb7cfAneZ2RrgDeBWF2x3XA+ghgbHw++s5dOtxTx19XAmDu4S6JJEJEL5NLWyc24+ngO0jdsea7S8ETinifd4vBn1hYX//mgT767aw48uHcj1Y3s2/QIRkVaiK3Jb2Yuf7eCFf2znpgm9ue8iXW0rIoGl0G9F89bk84v3NzJpaFcev3KorrYVkYBT6LeSz3OK+eGbqxmXkcIzU88kWlfbikgQUOi3gg35Zdz92gr6pLbjTzdnkhCrq21FJDgo9P1sd0klt760nPYJMbxy+ziS2upqWxEJHgp9P9rvvdq2uraeV24fR7ekNoEuSUTka3w6ZVOaVlJRw+2vZJF/4DCz7xzPwC7tA12SiMgxFPp+8OX2/fxg7mpKKmp4bvooxmakBLokEZHjUui3QF19A88tzuG5xVvp3akdf7nlbIb1SAp0WSIiJ6TQb6a9ZYf5/tzVLNtRwjWje/DElGEkxmtzikhwU0o1w4KNBfz47TXU1DXw2+tHcs3o9ECXJCLiE4X+KaiqreeXH27i5c93MrR7B56bNoq+mh5ZREKIQt9H24rKeWDOKjbuPcjt5/Th4cvO0C0ORSTkKPR98M6KPH7+3nriY6J48ZZMTY0sIiFLoX8S5dV1/Pyv63l31R7G90nhd1NH0TVJtzcUkdAVNqFfVVvP1oJyMlLb0t4PNxpfl1fGA2+sJLekkoe+MZD7LuqvSdNEJOSFTehv3neIKTOWAJCaGE/f1HZkpLalT2oifby/e3dq2+TkZ845Zi3ZyS8/zCY1MZ65d5/FuD662EpEwkPYhH7vTm35442j2V5cwc7iCnYUV7B4UxHF5Xlf9TGD7kltvB8G7cjo1I6+aZ7fPVPacqiqjh+/tYZFmwr5xpAuPP2tESS3iwvgWomI+FfYhH7HtnFMGtbtmPZDVbXsLK5ke3E5O4sr2VFczo79lcxbnc/Bqrqv+kVHGfExUdTVO56YMpSbJvTWTU9EJOyETeifSPuEWIanJzE8/evTIzjnKK2s9XwIeD8Mig/VcPPZvRnaXVMpiEh4CvvQPxEzI6VdHCntUhjTW2P2IhIZNJ++iEgEUeiLiEQQhb6ISARR6IuIRBCFvohIBFHoi4hEEIW+iEgEUeiLiEQQc84FuoavMbMiYFeg6wgiqUBxoIsIItoex9I2+bpI3R69nXNpTXUKutCXrzOzLOdcZqDrCBbaHsfSNvk6bY+T0/COiEgEUeiLiEQQhX7wmxnoAoKMtsextE2+TtvjJDR+QedIAAADkklEQVSmLyISQbSnLyISQRT6AWBms8ys0MzWN2pLMbMFZrbV+zvZ225m9qyZ5ZjZWjMb3eg1t3j7bzWzWwKxLv5gZj3N7GMzyzazDWb2fW97RG4TM0sws2Vmtsa7Pf7D297HzJZ61+3PZhbnbY/3Ps7xPp/R6L1+6m3fbGbfDMwa+YeZRZvZKjN73/s4ordHsznn9HOaf4DzgdHA+kZtTwOPeJcfAf7buzwZ+BAwYAKw1NueAmz3/k72LicHet2auT26AaO9y+2BLcCQSN0m3vVK9C7HAku96/kmMNXb/kfgXu/yd4E/epenAn/2Lg8B1gDxQB9gGxAd6PVrwXZ5CJgDvO99HNHbo7k/2tMPAOfcP4GSo5qnAK94l18BrmrU/qrz+BLoaGbdgG8CC5xzJc65UmABMKn1q/c/59xe59xK7/IhIBvoQYRuE+96lXsfxnp/HHAx8La3/ejtcWQ7vQ1MNM8NnqcAc51z1c65HUAOMO40rILfmVk6cDnwv97HRgRvj5ZQ6AePLs65veAJQaCzt70HsLtRvzxv24naQ5r3q/goPHu3EbtNvEMZq4FCPB9e24ADzrk6b5fG6/bVenufLwM6EUbbA3gG+AnQ4H3cicjeHs2m0A9+dpw2d5L2kGVmicA7wA+ccwdP1vU4bWG1TZxz9c65M4F0PHujg4/Xzfs7rLeHmV0BFDrnVjRuPk7XiNgeLaXQDx4F3iEKvL8Lve15QM9G/dKB/JO0hyQzi8UT+K875/7ibY7obQLgnDsAfIJnTL+jmcV4n2q8bl+tt/f5JDzDh+GyPc4BrjSzncBcPMM6zxC526NFFPrBYx5w5GyTW4D3GrXf7D1jZQJQ5h3q+Ai41MySvWe1XOptCzne8dYXgWzn3G8bPRWR28TM0syso3e5DXAJnuMcHwPXersdvT2ObKdrgcXOc+RyHjDVezZLH2AAsOz0rIX/OOd+6pxLd85l4Dkwu9g5dwMRuj1aLNBHkiPxB3gD2AvU4tn7uAPPmOMiYKv3d4q3rwEz8IzprgMyG73P7XgORuUAtwV6vVqwPc7F8zV7LbDa+zM5UrcJMAJY5d0e64HHvO198YRUDvAWEO9tT/A+zvE+37fRe/3Mu502A5cFet38sG0u5F9n70T89mjOj67IFRGJIBreERGJIAp9EZEIotAXEYkgCn0RkQii0BcRiSAKfRGRCKLQFxGJIAp9EZEI8v8BaFslOxQ9x8MAAAAASUVORK5CYII=\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": 265,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "Total time: 00:08 <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.674056</th>\n",
       "    <th>0.631824</th>\n",
       "    <th>0.627000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>2</th>\n",
       "    <th>0.625776</th>\n",
       "    <th>0.536364</th>\n",
       "    <th>0.776000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>3</th>\n",
       "    <th>0.574057</th>\n",
       "    <th>0.466983</th>\n",
       "    <th>0.798000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>4</th>\n",
       "    <th>0.522799</th>\n",
       "    <th>0.444743</th>\n",
       "    <th>0.816000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>5</th>\n",
       "    <th>0.474495</th>\n",
       "    <th>0.401542</th>\n",
       "    <th>0.837000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>6</th>\n",
       "    <th>0.434180</th>\n",
       "    <th>0.439541</th>\n",
       "    <th>0.805000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>7</th>\n",
       "    <th>0.402628</th>\n",
       "    <th>0.399104</th>\n",
       "    <th>0.842000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>8</th>\n",
       "    <th>0.384192</th>\n",
       "    <th>0.402352</th>\n",
       "    <th>0.842000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>9</th>\n",
       "    <th>0.353875</th>\n",
       "    <th>0.411291</th>\n",
       "    <th>0.816000</th>\n",
       "  </tr>\n",
       "  <tr>\n",
       "    <th>10</th>\n",
       "    <th>0.324533</th>\n",
       "    <th>0.417372</th>\n",
       "    <th>0.822000</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": 266,
   "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": 267,
   "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": 268,
   "metadata": {},
   "outputs": [],
   "source": [
    "interpret = learn.interpret()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 270,
   "metadata": {},
   "outputs": [],
   "source": [
    "#interpret.confusion_matrix() # does not work yet!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "#debug_memory()"
   ]
  },
  {
   "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
}