Switch to side-by-side view

--- a
+++ b/notebooks/PytorchNoteBook.ipynb
@@ -0,0 +1,1186 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from Classes.Data import augmentation, LeukemiaDataset, augmentation_alb\n",
+    "from Classes.Helpers import Helpers\n",
+    "from Classes.Model_2020 import LuekemiaNet, learner\n",
+    "from Classes.model_api import plot_training_history, show_predictions,\\\n",
+    "    confusion_matrix2, get_predictions, predict_probability, show_prediction_confidence\n",
+    "from Classes.interpretability import interpret_model\n",
+    "from torch.utils.data import DataLoader\n",
+    "from torch.utils.data.sampler import SubsetRandomSampler\n",
+    "import torch.optim as optim\n",
+    "import pandas as pd\n",
+    "from torch import nn\n",
+    "import random\n",
+    "import torch\n",
+    "import os\n",
+    "from sklearn.model_selection import train_test_split\n",
+    "from sklearn.metrics import confusion_matrix, classification_report\n",
+    "import numpy as np"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "SEED = 323\n",
+    "def seed_everything(seed=SEED):\n",
+    "    random.seed(seed)\n",
+    "    os.environ['PYHTONHASHSEED'] = str(seed)\n",
+    "    np.random.seed(seed)\n",
+    "    torch.manual_seed(seed)\n",
+    "    torch.cuda.manual_seed(seed)\n",
+    "    torch.backends.cudnn.deterministic = True\n",
+    "\n",
+    "\n",
+    "seed_everything(SEED)\n",
+    "# helper class\n",
+    "helper = Helpers(\"Test Model\", False)\n",
+    "# train data directory\n",
+    "train_dir = 'C:/Peter Moss AML Leukemia Research/Dataset/all_train/'\n",
+    "# train label directoy\n",
+    "train_csv = 'C:/Peter Moss AML Leukemia Research/Dataset/train.csv'\n",
+    "# labels\n",
+    "class_name = [\"neg\", \"pos\"]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "image_path = 'C:\\Peter Moss AML Leukemia Research\\ALL-PyTorch-2020\\Classifier\\Model\\Data\\Test\\Im047_0.jpg'\n",
+    "image_path2 = 'C:\\Peter Moss AML Leukemia Research\\ALL-PyTorch-2020\\Classifier\\Model\\Data\\Test\\Im006_1.jpg'\n",
+    "label_idx = 'C:\\Peter Moss AML Leukemia Research\\ALL-PyTorch-2020\\Classifier\\Model\\class_idx.json'"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "0    49\n",
+      "1    39\n",
+      "Name: label, dtype: int64\n",
+      "      data  label\n",
+      "0  Im001_1      1\n",
+      "1  Im002_1      1\n",
+      "2  Im003_1      1\n",
+      "3  Im004_1      1\n",
+      "4  Im005_1      1\n",
+      "79 9\n"
+     ]
+    }
+   ],
+   "source": [
+    "# training batch size\n",
+    "batch_size = helper.config[\"classifier\"][\"train\"][\"batch\"]\n",
+    "# accuracy and loss save directory\n",
+    "acc_loss_png = helper.config[\"classifier\"][\"model_params\"][\"plot_loss_and_acc\"]\n",
+    "# confusion matrix save directory\n",
+    "confusion_png = helper.config[\"classifier\"][\"model_params\"][\"confusion_matrix\"]\n",
+    "# number of epoch\n",
+    "epochs = helper.config[\"classifier\"][\"train\"][\"epochs\"]\n",
+    "# learning rate\n",
+    "learn_rate = helper.config[\"classifier\"][\"train\"][\"learning_rate_adam\"]\n",
+    "# decay\n",
+    "decay = helper.config[\"classifier\"][\"train\"][\"decay_adam\"]\n",
+    "# read train CSV file\n",
+    "labels = pd.read_csv(train_csv)\n",
+    "# print label count\n",
+    "labels_count = labels.label.value_counts()\n",
+    "print(labels_count)\n",
+    "# print 5 label header\n",
+    "print(labels.head())\n",
+    "# splitting data into training and validation set\n",
+    "train, valid = train_test_split(labels, stratify = labels.label, test_size = 0.1, shuffle=True)\n",
+    "print(len(train),len(valid))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "79 9\n"
+     ]
+    }
+   ],
+   "source": [
+    "#data augmentation\n",
+    "training_transforms, validation_transforms = augmentation()\n",
+    "\n",
+    "# Read Acute Lymphoblastic Leukemia dataset from disk\n",
+    "trainset = LeukemiaDataset(df_data=train, data_dir=train_dir, transform=training_transforms)\n",
+    "validset = LeukemiaDataset(df_data=valid, data_dir=train_dir, transform=validation_transforms)\n",
+    "\n",
+    "train_size, valid_size = len(trainset), len(validset)\n",
+    "print(train_size, valid_size)\n",
+    "\n",
+    "train_sampler = SubsetRandomSampler(list(train.index))\n",
+    "valid_sampler = SubsetRandomSampler(list(valid.index))\n",
+    "\n",
+    "# Prepare dataset for neural networks\n",
+    "train_data_loader = DataLoader(trainset, batch_size=batch_size, shuffle=True)\n",
+    "valid_data_loader = DataLoader(validset, batch_size=batch_size, shuffle=False)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Training Set:\n",
+      "\n",
+      "Image batch dimensions: torch.Size([10, 3, 100, 100])\n",
+      "Image label dimensions: torch.Size([10])\n",
+      "\n",
+      "\n",
+      "The labels:  tensor([1, 1, 0, 0, 0, 0, 0, 1, 1])\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Checking the dataset\n",
+    "print('Training Set:\\n')\n",
+    "for images, labels in train_data_loader:\n",
+    "    print('Image batch dimensions:', images.size())\n",
+    "    print('Image label dimensions:', labels.size())\n",
+    "    break\n",
+    "print(\"\\n\")\n",
+    "\n",
+    "# loop through our validation data and output the labels\n",
+    "for images, labels in valid_data_loader:\n",
+    "    print(\"The labels: \",labels)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "CUDA is available and training on GPU ...\n"
+     ]
+    }
+   ],
+   "source": [
+    "\n",
+    "# Define model\n",
+    "model = LuekemiaNet()\n",
+    "# check if CUDA is available\n",
+    "train_on_gpu = torch.cuda.is_available()\n",
+    "# Move our model to CUDA for gpu training\n",
+    "model.cuda()\n",
+    "\n",
+    "\n",
+    "if not train_on_gpu:\n",
+    "    print('CUDA is not available and training on CPU ...')\n",
+    "else:\n",
+    "    print('CUDA is available and training on GPU ...')\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Cross entropy loss function\n",
+    "criterion = nn.CrossEntropyLoss()\n",
+    "# specify optimizer (stochastic gradient descent) and learning rate = 0.001\n",
+    "optimizer = optim.Adam(model.parameters(), weight_decay=decay, lr=learn_rate)\n",
+    "# scheduler = CyclicLR(optimizer, base_lr=lr, max_lr=0.01, step_size=5, mode='triangular2')\n",
+    "scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=7, gamma=helper.config[\"classifier\"][\"model_params\"][\"gamma\"])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "2020-12-31 03:09:27,061 - Model - INFO - Epoch 1/10\n",
+      "2020-12-31 03:09:27,091 - Model - INFO - ----------\n",
+      "2020-12-31 03:09:38,622 - Model - INFO - Train loss: 0.5225205793976784 Accuracy: 0.7341772317886353\n",
+      "2020-12-31 03:09:39,573 - Model - INFO - Valid loss: 0.7080000042915344 Accuracy: 0.5555555820465088\n",
+      "\n",
+      "2020-12-31 03:09:39,761 - Model - INFO - Epoch 2/10\n",
+      "2020-12-31 03:09:39,774 - Model - INFO - ----------\n",
+      "2020-12-31 03:09:47,664 - Model - INFO - Train loss: 0.3280406277626753 Accuracy: 0.8607594966888428\n",
+      "2020-12-31 03:09:48,575 - Model - INFO - Valid loss: 0.8643777370452881 Accuracy: 0.5555555820465088\n",
+      "\n",
+      "2020-12-31 03:09:48,645 - Model - INFO - Epoch 3/10\n",
+      "2020-12-31 03:09:48,651 - Model - INFO - ----------\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "--- Logging error ---\n",
+      "Traceback (most recent call last):\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 69, in emit\n",
+      "    self.doRollover()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 393, in doRollover\n",
+      "    self.rotate(self.baseFilename, dfn)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 110, in rotate\n",
+      "    os.rename(source, dest)\n",
+      "PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\\\Peter Moss AML Leukemia Research\\\\ALL-PyTorch-2020\\\\Classifier\\\\Logs\\\\all.log' -> 'C:\\\\Peter Moss AML Leukemia Research\\\\ALL-PyTorch-2020\\\\Classifier\\\\Logs\\\\all.log.2020-12-30_00'\n",
+      "Call stack:\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\runpy.py\", line 193, in _run_module_as_main\n",
+      "    \"__main__\", mod_spec)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\runpy.py\", line 85, in _run_code\n",
+      "    exec(code, run_globals)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py\", line 16, in <module>\n",
+      "    app.launch_new_instance()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\traitlets\\config\\application.py\", line 658, in launch_instance\n",
+      "    app.start()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelapp.py\", line 505, in start\n",
+      "    self.io_loop.start()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\platform\\asyncio.py\", line 148, in start\n",
+      "    self.asyncio_loop.run_forever()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\base_events.py\", line 539, in run_forever\n",
+      "    self._run_once()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\base_events.py\", line 1775, in _run_once\n",
+      "    handle._run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\events.py\", line 88, in _run\n",
+      "    self._context.run(self._callback, *self._args)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\ioloop.py\", line 690, in <lambda>\n",
+      "    lambda f: self._run_callback(functools.partial(callback, future))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\ioloop.py\", line 743, in _run_callback\n",
+      "    ret = callback()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 787, in inner\n",
+      "    self.run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 748, in run\n",
+      "    yielded = self.gen.send(value)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 378, in dispatch_queue\n",
+      "    yield self.process_one()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 225, in wrapper\n",
+      "    runner = Runner(result, future, yielded)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 714, in __init__\n",
+      "    self.run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 748, in run\n",
+      "    yielded = self.gen.send(value)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 365, in process_one\n",
+      "    yield gen.maybe_future(dispatch(*args))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 272, in dispatch_shell\n",
+      "    yield gen.maybe_future(handler(stream, idents, msg))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 542, in execute_request\n",
+      "    user_expressions, allow_stdin,\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\ipkernel.py\", line 294, in do_execute\n",
+      "    res = shell.run_cell(code, store_history=store_history, silent=silent)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\zmqshell.py\", line 536, in run_cell\n",
+      "    return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2854, in run_cell\n",
+      "    raw_cell, store_history, silent, shell_futures)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2880, in _run_cell\n",
+      "    return runner(coro)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\async_helpers.py\", line 68, in _pseudo_sync_runner\n",
+      "    coro.send(None)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3057, in run_cell_async\n",
+      "    interactivity=interactivity, compiler=compiler, result=result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3248, in run_ast_nodes\n",
+      "    if (await self.run_code(code, result,  async_=asy)):\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3325, in run_code\n",
+      "    exec(code_obj, self.user_global_ns, self.user_ns)\n",
+      "  File \"<ipython-input-9-afcd5a747e46>\", line 7, in <module>\n",
+      "    train_on_gpu=True, n_epochs=epochs)\n",
+      "  File \"C:\\Peter Moss AML Leukemia Research\\ALL-PyTorch-2020\\Classifier\\Classes\\Model_2020.py\", line 152, in learner\n",
+      "    helper.logger.info(f'Epoch {epoch + 1}/{n_epochs}')\n",
+      "Message: 'Epoch 1/10'\n",
+      "Arguments: ()\n",
+      "--- Logging error ---\n",
+      "Traceback (most recent call last):\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 69, in emit\n",
+      "    self.doRollover()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 393, in doRollover\n",
+      "    self.rotate(self.baseFilename, dfn)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 110, in rotate\n",
+      "    os.rename(source, dest)\n",
+      "PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\\\Peter Moss AML Leukemia Research\\\\ALL-PyTorch-2020\\\\Classifier\\\\Logs\\\\all.log' -> 'C:\\\\Peter Moss AML Leukemia Research\\\\ALL-PyTorch-2020\\\\Classifier\\\\Logs\\\\all.log.2020-12-30_00'\n",
+      "Call stack:\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\runpy.py\", line 193, in _run_module_as_main\n",
+      "    \"__main__\", mod_spec)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\runpy.py\", line 85, in _run_code\n",
+      "    exec(code, run_globals)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py\", line 16, in <module>\n",
+      "    app.launch_new_instance()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\traitlets\\config\\application.py\", line 658, in launch_instance\n",
+      "    app.start()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelapp.py\", line 505, in start\n",
+      "    self.io_loop.start()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\platform\\asyncio.py\", line 148, in start\n",
+      "    self.asyncio_loop.run_forever()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\base_events.py\", line 539, in run_forever\n",
+      "    self._run_once()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\base_events.py\", line 1775, in _run_once\n",
+      "    handle._run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\events.py\", line 88, in _run\n",
+      "    self._context.run(self._callback, *self._args)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\ioloop.py\", line 690, in <lambda>\n",
+      "    lambda f: self._run_callback(functools.partial(callback, future))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\ioloop.py\", line 743, in _run_callback\n",
+      "    ret = callback()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 787, in inner\n",
+      "    self.run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 748, in run\n",
+      "    yielded = self.gen.send(value)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 378, in dispatch_queue\n",
+      "    yield self.process_one()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 225, in wrapper\n",
+      "    runner = Runner(result, future, yielded)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 714, in __init__\n",
+      "    self.run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 748, in run\n",
+      "    yielded = self.gen.send(value)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 365, in process_one\n",
+      "    yield gen.maybe_future(dispatch(*args))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 272, in dispatch_shell\n",
+      "    yield gen.maybe_future(handler(stream, idents, msg))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 542, in execute_request\n",
+      "    user_expressions, allow_stdin,\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\ipkernel.py\", line 294, in do_execute\n",
+      "    res = shell.run_cell(code, store_history=store_history, silent=silent)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\zmqshell.py\", line 536, in run_cell\n",
+      "    return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2854, in run_cell\n",
+      "    raw_cell, store_history, silent, shell_futures)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2880, in _run_cell\n",
+      "    return runner(coro)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\async_helpers.py\", line 68, in _pseudo_sync_runner\n",
+      "    coro.send(None)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3057, in run_cell_async\n",
+      "    interactivity=interactivity, compiler=compiler, result=result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3248, in run_ast_nodes\n",
+      "    if (await self.run_code(code, result,  async_=asy)):\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3325, in run_code\n",
+      "    exec(code_obj, self.user_global_ns, self.user_ns)\n",
+      "  File \"<ipython-input-9-afcd5a747e46>\", line 7, in <module>\n",
+      "    train_on_gpu=True, n_epochs=epochs)\n",
+      "  File \"C:\\Peter Moss AML Leukemia Research\\ALL-PyTorch-2020\\Classifier\\Classes\\Model_2020.py\", line 153, in learner\n",
+      "    helper.logger.info('-' * 10)\n",
+      "Message: '----------'\n",
+      "Arguments: ()\n",
+      "--- Logging error ---\n",
+      "Traceback (most recent call last):\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 69, in emit\n",
+      "    self.doRollover()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 393, in doRollover\n",
+      "    self.rotate(self.baseFilename, dfn)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 110, in rotate\n",
+      "    os.rename(source, dest)\n",
+      "PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\\\Peter Moss AML Leukemia Research\\\\ALL-PyTorch-2020\\\\Classifier\\\\Logs\\\\all.log' -> 'C:\\\\Peter Moss AML Leukemia Research\\\\ALL-PyTorch-2020\\\\Classifier\\\\Logs\\\\all.log.2020-12-30_00'\n",
+      "Call stack:\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\runpy.py\", line 193, in _run_module_as_main\n",
+      "    \"__main__\", mod_spec)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\runpy.py\", line 85, in _run_code\n",
+      "    exec(code, run_globals)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py\", line 16, in <module>\n",
+      "    app.launch_new_instance()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\traitlets\\config\\application.py\", line 658, in launch_instance\n",
+      "    app.start()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelapp.py\", line 505, in start\n",
+      "    self.io_loop.start()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\platform\\asyncio.py\", line 148, in start\n",
+      "    self.asyncio_loop.run_forever()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\base_events.py\", line 539, in run_forever\n",
+      "    self._run_once()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\base_events.py\", line 1775, in _run_once\n",
+      "    handle._run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\events.py\", line 88, in _run\n",
+      "    self._context.run(self._callback, *self._args)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\ioloop.py\", line 690, in <lambda>\n",
+      "    lambda f: self._run_callback(functools.partial(callback, future))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\ioloop.py\", line 743, in _run_callback\n",
+      "    ret = callback()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 787, in inner\n",
+      "    self.run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 748, in run\n",
+      "    yielded = self.gen.send(value)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 378, in dispatch_queue\n",
+      "    yield self.process_one()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 225, in wrapper\n",
+      "    runner = Runner(result, future, yielded)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 714, in __init__\n",
+      "    self.run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 748, in run\n",
+      "    yielded = self.gen.send(value)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 365, in process_one\n",
+      "    yield gen.maybe_future(dispatch(*args))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 272, in dispatch_shell\n",
+      "    yield gen.maybe_future(handler(stream, idents, msg))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 542, in execute_request\n",
+      "    user_expressions, allow_stdin,\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\ipkernel.py\", line 294, in do_execute\n",
+      "    res = shell.run_cell(code, store_history=store_history, silent=silent)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\zmqshell.py\", line 536, in run_cell\n",
+      "    return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2854, in run_cell\n",
+      "    raw_cell, store_history, silent, shell_futures)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2880, in _run_cell\n",
+      "    return runner(coro)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\async_helpers.py\", line 68, in _pseudo_sync_runner\n",
+      "    coro.send(None)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3057, in run_cell_async\n",
+      "    interactivity=interactivity, compiler=compiler, result=result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3248, in run_ast_nodes\n",
+      "    if (await self.run_code(code, result,  async_=asy)):\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3325, in run_code\n",
+      "    exec(code_obj, self.user_global_ns, self.user_ns)\n",
+      "  File \"<ipython-input-9-afcd5a747e46>\", line 7, in <module>\n",
+      "    train_on_gpu=True, n_epochs=epochs)\n",
+      "  File \"C:\\Peter Moss AML Leukemia Research\\ALL-PyTorch-2020\\Classifier\\Classes\\Model_2020.py\", line 165, in learner\n",
+      "    helper.logger.info(f'Train loss: {train_loss} Accuracy: {train_acc}')\n",
+      "Message: 'Train loss: 0.5225205793976784 Accuracy: 0.7341772317886353'\n",
+      "Arguments: ()\n",
+      "--- Logging error ---\n",
+      "Traceback (most recent call last):\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 69, in emit\n",
+      "    self.doRollover()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 393, in doRollover\n",
+      "    self.rotate(self.baseFilename, dfn)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 110, in rotate\n",
+      "    os.rename(source, dest)\n",
+      "PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\\\Peter Moss AML Leukemia Research\\\\ALL-PyTorch-2020\\\\Classifier\\\\Logs\\\\all.log' -> 'C:\\\\Peter Moss AML Leukemia Research\\\\ALL-PyTorch-2020\\\\Classifier\\\\Logs\\\\all.log.2020-12-30_00'\n",
+      "Call stack:\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\runpy.py\", line 193, in _run_module_as_main\n",
+      "    \"__main__\", mod_spec)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\runpy.py\", line 85, in _run_code\n",
+      "    exec(code, run_globals)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py\", line 16, in <module>\n",
+      "    app.launch_new_instance()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\traitlets\\config\\application.py\", line 658, in launch_instance\n",
+      "    app.start()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelapp.py\", line 505, in start\n",
+      "    self.io_loop.start()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\platform\\asyncio.py\", line 148, in start\n",
+      "    self.asyncio_loop.run_forever()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\base_events.py\", line 539, in run_forever\n",
+      "    self._run_once()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\base_events.py\", line 1775, in _run_once\n",
+      "    handle._run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\events.py\", line 88, in _run\n",
+      "    self._context.run(self._callback, *self._args)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\ioloop.py\", line 690, in <lambda>\n",
+      "    lambda f: self._run_callback(functools.partial(callback, future))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\ioloop.py\", line 743, in _run_callback\n",
+      "    ret = callback()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 787, in inner\n",
+      "    self.run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 748, in run\n",
+      "    yielded = self.gen.send(value)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 378, in dispatch_queue\n",
+      "    yield self.process_one()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 225, in wrapper\n",
+      "    runner = Runner(result, future, yielded)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 714, in __init__\n",
+      "    self.run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 748, in run\n",
+      "    yielded = self.gen.send(value)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 365, in process_one\n",
+      "    yield gen.maybe_future(dispatch(*args))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 272, in dispatch_shell\n",
+      "    yield gen.maybe_future(handler(stream, idents, msg))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 542, in execute_request\n",
+      "    user_expressions, allow_stdin,\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\ipkernel.py\", line 294, in do_execute\n",
+      "    res = shell.run_cell(code, store_history=store_history, silent=silent)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\zmqshell.py\", line 536, in run_cell\n",
+      "    return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2854, in run_cell\n",
+      "    raw_cell, store_history, silent, shell_futures)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2880, in _run_cell\n",
+      "    return runner(coro)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\async_helpers.py\", line 68, in _pseudo_sync_runner\n",
+      "    coro.send(None)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3057, in run_cell_async\n",
+      "    interactivity=interactivity, compiler=compiler, result=result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3248, in run_ast_nodes\n",
+      "    if (await self.run_code(code, result,  async_=asy)):\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3325, in run_code\n",
+      "    exec(code_obj, self.user_global_ns, self.user_ns)\n",
+      "  File \"<ipython-input-9-afcd5a747e46>\", line 7, in <module>\n",
+      "    train_on_gpu=True, n_epochs=epochs)\n",
+      "  File \"C:\\Peter Moss AML Leukemia Research\\ALL-PyTorch-2020\\Classifier\\Classes\\Model_2020.py\", line 175, in learner\n",
+      "    helper.logger.info(f'Valid loss: {val_loss} Accuracy: {val_acc}')\n",
+      "Message: 'Valid loss: 0.7080000042915344 Accuracy: 0.5555555820465088'\n",
+      "Arguments: ()\n",
+      "--- Logging error ---\n",
+      "Traceback (most recent call last):\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 69, in emit\n",
+      "    self.doRollover()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 393, in doRollover\n",
+      "    self.rotate(self.baseFilename, dfn)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 110, in rotate\n",
+      "    os.rename(source, dest)\n",
+      "PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\\\Peter Moss AML Leukemia Research\\\\ALL-PyTorch-2020\\\\Classifier\\\\Logs\\\\all.log' -> 'C:\\\\Peter Moss AML Leukemia Research\\\\ALL-PyTorch-2020\\\\Classifier\\\\Logs\\\\all.log.2020-12-30_00'\n",
+      "Call stack:\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\runpy.py\", line 193, in _run_module_as_main\n",
+      "    \"__main__\", mod_spec)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\runpy.py\", line 85, in _run_code\n",
+      "    exec(code, run_globals)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py\", line 16, in <module>\n",
+      "    app.launch_new_instance()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\traitlets\\config\\application.py\", line 658, in launch_instance\n",
+      "    app.start()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelapp.py\", line 505, in start\n",
+      "    self.io_loop.start()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\platform\\asyncio.py\", line 148, in start\n",
+      "    self.asyncio_loop.run_forever()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\base_events.py\", line 539, in run_forever\n",
+      "    self._run_once()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\base_events.py\", line 1775, in _run_once\n",
+      "    handle._run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\events.py\", line 88, in _run\n",
+      "    self._context.run(self._callback, *self._args)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\ioloop.py\", line 690, in <lambda>\n",
+      "    lambda f: self._run_callback(functools.partial(callback, future))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\ioloop.py\", line 743, in _run_callback\n",
+      "    ret = callback()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 787, in inner\n",
+      "    self.run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 748, in run\n",
+      "    yielded = self.gen.send(value)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 378, in dispatch_queue\n",
+      "    yield self.process_one()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 225, in wrapper\n",
+      "    runner = Runner(result, future, yielded)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 714, in __init__\n",
+      "    self.run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 748, in run\n",
+      "    yielded = self.gen.send(value)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 365, in process_one\n",
+      "    yield gen.maybe_future(dispatch(*args))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 272, in dispatch_shell\n",
+      "    yield gen.maybe_future(handler(stream, idents, msg))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 542, in execute_request\n",
+      "    user_expressions, allow_stdin,\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\ipkernel.py\", line 294, in do_execute\n",
+      "    res = shell.run_cell(code, store_history=store_history, silent=silent)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\zmqshell.py\", line 536, in run_cell\n",
+      "    return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2854, in run_cell\n",
+      "    raw_cell, store_history, silent, shell_futures)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2880, in _run_cell\n",
+      "    return runner(coro)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\async_helpers.py\", line 68, in _pseudo_sync_runner\n",
+      "    coro.send(None)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3057, in run_cell_async\n",
+      "    interactivity=interactivity, compiler=compiler, result=result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3248, in run_ast_nodes\n",
+      "    if (await self.run_code(code, result,  async_=asy)):\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3325, in run_code\n",
+      "    exec(code_obj, self.user_global_ns, self.user_ns)\n",
+      "  File \"<ipython-input-9-afcd5a747e46>\", line 7, in <module>\n",
+      "    train_on_gpu=True, n_epochs=epochs)\n",
+      "  File \"C:\\Peter Moss AML Leukemia Research\\ALL-PyTorch-2020\\Classifier\\Classes\\Model_2020.py\", line 152, in learner\n",
+      "    helper.logger.info(f'Epoch {epoch + 1}/{n_epochs}')\n",
+      "Message: 'Epoch 2/10'\n",
+      "Arguments: ()\n",
+      "--- Logging error ---\n",
+      "Traceback (most recent call last):\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 69, in emit\n",
+      "    self.doRollover()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 393, in doRollover\n",
+      "    self.rotate(self.baseFilename, dfn)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 110, in rotate\n",
+      "    os.rename(source, dest)\n",
+      "PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\\\Peter Moss AML Leukemia Research\\\\ALL-PyTorch-2020\\\\Classifier\\\\Logs\\\\all.log' -> 'C:\\\\Peter Moss AML Leukemia Research\\\\ALL-PyTorch-2020\\\\Classifier\\\\Logs\\\\all.log.2020-12-30_00'\n",
+      "Call stack:\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\runpy.py\", line 193, in _run_module_as_main\n",
+      "    \"__main__\", mod_spec)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\runpy.py\", line 85, in _run_code\n",
+      "    exec(code, run_globals)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py\", line 16, in <module>\n",
+      "    app.launch_new_instance()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\traitlets\\config\\application.py\", line 658, in launch_instance\n",
+      "    app.start()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelapp.py\", line 505, in start\n",
+      "    self.io_loop.start()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\platform\\asyncio.py\", line 148, in start\n",
+      "    self.asyncio_loop.run_forever()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\base_events.py\", line 539, in run_forever\n",
+      "    self._run_once()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\base_events.py\", line 1775, in _run_once\n",
+      "    handle._run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\events.py\", line 88, in _run\n",
+      "    self._context.run(self._callback, *self._args)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\ioloop.py\", line 690, in <lambda>\n",
+      "    lambda f: self._run_callback(functools.partial(callback, future))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\ioloop.py\", line 743, in _run_callback\n",
+      "    ret = callback()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 787, in inner\n",
+      "    self.run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 748, in run\n",
+      "    yielded = self.gen.send(value)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 378, in dispatch_queue\n",
+      "    yield self.process_one()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 225, in wrapper\n",
+      "    runner = Runner(result, future, yielded)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 714, in __init__\n",
+      "    self.run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 748, in run\n",
+      "    yielded = self.gen.send(value)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 365, in process_one\n",
+      "    yield gen.maybe_future(dispatch(*args))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 272, in dispatch_shell\n",
+      "    yield gen.maybe_future(handler(stream, idents, msg))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 542, in execute_request\n",
+      "    user_expressions, allow_stdin,\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\ipkernel.py\", line 294, in do_execute\n",
+      "    res = shell.run_cell(code, store_history=store_history, silent=silent)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\zmqshell.py\", line 536, in run_cell\n",
+      "    return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2854, in run_cell\n",
+      "    raw_cell, store_history, silent, shell_futures)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2880, in _run_cell\n",
+      "    return runner(coro)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\async_helpers.py\", line 68, in _pseudo_sync_runner\n",
+      "    coro.send(None)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3057, in run_cell_async\n",
+      "    interactivity=interactivity, compiler=compiler, result=result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3248, in run_ast_nodes\n",
+      "    if (await self.run_code(code, result,  async_=asy)):\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3325, in run_code\n",
+      "    exec(code_obj, self.user_global_ns, self.user_ns)\n",
+      "  File \"<ipython-input-9-afcd5a747e46>\", line 7, in <module>\n",
+      "    train_on_gpu=True, n_epochs=epochs)\n",
+      "  File \"C:\\Peter Moss AML Leukemia Research\\ALL-PyTorch-2020\\Classifier\\Classes\\Model_2020.py\", line 153, in learner\n",
+      "    helper.logger.info('-' * 10)\n",
+      "Message: '----------'\n",
+      "Arguments: ()\n",
+      "--- Logging error ---\n",
+      "Traceback (most recent call last):\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 69, in emit\n",
+      "    self.doRollover()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 393, in doRollover\n",
+      "    self.rotate(self.baseFilename, dfn)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 110, in rotate\n",
+      "    os.rename(source, dest)\n",
+      "PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\\\Peter Moss AML Leukemia Research\\\\ALL-PyTorch-2020\\\\Classifier\\\\Logs\\\\all.log' -> 'C:\\\\Peter Moss AML Leukemia Research\\\\ALL-PyTorch-2020\\\\Classifier\\\\Logs\\\\all.log.2020-12-30_00'\n",
+      "Call stack:\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\runpy.py\", line 193, in _run_module_as_main\n",
+      "    \"__main__\", mod_spec)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\runpy.py\", line 85, in _run_code\n",
+      "    exec(code, run_globals)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py\", line 16, in <module>\n",
+      "    app.launch_new_instance()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\traitlets\\config\\application.py\", line 658, in launch_instance\n",
+      "    app.start()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelapp.py\", line 505, in start\n",
+      "    self.io_loop.start()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\platform\\asyncio.py\", line 148, in start\n",
+      "    self.asyncio_loop.run_forever()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\base_events.py\", line 539, in run_forever\n",
+      "    self._run_once()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\base_events.py\", line 1775, in _run_once\n",
+      "    handle._run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\events.py\", line 88, in _run\n",
+      "    self._context.run(self._callback, *self._args)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\ioloop.py\", line 690, in <lambda>\n",
+      "    lambda f: self._run_callback(functools.partial(callback, future))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\ioloop.py\", line 743, in _run_callback\n",
+      "    ret = callback()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 787, in inner\n",
+      "    self.run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 748, in run\n",
+      "    yielded = self.gen.send(value)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 378, in dispatch_queue\n",
+      "    yield self.process_one()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 225, in wrapper\n",
+      "    runner = Runner(result, future, yielded)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 714, in __init__\n",
+      "    self.run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 748, in run\n",
+      "    yielded = self.gen.send(value)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 365, in process_one\n",
+      "    yield gen.maybe_future(dispatch(*args))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 272, in dispatch_shell\n",
+      "    yield gen.maybe_future(handler(stream, idents, msg))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 542, in execute_request\n",
+      "    user_expressions, allow_stdin,\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\ipkernel.py\", line 294, in do_execute\n",
+      "    res = shell.run_cell(code, store_history=store_history, silent=silent)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\zmqshell.py\", line 536, in run_cell\n",
+      "    return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2854, in run_cell\n",
+      "    raw_cell, store_history, silent, shell_futures)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2880, in _run_cell\n",
+      "    return runner(coro)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\async_helpers.py\", line 68, in _pseudo_sync_runner\n",
+      "    coro.send(None)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3057, in run_cell_async\n",
+      "    interactivity=interactivity, compiler=compiler, result=result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3248, in run_ast_nodes\n",
+      "    if (await self.run_code(code, result,  async_=asy)):\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3325, in run_code\n",
+      "    exec(code_obj, self.user_global_ns, self.user_ns)\n",
+      "  File \"<ipython-input-9-afcd5a747e46>\", line 7, in <module>\n",
+      "    train_on_gpu=True, n_epochs=epochs)\n",
+      "  File \"C:\\Peter Moss AML Leukemia Research\\ALL-PyTorch-2020\\Classifier\\Classes\\Model_2020.py\", line 165, in learner\n",
+      "    helper.logger.info(f'Train loss: {train_loss} Accuracy: {train_acc}')\n",
+      "Message: 'Train loss: 0.3280406277626753 Accuracy: 0.8607594966888428'\n",
+      "Arguments: ()\n",
+      "--- Logging error ---\n",
+      "Traceback (most recent call last):\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 69, in emit\n",
+      "    self.doRollover()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 393, in doRollover\n",
+      "    self.rotate(self.baseFilename, dfn)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 110, in rotate\n",
+      "    os.rename(source, dest)\n",
+      "PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\\\Peter Moss AML Leukemia Research\\\\ALL-PyTorch-2020\\\\Classifier\\\\Logs\\\\all.log' -> 'C:\\\\Peter Moss AML Leukemia Research\\\\ALL-PyTorch-2020\\\\Classifier\\\\Logs\\\\all.log.2020-12-30_00'\n",
+      "Call stack:\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\runpy.py\", line 193, in _run_module_as_main\n",
+      "    \"__main__\", mod_spec)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\runpy.py\", line 85, in _run_code\n",
+      "    exec(code, run_globals)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py\", line 16, in <module>\n",
+      "    app.launch_new_instance()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\traitlets\\config\\application.py\", line 658, in launch_instance\n",
+      "    app.start()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelapp.py\", line 505, in start\n",
+      "    self.io_loop.start()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\platform\\asyncio.py\", line 148, in start\n",
+      "    self.asyncio_loop.run_forever()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\base_events.py\", line 539, in run_forever\n",
+      "    self._run_once()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\base_events.py\", line 1775, in _run_once\n",
+      "    handle._run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\events.py\", line 88, in _run\n",
+      "    self._context.run(self._callback, *self._args)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\ioloop.py\", line 690, in <lambda>\n",
+      "    lambda f: self._run_callback(functools.partial(callback, future))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\ioloop.py\", line 743, in _run_callback\n",
+      "    ret = callback()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 787, in inner\n",
+      "    self.run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 748, in run\n",
+      "    yielded = self.gen.send(value)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 378, in dispatch_queue\n",
+      "    yield self.process_one()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 225, in wrapper\n",
+      "    runner = Runner(result, future, yielded)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 714, in __init__\n",
+      "    self.run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 748, in run\n",
+      "    yielded = self.gen.send(value)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 365, in process_one\n",
+      "    yield gen.maybe_future(dispatch(*args))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 272, in dispatch_shell\n",
+      "    yield gen.maybe_future(handler(stream, idents, msg))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 542, in execute_request\n",
+      "    user_expressions, allow_stdin,\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\ipkernel.py\", line 294, in do_execute\n",
+      "    res = shell.run_cell(code, store_history=store_history, silent=silent)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\zmqshell.py\", line 536, in run_cell\n",
+      "    return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2854, in run_cell\n",
+      "    raw_cell, store_history, silent, shell_futures)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2880, in _run_cell\n",
+      "    return runner(coro)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\async_helpers.py\", line 68, in _pseudo_sync_runner\n",
+      "    coro.send(None)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3057, in run_cell_async\n",
+      "    interactivity=interactivity, compiler=compiler, result=result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3248, in run_ast_nodes\n",
+      "    if (await self.run_code(code, result,  async_=asy)):\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3325, in run_code\n",
+      "    exec(code_obj, self.user_global_ns, self.user_ns)\n",
+      "  File \"<ipython-input-9-afcd5a747e46>\", line 7, in <module>\n",
+      "    train_on_gpu=True, n_epochs=epochs)\n",
+      "  File \"C:\\Peter Moss AML Leukemia Research\\ALL-PyTorch-2020\\Classifier\\Classes\\Model_2020.py\", line 175, in learner\n",
+      "    helper.logger.info(f'Valid loss: {val_loss} Accuracy: {val_acc}')\n",
+      "Message: 'Valid loss: 0.8643777370452881 Accuracy: 0.5555555820465088'\n",
+      "Arguments: ()\n",
+      "--- Logging error ---\n",
+      "Traceback (most recent call last):\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 69, in emit\n",
+      "    self.doRollover()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 393, in doRollover\n",
+      "    self.rotate(self.baseFilename, dfn)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 110, in rotate\n",
+      "    os.rename(source, dest)\n",
+      "PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\\\Peter Moss AML Leukemia Research\\\\ALL-PyTorch-2020\\\\Classifier\\\\Logs\\\\all.log' -> 'C:\\\\Peter Moss AML Leukemia Research\\\\ALL-PyTorch-2020\\\\Classifier\\\\Logs\\\\all.log.2020-12-30_00'\n",
+      "Call stack:\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\runpy.py\", line 193, in _run_module_as_main\n",
+      "    \"__main__\", mod_spec)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\runpy.py\", line 85, in _run_code\n",
+      "    exec(code, run_globals)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py\", line 16, in <module>\n",
+      "    app.launch_new_instance()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\traitlets\\config\\application.py\", line 658, in launch_instance\n",
+      "    app.start()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelapp.py\", line 505, in start\n",
+      "    self.io_loop.start()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\platform\\asyncio.py\", line 148, in start\n",
+      "    self.asyncio_loop.run_forever()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\base_events.py\", line 539, in run_forever\n",
+      "    self._run_once()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\base_events.py\", line 1775, in _run_once\n",
+      "    handle._run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\events.py\", line 88, in _run\n",
+      "    self._context.run(self._callback, *self._args)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\ioloop.py\", line 690, in <lambda>\n",
+      "    lambda f: self._run_callback(functools.partial(callback, future))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\ioloop.py\", line 743, in _run_callback\n",
+      "    ret = callback()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 787, in inner\n",
+      "    self.run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 748, in run\n",
+      "    yielded = self.gen.send(value)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 378, in dispatch_queue\n",
+      "    yield self.process_one()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 225, in wrapper\n",
+      "    runner = Runner(result, future, yielded)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 714, in __init__\n",
+      "    self.run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 748, in run\n",
+      "    yielded = self.gen.send(value)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 365, in process_one\n",
+      "    yield gen.maybe_future(dispatch(*args))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 272, in dispatch_shell\n",
+      "    yield gen.maybe_future(handler(stream, idents, msg))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 542, in execute_request\n",
+      "    user_expressions, allow_stdin,\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\ipkernel.py\", line 294, in do_execute\n",
+      "    res = shell.run_cell(code, store_history=store_history, silent=silent)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\zmqshell.py\", line 536, in run_cell\n",
+      "    return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2854, in run_cell\n",
+      "    raw_cell, store_history, silent, shell_futures)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2880, in _run_cell\n",
+      "    return runner(coro)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\async_helpers.py\", line 68, in _pseudo_sync_runner\n",
+      "    coro.send(None)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3057, in run_cell_async\n",
+      "    interactivity=interactivity, compiler=compiler, result=result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3248, in run_ast_nodes\n",
+      "    if (await self.run_code(code, result,  async_=asy)):\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3325, in run_code\n",
+      "    exec(code_obj, self.user_global_ns, self.user_ns)\n",
+      "  File \"<ipython-input-9-afcd5a747e46>\", line 7, in <module>\n",
+      "    train_on_gpu=True, n_epochs=epochs)\n",
+      "  File \"C:\\Peter Moss AML Leukemia Research\\ALL-PyTorch-2020\\Classifier\\Classes\\Model_2020.py\", line 152, in learner\n",
+      "    helper.logger.info(f'Epoch {epoch + 1}/{n_epochs}')\n",
+      "Message: 'Epoch 3/10'\n",
+      "Arguments: ()\n",
+      "--- Logging error ---\n",
+      "Traceback (most recent call last):\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 69, in emit\n",
+      "    self.doRollover()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 393, in doRollover\n",
+      "    self.rotate(self.baseFilename, dfn)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\logging\\handlers.py\", line 110, in rotate\n",
+      "    os.rename(source, dest)\n",
+      "PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\\\Peter Moss AML Leukemia Research\\\\ALL-PyTorch-2020\\\\Classifier\\\\Logs\\\\all.log' -> 'C:\\\\Peter Moss AML Leukemia Research\\\\ALL-PyTorch-2020\\\\Classifier\\\\Logs\\\\all.log.2020-12-30_00'\n",
+      "Call stack:\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\runpy.py\", line 193, in _run_module_as_main\n",
+      "    \"__main__\", mod_spec)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\runpy.py\", line 85, in _run_code\n",
+      "    exec(code, run_globals)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py\", line 16, in <module>\n",
+      "    app.launch_new_instance()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\traitlets\\config\\application.py\", line 658, in launch_instance\n",
+      "    app.start()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelapp.py\", line 505, in start\n",
+      "    self.io_loop.start()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\platform\\asyncio.py\", line 148, in start\n",
+      "    self.asyncio_loop.run_forever()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\base_events.py\", line 539, in run_forever\n",
+      "    self._run_once()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\base_events.py\", line 1775, in _run_once\n",
+      "    handle._run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\asyncio\\events.py\", line 88, in _run\n",
+      "    self._context.run(self._callback, *self._args)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\ioloop.py\", line 690, in <lambda>\n",
+      "    lambda f: self._run_callback(functools.partial(callback, future))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\ioloop.py\", line 743, in _run_callback\n",
+      "    ret = callback()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 787, in inner\n",
+      "    self.run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 748, in run\n",
+      "    yielded = self.gen.send(value)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 378, in dispatch_queue\n",
+      "    yield self.process_one()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 225, in wrapper\n",
+      "    runner = Runner(result, future, yielded)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 714, in __init__\n",
+      "    self.run()\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 748, in run\n",
+      "    yielded = self.gen.send(value)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 365, in process_one\n",
+      "    yield gen.maybe_future(dispatch(*args))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 272, in dispatch_shell\n",
+      "    yield gen.maybe_future(handler(stream, idents, msg))\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 542, in execute_request\n",
+      "    user_expressions, allow_stdin,\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n",
+      "    yielded = next(result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\ipkernel.py\", line 294, in do_execute\n",
+      "    res = shell.run_cell(code, store_history=store_history, silent=silent)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\ipykernel\\zmqshell.py\", line 536, in run_cell\n",
+      "    return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2854, in run_cell\n",
+      "    raw_cell, store_history, silent, shell_futures)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2880, in _run_cell\n",
+      "    return runner(coro)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\async_helpers.py\", line 68, in _pseudo_sync_runner\n",
+      "    coro.send(None)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3057, in run_cell_async\n",
+      "    interactivity=interactivity, compiler=compiler, result=result)\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3248, in run_ast_nodes\n",
+      "    if (await self.run_code(code, result,  async_=asy)):\n",
+      "  File \"C:\\Users\\Allen\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3325, in run_code\n",
+      "    exec(code_obj, self.user_global_ns, self.user_ns)\n",
+      "  File \"<ipython-input-9-afcd5a747e46>\", line 7, in <module>\n",
+      "    train_on_gpu=True, n_epochs=epochs)\n",
+      "  File \"C:\\Peter Moss AML Leukemia Research\\ALL-PyTorch-2020\\Classifier\\Classes\\Model_2020.py\", line 153, in learner\n",
+      "    helper.logger.info('-' * 10)\n",
+      "Message: '----------'\n",
+      "Arguments: ()\n"
+     ]
+    },
+    {
+     "ename": "KeyboardInterrupt",
+     "evalue": "",
+     "output_type": "error",
+     "traceback": [
+      "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
+      "\u001B[1;31mKeyboardInterrupt\u001B[0m                         Traceback (most recent call last)",
+      "\u001B[1;32m<ipython-input-9-afcd5a747e46>\u001B[0m in \u001B[0;36m<module>\u001B[1;34m\u001B[0m\n\u001B[0;32m      5\u001B[0m                               \u001B[0mcriterion\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mtrain_size\u001B[0m\u001B[1;33m,\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m      6\u001B[0m                               \u001B[0mvalid_size\u001B[0m\u001B[1;33m,\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m----> 7\u001B[1;33m                               train_on_gpu=True, n_epochs=epochs)\n\u001B[0m\u001B[0;32m      8\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n",
+      "\u001B[1;32mC:\\Peter Moss AML Leukemia Research\\ALL-PyTorch-2020\\Classifier\\Classes\\Model_2020.py\u001B[0m in \u001B[0;36mlearner\u001B[1;34m(model, train_data_loader, valid_data_loader, optimizer, scheduler, loss_function, trainset_size, validset_size, train_on_gpu, n_epochs)\u001B[0m\n\u001B[0;32m    160\u001B[0m             \u001B[0mscheduler\u001B[0m\u001B[1;33m,\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m    161\u001B[0m             \u001B[0mtrainset_size\u001B[0m\u001B[1;33m,\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 162\u001B[1;33m             \u001B[0mtrain_on_gpu\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m    163\u001B[0m         )\n\u001B[0;32m    164\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n",
+      "\u001B[1;32mC:\\Peter Moss AML Leukemia Research\\ALL-PyTorch-2020\\Classifier\\Classes\\Model_2020.py\u001B[0m in \u001B[0;36mtrain_epoch\u001B[1;34m(model, data_loader, loss_function, optimizer, scheduler, trainset_size, train_on_gpu)\u001B[0m\n\u001B[0;32m     73\u001B[0m     \u001B[0mcorrect_predictions\u001B[0m \u001B[1;33m=\u001B[0m \u001B[1;36m0\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m     74\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 75\u001B[1;33m     \u001B[1;32mfor\u001B[0m \u001B[0mi\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mdataset\u001B[0m \u001B[1;32min\u001B[0m \u001B[0menumerate\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mdata_loader\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m     76\u001B[0m         \u001B[0minputs\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mlabels\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mdataset\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m     77\u001B[0m         \u001B[1;32mif\u001B[0m \u001B[0mtrain_on_gpu\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n",
+      "\u001B[1;32m~\\Anaconda3\\lib\\site-packages\\torch\\utils\\data\\dataloader.py\u001B[0m in \u001B[0;36m__next__\u001B[1;34m(self)\u001B[0m\n\u001B[0;32m    344\u001B[0m     \u001B[1;32mdef\u001B[0m \u001B[0m__next__\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mself\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m    345\u001B[0m         \u001B[0mindex\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0m_next_index\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m)\u001B[0m  \u001B[1;31m# may raise StopIteration\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 346\u001B[1;33m         \u001B[0mdata\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0m_dataset_fetcher\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mfetch\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mindex\u001B[0m\u001B[1;33m)\u001B[0m  \u001B[1;31m# may raise StopIteration\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m    347\u001B[0m         \u001B[1;32mif\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0m_pin_memory\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m    348\u001B[0m             \u001B[0mdata\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0m_utils\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mpin_memory\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mpin_memory\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mdata\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n",
+      "\u001B[1;32m~\\Anaconda3\\lib\\site-packages\\torch\\utils\\data\\_utils\\fetch.py\u001B[0m in \u001B[0;36mfetch\u001B[1;34m(self, possibly_batched_index)\u001B[0m\n\u001B[0;32m     42\u001B[0m     \u001B[1;32mdef\u001B[0m \u001B[0mfetch\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mself\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mpossibly_batched_index\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m     43\u001B[0m         \u001B[1;32mif\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mauto_collation\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 44\u001B[1;33m             \u001B[0mdata\u001B[0m \u001B[1;33m=\u001B[0m \u001B[1;33m[\u001B[0m\u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mdataset\u001B[0m\u001B[1;33m[\u001B[0m\u001B[0midx\u001B[0m\u001B[1;33m]\u001B[0m \u001B[1;32mfor\u001B[0m \u001B[0midx\u001B[0m \u001B[1;32min\u001B[0m \u001B[0mpossibly_batched_index\u001B[0m\u001B[1;33m]\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m     45\u001B[0m         \u001B[1;32melse\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m     46\u001B[0m             \u001B[0mdata\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mdataset\u001B[0m\u001B[1;33m[\u001B[0m\u001B[0mpossibly_batched_index\u001B[0m\u001B[1;33m]\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n",
+      "\u001B[1;32m~\\Anaconda3\\lib\\site-packages\\torch\\utils\\data\\_utils\\fetch.py\u001B[0m in \u001B[0;36m<listcomp>\u001B[1;34m(.0)\u001B[0m\n\u001B[0;32m     42\u001B[0m     \u001B[1;32mdef\u001B[0m \u001B[0mfetch\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mself\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mpossibly_batched_index\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m     43\u001B[0m         \u001B[1;32mif\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mauto_collation\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 44\u001B[1;33m             \u001B[0mdata\u001B[0m \u001B[1;33m=\u001B[0m \u001B[1;33m[\u001B[0m\u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mdataset\u001B[0m\u001B[1;33m[\u001B[0m\u001B[0midx\u001B[0m\u001B[1;33m]\u001B[0m \u001B[1;32mfor\u001B[0m \u001B[0midx\u001B[0m \u001B[1;32min\u001B[0m \u001B[0mpossibly_batched_index\u001B[0m\u001B[1;33m]\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m     45\u001B[0m         \u001B[1;32melse\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m     46\u001B[0m             \u001B[0mdata\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mdataset\u001B[0m\u001B[1;33m[\u001B[0m\u001B[0mpossibly_batched_index\u001B[0m\u001B[1;33m]\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n",
+      "\u001B[1;32mC:\\Peter Moss AML Leukemia Research\\ALL-PyTorch-2020\\Classifier\\Classes\\Data.py\u001B[0m in \u001B[0;36m__getitem__\u001B[1;34m(self, index)\u001B[0m\n\u001B[0;32m     46\u001B[0m         \u001B[0mimg_name\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mlabel\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mdf\u001B[0m\u001B[1;33m[\u001B[0m\u001B[0mindex\u001B[0m\u001B[1;33m]\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m     47\u001B[0m         \u001B[0mimg_path\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mos\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mpath\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mjoin\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mdata_dir\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mimg_name\u001B[0m \u001B[1;33m+\u001B[0m \u001B[1;34m'.jpg'\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 48\u001B[1;33m         \u001B[0mimage\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mImage\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mopen\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mimg_path\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m     49\u001B[0m         \u001B[1;32mif\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mtransform\u001B[0m \u001B[1;32mis\u001B[0m \u001B[1;32mnot\u001B[0m \u001B[1;32mNone\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m     50\u001B[0m             \u001B[0mimage\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mtransform\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mimage\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n",
+      "\u001B[1;32m~\\Anaconda3\\lib\\site-packages\\PIL\\Image.py\u001B[0m in \u001B[0;36mopen\u001B[1;34m(fp, mode)\u001B[0m\n\u001B[0;32m   2777\u001B[0m         \u001B[0mexclusive_fp\u001B[0m \u001B[1;33m=\u001B[0m \u001B[1;32mTrue\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m   2778\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m-> 2779\u001B[1;33m     \u001B[0mprefix\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mfp\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mread\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;36m16\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m   2780\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m   2781\u001B[0m     \u001B[0mpreinit\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n",
+      "\u001B[1;31mKeyboardInterrupt\u001B[0m: "
+     ]
+    }
+   ],
+   "source": [
+    "# begin training\n",
+    "real_model, history = learner(model, train_data_loader,\n",
+    "                              valid_data_loader,\n",
+    "                              optimizer, scheduler,\n",
+    "                              criterion, train_size,\n",
+    "                              valid_size,\n",
+    "                              train_on_gpu=True, n_epochs=epochs)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# plot model loss and accuracy\n",
+    "plot_training_history(history, save_path=acc_loss_png)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Get model prediction\n",
+    "y_pred, y_test = get_predictions(real_model,valid_data_loader)\n",
+    "# Get model precision, recall and f1_score\n",
+    "helper.logger.info(classification_report(y_test, y_pred, target_names=class_name))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Get model confusion matrix\n",
+    "cm = confusion_matrix(y_test, y_pred)\n",
+    "confusion_matrix2(cm, class_name,save_path=confusion_png)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "prediction = predict_probability(real_model,validation_transforms, 'C:\\Peter Moss AML Leukemia Research\\ALL-PyTorch-2020\\Classifier\\Model\\Data\\Test\\Im047_0.jpg')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "prediction"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "show_prediction_confidence(prediction, class_name)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Model Interpretation"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "#prediction = predict_probability(real_model, validation_transforms, image_path)\n",
+    "interpret_model(real_model,validation_transforms, image_path, label_idx, use_cpu=True, intrepret_type=\"integrated gradients\")\n",
+    "interpret_model(real_model,validation_transforms, image_path, label_idx, use_cpu=True, intrepret_type=\"gradient shap\")\n",
+    "interpret_model(real_model,validation_transforms, image_path, label_idx, use_cpu=True, intrepret_type=\"saliency\")\n",
+    "\n",
+    "interpret_model(real_model,validation_transforms, image_path2, label_idx, use_cpu=True, intrepret_type=\"integrated gradients\")\n",
+    "interpret_model(real_model,validation_transforms, image_path2, label_idx, use_cpu=True, intrepret_type=\"gradient shap\")\n",
+    "interpret_model(real_model,validation_transforms, image_path2, label_idx, use_cpu=True, intrepret_type=\"saliency\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "#train data directory\n",
+    "test_dir = 'C:/Peter Moss AML Leukemia Research/Dataset/all_test/'\n",
+    "test_csv = 'C:/Peter Moss AML Leukemia Research/Dataset/test.csv'\n",
+    "label_csv = pd.read_csv(test_csv)\n",
+    "testset = LeukemiaDataset(df_data=label_csv, data_dir=test_dir, transform=validation_transforms)\n",
+    "test_data_loader = DataLoader(testset, batch_size=batch_size, shuffle=True)\n",
+    "show_predictions(model=real_model, class_names=class_name, test_data_loader=test_data_loader, n_images=6)"
+   ]
+  },
+  {
+   "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.7.3"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file