[53d15f]: / Production / se_resnext101_32x4d + prepare densenet features.ipynb

Download this file

5734 lines (5733 with data), 460.3 kB

{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/reina/anaconda3/envs/RSNA/lib/python3.6/importlib/_bootstrap.py:219: ImportWarning: can't resolve package from __spec__ or __package__, falling back on __name__ and __path__\n",
      "  return f(*args, **kwds)\n",
      "/home/reina/anaconda3/envs/RSNA/lib/python3.6/importlib/_bootstrap.py:219: ImportWarning: can't resolve package from __spec__ or __package__, falling back on __name__ and __path__\n",
      "  return f(*args, **kwds)\n"
     ]
    }
   ],
   "source": [
    "from __future__ import absolute_import\n",
    "from __future__ import division\n",
    "from __future__ import print_function\n",
    "\n",
    "\n",
    "import numpy as np # linear algebra\n",
    "import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n",
    "import os\n",
    "import datetime\n",
    "import seaborn as sns\n",
    "import pydicom\n",
    "import time\n",
    "import gc\n",
    "import operator \n",
    "from apex import amp \n",
    "import matplotlib.pyplot as plt\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.utils.data as D\n",
    "import torch.nn.functional as F\n",
    "from sklearn.model_selection import KFold\n",
    "from tqdm import tqdm, tqdm_notebook\n",
    "from IPython.core.interactiveshell import InteractiveShell\n",
    "InteractiveShell.ast_node_interactivity = \"all\"\n",
    "import warnings\n",
    "warnings.filterwarnings(action='once')\n",
    "import pickle\n",
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "%matplotlib inline\n",
    "from skimage.io import imread,imshow\n",
    "from helper import *\n",
    "from apex import amp\n",
    "import helper\n",
    "import torchvision.models as models\n",
    "import pretrainedmodels\n",
    "from torch.optim import Adam\n",
    "from defenitions import *"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "SEED = 8153\n",
    "#device=device_by_name(\"Tesla\")\n",
    "device=device_by_name(\"RTX\")\n",
    "#device = \"cpu\"\n",
    "torch.cuda.set_device(device)\n",
    "sendmeemail=Email_Progress(my_gmail,my_pass,to_email,'se_resnext101_32x4d-folds results')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_submission(test_df,pred):\n",
    "    epidural_df=pd.DataFrame(data={'ID':'ID_'+test_df.PatientID.values+'_epidural','Label':torch.sigmoid(pred[:,0])})\n",
    "    intraparenchymal_df=pd.DataFrame(data={'ID':'ID_'+test_df.PatientID.values+'_intraparenchymal','Label':torch.sigmoid(pred[:,1])})\n",
    "    intraventricular_df=pd.DataFrame(data={'ID':'ID_'+test_df.PatientID.values+'_intraventricular','Label':torch.sigmoid(pred[:,2])})\n",
    "    subarachnoid_df=pd.DataFrame(data={'ID':'ID_'+test_df.PatientID.values+'_subarachnoid','Label':torch.sigmoid(pred[:,3])})\n",
    "    subdural_df=pd.DataFrame(data={'ID':'ID_'+test_df.PatientID.values+'_subdural','Label':torch.sigmoid(pred[:,4])})\n",
    "    any_df=pd.DataFrame(data={'ID':'ID_'+test_df.PatientID.values+'_any','Label':torch.sigmoid(pred[:,5])}) \n",
    "    return pd.concat([epidural_df,\n",
    "                        intraparenchymal_df,\n",
    "                        intraventricular_df,\n",
    "                        subarachnoid_df,\n",
    "                        subdural_df,\n",
    "                        any_df]).sort_values('ID').reset_index(drop=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(674510, 15)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "(674252, 15)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "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>PatientID</th>\n",
       "      <th>epidural</th>\n",
       "      <th>intraparenchymal</th>\n",
       "      <th>intraventricular</th>\n",
       "      <th>subarachnoid</th>\n",
       "      <th>subdural</th>\n",
       "      <th>any</th>\n",
       "      <th>PID</th>\n",
       "      <th>StudyI</th>\n",
       "      <th>SeriesI</th>\n",
       "      <th>WindowCenter</th>\n",
       "      <th>WindowWidth</th>\n",
       "      <th>ImagePositionZ</th>\n",
       "      <th>ImagePositionX</th>\n",
       "      <th>ImagePositionY</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>63eb1e259</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>a449357f</td>\n",
       "      <td>62d125e5b2</td>\n",
       "      <td>0be5c0d1b3</td>\n",
       "      <td>['00036', '00036']</td>\n",
       "      <td>['00080', '00080']</td>\n",
       "      <td>180.199951</td>\n",
       "      <td>-125.0</td>\n",
       "      <td>-8.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2669954a7</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>363d5865</td>\n",
       "      <td>a20b80c7bf</td>\n",
       "      <td>3564d584db</td>\n",
       "      <td>['00047', '00047']</td>\n",
       "      <td>['00080', '00080']</td>\n",
       "      <td>922.530821</td>\n",
       "      <td>-156.0</td>\n",
       "      <td>45.572849</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>52c9913b1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>9c2b4bd7</td>\n",
       "      <td>3e3634f8cf</td>\n",
       "      <td>973274ffc9</td>\n",
       "      <td>40</td>\n",
       "      <td>150</td>\n",
       "      <td>4.455000</td>\n",
       "      <td>-125.0</td>\n",
       "      <td>-115.063000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4e6ff6126</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3ae81c2d</td>\n",
       "      <td>a1390c15c2</td>\n",
       "      <td>e5ccad8244</td>\n",
       "      <td>['00036', '00036']</td>\n",
       "      <td>['00080', '00080']</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>-99.5</td>\n",
       "      <td>28.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>7858edd88</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>c1867feb</td>\n",
       "      <td>c73e81ed3a</td>\n",
       "      <td>28e0531b3a</td>\n",
       "      <td>40</td>\n",
       "      <td>100</td>\n",
       "      <td>145.793000</td>\n",
       "      <td>-125.0</td>\n",
       "      <td>-132.190000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PatientID  epidural  intraparenchymal  intraventricular  subarachnoid  \\\n",
       "0  63eb1e259         0                 0                 0             0   \n",
       "1  2669954a7         0                 0                 0             0   \n",
       "2  52c9913b1         0                 0                 0             0   \n",
       "3  4e6ff6126         0                 0                 0             0   \n",
       "4  7858edd88         0                 0                 0             0   \n",
       "\n",
       "   subdural  any       PID      StudyI     SeriesI        WindowCenter  \\\n",
       "0         0    0  a449357f  62d125e5b2  0be5c0d1b3  ['00036', '00036']   \n",
       "1         0    0  363d5865  a20b80c7bf  3564d584db  ['00047', '00047']   \n",
       "2         0    0  9c2b4bd7  3e3634f8cf  973274ffc9                  40   \n",
       "3         0    0  3ae81c2d  a1390c15c2  e5ccad8244  ['00036', '00036']   \n",
       "4         0    0  c1867feb  c73e81ed3a  28e0531b3a                  40   \n",
       "\n",
       "          WindowWidth  ImagePositionZ  ImagePositionX  ImagePositionY  \n",
       "0  ['00080', '00080']      180.199951          -125.0       -8.000000  \n",
       "1  ['00080', '00080']      922.530821          -156.0       45.572849  \n",
       "2                 150        4.455000          -125.0     -115.063000  \n",
       "3  ['00080', '00080']      100.000000           -99.5       28.500000  \n",
       "4                 100      145.793000          -125.0     -132.190000  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_df = pd.read_csv(data_dir+'train.csv')\n",
    "train_df.shape\n",
    "train_df=train_df[~train_df.PatientID.isin(bad_images)].reset_index(drop=True)\n",
    "train_df=train_df.drop_duplicates().reset_index(drop=True)\n",
    "train_df.shape\n",
    "train_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "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>PatientID</th>\n",
       "      <th>epidural</th>\n",
       "      <th>intraparenchymal</th>\n",
       "      <th>intraventricular</th>\n",
       "      <th>subarachnoid</th>\n",
       "      <th>subdural</th>\n",
       "      <th>any</th>\n",
       "      <th>SeriesI</th>\n",
       "      <th>PID</th>\n",
       "      <th>StudyI</th>\n",
       "      <th>WindowCenter</th>\n",
       "      <th>WindowWidth</th>\n",
       "      <th>ImagePositionZ</th>\n",
       "      <th>ImagePositionX</th>\n",
       "      <th>ImagePositionY</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>28fbab7eb</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>ebfd7e4506</td>\n",
       "      <td>cf1b6b11</td>\n",
       "      <td>93407cadbb</td>\n",
       "      <td>30</td>\n",
       "      <td>80</td>\n",
       "      <td>158.458000</td>\n",
       "      <td>-125.0</td>\n",
       "      <td>-135.598000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>877923b8b</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>6d95084e15</td>\n",
       "      <td>ad8ea58f</td>\n",
       "      <td>a337baa067</td>\n",
       "      <td>30</td>\n",
       "      <td>80</td>\n",
       "      <td>138.729050</td>\n",
       "      <td>-125.0</td>\n",
       "      <td>-101.797981</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>a591477cb</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>8e06b2c9e0</td>\n",
       "      <td>ecfb278b</td>\n",
       "      <td>0cfe838d54</td>\n",
       "      <td>30</td>\n",
       "      <td>80</td>\n",
       "      <td>60.830002</td>\n",
       "      <td>-125.0</td>\n",
       "      <td>-133.300003</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>42217c898</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>e800f419cf</td>\n",
       "      <td>e96e31f4</td>\n",
       "      <td>c497ac5bad</td>\n",
       "      <td>30</td>\n",
       "      <td>80</td>\n",
       "      <td>55.388000</td>\n",
       "      <td>-125.0</td>\n",
       "      <td>-146.081000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>a130c4d2f</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>faeb7454f3</td>\n",
       "      <td>69affa42</td>\n",
       "      <td>854e4fbc01</td>\n",
       "      <td>30</td>\n",
       "      <td>80</td>\n",
       "      <td>33.516888</td>\n",
       "      <td>-125.0</td>\n",
       "      <td>-118.689819</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PatientID  epidural  intraparenchymal  intraventricular  subarachnoid  \\\n",
       "0  28fbab7eb       0.5               0.5               0.5           0.5   \n",
       "1  877923b8b       0.5               0.5               0.5           0.5   \n",
       "2  a591477cb       0.5               0.5               0.5           0.5   \n",
       "3  42217c898       0.5               0.5               0.5           0.5   \n",
       "4  a130c4d2f       0.5               0.5               0.5           0.5   \n",
       "\n",
       "   subdural  any     SeriesI       PID      StudyI WindowCenter WindowWidth  \\\n",
       "0       0.5  0.5  ebfd7e4506  cf1b6b11  93407cadbb           30          80   \n",
       "1       0.5  0.5  6d95084e15  ad8ea58f  a337baa067           30          80   \n",
       "2       0.5  0.5  8e06b2c9e0  ecfb278b  0cfe838d54           30          80   \n",
       "3       0.5  0.5  e800f419cf  e96e31f4  c497ac5bad           30          80   \n",
       "4       0.5  0.5  faeb7454f3  69affa42  854e4fbc01           30          80   \n",
       "\n",
       "   ImagePositionZ  ImagePositionX  ImagePositionY  \n",
       "0      158.458000          -125.0     -135.598000  \n",
       "1      138.729050          -125.0     -101.797981  \n",
       "2       60.830002          -125.0     -133.300003  \n",
       "3       55.388000          -125.0     -146.081000  \n",
       "4       33.516888          -125.0     -118.689819  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_df = pd.read_csv(data_dir+'test.csv')\n",
    "test_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "split_sid = train_df.PID.unique()\n",
    "splits=list(KFold(n_splits=3,shuffle=True, random_state=SEED).split(split_sid))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "pickle_file=open(outputs_dir+\"PID_splits.pkl\",'wb')\n",
    "pickle.dump((split_sid,splits),pickle_file,protocol=4)\n",
    "pickle_file.close()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def my_loss(y_pred,y_true,weights):\n",
    "    if len(y_pred.shape)==len(y_true.shape):\n",
    "        loss = F.binary_cross_entropy_with_logits(y_pred,y_true,weights.expand_as(y_pred))\n",
    "    else:\n",
    "        loss0 = F.binary_cross_entropy_with_logits(y_pred,y_true[...,0],weights.repeat(y_pred.shape[0],1),reduction='none')\n",
    "        loss1 = F.binary_cross_entropy_with_logits(y_pred,y_true[...,1],weights.repeat(y_pred.shape[0],1),reduction='none')\n",
    "        loss = (y_true[...,2]*loss0+(1.0-y_true[...,2])*loss1).mean() \n",
    "    return loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "class parameter_scheduler():\n",
    "    def __init__(self,model,do_first=['classifier'],num_epoch=1):\n",
    "        self.model=model\n",
    "        self.do_first = do_first\n",
    "        self.num_epoch=num_epoch\n",
    "    def __call__(self,epoch):\n",
    "        if epoch>=self.num_epoch:\n",
    "            for n,p in self.model.named_parameters():\n",
    "                p.requires_grad=True\n",
    "        else:\n",
    "            for n,p in self.model.named_parameters():\n",
    "                p.requires_grad= any(nd in n for nd in self.do_first)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_optimizer_parameters(model,klr):\n",
    "    param_optimizer = list(model.named_parameters())\n",
    "    num_blocks=5\n",
    "    no_decay=['bias']\n",
    "    optimizer_grouped_parameters=[\n",
    "        {'params': [p for n, p in param_optimizer if (not any(nd in n for nd in no_decay) and ('classifier' in n))], 'lr':klr*2e-4,'weight_decay': 0.01},\n",
    "        {'params': [p for n, p in param_optimizer if any(nd in n for nd in no_decay)  and ('classifier' in n)], 'lr':klr*2e-4, 'weight_decay': 0.0}\n",
    "        ]\n",
    "    optimizer_grouped_parameters.extend([\n",
    "        {'params': [p for n, p in param_optimizer if (not any(nd in n for nd in no_decay) and ('wso' in n))], 'lr':klr*5e-6,'weight_decay': 0.01},\n",
    "        {'params': [p for n, p in param_optimizer if any(nd in n for nd in no_decay)  and ('wso' in n)], 'lr':klr*5e-6, 'weight_decay': 0.0}\n",
    "        ])\n",
    "    for i in range(num_blocks):\n",
    "        optimizer_grouped_parameters.extend([\n",
    "        {'params': [p for n, p in param_optimizer if (not any(nd in n for nd in no_decay) and ('layer{}'.format(i) in n))], 'lr':klr*(2.0**i)*1e-5,'weight_decay': 0.01},\n",
    "        {'params': [p for n, p in param_optimizer if any(nd in n for nd in no_decay)  and ('layer{}'.format(i) in n)], 'lr':klr*(2.0**i)*1e-5, 'weight_decay': 0.0}\n",
    "        ])\n",
    "    return(optimizer_grouped_parameters)\n",
    "\n",
    "     "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(21812, 15)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "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>PatientID</th>\n",
       "      <th>epidural</th>\n",
       "      <th>intraparenchymal</th>\n",
       "      <th>intraventricular</th>\n",
       "      <th>subarachnoid</th>\n",
       "      <th>subdural</th>\n",
       "      <th>any</th>\n",
       "      <th>PID</th>\n",
       "      <th>StudyI</th>\n",
       "      <th>SeriesI</th>\n",
       "      <th>WindowCenter</th>\n",
       "      <th>WindowWidth</th>\n",
       "      <th>ImagePositionZ</th>\n",
       "      <th>ImagePositionX</th>\n",
       "      <th>ImagePositionY</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.2.276.0.7230010.3.1.4.296485376.1.1521714698...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>CQ500-CT-58</td>\n",
       "      <td>1.2.276.0.7230010.3.1.2.296485376.1.1521714692...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>350.0</td>\n",
       "      <td>2000.0</td>\n",
       "      <td>-125.0</td>\n",
       "      <td>-177.500</td>\n",
       "      <td>100.250</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.2.276.0.7230010.3.1.4.296485376.1.1521714729...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>CQ500-CT-137</td>\n",
       "      <td>1.2.276.0.7230010.3.1.2.296485376.1.1521714726...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>40.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>-113.0</td>\n",
       "      <td>-117.500</td>\n",
       "      <td>-10.250</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.2.276.0.7230010.3.1.4.296485376.1.1521713543...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>CQ500-CT-220</td>\n",
       "      <td>1.2.276.0.7230010.3.1.2.296485376.1.1521713542...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>30.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>-125.0</td>\n",
       "      <td>-123.784</td>\n",
       "      <td>48.797</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.2.276.0.7230010.3.1.4.296485376.1.1521713509...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>CQ500-CT-149</td>\n",
       "      <td>1.2.276.0.7230010.3.1.2.296485376.1.1521713507...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>30.0</td>\n",
       "      <td>80.0</td>\n",
       "      <td>-125.0</td>\n",
       "      <td>-148.027</td>\n",
       "      <td>19.567</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.2.276.0.7230010.3.1.4.296485376.1.1521714286...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>CQ500-CT-348</td>\n",
       "      <td>1.2.276.0.7230010.3.1.2.296485376.1.1521714281...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>30.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>-112.0</td>\n",
       "      <td>-123.142</td>\n",
       "      <td>24.306</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                           PatientID  epidural  \\\n",
       "0  1.2.276.0.7230010.3.1.4.296485376.1.1521714698...         0   \n",
       "1  1.2.276.0.7230010.3.1.4.296485376.1.1521714729...         0   \n",
       "2  1.2.276.0.7230010.3.1.4.296485376.1.1521713543...         0   \n",
       "3  1.2.276.0.7230010.3.1.4.296485376.1.1521713509...         0   \n",
       "4  1.2.276.0.7230010.3.1.4.296485376.1.1521714286...         0   \n",
       "\n",
       "   intraparenchymal  intraventricular  subarachnoid  subdural  any  \\\n",
       "0                 0                 0             0         0    0   \n",
       "1                 0                 0             0         0    0   \n",
       "2                 0                 0             0         0    0   \n",
       "3                 0                 0             0         0    0   \n",
       "4                 0                 0             0         0    0   \n",
       "\n",
       "            PID                                             StudyI  SeriesI  \\\n",
       "0   CQ500-CT-58  1.2.276.0.7230010.3.1.2.296485376.1.1521714692...      NaN   \n",
       "1  CQ500-CT-137  1.2.276.0.7230010.3.1.2.296485376.1.1521714726...      NaN   \n",
       "2  CQ500-CT-220  1.2.276.0.7230010.3.1.2.296485376.1.1521713542...      NaN   \n",
       "3  CQ500-CT-149  1.2.276.0.7230010.3.1.2.296485376.1.1521713507...      NaN   \n",
       "4  CQ500-CT-348  1.2.276.0.7230010.3.1.2.296485376.1.1521714281...      NaN   \n",
       "\n",
       "   WindowCenter  WindowWidth  ImagePositionZ  ImagePositionX  ImagePositionY  \n",
       "0         350.0       2000.0          -125.0        -177.500         100.250  \n",
       "1          40.0        100.0          -113.0        -117.500         -10.250  \n",
       "2          30.0        100.0          -125.0        -123.784          48.797  \n",
       "3          30.0         80.0          -125.0        -148.027          19.567  \n",
       "4          30.0        100.0          -112.0        -123.142          24.306  "
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "783cf80a42dc4e5096d9fab510fa84b9",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=228), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "path = '/media/nvme/data/RSNA/CQ500'\n",
    "cq500_df=pd.read_csv(os.path.join(path,'CQ500_train.csv'))\n",
    "cq500_df.shape\n",
    "cq500_df.head()\n",
    "\n",
    "model_name,version, num_split =  'se_resnext101_32x4d' , 'classifier_splits',0\n",
    "model = MySENet(pretrainedmodels.__dict__['se_resnext101_32x4d'](num_classes=1000, pretrained='imagenet'),\n",
    "                   len(hemorrhage_types),\n",
    "                   num_channels=3,\n",
    "                   dropout=0.2,\n",
    "                   wso=((40,80),(80,200),(40,400)),\n",
    "                   dont_do_grad=[],\n",
    "                   extra_pool=8,\n",
    "                  return_features=True\n",
    "                   )\n",
    "model.load_state_dict(torch.load(models_dir+models_format.format(model_name,version,num_split),map_location=torch.device(device)))\n",
    "_=model.to(device)\n",
    "\n",
    "transform_val=MyTransform(out_size=512)\n",
    "imagedataset_val = ImageDataset(cq500_df,transform=transform_val.random,base_path=path+'/train/',\n",
    "                               window_eq=False,equalize=False,rescale=True)\n",
    "targets_dataset=D.TensorDataset(torch.tensor(cq500_df[hemorrhage_types].values,dtype=torch.float))\n",
    "combined_dataset_val=DatasetCat([imagedataset_val,targets_dataset])\n",
    "pred,features = model_run(model,imagedataset_val,do_apex=True,batch_size=96,num_workers=18)\n",
    "my_loss(pred,torch.tensor(cq500_df[hemorrhage_types].values,dtype=torch.float),torch.tensor([1.,1.,1.,1.,1.,2.]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<torch._C.Generator at 0x7f6c4f13e5f0>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "(449982,)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "(224270,)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,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\" width=\"720\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "19c7eb18a61843fcba226a7fbfe9df39",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=4), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "02d3b0af1af04f65a2141f500c752fef",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=14062), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "27b0b7b8470448339f857f668e312abb",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=7009), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'loss': 0.08708498111359227, 'val_loss': 0.09140608951017284}\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "4360cfe0cd3442149534c0959700a0a5",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=14062), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "275d9201c419497daecffbf9a889bef7",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=7009), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'loss': 0.07940033984338522, 'val_loss': 0.08622274461326827}\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "83492ea6913745bd9c7ec21afe9dec66",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=14062), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f39f109826e54d18aca1e35e7369fa60",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=7009), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'loss': 0.0801681133140102, 'val_loss': 0.08486880704875223}\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "55025eb860264954aca19eb96b6ba69a",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=14062), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "015eabf144cb4b7195892aa8e50518ce",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=7009), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'loss': 0.07770429895796388, 'val_loss': 0.08442260373238528}\n",
      "\n",
      "[0.0844226  0.08486881]\n"
     ]
    }
   ],
   "source": [
    "%matplotlib nbagg\n",
    "\n",
    "num_split=0\n",
    "np.random.seed(SEED+num_split)\n",
    "torch.manual_seed(SEED+num_split)\n",
    "torch.cuda.manual_seed(SEED+num_split)\n",
    "#torch.backends.cudnn.deterministic = True\n",
    "idx_train = train_df[train_df.PID.isin(set(split_sid[splits[num_split][0]]))].index.values\n",
    "idx_validate =  train_df[train_df.PID.isin(set(split_sid[splits[num_split][1]]))].index.values\n",
    "idx_train.shape\n",
    "idx_validate.shape\n",
    "\n",
    "klr=1\n",
    "batch_size=32\n",
    "num_workers=12\n",
    "num_epochs=4\n",
    "model_name,version = 'se_resnext101_32x4d' , 'bn_classifier_splits'\n",
    "model = MySENet(pretrainedmodels.__dict__['se_resnext101_32x4d'](num_classes=1000, pretrained='imagenet'),\n",
    "                   len(hemorrhage_types),\n",
    "                   num_channels=3,\n",
    "                   dropout=0.2,\n",
    "                   wso=((40,80),(80,200),(40,400)),\n",
    "                   dont_do_grad=[],\n",
    "                   extra_pool=8,\n",
    "                   do_bn=True\n",
    "                   )\n",
    "#model.load_state_dict(torch.load(models_dir+models_format.format(model_name,'basic_splits',num_split),map_location=torch.device(device)))\n",
    "_=model.to(device)\n",
    "weights = torch.tensor([1.,1.,1.,1.,1.,2.],device=device)\n",
    "loss_func=my_loss\n",
    "targets_dataset=D.TensorDataset(torch.tensor(train_df[hemorrhage_types].values,dtype=torch.float))\n",
    "transform=MyTransform(mean_change=15,\n",
    "                      std_change=0,\n",
    "                      flip=True,\n",
    "                      zoom=(0.2,0.2),\n",
    "                      rotate=30,\n",
    "                      out_size=512,\n",
    "                      shift=20,\n",
    "                      normal=False)\n",
    "imagedataset = ImageDataset(train_df,transform=transform.random,base_path=train_images_dir,\n",
    "                           window_eq=False,equalize=False,rescale=True)\n",
    "transform_val=MyTransform(out_size=512)\n",
    "imagedataset_val = ImageDataset(train_df,transform=transform_val.random,base_path=train_images_dir,\n",
    "                               window_eq=False,equalize=False,rescale=True)\n",
    "combined_dataset=DatasetCat([imagedataset,targets_dataset])\n",
    "combined_dataset_val=DatasetCat([imagedataset_val,targets_dataset])\n",
    "optimizer_grouped_parameters=get_optimizer_parameters(model,klr)\n",
    "sampling=simple_sampler(train_df[hemorrhage_types].values[idx_train],0.25)\n",
    "sample_ratio=1.0\n",
    "train_dataset=D.Subset(combined_dataset,idx_train)\n",
    "validate_dataset=D.Subset(combined_dataset_val,idx_validate)\n",
    "num_train_optimization_steps = num_epochs*(sample_ratio*len(train_dataset)//batch_size+int(len(train_dataset)%batch_size>0))\n",
    "fig,ax = plt.subplots(figsize=(10,7))\n",
    "gr=loss_graph(fig,ax,num_epochs,int(num_train_optimization_steps/num_epochs)+1,limits=(0.05,0.2))\n",
    "sched=WarmupExpCosineWithWarmupRestartsSchedule( t_total=num_train_optimization_steps, cycles=num_epochs,tau=1)\n",
    "#param_optimizer = model.parameters()\n",
    "#optimizer = torch.optim.Adam(param_optimizer, lr=klr*6e-5)\n",
    "optimizer = BertAdam(optimizer_grouped_parameters,lr=klr*1e-3,schedule=sched)\n",
    "model, optimizer = amp.initialize(model, optimizer, opt_level=\"O1\",verbosity=0)\n",
    "history,best_model= model_train(model,\n",
    "                                optimizer,\n",
    "                                train_dataset,\n",
    "                                batch_size,\n",
    "                                num_epochs,\n",
    "                                loss_func,\n",
    "                                weights=weights,\n",
    "                                do_apex=False,\n",
    "                                model_apexed=True,\n",
    "                                validate_dataset=validate_dataset,\n",
    "                                param_schedualer=None,\n",
    "                                weights_data=None,\n",
    "                                metric=None,\n",
    "                                return_model=True,\n",
    "                                num_workers=num_workers,\n",
    "                                sampler=None,\n",
    "                                pre_process = None,\n",
    "                                graph=gr,\n",
    "                                call_progress=sendmeemail)\n",
    "\n",
    "torch.save(model.state_dict(), models_dir+models_format.format(model_name,version+'_last',num_split))\n",
    "torch.save(best_model.state_dict(), models_dir+models_format.format(model_name,version,num_split))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<torch._C.Generator at 0x7f6c4f13e5f0>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "(449982,)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "(224270,)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,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\" width=\"720\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "19c7eb18a61843fcba226a7fbfe9df39",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=4), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "02d3b0af1af04f65a2141f500c752fef",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=14062), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "27b0b7b8470448339f857f668e312abb",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=7009), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'loss': 0.08708498111359227, 'val_loss': 0.09140608951017284}\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "4360cfe0cd3442149534c0959700a0a5",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=14062), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "275d9201c419497daecffbf9a889bef7",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=7009), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'loss': 0.07940033984338522, 'val_loss': 0.08622274461326827}\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "83492ea6913745bd9c7ec21afe9dec66",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=14062), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f39f109826e54d18aca1e35e7369fa60",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=7009), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'loss': 0.0801681133140102, 'val_loss': 0.08486880704875223}\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "55025eb860264954aca19eb96b6ba69a",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=14062), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "015eabf144cb4b7195892aa8e50518ce",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=7009), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'loss': 0.07770429895796388, 'val_loss': 0.08442260373238528}\n",
      "\n",
      "[0.0844226  0.08486881]\n"
     ]
    }
   ],
   "source": [
    "%matplotlib nbagg\n",
    "\n",
    "num_split=1\n",
    "np.random.seed(SEED+num_split)\n",
    "torch.manual_seed(SEED+num_split)\n",
    "torch.cuda.manual_seed(SEED+num_split)\n",
    "#torch.backends.cudnn.deterministic = True\n",
    "idx_train = train_df[train_df.PID.isin(set(split_sid[splits[num_split][0]]))].index.values\n",
    "idx_validate =  train_df[train_df.PID.isin(set(split_sid[splits[num_split][1]]))].index.values\n",
    "idx_train.shape\n",
    "idx_validate.shape\n",
    "\n",
    "klr=1\n",
    "batch_size=32\n",
    "num_workers=12\n",
    "num_epochs=4\n",
    "model_name,version = 'se_resnext101_32x4d' , 'bn_classifier_splits'\n",
    "model = MySENet(pretrainedmodels.__dict__['se_resnext101_32x4d'](num_classes=1000, pretrained='imagenet'),\n",
    "                   len(hemorrhage_types),\n",
    "                   num_channels=3,\n",
    "                   dropout=0.2,\n",
    "                   wso=((40,80),(80,200),(40,400)),\n",
    "                   dont_do_grad=[],\n",
    "                   extra_pool=8,\n",
    "                   do_bn=True\n",
    "                   )\n",
    "#model.load_state_dict(torch.load(models_dir+models_format.format(model_name,'basic_splits',num_split),map_location=torch.device(device)))\n",
    "_=model.to(device)\n",
    "weights = torch.tensor([1.,1.,1.,1.,1.,2.],device=device)\n",
    "loss_func=my_loss\n",
    "targets_dataset=D.TensorDataset(torch.tensor(train_df[hemorrhage_types].values,dtype=torch.float))\n",
    "transform=MyTransform(mean_change=15,\n",
    "                      std_change=0,\n",
    "                      flip=True,\n",
    "                      zoom=(0.2,0.2),\n",
    "                      rotate=30,\n",
    "                      out_size=512,\n",
    "                      shift=20,\n",
    "                      normal=False)\n",
    "imagedataset = ImageDataset(train_df,transform=transform.random,base_path=train_images_dir,\n",
    "                           window_eq=False,equalize=False,rescale=True)\n",
    "transform_val=MyTransform(out_size=512)\n",
    "imagedataset_val = ImageDataset(train_df,transform=transform_val.random,base_path=train_images_dir,\n",
    "                               window_eq=False,equalize=False,rescale=True)\n",
    "combined_dataset=DatasetCat([imagedataset,targets_dataset])\n",
    "combined_dataset_val=DatasetCat([imagedataset_val,targets_dataset])\n",
    "optimizer_grouped_parameters=get_optimizer_parameters(model,klr)\n",
    "sampling=simple_sampler(train_df[hemorrhage_types].values[idx_train],0.25)\n",
    "sample_ratio=1.0\n",
    "train_dataset=D.Subset(combined_dataset,idx_train)\n",
    "validate_dataset=D.Subset(combined_dataset_val,idx_validate)\n",
    "num_train_optimization_steps = num_epochs*(sample_ratio*len(train_dataset)//batch_size+int(len(train_dataset)%batch_size>0))\n",
    "fig,ax = plt.subplots(figsize=(10,7))\n",
    "gr=loss_graph(fig,ax,num_epochs,int(num_train_optimization_steps/num_epochs)+1,limits=(0.05,0.2))\n",
    "sched=WarmupExpCosineWithWarmupRestartsSchedule( t_total=num_train_optimization_steps, cycles=num_epochs,tau=1)\n",
    "#param_optimizer = model.parameters()\n",
    "#optimizer = torch.optim.Adam(param_optimizer, lr=klr*6e-5)\n",
    "optimizer = BertAdam(optimizer_grouped_parameters,lr=klr*1e-3,schedule=sched)\n",
    "model, optimizer = amp.initialize(model, optimizer, opt_level=\"O1\",verbosity=0)\n",
    "history,best_model= model_train(model,\n",
    "                                optimizer,\n",
    "                                train_dataset,\n",
    "                                batch_size,\n",
    "                                num_epochs,\n",
    "                                loss_func,\n",
    "                                weights=weights,\n",
    "                                do_apex=False,\n",
    "                                model_apexed=True,\n",
    "                                validate_dataset=validate_dataset,\n",
    "                                param_schedualer=None,\n",
    "                                weights_data=None,\n",
    "                                metric=None,\n",
    "                                return_model=True,\n",
    "                                num_workers=num_workers,\n",
    "                                sampler=None,\n",
    "                                pre_process = None,\n",
    "                                graph=gr,\n",
    "                                call_progress=sendmeemail)\n",
    "\n",
    "torch.save(model.state_dict(), models_dir+models_format.format(model_name,version+'_last',num_split))\n",
    "torch.save(best_model.state_dict(), models_dir+models_format.format(model_name,version,num_split))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<torch._C.Generator at 0x7fa5d77ad650>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "(449503,)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "(224749,)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,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\" width=\"720\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "04e150fb09004c30b5c2c22c69200c10",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=5), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "bcec273149084a43b88cf296678af00d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=14047), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "66b4d1fc441143a39cf4479c4cf1e61c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=7024), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'loss': 0.08708496055030071, 'val_loss': 0.08658122033702055}\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "a7a6b6cb22a94b0c91a4f0cf6709086e",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=14047), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6826011c11254889b15f42a71c3d097c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=7024), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'loss': 0.0780205198713553, 'val_loss': 0.08204707779546623}\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "0aa5b0788dae427eb32fafa4dfca15e8",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=14047), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "55a78311db9242b591dbacfdc447c480",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=7024), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'loss': 0.0754115106339116, 'val_loss': 0.08162673559881256}\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "727fadda5bea40ba85dc07655b207076",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=14047), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "86456a2947cd4da49b57fafb9054920b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=7024), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'loss': 0.06450096885030035, 'val_loss': 0.08201706268433359}\n",
      "\n",
      "[0.08162674 0.08201706]\n"
     ]
    }
   ],
   "source": [
    "%matplotlib nbagg\n",
    "\n",
    "num_split=2\n",
    "np.random.seed(SEED+num_split)\n",
    "torch.manual_seed(SEED+num_split)\n",
    "torch.cuda.manual_seed(SEED+num_split)\n",
    "#torch.backends.cudnn.deterministic = True\n",
    "idx_train = train_df[train_df.PID.isin(set(split_sid[splits[num_split][0]]))].index.values\n",
    "idx_validate =  train_df[train_df.PID.isin(set(split_sid[splits[num_split][1]]))].index.values\n",
    "idx_train.shape\n",
    "idx_validate.shape\n",
    "\n",
    "klr=1\n",
    "batch_size=32\n",
    "num_workers=12\n",
    "num_epochs=5\n",
    "model_name,version = 'se_resnext101_32x4d' , 'classifier_splits'\n",
    "model = MySENet(pretrainedmodels.__dict__['se_resnext101_32x4d'](num_classes=1000, pretrained='imagenet'),\n",
    "                   len(hemorrhage_types),\n",
    "                   num_channels=3,\n",
    "                   dropout=0.2,\n",
    "                   wso=((40,80),(80,200),(40,400)),\n",
    "                   dont_do_grad=[],\n",
    "                   extra_pool=8,\n",
    "                   )\n",
    "\n",
    "_=model.to(device)\n",
    "weights = torch.tensor([1.,1.,1.,1.,1.,2.],device=device)\n",
    "loss_func=my_loss\n",
    "targets_dataset=D.TensorDataset(torch.tensor(train_df[hemorrhage_types].values,dtype=torch.float))\n",
    "transform=MyTransform(mean_change=15,\n",
    "                      std_change=0,\n",
    "                      flip=True,\n",
    "                      zoom=(0.2,0.2),\n",
    "                      rotate=30,\n",
    "                      out_size=512,\n",
    "                      shift=10,\n",
    "                      normal=False)\n",
    "imagedataset = ImageDataset(train_df,transform=transform.random,base_path=train_images_dir,\n",
    "                           window_eq=False,equalize=False,rescale=True)\n",
    "transform_val=MyTransform(out_size=512)\n",
    "imagedataset_val = ImageDataset(train_df,transform=transform_val.random,base_path=train_images_dir,\n",
    "                               window_eq=False,equalize=False,rescale=True)\n",
    "combined_dataset=DatasetCat([imagedataset,targets_dataset])\n",
    "combined_dataset_val=DatasetCat([imagedataset_val,targets_dataset])\n",
    "optimizer_grouped_parameters=get_optimizer_parameters(model,klr)\n",
    "sampling=simple_sampler(train_df[hemorrhage_types].values[idx_train],0.25)\n",
    "sample_ratio=1.0\n",
    "train_dataset=D.Subset(combined_dataset,idx_train)\n",
    "validate_dataset=D.Subset(combined_dataset_val,idx_validate)\n",
    "num_train_optimization_steps = num_epochs*(sample_ratio*len(train_dataset)//batch_size+int(len(train_dataset)%batch_size>0))\n",
    "fig,ax = plt.subplots(figsize=(10,7))\n",
    "gr=loss_graph(fig,ax,num_epochs,int(num_train_optimization_steps/num_epochs)+1,limits=(0.05,0.2))\n",
    "sched=WarmupExpCosineWithWarmupRestartsSchedule( t_total=num_train_optimization_steps, cycles=num_epochs,tau=1)\n",
    "#param_optimizer = model.parameters()\n",
    "#optimizer = torch.optim.Adam(param_optimizer, lr=klr*6e-5)\n",
    "optimizer = BertAdam(optimizer_grouped_parameters,lr=klr*1e-3,schedule=sched)\n",
    "model, optimizer = amp.initialize(model, optimizer, opt_level=\"O1\",verbosity=0)\n",
    "history,best_model= model_train(model,\n",
    "                                optimizer,\n",
    "                                train_dataset,\n",
    "                                batch_size,\n",
    "                                num_epochs,\n",
    "                                loss_func,\n",
    "                                weights=weights,\n",
    "                                do_apex=False,\n",
    "                                model_apexed=True,\n",
    "                                validate_dataset=validate_dataset,\n",
    "                                param_schedualer=None,\n",
    "                                weights_data=None,\n",
    "                                metric=None,\n",
    "                                return_model=True,\n",
    "                                num_workers=num_workers,\n",
    "                                sampler=None,\n",
    "                                pre_process = None,\n",
    "                                graph=gr,\n",
    "                                call_progress=sendmeemail)\n",
    "\n",
    "torch.save(model.state_dict(), models_dir+models_format.format(model_name,version,num_split))\n",
    "torch.save(best_model.state_dict(), models_dir+models_format.format(model_name,version+'_best',num_split))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "03bd62c8054845c9b859ca61ec63b873",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=28094), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "tensor(0.0816)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "tensor(0.0816)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model_name,version, num_split =  'se_resnext101_32x4d' , 'classifier_splits',0\n",
    "idx_validate =  train_df[train_df.PID.isin(set(split_sid[splits[num_split][1]]))].index.values\n",
    "model = MySENet(pretrainedmodels.__dict__['se_resnext101_32x4d'](num_classes=1000, pretrained='imagenet'),\n",
    "                   len(hemorrhage_types),\n",
    "                   num_channels=3,\n",
    "                   dropout=0.2,\n",
    "                   wso=((40,80),(80,200),(40,400)),\n",
    "                   dont_do_grad=[],\n",
    "                   extra_pool=8,\n",
    "                   return_features=True\n",
    "                   )\n",
    "model.load_state_dict(torch.load(models_dir+models_format.format(model_name,version,num_split),map_location=torch.device(device)))\n",
    "_=model.to(device)\n",
    "transform=MyTransform(mean_change=15,\n",
    "                      std_change=0,\n",
    "                      flip=True,\n",
    "                      zoom=(0.2,0.2),\n",
    "                      rotate=30,\n",
    "                      out_size=512,\n",
    "                      shift=10,\n",
    "                      normal=False)\n",
    "transform_val=MyTransform(out_size=512)\n",
    "indexes=np.arange(train_df.shape[0]).repeat(4)\n",
    "train_dataset=D.Subset(ImageDataset(train_df,transform=transform.random,base_path=train_images_dir,\n",
    "                          window_eq=False,equalize=False,rescale=True),indexes)\n",
    "pred,features = model_run(model,train_dataset,do_apex=True,batch_size=96,num_workers=14)\n",
    "\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'features_train_tta',num_split),'wb')\n",
    "pickle.dump(features,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'predictions_train_tta',num_split),'wb')\n",
    "pickle.dump(pred,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "\n",
    "\n",
    "my_loss(pred[(idx_validate*4+np.arange(4)[:,None]).transpose(1,0)].mean(1),\n",
    "        torch.tensor(train_df[hemorrhage_types].values[idx_validate],dtype=torch.float),\n",
    "        torch.tensor([1.,1.,1.,1.,1.,2.]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "1bf486be0f9f4f3a8e441d389b2c3a70",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=28094), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "tensor(0.0799)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model_name,version, num_split =  'se_resnext101_32x4d' , 'classifier_splits',1\n",
    "idx_validate =  train_df[train_df.PID.isin(set(split_sid[splits[num_split][1]]))].index.values\n",
    "model = MySENet(pretrainedmodels.__dict__['se_resnext101_32x4d'](num_classes=1000, pretrained='imagenet'),\n",
    "                   len(hemorrhage_types),\n",
    "                   num_channels=3,\n",
    "                   dropout=0.2,\n",
    "                   wso=((40,80),(80,200),(40,400)),\n",
    "                   dont_do_grad=[],\n",
    "                   extra_pool=8,\n",
    "                   return_features=True\n",
    "                   )\n",
    "model.load_state_dict(torch.load(models_dir+models_format.format(model_name,version,num_split),map_location=torch.device(device)))\n",
    "_=model.to(device)\n",
    "transform=MyTransform(mean_change=15,\n",
    "                      std_change=0,\n",
    "                      flip=True,\n",
    "                      zoom=(0.2,0.2),\n",
    "                      rotate=30,\n",
    "                      out_size=512,\n",
    "                      shift=10,\n",
    "                      normal=False)\n",
    "transform_val=MyTransform(out_size=512)\n",
    "indexes=np.arange(train_df.shape[0]).repeat(4)\n",
    "train_dataset=D.Subset(ImageDataset(train_df,transform=transform.random,base_path=train_images_dir,\n",
    "                          window_eq=False,equalize=False,rescale=True),indexes)\n",
    "pred,features = model_run(model,train_dataset,do_apex=True,batch_size=96,num_workers=14)\n",
    "\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'features_train_tta',num_split),'wb')\n",
    "pickle.dump(features,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'predictions_train_tta',num_split),'wb')\n",
    "pickle.dump(pred,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "\n",
    "\n",
    "my_loss(pred[(idx_validate*4+np.arange(4)[:,None]).transpose(1,0)].mean(1),\n",
    "        torch.tensor(train_df[hemorrhage_types].values[idx_validate],dtype=torch.float),\n",
    "        torch.tensor([1.,1.,1.,1.,1.,2.]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "34350dab1add4e0db1ff4bf556941b5f",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=28094), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "tensor(0.0777)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model_name,version, num_split =  'se_resnext101_32x4d' , 'classifier_splits',2\n",
    "idx_validate =  train_df[train_df.PID.isin(set(split_sid[splits[num_split][1]]))].index.values\n",
    "model = MySENet(pretrainedmodels.__dict__['se_resnext101_32x4d'](num_classes=1000, pretrained='imagenet'),\n",
    "                   len(hemorrhage_types),\n",
    "                   num_channels=3,\n",
    "                   dropout=0.2,\n",
    "                   wso=((40,80),(80,200),(40,400)),\n",
    "                   dont_do_grad=[],\n",
    "                   extra_pool=8,\n",
    "                   return_features=True\n",
    "                   )\n",
    "model.load_state_dict(torch.load(models_dir+models_format.format(model_name,version,num_split),map_location=torch.device(device)))\n",
    "_=model.to(device)\n",
    "transform=MyTransform(mean_change=15,\n",
    "                      std_change=0,\n",
    "                      flip=True,\n",
    "                      zoom=(0.2,0.2),\n",
    "                      rotate=30,\n",
    "                      out_size=512,\n",
    "                      shift=10,\n",
    "                      normal=False)\n",
    "transform_val=MyTransform(out_size=512)\n",
    "indexes=np.arange(train_df.shape[0]).repeat(4)\n",
    "train_dataset=D.Subset(ImageDataset(train_df,transform=transform.random,base_path=train_images_dir,\n",
    "                          window_eq=False,equalize=False,rescale=True),indexes)\n",
    "pred,features = model_run(model,train_dataset,do_apex=True,batch_size=96,num_workers=14)\n",
    "\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'features_train_tta',num_split),'wb')\n",
    "pickle.dump(features,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'predictions_train_tta',num_split),'wb')\n",
    "pickle.dump(pred,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "\n",
    "\n",
    "my_loss(pred[(idx_validate*4+np.arange(4)[:,None]).transpose(1,0)].mean(1),\n",
    "        torch.tensor(train_df[hemorrhage_types].values[idx_validate],dtype=torch.float),\n",
    "        torch.tensor([1.,1.,1.,1.,1.,2.]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=6546), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "model_name,version, num_split =  'se_resnext101_32x4d' , 'classifier_splits',0\n",
    "model = MySENet(pretrainedmodels.__dict__['se_resnext101_32x4d'](num_classes=1000, pretrained='imagenet'),\n",
    "                   len(hemorrhage_types),\n",
    "                   num_channels=3,\n",
    "                   dropout=0.2,\n",
    "                   wso=((40,80),(80,200),(40,400)),\n",
    "                   dont_do_grad=[],\n",
    "                   extra_pool=8,\n",
    "                  return_features=True\n",
    "                   )\n",
    "model.load_state_dict(torch.load(models_dir+models_format.format(model_name,version,num_split),map_location=torch.device(device)))\n",
    "_=model.to(device)\n",
    "transform=MyTransform(mean_change=15,\n",
    "                      std_change=0,\n",
    "                      flip=True,\n",
    "                      zoom=(0.2,0.2),\n",
    "                      rotate=30,\n",
    "                      out_size=512,\n",
    "                      shift=10,\n",
    "                      normal=False)\n",
    "transform_val=MyTransform(out_size=512)\n",
    "indexes=np.arange(test_df.shape[0]).repeat(8)\n",
    "imagedataset_test=D.Subset(ImageDataset(test_df,transform=transform.random,base_path=test_images_dir,\n",
    "                              window_eq=False,equalize=False,rescale=True),indexes)\n",
    "pred,features = model_run(model,imagedataset_test,do_apex=True,batch_size=96,num_workers=18)\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'features_test_tta',num_split),'wb')\n",
    "pickle.dump(features,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'predictions_test_tta',num_split),'wb')\n",
    "pickle.dump(pred,pickle_file,protocol=4)\n",
    "pickle_file.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6817df4856844a6aa3a95c2dbd3df40a",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=6546), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "model_name,version, num_split =  'se_resnext101_32x4d' , 'classifier_splits',1\n",
    "model = MySENet(pretrainedmodels.__dict__['se_resnext101_32x4d'](num_classes=1000, pretrained='imagenet'),\n",
    "                   len(hemorrhage_types),\n",
    "                   num_channels=3,\n",
    "                   dropout=0.2,\n",
    "                   wso=((40,80),(80,200),(40,400)),\n",
    "                   dont_do_grad=[],\n",
    "                   extra_pool=8,\n",
    "                  return_features=True\n",
    "                   )\n",
    "model.load_state_dict(torch.load(models_dir+models_format.format(model_name,version,num_split),map_location=torch.device(device)))\n",
    "_=model.to(device)\n",
    "transform=MyTransform(mean_change=15,\n",
    "                      std_change=0,\n",
    "                      flip=True,\n",
    "                      zoom=(0.2,0.2),\n",
    "                      rotate=30,\n",
    "                      out_size=512,\n",
    "                      shift=10,\n",
    "                      normal=False)\n",
    "transform_val=MyTransform(out_size=512)\n",
    "indexes=np.arange(test_df.shape[0]).repeat(8)\n",
    "imagedataset_test=D.Subset(ImageDataset(test_df,transform=transform.random,base_path=test_images_dir,\n",
    "                              window_eq=False,equalize=False,rescale=True),indexes)\n",
    "pred,features = model_run(model,imagedataset_test,do_apex=True,batch_size=96,num_workers=18)\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'features_test_tta',num_split),'wb')\n",
    "pickle.dump(features,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'predictions_test_tta',num_split),'wb')\n",
    "pickle.dump(pred,pickle_file,protocol=4)\n",
    "pickle_file.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "0ee67942738344dfb319e09a4046b945",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=6546), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "model_name,version, num_split =  'se_resnext101_32x4d' , 'classifier_splits',2\n",
    "model = MySENet(pretrainedmodels.__dict__['se_resnext101_32x4d'](num_classes=1000, pretrained='imagenet'),\n",
    "                   len(hemorrhage_types),\n",
    "                   num_channels=3,\n",
    "                   dropout=0.2,\n",
    "                   wso=((40,80),(80,200),(40,400)),\n",
    "                   dont_do_grad=[],\n",
    "                   extra_pool=8,\n",
    "                  return_features=True\n",
    "                   )\n",
    "model.load_state_dict(torch.load(models_dir+models_format.format(model_name,version,num_split),map_location=torch.device(device)))\n",
    "_=model.to(device)\n",
    "transform=MyTransform(mean_change=15,\n",
    "                      std_change=0,\n",
    "                      flip=True,\n",
    "                      zoom=(0.2,0.2),\n",
    "                      rotate=30,\n",
    "                      out_size=512,\n",
    "                      shift=10,\n",
    "                      normal=False)\n",
    "transform_val=MyTransform(out_size=512)\n",
    "indexes=np.arange(test_df.shape[0]).repeat(8)\n",
    "imagedataset_test=D.Subset(ImageDataset(test_df,transform=transform.random,base_path=test_images_dir,\n",
    "                              window_eq=False,equalize=False,rescale=True),indexes)\n",
    "pred,features = model_run(model,imagedataset_test,do_apex=True,batch_size=96,num_workers=18)\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'features_test_tta',num_split),'wb')\n",
    "pickle.dump(features,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'predictions_test_tta',num_split),'wb')\n",
    "pickle.dump(pred,pickle_file,protocol=4)\n",
    "pickle_file.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=28094), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "tensor(0.0833)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model_name,version, num_split =  'Densenet161_3' , 'classifier_splits',0\n",
    "idx_validate =  train_df[train_df.PID.isin(set(split_sid[splits[num_split][1]]))].index.values\n",
    "model = MyDenseNet(models.densenet161(pretrained=True),\n",
    "                   len(hemorrhage_types),\n",
    "                   num_channels=3,\n",
    "                   drop_out=0.2,\n",
    "                   wso=((40,80),(80,200),(600,2800)),\n",
    "                   strategy='none',\n",
    "                   dont_do_grad=[],\n",
    "                   pool_type='max',\n",
    "                   extra_pool=4,\n",
    "                   return_features=True\n",
    "                   )\n",
    "model.load_state_dict(torch.load(models_dir+models_format.format(model_name,version,num_split),map_location=torch.device(device)))\n",
    "_=model.to(device)\n",
    "transform=MyTransform(flip=True,zoom=0.05,rotate=15,out_size=512,shift=40)\n",
    "transform_val=MyTransform(out_size=512)\n",
    "indexes=np.arange(train_df.shape[0]).repeat(4)\n",
    "train_dataset=D.Subset(ImageDataset(train_df,transform=transform.random,base_path=train_images_dir,\n",
    "                          window_eq=False,equalize=False,rescale=True),indexes)\n",
    "pred,features = model_run(model,train_dataset,do_apex=True,batch_size=96,num_workers=14)\n",
    "\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'features_train_tta2',num_split),'wb')\n",
    "pickle.dump(features,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'predictions_train_tta2',num_split),'wb')\n",
    "pickle.dump(pred,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "\n",
    "\n",
    "my_loss(pred[(idx_validate*4+np.arange(4)[:,None]).transpose(1,0)].mean(1),\n",
    "        torch.tensor(train_df[hemorrhage_types].values[idx_validate],dtype=torch.float),\n",
    "        torch.tensor([1.,1.,1.,1.,1.,2.]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=28094), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "tensor(0.0808)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model_name,version, num_split =  'Densenet161_3' , 'classifier_splits',1\n",
    "idx_validate =  train_df[train_df.PID.isin(set(split_sid[splits[num_split][1]]))].index.values\n",
    "model = MyDenseNet(models.densenet161(pretrained=True),\n",
    "                   len(hemorrhage_types),\n",
    "                   num_channels=3,\n",
    "                   drop_out=0.2,\n",
    "                   wso=((40,80),(80,200),(600,2800)),\n",
    "                   strategy='none',\n",
    "                   dont_do_grad=[],\n",
    "                   pool_type='max',\n",
    "                   extra_pool=4,\n",
    "                   return_features=True\n",
    "                   )\n",
    "model.load_state_dict(torch.load(models_dir+models_format.format(model_name,version,num_split),map_location=torch.device(device)))\n",
    "_=model.to(device)\n",
    "transform=MyTransform(flip=True,zoom=0.05,rotate=15,out_size=512,shift=40)\n",
    "transform_val=MyTransform(out_size=512)\n",
    "indexes=np.arange(train_df.shape[0]).repeat(4)\n",
    "train_dataset=D.Subset(ImageDataset(train_df,transform=transform.random,base_path=train_images_dir,\n",
    "                          window_eq=False,equalize=False,rescale=True),indexes)\n",
    "pred,features = model_run(model,train_dataset,do_apex=True,batch_size=96,num_workers=14)\n",
    "\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'features_train_tta2',num_split),'wb')\n",
    "pickle.dump(features,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'predictions_train_tta2',num_split),'wb')\n",
    "pickle.dump(pred,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "\n",
    "\n",
    "my_loss(pred[(idx_validate*4+np.arange(4)[:,None]).transpose(1,0)].mean(1),\n",
    "        torch.tensor(train_df[hemorrhage_types].values[idx_validate],dtype=torch.float),\n",
    "        torch.tensor([1.,1.,1.,1.,1.,2.]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "4b341615bf694b3bacb407d4405c89ed",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=28094), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "tensor(0.0786)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model_name,version, num_split =  'Densenet161_3' , 'classifier_splits',2\n",
    "idx_validate =  train_df[train_df.PID.isin(set(split_sid[splits[num_split][1]]))].index.values\n",
    "model = MyDenseNet(models.densenet161(pretrained=True),\n",
    "                   len(hemorrhage_types),\n",
    "                   num_channels=3,\n",
    "                   drop_out=0.2,\n",
    "                   wso=((40,80),(80,200),(600,2800)),\n",
    "                   strategy='none',\n",
    "                   dont_do_grad=[],\n",
    "                   pool_type='max',\n",
    "                   extra_pool=4,\n",
    "                   return_features=True\n",
    "                   )\n",
    "model.load_state_dict(torch.load(models_dir+models_format.format(model_name,version,num_split),map_location=torch.device(device)))\n",
    "_=model.to(device)\n",
    "transform=MyTransform(flip=True,zoom=0.05,rotate=15,out_size=512,shift=40)\n",
    "transform_val=MyTransform(out_size=512)\n",
    "indexes=np.arange(train_df.shape[0]).repeat(4)\n",
    "train_dataset=D.Subset(ImageDataset(train_df,transform=transform.random,base_path=train_images_dir,\n",
    "                          window_eq=False,equalize=False,rescale=True),indexes)\n",
    "pred,features = model_run(model,train_dataset,do_apex=True,batch_size=96,num_workers=14)\n",
    "\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'features_train_tta2',num_split),'wb')\n",
    "pickle.dump(features,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'predictions_train_tta2',num_split),'wb')\n",
    "pickle.dump(pred,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "\n",
    "\n",
    "my_loss(pred[(idx_validate*4+np.arange(4)[:,None]).transpose(1,0)].mean(1),\n",
    "        torch.tensor(train_df[hemorrhage_types].values[idx_validate],dtype=torch.float),\n",
    "        torch.tensor([1.,1.,1.,1.,1.,2.]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "848a0d385e574e7aa7036a2ccd430f2f",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=6546), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "model_name,version, num_split =  'Densenet161_3' , 'classifier_splits',0\n",
    "model = MyDenseNet(models.densenet161(pretrained=True),\n",
    "                   len(hemorrhage_types),\n",
    "                   num_channels=3,\n",
    "                   drop_out=0.2,\n",
    "                   wso=((40,80),(80,200),(600,2800)),\n",
    "                   strategy='none',\n",
    "                   dont_do_grad=[],\n",
    "                   pool_type='max',\n",
    "                   extra_pool=4,\n",
    "                   return_features=True\n",
    "                   )\n",
    "model.load_state_dict(torch.load(models_dir+models_format.format(model_name,version,num_split),map_location=torch.device(device)))\n",
    "_=model.to(device)\n",
    "transform=MyTransform(flip=True,zoom=0.05,rotate=15,out_size=512,shift=40)\n",
    "transform_val=MyTransform(out_size=512)\n",
    "indexes=np.arange(test_df.shape[0]).repeat(8)\n",
    "imagedataset_test=D.Subset(ImageDataset(test_df,transform=transform.random,base_path=test_images_dir,\n",
    "                              window_eq=False,equalize=False,rescale=True),indexes)\n",
    "pred,features = model_run(model,imagedataset_test,do_apex=True,batch_size=96,num_workers=18)\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'features_test2',num_split),'wb')\n",
    "pickle.dump(features,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'predictions_test2',num_split),'wb')\n",
    "pickle.dump(pred,pickle_file,protocol=4)\n",
    "pickle_file.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "fc74dd7f7b9848efa75cb56db0e39aa1",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=6546), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "model_name,version, num_split =  'Densenet161_3' , 'classifier_splits',1\n",
    "model = MyDenseNet(models.densenet161(pretrained=True),\n",
    "                   len(hemorrhage_types),\n",
    "                   num_channels=3,\n",
    "                   drop_out=0.2,\n",
    "                   wso=((40,80),(80,200),(600,2800)),\n",
    "                   strategy='none',\n",
    "                   dont_do_grad=[],\n",
    "                   pool_type='max',\n",
    "                   extra_pool=4,\n",
    "                   return_features=True\n",
    "                   )\n",
    "model.load_state_dict(torch.load(models_dir+models_format.format(model_name,version,num_split),map_location=torch.device(device)))\n",
    "_=model.to(device)\n",
    "transform=MyTransform(flip=True,zoom=0.05,rotate=15,out_size=512,shift=40)\n",
    "transform_val=MyTransform(out_size=512)\n",
    "indexes=np.arange(test_df.shape[0]).repeat(8)\n",
    "imagedataset_test=D.Subset(ImageDataset(test_df,transform=transform.random,base_path=test_images_dir,\n",
    "                              window_eq=False,equalize=False,rescale=True),indexes)\n",
    "pred,features = model_run(model,imagedataset_test,do_apex=True,batch_size=96,num_workers=18)\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'features_test2',num_split),'wb')\n",
    "pickle.dump(features,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'predictions_test2',num_split),'wb')\n",
    "pickle.dump(pred,pickle_file,protocol=4)\n",
    "pickle_file.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "5cb96c3166c4455ca17e21cefbbd9c7b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=6546), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "model_name,version, num_split =  'Densenet161_3' , 'classifier_splits',2\n",
    "model = MyDenseNet(models.densenet161(pretrained=True),\n",
    "                   len(hemorrhage_types),\n",
    "                   num_channels=3,\n",
    "                   drop_out=0.2,\n",
    "                   wso=((40,80),(80,200),(600,2800)),\n",
    "                   strategy='none',\n",
    "                   dont_do_grad=[],\n",
    "                   pool_type='max',\n",
    "                   extra_pool=4,\n",
    "                   return_features=True\n",
    "                   )\n",
    "model.load_state_dict(torch.load(models_dir+models_format.format(model_name,version,num_split),map_location=torch.device(device)))\n",
    "_=model.to(device)\n",
    "transform=MyTransform(flip=True,zoom=0.05,rotate=15,out_size=512,shift=40)\n",
    "transform_val=MyTransform(out_size=512)\n",
    "indexes=np.arange(test_df.shape[0]).repeat(8)\n",
    "imagedataset_test=D.Subset(ImageDataset(test_df,transform=transform.random,base_path=test_images_dir,\n",
    "                              window_eq=False,equalize=False,rescale=True),indexes)\n",
    "pred,features = model_run(model,imagedataset_test,do_apex=True,batch_size=96,num_workers=18)\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'features_test2',num_split),'wb')\n",
    "pickle.dump(features,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'predictions_test2',num_split),'wb')\n",
    "pickle.dump(pred,pickle_file,protocol=4)\n",
    "pickle_file.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ec96873d08684d1ca62744d0121b1f5d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=6546), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "model_name,version, num_split =  'Densenet169_3' , 'classifier_splits',1\n",
    "model = MyDenseNet(models.densenet169(pretrained=True),\n",
    "                   len(hemorrhage_types),\n",
    "                   num_channels=3,\n",
    "                   drop_out=0.2,\n",
    "                   wso=((40,80),(80,200),(600,2800)),\n",
    "                   strategy='none',\n",
    "                   dont_do_grad=[],\n",
    "                   pool_type='max',\n",
    "                   extra_pool=8,\n",
    "                   return_features=True\n",
    "                   )\n",
    "model.load_state_dict(torch.load(models_dir+models_format.format(model_name,version,num_split),map_location=torch.device(device)))\n",
    "_=model.to(device)\n",
    "transform=MyTransform(flip=True,zoom=0.05,rotate=15,out_size=512,shift=40)\n",
    "transform_val=MyTransform(out_size=512)\n",
    "indexes=np.arange(test_df.shape[0]).repeat(8)\n",
    "imagedataset_test=D.Subset(ImageDataset(test_df,transform=transform.random,base_path=test_images_dir,\n",
    "                              window_eq=False,equalize=False,rescale=True),indexes)\n",
    "pred,features = model_run(model,imagedataset_test,do_apex=True,batch_size=96,num_workers=18)\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'features_test',num_split),'wb')\n",
    "pickle.dump(features,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'predictions_test',num_split),'wb')\n",
    "pickle.dump(pred,pickle_file,protocol=4)\n",
    "pickle_file.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=6546), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "model_name,version, num_split =  'Densenet169_3' , 'classifier_splits',2\n",
    "model = MyDenseNet(models.densenet169(pretrained=True),\n",
    "                   len(hemorrhage_types),\n",
    "                   num_channels=3,\n",
    "                   drop_out=0.2,\n",
    "                   wso=((40,80),(80,200),(600,2800)),\n",
    "                   strategy='none',\n",
    "                   dont_do_grad=[],\n",
    "                   pool_type='max',\n",
    "                   extra_pool=8,\n",
    "                   return_features=True\n",
    "                   )\n",
    "model.load_state_dict(torch.load(models_dir+models_format.format(model_name,version,num_split),map_location=torch.device(device)))\n",
    "_=model.to(device)\n",
    "transform=MyTransform(flip=True,zoom=0.05,rotate=15,out_size=512,shift=40)\n",
    "transform_val=MyTransform(out_size=512)\n",
    "indexes=np.arange(test_df.shape[0]).repeat(8)\n",
    "imagedataset_test=D.Subset(ImageDataset(test_df,transform=transform.random,base_path=test_images_dir,\n",
    "                              window_eq=False,equalize=False,rescale=True),indexes)\n",
    "pred,features = model_run(model,imagedataset_test,do_apex=True,batch_size=96,num_workers=18)\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'features_test',num_split),'wb')\n",
    "pickle.dump(features,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'predictions_test',num_split),'wb')\n",
    "pickle.dump(pred,pickle_file,protocol=4)\n",
    "pickle_file.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "4e40fc1d740c44ea81610ce1a8765f06",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=28094), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "tensor(0.0833)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model_name,version, num_split =  'Densenet161_3' , 'classifier_splits',0\n",
    "idx_validate =  train_df[train_df.PID.isin(set(split_sid[splits[num_split][1]]))].index.values\n",
    "model = MyDenseNet(models.densenet161(pretrained=True),\n",
    "                   len(hemorrhage_types),\n",
    "                   num_channels=3,\n",
    "                   drop_out=0.2,\n",
    "                   wso=((40,80),(80,200),(600,2800)),\n",
    "                   strategy='none',\n",
    "                   dont_do_grad=[],\n",
    "                   pool_type='max',\n",
    "                   extra_pool=4,\n",
    "                   return_features=True\n",
    "                   )\n",
    "model.load_state_dict(torch.load(models_dir+models_format.format(model_name,version,num_split),map_location=torch.device(device)))\n",
    "_=model.to(device)\n",
    "transform=MyTransform(flip=True,zoom=0.05,rotate=15,out_size=512,shift=40)\n",
    "transform_val=MyTransform(out_size=512)\n",
    "indexes=np.arange(train_df.shape[0]).repeat(4)\n",
    "train_dataset=D.Subset(ImageDataset(train_df,transform=transform.random,base_path=train_images_dir,\n",
    "                          window_eq=False,equalize=False,rescale=True),indexes)\n",
    "pred,features = model_run(model,train_dataset,do_apex=True,batch_size=96,num_workers=14)\n",
    "\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'features_train_tta',num_split),'wb')\n",
    "pickle.dump(features,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'predictions_train_tta',num_split),'wb')\n",
    "pickle.dump(pred,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "\n",
    "\n",
    "my_loss(pred[(idx_validate*4+np.arange(4)[:,None]).transpose(1,0)].mean(1),\n",
    "        torch.tensor(train_df[hemorrhage_types].values[idx_validate],dtype=torch.float),\n",
    "        torch.tensor([1.,1.,1.,1.,1.,2.]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "8d17515b4d4a472f8edcba7c8585d862",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=28094), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "tensor(0.0808)"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model_name,version, num_split =  'Densenet161_3' , 'classifier_splits',1\n",
    "idx_validate =  train_df[train_df.PID.isin(set(split_sid[splits[num_split][1]]))].index.values\n",
    "model = MyDenseNet(models.densenet161(pretrained=True),\n",
    "                   len(hemorrhage_types),\n",
    "                   num_channels=3,\n",
    "                   drop_out=0.2,\n",
    "                   wso=((40,80),(80,200),(600,2800)),\n",
    "                   strategy='none',\n",
    "                   dont_do_grad=[],\n",
    "                   pool_type='max',\n",
    "                   extra_pool=4,\n",
    "                   return_features=True\n",
    "                   )\n",
    "model.load_state_dict(torch.load(models_dir+models_format.format(model_name,version,num_split),map_location=torch.device(device)))\n",
    "_=model.to(device)\n",
    "transform=MyTransform(flip=True,zoom=0.05,rotate=15,out_size=512,shift=40)\n",
    "transform_val=MyTransform(out_size=512)\n",
    "indexes=np.arange(train_df.shape[0]).repeat(4)\n",
    "train_dataset=D.Subset(ImageDataset(train_df,transform=transform.random,base_path=train_images_dir,\n",
    "                          window_eq=False,equalize=False,rescale=True),indexes)\n",
    "pred,features = model_run(model,train_dataset,do_apex=True,batch_size=96,num_workers=14)\n",
    "\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'features_train_tta',num_split),'wb')\n",
    "pickle.dump(features,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'predictions_train_tta',num_split),'wb')\n",
    "pickle.dump(pred,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "\n",
    "\n",
    "my_loss(pred[(idx_validate*4+np.arange(4)[:,None]).transpose(1,0)].mean(1),\n",
    "        torch.tensor(train_df[hemorrhage_types].values[idx_validate],dtype=torch.float),\n",
    "        torch.tensor([1.,1.,1.,1.,1.,2.]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "4ecbaad7deb343979958b7b245aa9fdb",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=28094), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "tensor(0.0786)"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model_name,version, num_split =  'Densenet161_3' , 'classifier_splits',2\n",
    "idx_validate =  train_df[train_df.PID.isin(set(split_sid[splits[num_split][1]]))].index.values\n",
    "model = MyDenseNet(models.densenet161(pretrained=True),\n",
    "                   len(hemorrhage_types),\n",
    "                   num_channels=3,\n",
    "                   drop_out=0.2,\n",
    "                   wso=((40,80),(80,200),(600,2800)),\n",
    "                   strategy='none',\n",
    "                   dont_do_grad=[],\n",
    "                   pool_type='max',\n",
    "                   extra_pool=4,\n",
    "                   return_features=True\n",
    "                   )\n",
    "model.load_state_dict(torch.load(models_dir+models_format.format(model_name,version,num_split),map_location=torch.device(device)))\n",
    "_=model.to(device)\n",
    "transform=MyTransform(flip=True,zoom=0.05,rotate=15,out_size=512,shift=40)\n",
    "transform_val=MyTransform(out_size=512)\n",
    "indexes=np.arange(train_df.shape[0]).repeat(4)\n",
    "train_dataset=D.Subset(ImageDataset(train_df,transform=transform.random,base_path=train_images_dir,\n",
    "                          window_eq=False,equalize=False,rescale=True),indexes)\n",
    "pred,features = model_run(model,train_dataset,do_apex=True,batch_size=96,num_workers=14)\n",
    "\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'features_train_tta',num_split),'wb')\n",
    "pickle.dump(features,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'predictions_train_tta',num_split),'wb')\n",
    "pickle.dump(pred,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "\n",
    "\n",
    "my_loss(pred[(idx_validate*4+np.arange(4)[:,None]).transpose(1,0)].mean(1),\n",
    "        torch.tensor(train_df[hemorrhage_types].values[idx_validate],dtype=torch.float),\n",
    "        torch.tensor([1.,1.,1.,1.,1.,2.]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c34dd7af5972445985ccd1c1dddf599d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=6546), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "model_name,version, num_split =  'Densenet161_3' , 'classifier_splits',0\n",
    "model = MyDenseNet(models.densenet161(pretrained=True),\n",
    "                   len(hemorrhage_types),\n",
    "                   num_channels=3,\n",
    "                   drop_out=0.2,\n",
    "                   wso=((40,80),(80,200),(600,2800)),\n",
    "                   strategy='none',\n",
    "                   dont_do_grad=[],\n",
    "                   pool_type='max',\n",
    "                   extra_pool=4,\n",
    "                   return_features=True\n",
    "                   )\n",
    "model.load_state_dict(torch.load(models_dir+models_format.format(model_name,version,num_split),map_location=torch.device(device)))\n",
    "_=model.to(device)\n",
    "transform=MyTransform(flip=True,zoom=0.05,rotate=15,out_size=512,shift=40)\n",
    "transform_val=MyTransform(out_size=512)\n",
    "indexes=np.arange(test_df.shape[0]).repeat(8)\n",
    "imagedataset_test=D.Subset(ImageDataset(test_df,transform=transform.random,base_path=test_images_dir,\n",
    "                              window_eq=False,equalize=False,rescale=True),indexes)\n",
    "pred,features = model_run(model,imagedataset_test,do_apex=True,batch_size=96,num_workers=18)\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'features_test',num_split),'wb')\n",
    "pickle.dump(features,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'predictions_test',num_split),'wb')\n",
    "pickle.dump(pred,pickle_file,protocol=4)\n",
    "pickle_file.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "3912162368d64ab084f6569d1351b72c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=6546), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "model_name,version, num_split =  'Densenet161_3' , 'classifier_splits',1\n",
    "model = MyDenseNet(models.densenet161(pretrained=True),\n",
    "                   len(hemorrhage_types),\n",
    "                   num_channels=3,\n",
    "                   drop_out=0.2,\n",
    "                   wso=((40,80),(80,200),(600,2800)),\n",
    "                   strategy='none',\n",
    "                   dont_do_grad=[],\n",
    "                   pool_type='max',\n",
    "                   extra_pool=4,\n",
    "                   return_features=True\n",
    "                   )\n",
    "model.load_state_dict(torch.load(models_dir+models_format.format(model_name,version,num_split),map_location=torch.device(device)))\n",
    "_=model.to(device)\n",
    "transform=MyTransform(flip=True,zoom=0.05,rotate=15,out_size=512,shift=40)\n",
    "transform_val=MyTransform(out_size=512)\n",
    "indexes=np.arange(test_df.shape[0]).repeat(8)\n",
    "imagedataset_test=D.Subset(ImageDataset(test_df,transform=transform.random,base_path=test_images_dir,\n",
    "                              window_eq=False,equalize=False,rescale=True),indexes)\n",
    "pred,features = model_run(model,imagedataset_test,do_apex=True,batch_size=96,num_workers=18)\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'features_test',num_split),'wb')\n",
    "pickle.dump(features,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'predictions_test',num_split),'wb')\n",
    "pickle.dump(pred,pickle_file,protocol=4)\n",
    "pickle_file.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "81d705998ac24533acf8509b6514e977",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=6546), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "model_name,version, num_split =  'Densenet161_3' , 'classifier_splits',2\n",
    "model = MyDenseNet(models.densenet161(pretrained=True),\n",
    "                   len(hemorrhage_types),\n",
    "                   num_channels=3,\n",
    "                   drop_out=0.2,\n",
    "                   wso=((40,80),(80,200),(600,2800)),\n",
    "                   strategy='none',\n",
    "                   dont_do_grad=[],\n",
    "                   pool_type='max',\n",
    "                   extra_pool=4,\n",
    "                   return_features=True\n",
    "                   )\n",
    "model.load_state_dict(torch.load(models_dir+models_format.format(model_name,version,num_split),map_location=torch.device(device)))\n",
    "_=model.to(device)\n",
    "transform=MyTransform(flip=True,zoom=0.05,rotate=15,out_size=512,shift=40)\n",
    "transform_val=MyTransform(out_size=512)\n",
    "indexes=np.arange(test_df.shape[0]).repeat(8)\n",
    "imagedataset_test=D.Subset(ImageDataset(test_df,transform=transform.random,base_path=test_images_dir,\n",
    "                              window_eq=False,equalize=False,rescale=True),indexes)\n",
    "pred,features = model_run(model,imagedataset_test,do_apex=True,batch_size=96,num_workers=18)\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'features_test',num_split),'wb')\n",
    "pickle.dump(features,pickle_file,protocol=4)\n",
    "pickle_file.close()\n",
    "pickle_file=open(outputs_dir+outputs_format.format(model_name,version,'predictions_test',num_split),'wb')\n",
    "pickle.dump(pred,pickle_file,protocol=4)\n",
    "pickle_file.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "78545.0"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "torch.Size([78545, 6])"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pred.shape[0]/8\n",
    "pred[(np.arange(pred.shape[0]).reshape(pred.shape[0]//8,8))].mean(1).shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([628360])"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pred[(np.arange(pred.shape[0]).reshape()).transpose(1,0)].mean(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "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>ID</th>\n",
       "      <th>Label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>ID_000012eaf_any</td>\n",
       "      <td>0.004856</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>ID_000012eaf_epidural</td>\n",
       "      <td>0.000064</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ID_000012eaf_intraparenchymal</td>\n",
       "      <td>0.000782</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>ID_000012eaf_intraventricular</td>\n",
       "      <td>0.000217</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>ID_000012eaf_subarachnoid</td>\n",
       "      <td>0.001258</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>ID_000012eaf_subdural</td>\n",
       "      <td>0.002873</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>ID_0000ca2f6_any</td>\n",
       "      <td>0.001444</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>ID_0000ca2f6_epidural</td>\n",
       "      <td>0.000016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>ID_0000ca2f6_intraparenchymal</td>\n",
       "      <td>0.000420</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>ID_0000ca2f6_intraventricular</td>\n",
       "      <td>0.000067</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>ID_0000ca2f6_subarachnoid</td>\n",
       "      <td>0.000409</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>ID_0000ca2f6_subdural</td>\n",
       "      <td>0.000577</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                               ID     Label\n",
       "0                ID_000012eaf_any  0.004856\n",
       "1           ID_000012eaf_epidural  0.000064\n",
       "2   ID_000012eaf_intraparenchymal  0.000782\n",
       "3   ID_000012eaf_intraventricular  0.000217\n",
       "4       ID_000012eaf_subarachnoid  0.001258\n",
       "5           ID_000012eaf_subdural  0.002873\n",
       "6                ID_0000ca2f6_any  0.001444\n",
       "7           ID_0000ca2f6_epidural  0.000016\n",
       "8   ID_0000ca2f6_intraparenchymal  0.000420\n",
       "9   ID_0000ca2f6_intraventricular  0.000067\n",
       "10      ID_0000ca2f6_subarachnoid  0.000409\n",
       "11          ID_0000ca2f6_subdural  0.000577"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "(471270, 2)"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "submission_df=get_submission(test_df,pred[(np.arange(pred.shape[0]).reshape(pred.shape[0]//8,8))].mean(1))\n",
    "submission_df.head(12)\n",
    "submission_df.shape\n",
    "sub_num=24\n",
    "submission_df.to_csv('/media/hd/notebooks/data/RSNA/submissions/submission{}.csv'.format(sub_num),\n",
    "                                                                  index=False, columns=['ID','Label'])\n"
   ]
  },
  {
   "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
}