Switch to side-by-side view

--- a
+++ b/Code/PennyLane/2 Class 4 Class 10 Class/10 Class 83.0% kkawchak.ipynb
@@ -0,0 +1,1804 @@
+{
+  "cells": [
+    {
+      "cell_type": "code",
+      "execution_count": 90,
+      "metadata": {
+        "id": "WNXEyZ23rdz-"
+      },
+      "outputs": [],
+      "source": [
+        "# This cell is added by sphinx-gallery\n",
+        "# It can be customized to whatever you like\n",
+        "#from google.colab import drive\n",
+        "#drive.mount('/content/drive')"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "source": [],
+      "metadata": {
+        "id": "WYVI3RMhAdap"
+      }
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 91,
+      "metadata": {
+        "id": "sANL984ird0B"
+      },
+      "outputs": [],
+      "source": [
+        "#!pip install pennylane\n",
+        "# Some parts of this code are based on the Python script:\n",
+        "# https://github.com/pytorch/tutorials/blob/master/beginner_source/transfer_learning_tutorial.py\n",
+        "# License: BSD\n",
+        "\n",
+        "import time\n",
+        "import os\n",
+        "import copy\n",
+        "\n",
+        "# PyTorch\n",
+        "import torch\n",
+        "import torch.nn as nn\n",
+        "import torch.optim as optim\n",
+        "from torch.optim import lr_scheduler\n",
+        "import torchvision\n",
+        "from torchvision import datasets, transforms\n",
+        "\n",
+        "# Pennylane\n",
+        "import pennylane as qml\n",
+        "from pennylane import numpy as np\n",
+        "\n",
+        "torch.manual_seed(42)\n",
+        "np.random.seed(42)\n",
+        "\n",
+        "# Plotting\n",
+        "import matplotlib.pyplot as plt\n",
+        "\n",
+        "# OpenMP: number of parallel threads.\n",
+        "os.environ[\"OMP_NUM_THREADS\"] = \"16\""
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "o7eGTk_Prd0B"
+      },
+      "source": [
+        "Setting of the main hyper-parameters of the model\n",
+        "=================================================\n",
+        "\n",
+        "::: {.note}\n",
+        "::: {.title}\n",
+        "Note\n",
+        ":::\n",
+        "\n",
+        "To reproduce the results of Ref. \\[1\\], `num_epochs` should be set to\n",
+        "`30` which may take a long time. We suggest to first try with\n",
+        "`num_epochs=1` and, if everything runs smoothly, increase it to a larger\n",
+        "value.\n",
+        ":::\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 92,
+      "metadata": {
+        "id": "Wncy61Mdrd0B"
+      },
+      "outputs": [],
+      "source": [
+        "n_qubits = 20               # Number of qubits\n",
+        "step = 0.0006               # Learning rate\n",
+        "batch_size = 9              # Number of samples for each training step\n",
+        "num_epochs = 60             # Number of training epochs\n",
+        "q_depth = 6                 # Depth of the quantum circuit (number of variational layers)\n",
+        "gamma_lr_scheduler = 0.1    # Learning rate reduction applied every 10 epochs.\n",
+        "q_delta = 0.01              # Initial spread of random quantum weights\n",
+        "start_time = time.time()    # Start of the computation timer"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "PVqjLo8Rrd0B"
+      },
+      "source": [
+        "We initialize a PennyLane device with a `default.qubit` backend.\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 93,
+      "metadata": {
+        "id": "qLOa5trRrd0B"
+      },
+      "outputs": [],
+      "source": [
+        "dev = qml.device(\"default.qubit\", wires=n_qubits)"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "dxlK7Jjtrd0C"
+      },
+      "source": [
+        "We configure PyTorch to use CUDA only if available. Otherwise the CPU is\n",
+        "used.\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 94,
+      "metadata": {
+        "id": "Br_YGwRDrd0C"
+      },
+      "outputs": [],
+      "source": [
+        "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "WFHuYd5xrd0C"
+      },
+      "source": [
+        "Dataset loading\n",
+        "===============\n",
+        "\n",
+        "::: {.note}\n",
+        "::: {.title}\n",
+        "Note\n",
+        ":::\n",
+        "\n",
+        "The dataset containing images of *ants* and *bees* can be downloaded\n",
+        "[here](https://download.pytorch.org/tutorial/hymenoptera_data.zip) and\n",
+        "should be extracted in the subfolder `../_data/hymenoptera_data`.\n",
+        ":::\n",
+        "\n",
+        "This is a very small dataset (roughly 250 images), too small for\n",
+        "training from scratch a classical or quantum model, however it is enough\n",
+        "when using *transfer learning* approach.\n",
+        "\n",
+        "The PyTorch packages `torchvision` and `torch.utils.data` are used for\n",
+        "loading the dataset and performing standard preliminary image\n",
+        "operations: resize, center, crop, normalize, *etc.*\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "source": [
+        "#os.system(\"rm -rf /content/data/.ipynb_checkpoints\")\n",
+        "#os.system(\"rm -rf /content/data/braintumor_data/.ipynb_checkpoints\")\n",
+        "#os.system(\"rm -rf /content/data/braintumor_data/train/.ipynb_checkpoints\")\n",
+        "#os.system(\"rm -rf /content/data/braintumor_data/val/.ipynb_checkpoints\")"
+      ],
+      "metadata": {
+        "id": "DM8SDO3Wthcc"
+      },
+      "execution_count": 95,
+      "outputs": []
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 96,
+      "metadata": {
+        "id": "jQrNNVnUrd0C"
+      },
+      "outputs": [],
+      "source": [
+        "data_transforms = {\n",
+        "    \"train\": transforms.Compose(\n",
+        "        [\n",
+        "            # transforms.RandomResizedCrop(224),     # uncomment for data augmentation\n",
+        "            # transforms.RandomHorizontalFlip(),     # uncomment for data augmentation\n",
+        "            transforms.Resize(256),\n",
+        "            transforms.CenterCrop(224),\n",
+        "            transforms.ToTensor(),\n",
+        "            # Normalize input channels using mean values and standard deviations of ImageNet.\n",
+        "            transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),\n",
+        "        ]\n",
+        "    ),\n",
+        "    \"val\": transforms.Compose(\n",
+        "        [\n",
+        "            transforms.Resize(256),\n",
+        "            transforms.CenterCrop(224),\n",
+        "            transforms.ToTensor(),\n",
+        "            transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),\n",
+        "        ]\n",
+        "    ),\n",
+        "}\n",
+        "\n",
+        "data_dir = \"/content/drive/MyDrive/Colab Notebooks/data/10 Classes Brain Tumor MRI Images\"\n",
+        "image_datasets = {\n",
+        "    x if x == \"train\" else \"validation\": datasets.ImageFolder(\n",
+        "        os.path.join(data_dir, x), data_transforms[x]\n",
+        "    )\n",
+        "    for x in [\"train\", \"val\"]\n",
+        "}\n",
+        "dataset_sizes = {x: len(image_datasets[x]) for x in [\"train\", \"validation\"]}\n",
+        "class_names = image_datasets[\"train\"].classes\n",
+        "\n",
+        "# Initialize dataloader\n",
+        "dataloaders = {\n",
+        "    x: torch.utils.data.DataLoader(image_datasets[x], batch_size=batch_size, shuffle=True)\n",
+        "    for x in [\"train\", \"validation\"]\n",
+        "}\n",
+        "\n",
+        "# function to plot images\n",
+        "def imshow(inp, title=None):\n",
+        "    \"\"\"Display image from tensor.\"\"\"\n",
+        "    inp = inp.numpy().transpose((1, 2, 0))\n",
+        "    # Inverse of the initial normalization operation.\n",
+        "    mean = np.array([0.485, 0.456, 0.406])\n",
+        "    std = np.array([0.229, 0.224, 0.225])\n",
+        "    inp = std * inp + mean\n",
+        "    inp = np.clip(inp, 0, 1)\n",
+        "    plt.imshow(inp)\n",
+        "    if title is not None:\n",
+        "        plt.title(title)"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "piWk71nkrd0C"
+      },
+      "source": [
+        "Let us show a batch of the test data, just to have an idea of the\n",
+        "classification problem.\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 97,
+      "metadata": {
+        "colab": {
+          "base_uri": "https://localhost:8080/",
+          "height": 161
+        },
+        "id": "u55iZYEOrd0D",
+        "outputId": "6824882e-44e0-4e15-9901-de24a8ce997a"
+      },
+      "outputs": [
+        {
+          "output_type": "display_data",
+          "data": {
+            "text/plain": [
+              "<Figure size 640x480 with 1 Axes>"
+            ],
+            "image/png": "iVBORw0KGgoAAAANSUhEUgAABRwAAAC+CAYAAABXjsMzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydd3gc1dn27+2976p3yZbl3gvgBg4GTO8YAgYCIQnkTSGFj4BtQgiEkJA3hEAIwQRMCcSEQCCA6d02LrjKtppVV6vtvc73h3iOZ7WrYiPZJO/5XZdcZndnzpxzZlbnnvt5HokgCAI4HA6Hw+FwOBwOh8PhcDgcDmcUkB7vBnA4HA6Hw+FwOBwOh8PhcDic/x644MjhcDgcDofD4XA4HA6Hw+FwRg0uOHI4HA6Hw+FwOBwOh8PhcDicUYMLjhwOh8PhcDgcDofD4XA4HA5n1OCCI4fD4XA4HA6Hw+FwOBwOh8MZNbjgyOFwOBwOh8PhcDgcDofD4XBGDS44cjgcDofD4XA4HA6Hw+FwOJxRgwuOHA6Hw+FwOBwOh8PhcDgcDmfU4IIjh8PhcDgcDofD4XA4HA6Hwxk1jkhwXLVqFSQSCSQSCSZPnjxWbeJwRo1Vq1ahqqpqzI8jkUiwZs2aMT8O5/iyZMkSLFmyZEyP0draColEgnXr1o3pcTjHn6qqKqxatWpMj/HOO+9AIpHgnXfeGdPjcP47OBb3OM5Xm2Px+8y6desgkUjQ2to6psfhcDjHB77+4owmfP11/PnHP/7BdECJRIItW7aM+LNH7HC02+144okncPfdd2dtr6qqOuILvqqqChKJBDfddFPOa7RIev7553Ne2717N6644gqUlpZCpVKhpKQEl19+OXbv3p3zXvqlhn7kcjlKS0uxatUqdHZ25rx/yZIlkEgkGDduXN42v/HGG2xf+doGAA8++CAkEgnmzZs36LlLJBLceOONg74+ELoIRvLT2tqKffv24cc//jGmT58Og8GA4uJirFixIu/kWLVq1VFfxNS/YkajDzljC11fI/kBgM2bN+PGG2/EpEmToNPpUFFRgYsvvhj79+/P2feSJUuOWkRZs2ZNzi8odJ9YtmxZ3s888sgjR3Xz44weA++zg/3Q2L755pu45pprMH78eGi1WtTU1OAb3/gGuru7c/Z9NN8tRL57G7XlG9/4Rt7P3Hrrrew9fX19R3VczpdjzZo1I5pPNLYbNmzAJZdcgpqaGmi1WtTX1+OHP/whfD5fzr6/zC+TQ93b9u7dC4lEArVanfe4IyESiWDNmjVfKXG4q6sLa9aswfbt2493U46Y/5R5JP797s4778z7mcsvvxwSiQR6vf6ojsn58ohNF0P9rFq1CplMBuvWrcPZZ5+N8vJy6HQ6TJ48GXfeeSdisVjWfmn8j/a65+uvw/D1F19/fdU50vVXKBTC6tWrcdppp8FqtQ753cPXX//3OJbrr9mzZ+OJJ57A9ddff8TtlB/pB3Q6Ha644oojPtBQPPLII7jllltQUlIy7Hs3bNiAyy67DFarFddeey2qq6vR2tqKRx99FM8//zyeeeYZnHfeeTmfu+OOO1BdXY1YLIZPPvkE69atwwcffIBdu3ZBrVZnvVetVuPgwYPYtGkT5s6dm/Xa+vXroVarc35hGPieqqoqbNq0CQcPHkRdXd0Ie2JwHA4Hnnjiiaxt9913Hzo6OvDb3/42572rV6/Go48+igsuuADf/va34ff78fDDD2P+/Pn497//PejNY7T4sn04WjzyyCPIZDJjfpxoNAq5/Igvp+NGQ0NDzny65ZZboNfrceutt+a8/5577sGHH36Iiy66CFOnTkVPTw8eeOABzJw5E5988smYO57VajXefvtt9PT0oKioKOu1YzmfXn/99TE/RmVlJaLRKBQKxZgfa7RYtGhRznz6xje+gblz52Z9MdFi+Sc/+Qk8Hg8uuugijBs3Ds3NzXjggQfw8ssvY/v27TljPNqo1Wr8/e9/x4MPPgilUpn12tNPP33M5lNjYyOk0rHNbLJo0SJEo9Gc8/wqc/7552d9b4ZCIXzrW9/Ceeedh/PPP59tLywsBABcf/31KCkpwRVXXIGKigrs3LkTDzzwAF555RVs3boVGo1mzNv85JNPoqioCF6vF88///yggvZQRCIRrF27FgCOehH6ZRl4j+vq6sLatWtRVVWF6dOnH5c2HS3/afNIrVbj6aefxs9+9rOs7eFwGC+++GLO76pjxbH4febrX/86Lr30UqhUqjE9zmjyzW9+M+t355aWFtx+++24/vrrsXDhQra9trYWkUgEV199NebPn48bbrgBBQUF+Pjjj7F69Wq8+eabeOutt3LEouMBX38ND19/HR18/ZWfI11/9fX14Y477kBFRQWmTZt2zB9I8vXXV5tjuf4qKyvDFVdcgVQqhT/96U9H1lDhCLjqqquEysrKvK9VVlYKq1evPpLdCZWVlcKkSZMEuVwu3HTTTVmvvf322wIA4bnnnmPbDh48KGi1WmHChAlCb29v1vtdLpcwYcIEQafTCU1NTWz7Y489JgAQNm/enPX+n/zkJwIA4dlnn83avnjxYmHSpElCfX298L3vfS/rtWg0KhiNRuGCCy7IaRvR3NwsABA2bNggOBwOYc2aNXnPHYDwne98Z4jeGZ4VK1YMOh5btmwRgsFg1ra+vj7B4XAIJ554Ytb2q666Sli8ePFRtYH6V8yX7UPO8WHSpEmDzoMPP/xQiMfjWdv2798vqFQq4fLLL8/avnjxYuGqq646qjasXr06Z05XVlYKp5xyimA0GoX7778/67X29nZBKpWy+TTwOuccP3Q63aDz4N133xXS6XTONgDCrbfemrX9aL5biHz3NgDCueeeK0ilUuEf//hH1msffvihAIDNJ5fLdVTH5YwuLpdLADDoPHj77bdztj3++OMCAOGRRx7J2g5AeOyxx46qHYPd2zKZjFBVVSX84Ac/EM477zxhyZIlR7X/4c5zIKFQ6KiOcyRs3rz5S/XZV4mv6jxqaWkRAAjnn3++AEDYvn171vvXr18vKBQK4ayzzhJ0Ot1RHZMz+gx1bcTjceHDDz/M2b527VoBgPDGG2+wbTT++ebfSODrr374+ouvv/5TGWr9FYvFhO7ubkEQhv8+5usvjiCM/fprsHv7UBz3ojFVVVW48sor8cgjj6Crq2vI9957772IRCL405/+BIfDkfWa3W7Hww8/jHA4jF/96lfDHpeeRjY1NeV9/bLLLsOzzz6b9XTmpZdeQiQSwcUXXzzoftevXw+LxYIVK1bgwgsvxPr164dty1gwa9asnNAbm82GhQsXYu/evcekDUfTh52dnbjmmmtQWFgIlUqFSZMm4S9/+UvWe8iO/re//Q2/+MUvUFZWBrVajVNOOQUHDx7Meu/AHCIUGvHrX/8af/rTn1BbWwuVSoU5c+Zg8+bNOe157rnnMHHiRKjVakyePBkvvPBC3rwkEkluDpFt27bh9NNPh9FohF6vxymnnIJPPvkk6z1khf7ggw/w3e9+Fw6HA2azGd/85jeRSCTg8/lw5ZVXwmKxwGKx4Mc//jEEQcjax69//WuccMIJsNls0Gg0mDVr1qiHSpxwwgk5Dqlx48Zh0qRJx2Q+qdVqnH/++Xjqqaeytj/99NOwWCxYvnx53s/t27cPF154IaxWK9RqNWbPno1//vOfWe+hMfjwww/xgx/8AA6HAzqdDueddx5cLlfWe5cMyCFyJHMRAP7whz+gpqYGGo0Gc+fOxfvvv5+zz8FyiLz11ltYuHAhdDodzGYzzjnnnJy+pxDC/fv344orroDJZILD4cBtt90GQRDQ3t6Oc845B0ajEUVFRbjvvvuyPp9IJHD77bdj1qxZMJlM0Ol0WLhwId5+++28/Xu0LFq0KMfZt2jRIlit1mMyn0pLS7Fo0aKc+bR+/XpMmTJlUMfup59+itNOOw0mkwlarRaLFy/Ghx9+mPUeGoODBw9i1apVMJvNMJlMuPrqqxGJRLLeOzCH45HMxUwmgzVr1qCkpARarRZLly7Fnj17cvY5WA7H5557DrNmzYJGo4HdbscVV1yRE+a2atUq6PV6HDp0CGeeeSb0ej1KS0vxhz/8AQCwc+dOnHzyydDpdKisrMzpT4/Hg5tvvhlTpkyBXq+H0WjE6aefjh07duTt36MlnxuQnDbHYj59+OGHaG1txaWXXopLL70U7733Hjo6OnLet2XLFixfvhx2ux0ajQbV1dW45pprAPRf9/R7zdq1a1kYDH2v0Fg0NTXhjDPOgMFgwOWXXw6g3wH3wx/+EOXl5VCpVKivr8evf/3rnO8KoN+JOXfuXGi1WlgsFixatCjLOSC+H73zzjuYM2cOAODqq69mbRLfm/g8Gj0WLFiA6urqvPclCqfLx6uvvsq+GwwGA1asWJET4kpj0NnZiXPPPRd6vR4OhwM333wz0ul01nsH/j5zJPe0aDSK7373u7Db7TAYDDj77LPR2dmZs8/Bcjg++OCDmDRpEgvX/c53vpMT0r5kyRJMnjwZn3/+ORYvXgytVou6ujr2e8+7776LefPmQaPRoL6+Hhs3bsz6fFtbG7797W+jvr4eGo0GNpsNF1100ajmk1QqlTjhhBNyth/L+TQcfP01NvD1Vz98/TU6qFSqMY/6GQq+/uLrr9HguAuOQH/OrFQqlZMXciAvvfQSqqqqskIXxCxatAhVVVX417/+Newx6RcLi8WS9/WVK1eiu7s7a5H21FNP4ZRTTkFBQcGg+12/fj3OP/98KJVKXHbZZThw4EDeG+nxoqenB3a7/Zgc60j70Ol0Yv78+di4cSNuvPFG/O53v0NdXR2uvfZa3H///Tnvv/vuu/HCCy/g5ptvxi233IJPPvmELcCG46mnnsK9996Lb37zm7jzzjvR2tqK888/H8lkkr3nX//6Fy655BIoFAr88pe/xPnnn49rr70Wn3322bD73717NxYuXIgdO3bgxz/+MW677Ta0tLRgyZIl+PTTT3Pef9NNN+HAgQNYu3Ytzj77bPzpT3/CbbfdhrPOOgvpdBp33XUXTjrpJNx777051unf/e53mDFjBu644w7cddddkMvluOiii0Z0HXwZBEGA0+k8pvNp06ZNWb+kPvXUU7jwwgvz2t93796N+fPnY+/evfjpT3+K++67DzqdDueeey5eeOGFnPffdNNN2LFjB1avXo1vfetbeOmll0ac52ckc/GPf/wjbrzxRpSVleFXv/oVFi5ciHPPPTevMDGQjRs3Yvny5ejt7cWaNWvwgx/8AB999BFOPPHEvIukSy65BJlMBnfffTfmzZuHO++8E/fffz++9rWvobS0FPfccw/q6upw880347333mOfCwQC+POf/4wlS5bgnnvuwZo1a+ByubB8+fIxz+EWCoUQCoWO6Xx66aWXEAqFAACpVArPPfccVq5cmff9b731FhYtWoRAIIDVq1fjrrvugs/nw8knn4xNmzblvP/iiy9GMBjEL3/5S1x88cVYt24dC5cdjpHMxVtuuQVr167F7Nmzce+992LcuHFYvnw5wuHwsPtft24dLr74YshkMvzyl7/Eddddhw0bNuCkk07KWdyn02mcfvrpKC8vx69+9StUVVXhxhtvxLp163Daaadh9uzZuOeee2AwGHDllVeipaWFfba5uRn/+Mc/cOaZZ+I3v/kNfvSjH2Hnzp1YvHjxsAvcL0tPTw8AHJP5tH79etTW1mLOnDk466yzoNVq8fTTT2e9p7e3F6eeeipaW1vx05/+FL///e9x+eWXs0WQw+HAH//4RwD9osQTTzyBJ554Iiv0N5VKYfny5SgoKMCvf/1rXHDBBRAEAWeffTZ++9vf4rTTTsNvfvMb1NfX40c/+hF+8IMfZLVh7dq1+PrXvw6FQoE77rgDa9euRXl5Od56662859XQ0IA77rgDQH+4MbVp0aJFAPg8Ggsuu+wyPPPMM2xh29fXh9dff33Q+9ITTzyBFStW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Heeccw4ee+wxxOPxER9LLpfnLNLb2tpQUlKS873a0NDAXgf686VJpVJMnDjxaE8157gAn0djwcqVK/Hcc8/h4MGD+Oijj4a9L5188sk596XXX3895zsu3xhYLJYR3ZOAkd2XpFIpqqurs943kkrBg80npVKJmpqanPk02LzJ9zuTuI1Af57J22+/neU8pfnk8/nGbD49++yz+NnPfoZrr70256HB8Yavv8YOvv7Kha+//jPh669s+PrryPhK1ZG/9dZb8cQTT+Cee+7Bueeem/WayWRCcXExPv/88yH38fnnn6O0tBRGozFr+9y5czF79mwAwLnnnouTTjoJK1euRGNj46BfAMXFxViyZAnuu+8+fPjhh/j73/8+6HHfeustdHd345lnnsEzzzyT8/r69etx6qmnDtn2sSCRSOD888/H559/jtdee23QYghjxUj7kNxBV1xxxaCOualTp2b9fzChS8iTKH8gX+azY8Fg7cm3XdzG999/H2effTYWLVqEBx98EMXFxVAoFHjsscdyEvyOBn6/H6effjp8Ph/ef/99lJSUjPoxhmLevHmora3F9773PbS0tAy6EKP5dPPNNw+a0Hjgl89/+3waSRuffPJJrFq1Cueeey5+9KMfoaCggOVnGyzB+5ehvb0dp556KkwmE1555ZVhHRSjzdlnnw2VSoWrrroK8Xh80GTqNJ/uvfdeTJ8+Pe97Bn6P/LfMpyO5NwHZbbzrrrtw22234ZprrsHPf/5zWK1WSKVSfO9738txhI4GO3bswNlnn43Jkyfj+eefz3qaPRYEAgG89NJLiMVieR1wTz31FH7xi1+wYivPP/88PvnkE7z00kt47bXXcM011+C+++7DJ598MqKFqNjp958Gn0cj57LLLsMtt9yC6667DjabbdDfHencn3jiibxFBQa2+8s+HPxvuS/ddNNNeOyxx/C9730PCxYsgMlkgkQiwaWXXjom8+mNN97AlVdeiRUrVuChhx4a9f2PBnz9Nfrw9Vd+vkr3EeA/Z/11vOHrr5HB11/5+UoJjrW1tbjiiivw8MMPZ4VEEGeeeSYeeeQRfPDBBzjppJNyXn///ffR2tqKb37zm0MehwZw6dKleOCBB/DTn/500PeuXLkS3/jGN2A2m3HGGWcM+r7169ejoKCAVV0Us2HDBrzwwgt46KGHsuzXY00mk8GVV16JN998E3/729+wePHiY3ZsMSPpQ4fDAYPBgHQ6jWXLlh3jFuZCYZX5Kl3l2ybG4XBAq9WisbEx57V9+/ZBKpXmPDk7Wv7+979DrVbjtddey3pi/Nhjj43K/sXEYjGcddZZ2L9/PzZu3DhqTpkj5bLLLsOdd96JhoaGQcUfCqVQKBRfuflEIT9AfxGI1tbWnF/m8n12sPlkt9uh0+lGpZ3PP/88ampqsGHDhqwnl/RUcjRxu9049dRTEY/H8eabb6K4uHjUjzEcGo0G5557Lp588kmcfvrpgyZMrq2tBQAYjcav3HwSu4ncbvewT4TF82lg+ERjY2PekPKj5fnnn8fSpUvx6KOPZm33+Xyjnpy6qakJp512GgoKCvDKK68cEyfJhg0bEIvF8Mc//jHnfBobG/Gzn/0MH374YdbvK/Pnz8f8+fPxi1/8Ak899RQuv/xyPPPMM/jGN75xVKHNlZWV2LhxI4LBYNYvjPv27WOvA/1zOJPJYM+ePYPeN/MxWJv4PBo7KioqcOKJJ+Kdd97Bt771rUEFT7ovFRQUfGXuS5lMBi0tLVkC/HC/M9Fngf65Iw6FTCQSaGlpGdXze/7553HVVVdlVQmNxWI5hY5Gg08//RTnnXceZs+ejb/97W/HXLweKXz9Nbrw9dfRw9dfX134+uswfP11ZHzlHpX/7Gc/QzKZxK9+9auc1370ox9Bo9Hgm9/8Jtxud9ZrHo8HN9xwA7RaLX70ox8Ne5wlS5Zg7ty5uP/++xGLxQZ934UXXojVq1fjwQcfzMoRICYajWLDhg0488wzceGFF+b83HjjjQgGgznl4Meam266Cc8++ywefPDBrEqXx5qR9KFMJsMFF1yAv//979i1a1fO6y6Xa6ybmUVJSQkmT56Mv/71r6yKLQC8++672Llz55CflclkOPXUU/Hiiy9mVbByOp146qmncNJJJ+U8AT5aZDIZJBJJVo6a1tZW/OMf/xiV/RPpdBqXXHIJPv74Yzz33HNYsGDBqO7/SPjGN76B1atXZy0WBlJQUIAlS5bg4YcfzhsidKzn0+zZs2Gz2fDII48glUqx7evXrx9WICouLsb06dPx+OOPZy2Idu3ahddff33IX8SPFHoKJ37q9umnn+Ljjz8etWMA/WFGZ5xxBjo7O/HKK68cs/xo+bj55puxevVq3HbbbYO+Z9asWaitrcWvf/3rrPsBcazn0ymnnAK5XM6qGhMPPPDAsJ+dPXs2CgoK8NBDD2WF87766qvYu3fviCvKjgSZTJbzlPm5557Lyd/zZenp6cGpp54KqVSK1157LSdsdKx48sknUVNTgxtuuCHne//mm2+GXq9nYdVerzenL+gXdhoHytN3JMLHGWecgXQ6nTP2v/3tbyGRSHD66acD6HcWSaVS3HHHHTkurqGcAPTL9MA28Xk0ttx5551YvXr1kPkPly9fDqPRiLvuuitvXtBjfV8iN8uDDz6Ytf33v//9sJ9dtmwZlEol/vd//zdrrB999FH4/f4xn0+///3vRz3XH10HVVVVePnll4+p4HU08PXX6MHXX0cPX399deHrr374+uvI+co9aqOnbI8//njOa+PGjcPjjz+Oyy+/HFOmTMG1116L6upqtLa24tFHH0VfXx+efvpp9tR3OH70ox/hoosuwrp163KSYRMmkwlr1qwZcj///Oc/EQwGcfbZZ+d9ff78+XA4HFi/fj0uueQStn3Lli248847c96/ZMmSvE8Qj4T7778fDz74IBYsWACtVosnn3wy6/XzzjtvSFV+1apVePzxx9HS0jJsjoPhGEkfAv2l7d9++23MmzcP1113HSZOnAiPx4OtW7di48aN8Hg8X6odR8pdd92Fc845ByeeeCKuvvpqeL1ePPDAA5g8eXJe0UHMnXfeiTfeeAMnnXQSvv3tb0Mul+Phhx9GPB7P+8vc0bJixQr85je/wWmnnYaVK1eit7cXf/jDH1BXVzds+MuR8MMf/hD//Oc/cdZZZ8Hj8eTMpyuuuGLIzy9ZsgTvvvvuqFjcKysrRzSf/vCHP+Ckk07ClClTcN1116GmpgZOpxMff/wxOjo6sGPHji/dlpGiVCqxZs0a3HTTTTj55JNx8cUXo7W1FevWrUNtbe2wzqZ7770Xp59+OhYsWIBrr70W0WgUv//970d8bY2UM888Exs2bMB5552HFStWoKWlBQ899BAmTpw47Jw/Ei6//HJs2rQJ11xzDfbu3Yu9e/ey1/R6fU5I10DoniT+hfJomTZtGqZNmzbke6RSKf785z/j9NNPx6RJk3D11VejtLQUnZ2dePvtt2E0GvHSSy996baMlMLCQvzP//wP7rvvPpx99tk47bTTsGPHDrz66quw2+1DzieFQoF77rkHV199NRYvXozLLrsMTqcT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\n"
+          },
+          "metadata": {}
+        }
+      ],
+      "source": [
+        "# Get a batch of training data\n",
+        "inputs, classes = next(iter(dataloaders[\"validation\"]))\n",
+        "\n",
+        "# Make a grid from batch\n",
+        "out = torchvision.utils.make_grid(inputs)\n",
+        "\n",
+        "imshow(out, title=[class_names[x] for x in classes])\n",
+        "\n",
+        "dataloaders = {\n",
+        "    x: torch.utils.data.DataLoader(image_datasets[x], batch_size=batch_size, shuffle=True)\n",
+        "    for x in [\"train\", \"validation\"]\n",
+        "}"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "ds09ighxrd0D"
+      },
+      "source": [
+        "Variational quantum circuit\n",
+        "===========================\n",
+        "\n",
+        "We first define some quantum layers that will compose the quantum\n",
+        "circuit.\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 98,
+      "metadata": {
+        "id": "OIbOa-KBrd0D"
+      },
+      "outputs": [],
+      "source": [
+        "def H_layer(nqubits):\n",
+        "    \"\"\"Layer of single-qubit Hadamard gates.\n",
+        "    \"\"\"\n",
+        "    for idx in range(nqubits):\n",
+        "        qml.Hadamard(wires=idx)\n",
+        "\n",
+        "\n",
+        "def RY_layer(w):\n",
+        "    \"\"\"Layer of parametrized qubit rotations around the y axis.\n",
+        "    \"\"\"\n",
+        "    for idx, element in enumerate(w):\n",
+        "        qml.RY(element, wires=idx)\n",
+        "\n",
+        "\n",
+        "def entangling_layer(nqubits):\n",
+        "    \"\"\"Layer of CNOTs followed by another shifted layer of CNOT.\n",
+        "    \"\"\"\n",
+        "    # In other words it should apply something like :\n",
+        "    # CNOT  CNOT  CNOT  CNOT...  CNOT\n",
+        "    #   CNOT  CNOT  CNOT...  CNOT\n",
+        "    for i in range(0, nqubits - 1, 2):  # Loop over even indices: i=0,2,...N-2\n",
+        "        qml.CNOT(wires=[i, i + 1])\n",
+        "    for i in range(1, nqubits - 1, 2):  # Loop over odd indices:  i=1,3,...N-3\n",
+        "        qml.CNOT(wires=[i, i + 1])"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "Ue__y4sQrd0D"
+      },
+      "source": [
+        "Now we define the quantum circuit through the PennyLane\n",
+        "[qnode]{.title-ref} decorator .\n",
+        "\n",
+        "The structure is that of a typical variational quantum circuit:\n",
+        "\n",
+        "-   **Embedding layer:** All qubits are first initialized in a balanced\n",
+        "    superposition of *up* and *down* states, then they are rotated\n",
+        "    according to the input parameters (local embedding).\n",
+        "-   **Variational layers:** A sequence of trainable rotation layers and\n",
+        "    constant entangling layers is applied.\n",
+        "-   **Measurement layer:** For each qubit, the local expectation value\n",
+        "    of the $Z$ operator is measured. This produces a classical output\n",
+        "    vector, suitable for additional post-processing.\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 99,
+      "metadata": {
+        "id": "C-O_cK6jrd0D"
+      },
+      "outputs": [],
+      "source": [
+        "@qml.qnode(dev, interface=\"torch\")\n",
+        "def quantum_net(q_input_features, q_weights_flat):\n",
+        "    \"\"\"\n",
+        "    The variational quantum circuit.\n",
+        "    \"\"\"\n",
+        "\n",
+        "    # Reshape weights\n",
+        "    q_weights = q_weights_flat.reshape(q_depth, n_qubits)\n",
+        "\n",
+        "    # Start from state |+> , unbiased w.r.t. |0> and |1>\n",
+        "    #H_layer(n_qubits)\n",
+        "\n",
+        "    # Embed features in the quantum node\n",
+        "    RY_layer(q_input_features)\n",
+        "\n",
+        "    # Sequence of trainable variational layers\n",
+        "    #for k in range(q_depth):\n",
+        "        #entangling_layer(n_qubits)\n",
+        "        #RY_layer(q_weights[k])\n",
+        "\n",
+        "    # Expectation values in the Z basis\n",
+        "    exp_vals = [qml.expval(qml.PauliZ(position)) for position in range(n_qubits)]\n",
+        "    return tuple(exp_vals)"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "7FNHREgVrd0D"
+      },
+      "source": [
+        "Dressed quantum circuit\n",
+        "=======================\n",
+        "\n",
+        "We can now define a custom `torch.nn.Module` representing a *dressed*\n",
+        "quantum circuit.\n",
+        "\n",
+        "This is a concatenation of:\n",
+        "\n",
+        "-   A classical pre-processing layer (`nn.Linear`).\n",
+        "-   A classical activation function (`torch.tanh`).\n",
+        "-   A constant `np.pi/2.0` scaling.\n",
+        "-   The previously defined quantum circuit (`quantum_net`).\n",
+        "-   A classical post-processing layer (`nn.Linear`).\n",
+        "\n",
+        "The input of the module is a batch of vectors with 512 real parameters\n",
+        "(features) and the output is a batch of vectors with two real outputs\n",
+        "(associated with the two classes of images: *ants* and *bees*).\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 100,
+      "metadata": {
+        "id": "C96kWCjWrd0D"
+      },
+      "outputs": [],
+      "source": [
+        "class DressedQuantumNet(nn.Module):\n",
+        "    \"\"\"\n",
+        "    Torch module implementing the *dressed* quantum net.\n",
+        "    \"\"\"\n",
+        "\n",
+        "    def __init__(self):\n",
+        "        \"\"\"\n",
+        "        Definition of the *dressed* layout.\n",
+        "        \"\"\"\n",
+        "\n",
+        "        super().__init__()\n",
+        "        self.pre_net = nn.Linear(512, n_qubits)\n",
+        "        self.q_params = nn.Parameter(q_delta * torch.randn(q_depth * n_qubits))\n",
+        "        self.post_net = nn.Linear(n_qubits, 10)\n",
+        "\n",
+        "    def forward(self, input_features):\n",
+        "        \"\"\"\n",
+        "        Defining how tensors are supposed to move through the *dressed* quantum\n",
+        "        net.\n",
+        "        \"\"\"\n",
+        "\n",
+        "        # obtain the input features for the quantum circuit\n",
+        "        # by reducing the feature dimension from 512 to 4\n",
+        "        pre_out = self.pre_net(input_features)\n",
+        "        q_in = torch.tanh(pre_out) * np.pi / 2.0\n",
+        "\n",
+        "        # Apply the quantum circuit to each element of the batch and append to q_out\n",
+        "        q_out = torch.Tensor(0, n_qubits)\n",
+        "        q_out = q_out.to(device)\n",
+        "        for elem in q_in:\n",
+        "            q_out_elem = torch.hstack(quantum_net(elem, self.q_params)).float().unsqueeze(0)\n",
+        "            q_out = torch.cat((q_out, q_out_elem))\n",
+        "\n",
+        "        # return the two-dimensional prediction from the postprocessing layer\n",
+        "        return self.post_net(q_out)"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "7hQlpDQdrd0D"
+      },
+      "source": [
+        "Hybrid classical-quantum model\n",
+        "==============================\n",
+        "\n",
+        "We are finally ready to build our full hybrid classical-quantum network.\n",
+        "We follow the *transfer learning* approach:\n",
+        "\n",
+        "1.  First load the classical pre-trained network *ResNet18* from the\n",
+        "    `torchvision.models` zoo.\n",
+        "2.  Freeze all the weights since they should not be trained.\n",
+        "3.  Replace the last fully connected layer with our trainable dressed\n",
+        "    quantum circuit (`DressedQuantumNet`).\n",
+        "\n",
+        "::: {.note}\n",
+        "::: {.title}\n",
+        "Note\n",
+        ":::\n",
+        "\n",
+        "The *ResNet18* model is automatically downloaded by PyTorch and it may\n",
+        "take several minutes (only the first time).\n",
+        ":::\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 101,
+      "metadata": {
+        "id": "MAh4FqBYrd0D",
+        "colab": {
+          "base_uri": "https://localhost:8080/",
+          "height": 0
+        },
+        "outputId": "67b424ce-71bd-431b-af8f-d2859fa92b23"
+      },
+      "outputs": [
+        {
+          "output_type": "stream",
+          "name": "stderr",
+          "text": [
+            "/usr/local/lib/python3.10/dist-packages/torchvision/models/_utils.py:208: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.\n",
+            "  warnings.warn(\n",
+            "/usr/local/lib/python3.10/dist-packages/torchvision/models/_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=ResNet18_Weights.IMAGENET1K_V1`. You can also use `weights=ResNet18_Weights.DEFAULT` to get the most up-to-date weights.\n",
+            "  warnings.warn(msg)\n"
+          ]
+        }
+      ],
+      "source": [
+        "model_hybrid = torchvision.models.resnet18(pretrained=True)\n",
+        "\n",
+        "for param in model_hybrid.parameters():\n",
+        "    param.requires_grad = False\n",
+        "\n",
+        "\n",
+        "# Notice that model_hybrid.fc is the last layer of ResNet18\n",
+        "model_hybrid.fc = DressedQuantumNet()\n",
+        "\n",
+        "# Use CUDA or CPU according to the \"device\" object.\n",
+        "model_hybrid = model_hybrid.to(device)"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "ovX-Tkb0rd0E"
+      },
+      "source": [
+        "Training and results\n",
+        "====================\n",
+        "\n",
+        "Before training the network we need to specify the *loss* function.\n",
+        "\n",
+        "We use, as usual in classification problem, the *cross-entropy* which is\n",
+        "directly available within `torch.nn`.\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 102,
+      "metadata": {
+        "id": "gkmFIK4Brd0E"
+      },
+      "outputs": [],
+      "source": [
+        "criterion = nn.CrossEntropyLoss()"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "qhFORuvard0E"
+      },
+      "source": [
+        "We also initialize the *Adam optimizer* which is called at each training\n",
+        "step in order to update the weights of the model.\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 103,
+      "metadata": {
+        "id": "_K9M-VPMrd0E"
+      },
+      "outputs": [],
+      "source": [
+        "optimizer_hybrid = optim.Adam(model_hybrid.fc.parameters(), lr=step)"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "IGG8pksyrd0E"
+      },
+      "source": [
+        "We schedule to reduce the learning rate by a factor of\n",
+        "`gamma_lr_scheduler` every 10 epochs.\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 104,
+      "metadata": {
+        "id": "nco3IrE6rd0E"
+      },
+      "outputs": [],
+      "source": [
+        "exp_lr_scheduler = lr_scheduler.StepLR(\n",
+        "    optimizer_hybrid, step_size=1000, gamma=gamma_lr_scheduler\n",
+        ")"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "yJvpPNCRrd0E"
+      },
+      "source": [
+        "What follows is a training function that will be called later. This\n",
+        "function should return a trained model that can be used to make\n",
+        "predictions (classifications).\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 105,
+      "metadata": {
+        "id": "8uO5BrOPrd0E"
+      },
+      "outputs": [],
+      "source": [
+        "def train_model(model, criterion, optimizer, scheduler, num_epochs):\n",
+        "    since = time.time()\n",
+        "    best_model_wts = copy.deepcopy(model.state_dict())\n",
+        "    best_acc = 0.0\n",
+        "    best_loss = 10000.0  # Large arbitrary number\n",
+        "    best_acc_train = 0.0\n",
+        "    best_loss_train = 10000.0  # Large arbitrary number\n",
+        "    print(\"Training started:\")\n",
+        "\n",
+        "    for epoch in range(num_epochs):\n",
+        "\n",
+        "        # Each epoch has a training and validation phase\n",
+        "        for phase in [\"train\", \"validation\"]:\n",
+        "            if phase == \"train\":\n",
+        "                # Set model to training mode\n",
+        "                model.train()\n",
+        "            else:\n",
+        "                # Set model to evaluate mode\n",
+        "                model.eval()\n",
+        "            running_loss = 0.0\n",
+        "            running_corrects = 0\n",
+        "\n",
+        "            # Iterate over data.\n",
+        "            n_batches = dataset_sizes[phase] // batch_size\n",
+        "            it = 0\n",
+        "            for inputs, labels in dataloaders[phase]:\n",
+        "                since_batch = time.time()\n",
+        "                batch_size_ = len(inputs)\n",
+        "                inputs = inputs.to(device)\n",
+        "                labels = labels.to(device)\n",
+        "                optimizer.zero_grad()\n",
+        "\n",
+        "                # Track/compute gradient and make an optimization step only when training\n",
+        "                with torch.set_grad_enabled(phase == \"train\"):\n",
+        "                    outputs = model(inputs)\n",
+        "                    _, preds = torch.max(outputs, 1)\n",
+        "                    loss = criterion(outputs, labels)\n",
+        "                    if phase == \"train\":\n",
+        "                        loss.backward()\n",
+        "                        optimizer.step()\n",
+        "\n",
+        "                # Print iteration results\n",
+        "                running_loss += loss.item() * batch_size_\n",
+        "                batch_corrects = torch.sum(preds == labels.data).item()\n",
+        "                running_corrects += batch_corrects\n",
+        "                print(\n",
+        "                    \"Phase: {} Epoch: {}/{} Iter: {}/{} Batch time: {:.4f}\".format(\n",
+        "                        phase,\n",
+        "                        epoch + 1,\n",
+        "                        num_epochs,\n",
+        "                        it + 1,\n",
+        "                        n_batches + 1,\n",
+        "                        time.time() - since_batch,\n",
+        "                    ),\n",
+        "                    end=\"\\r\",\n",
+        "                    flush=True,\n",
+        "                )\n",
+        "                it += 1\n",
+        "\n",
+        "            # Print epoch results\n",
+        "            epoch_loss = running_loss / dataset_sizes[phase]\n",
+        "            epoch_acc = running_corrects / dataset_sizes[phase]\n",
+        "            print(\n",
+        "                \"Phase: {} Epoch: {}/{} Loss: {:.4f} Acc: {:.4f}        \".format(\n",
+        "                    \"train\" if phase == \"train\" else \"validation  \",\n",
+        "                    epoch + 1,\n",
+        "                    num_epochs,\n",
+        "                    epoch_loss,\n",
+        "                    epoch_acc,\n",
+        "                )\n",
+        "            )\n",
+        "\n",
+        "            # Check if this is the best model wrt previous epochs\n",
+        "            if phase == \"validation\" and epoch_acc > best_acc:\n",
+        "                best_acc = epoch_acc\n",
+        "                best_model_wts = copy.deepcopy(model.state_dict())\n",
+        "            if phase == \"validation\" and epoch_loss < best_loss:\n",
+        "                best_loss = epoch_loss\n",
+        "            if phase == \"train\" and epoch_acc > best_acc_train:\n",
+        "                best_acc_train = epoch_acc\n",
+        "            if phase == \"train\" and epoch_loss < best_loss_train:\n",
+        "                best_loss_train = epoch_loss\n",
+        "      \n",
+        "            # Update learning rate\n",
+        "            if phase == \"train\":\n",
+        "                scheduler.step()\n",
+        "\n",
+        "    # Print final results\n",
+        "    model.load_state_dict(best_model_wts)\n",
+        "    time_elapsed = time.time() - since\n",
+        "    print(\n",
+        "        \"Training completed in {:.0f}m {:.0f}s\".format(time_elapsed // 60, time_elapsed % 60)\n",
+        "    )\n",
+        "    print(\"Best test loss: {:.4f} | Best test accuracy: {:.4f}\".format(best_loss, best_acc))\n",
+        "    return model"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "source": [
+        "#!pip install -U scikit-learn\n",
+        "import numpy as np\n",
+        "import torch\n",
+        "import copy\n",
+        "import time\n",
+        "import sklearn\n",
+        "from sklearn.metrics import confusion_matrix\n",
+        "\n",
+        "def train_model(model, criterion, optimizer, scheduler, num_epochs):\n",
+        "    since = time.time()\n",
+        "    best_model_wts = copy.deepcopy(model.state_dict())\n",
+        "    best_acc = 0.0\n",
+        "    best_loss = 10000.0  # Large arbitrary number\n",
+        "    best_acc_train = 0.0\n",
+        "    best_loss_train = 10000.0  # Large arbitrary number\n",
+        "    print(\"Training started:\")\n",
+        "\n",
+        "    for epoch in range(num_epochs):\n",
+        "\n",
+        "        # Each epoch has a training and validation phase\n",
+        "        for phase in [\"train\", \"validation\"]:\n",
+        "            if phase == \"train\":\n",
+        "                # Set model to training mode\n",
+        "                model.train()\n",
+        "            else:\n",
+        "                # Set model to evaluate mode\n",
+        "                model.eval()\n",
+        "            running_loss = 0.0\n",
+        "            running_corrects = 0\n",
+        "            all_labels = []\n",
+        "            all_preds = []\n",
+        "\n",
+        "            # Iterate over data.\n",
+        "            n_batches = dataset_sizes[phase] // batch_size\n",
+        "            it = 0\n",
+        "            for inputs, labels in dataloaders[phase]:\n",
+        "                since_batch = time.time()\n",
+        "                batch_size_ = len(inputs)\n",
+        "                inputs = inputs.to(device)\n",
+        "                labels = labels.to(device)\n",
+        "                optimizer.zero_grad()\n",
+        "\n",
+        "                # Track/compute gradient and make an optimization step only when training\n",
+        "                with torch.set_grad_enabled(phase == \"train\"):\n",
+        "                    outputs = model(inputs)\n",
+        "                    _, preds = torch.max(outputs, 1)\n",
+        "                    loss = criterion(outputs, labels)\n",
+        "                    if phase == \"train\":\n",
+        "                        loss.backward()\n",
+        "                        optimizer.step()\n",
+        "\n",
+        "                # Print iteration results\n",
+        "                running_loss += loss.item() * batch_size_\n",
+        "                batch_corrects = torch.sum(preds == labels.data).item()\n",
+        "                running_corrects += batch_corrects\n",
+        "\n",
+        "                all_labels.extend(labels.cpu().numpy())\n",
+        "                all_preds.extend(preds.cpu().numpy())\n",
+        "\n",
+        "                print(\n",
+        "                    \"Phase: {} Epoch: {}/{} Iter: {}/{} Batch time: {:.4f}\".format(\n",
+        "                        phase,\n",
+        "                        epoch + 1,\n",
+        "                        num_epochs,\n",
+        "                        it + 1,\n",
+        "                        n_batches + 1,\n",
+        "                        time.time() - since_batch,\n",
+        "                    ),\n",
+        "                    end=\"\\r\",\n",
+        "                    flush=True,\n",
+        "                )\n",
+        "                it += 1\n",
+        "\n",
+        "            # Print epoch results\n",
+        "            epoch_loss = running_loss / dataset_sizes[phase]\n",
+        "            epoch_acc = running_corrects / dataset_sizes[phase]\n",
+        "            print(\n",
+        "                \"Phase: {} Epoch: {}/{} Loss: {:.4f} Acc: {:.4f}        \".format(\n",
+        "                    \"train\" if phase == \"train\" else \"validation  \",\n",
+        "                    epoch + 1,\n",
+        "                    num_epochs,\n",
+        "                    epoch_loss,\n",
+        "                    epoch_acc,\n",
+        "                )\n",
+        "            )\n",
+        "\n",
+        "            # Check if this is the best model wrt previous epochs\n",
+        "            if phase == \"validation\" and epoch_acc > best_acc:\n",
+        "                best_acc = epoch_acc\n",
+        "                best_model_wts = copy.deepcopy(model.state_dict())\n",
+        "            if phase == \"validation\" and epoch_loss < best_loss:\n",
+        "                best_loss = epoch_loss\n",
+        "            if phase == \"train\" and epoch_acc > best_acc_train:\n",
+        "                best_acc_train = epoch_acc\n",
+        "            if phase == \"train\" and epoch_loss < best_loss_train:\n",
+        "                best_loss_train = epoch_loss\n",
+        "\n",
+        "            # Update learning rate\n",
+        "            if phase == \"train\":\n",
+        "                scheduler.step()\n",
+        "\n",
+        "            # Calculate and print confusion matrix\n",
+        "            if phase == \"validation\":\n",
+        "                cm = confusion_matrix(all_labels, all_preds)\n",
+        "                class_labels = ['AST1', 'AST2', 'MET1', 'MET2', 'NET1', 'NET2', 'NLT1', 'NLT2', 'SCT1', 'SCT2']\n",
+        "                print(\"Confusion Matrix:\")\n",
+        "                print(cm)\n",
+        "\n",
+        "    # Print final results"
+      ],
+      "metadata": {
+        "id": "tMGx77J_zSLE"
+      },
+      "execution_count": 106,
+      "outputs": []
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "CmAl9fIQrd0E"
+      },
+      "source": [
+        "We are ready to perform the actual training process.\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 107,
+      "metadata": {
+        "colab": {
+          "base_uri": "https://localhost:8080/",
+          "height": 0
+        },
+        "id": "rAQBdDA_rd0E",
+        "outputId": "8a49579b-cd0b-4618-f1c7-5081be4cdf1b"
+      },
+      "outputs": [
+        {
+          "output_type": "stream",
+          "name": "stdout",
+          "text": [
+            "Training started:\n",
+            "Phase: train Epoch: 1/60 Loss: 2.1364 Acc: 0.2241        \n",
+            "Phase: validation   Epoch: 1/60 Loss: 1.9688 Acc: 0.3210        \n",
+            "Confusion Matrix:\n",
+            "[[  0   0   9   1   0   0   0   0  41  15]\n",
+            " [  0   5   0   1   0   0   0   0   1  57]\n",
+            " [  0   0  30   0   0   0   0   0  63   8]\n",
+            " [  0   0   5  11   0   0   0   0   0  71]\n",
+            " [  0   0  19   0   5   0   0   0  22   2]\n",
+            " [  0   0   1   3   0   0   0   0   0  35]\n",
+            " [  0   0   0   0   0   0   0   0  15  40]\n",
+            " [  0   0   0   1   0   0   0   0   0  45]\n",
+            " [  0   0   3   0   0   0   0   0  73  18]\n",
+            " [  0   0   0   0   0   0   0   0   0 101]]\n",
+            "Phase: train Epoch: 2/60 Loss: 1.9353 Acc: 0.3149        \n",
+            "Phase: validation   Epoch: 2/60 Loss: 1.8380 Acc: 0.3894        \n",
+            "Confusion Matrix:\n",
+            "[[ 0  0  4  0  0  0  0  0 61  1]\n",
+            " [ 0  5  1 16  0  0  0  0 10 32]\n",
+            " [ 0  0 36  0  0  0  0  0 64  1]\n",
+            " [ 0  0  8 36  0  0  0  0  3 40]\n",
+            " [ 0  0 21  0  1  0  0  0 26  0]\n",
+            " [ 0  3  1 20  0  1  0  0  0 14]\n",
+            " [ 0  0  4  0  0  0  0  0 51  0]\n",
+            " [ 0  1  0 18  0  0  0  3  7 17]\n",
+            " [ 0  0  1  0  0  0  0  0 93  0]\n",
+            " [ 0  0  0  1  0  0  0  0  2 98]]\n",
+            "Phase: train Epoch: 3/60 Loss: 1.7608 Acc: 0.4219        \n",
+            "Phase: validation   Epoch: 3/60 Loss: 1.6672 Acc: 0.5235        \n",
+            "Confusion Matrix:\n",
+            "[[  4   0  15   0   3   0   0   0  43   1]\n",
+            " [  3  21   0  14   0   0   0   0   1  25]\n",
+            " [  0   0  65   0   1   0   0   0  33   2]\n",
+            " [  0   2   3  49   0   0   0   0   0  33]\n",
+            " [  0   0  21   0  20   0   0   0   7   0]\n",
+            " [  0  11   1  11   0   3   0   0   0  13]\n",
+            " [  0   1   9   0   1   0   3   0  36   5]\n",
+            " [  1  10   0   4   0   0   0  12   0  19]\n",
+            " [  0   0   4   0   0   0   0   0  90   0]\n",
+            " [  0   1   0   0   0   0   0   0   0 100]]\n",
+            "Phase: train Epoch: 4/60 Loss: 1.6686 Acc: 0.5034        \n",
+            "Phase: validation   Epoch: 4/60 Loss: 1.5649 Acc: 0.5307        \n",
+            "Confusion Matrix:\n",
+            "[[  8   0  13   0   1   0   0   0  43   1]\n",
+            " [  1  10   0   7   0   0   0   4   1  41]\n",
+            " [  0   0  73   0   0   0   0   0  26   2]\n",
+            " [  0   0   3  42   0   0   0   0   0  42]\n",
+            " [  0   0  15   0  28   0   0   0   4   1]\n",
+            " [  0   6   0  12   0   2   0   0   0  19]\n",
+            " [  0   0  15   0   0   0   2   0  34   4]\n",
+            " [  0   2   0   6   0   0   0  15   0  23]\n",
+            " [  0   0   3   0   0   0   0   0  91   0]\n",
+            " [  0   0   0   0   0   0   0   0   0 101]]\n",
+            "Phase: train Epoch: 5/60 Loss: 1.5750 Acc: 0.5458        \n",
+            "Phase: validation   Epoch: 5/60 Loss: 1.4906 Acc: 0.6277        \n",
+            "Confusion Matrix:\n",
+            "[[19  0 14  0  4  0  0  0 29  0]\n",
+            " [ 2 26  0 10  0  5  0  5  0 16]\n",
+            " [ 0  0 85  0  1  0  0  0 14  1]\n",
+            " [ 0  3  1 61  0  1  0  1  0 20]\n",
+            " [ 0  0 21  0 25  0  0  0  2  0]\n",
+            " [ 0  8  0 16  0 11  0  0  0  4]\n",
+            " [ 0  0 15  0  3  0 15  0 20  2]\n",
+            " [ 0 10  0  6  0  0  0 14  0 16]\n",
+            " [ 1  0  6  0  0  0  0  0 87  0]\n",
+            " [ 0  2  0  2  0  0  0  0  0 97]]\n",
+            "Phase: train Epoch: 6/60 Loss: 1.4855 Acc: 0.6053        \n",
+            "Phase: validation   Epoch: 6/60 Loss: 1.3912 Acc: 0.6405        \n",
+            "Confusion Matrix:\n",
+            "[[32  0  9  0  3  0  0  0 21  1]\n",
+            " [ 1 11  0 21  0  0  0  8  0 23]\n",
+            " [ 5  0 78  0  3  0  1  0 12  2]\n",
+            " [ 0  0  0 63  0  0  0  0  0 24]\n",
+            " [ 2  0 12  0 30  0  0  0  3  1]\n",
+            " [ 0  2  0 23  0  7  0  0  0  7]\n",
+            " [ 1  2  6  0  2  0 23  0 17  4]\n",
+            " [ 0  1  0  6  0  0  0 18  0 21]\n",
+            " [ 0  0  5  0  0  0  0  0 88  1]\n",
+            " [ 0  0  0  2  0  0  0  0  0 99]]\n",
+            "Phase: train Epoch: 7/60 Loss: 1.4248 Acc: 0.6239        \n",
+            "Phase: validation   Epoch: 7/60 Loss: 1.3531 Acc: 0.6548        \n",
+            "Confusion Matrix:\n",
+            "[[ 16   0  14   0   1   0   4   0  31   0]\n",
+            " [  3  16   0  13   0   3   0   7   0  22]\n",
+            " [  1   0  83   0   0   0   2   0  14   1]\n",
+            " [  0   0   2  56   0   1   0   0   0  28]\n",
+            " [  0   0  20   0  26   0   1   0   1   0]\n",
+            " [  0   1   1  13   0  13   0   0   0  11]\n",
+            " [  0   0   8   0   0   0  40   0   7   0]\n",
+            " [  1   4   0   4   0   0   0  20   0  17]\n",
+            " [  0   0   5   0   0   0   0   0  89   0]\n",
+            " [  0   1   0   0   0   0   0   0   0 100]]\n",
+            "Phase: train Epoch: 8/60 Loss: 1.3485 Acc: 0.6562        \n",
+            "Phase: validation   Epoch: 8/60 Loss: 1.2469 Acc: 0.7104        \n",
+            "Confusion Matrix:\n",
+            "[[26  0 17  0  0  0 11  0 12  0]\n",
+            " [ 1 18  0 24  0  2  0  7  0 12]\n",
+            " [ 0  0 95  0  0  0  1  0  4  1]\n",
+            " [ 0  0  1 72  0  1  0  0  0 13]\n",
+            " [ 0  0 20  0 27  0  0  0  1  0]\n",
+            " [ 0  5  0 19  0 12  0  0  0  3]\n",
+            " [ 0  0  8  0  0  0 47  0  0  0]\n",
+            " [ 0  3  0 11  0  0  0 22  0 10]\n",
+            " [ 0  0  9  0  0  0  1  0 84  0]\n",
+            " [ 0  1  0  5  0  0  0  0  0 95]]\n",
+            "Phase: train Epoch: 9/60 Loss: 1.2669 Acc: 0.6842        \n",
+            "Phase: validation   Epoch: 9/60 Loss: 1.1987 Acc: 0.6976        \n",
+            "Confusion Matrix:\n",
+            "[[ 20   0   7   0   4   0  12   0  23   0]\n",
+            " [  0  23   0  11   0   3   0   7   0  20]\n",
+            " [  0   0  86   0   0   0   4   0  10   1]\n",
+            " [  0   0   0  62   0   3   0   0   0  22]\n",
+            " [  0   0  13   0  33   0   1   0   1   0]\n",
+            " [  0   4   0  14   0  13   0   0   0   8]\n",
+            " [  0   1   5   0   0   0  48   0   0   1]\n",
+            " [  0   7   0   4   0   0   1  17   0  17]\n",
+            " [  0   0   6   0   0   0   2   0  86   0]\n",
+            " [  0   0   0   0   0   0   0   0   0 101]]\n",
+            "Phase: train Epoch: 10/60 Loss: 1.2507 Acc: 0.6868        \n",
+            "Phase: validation   Epoch: 10/60 Loss: 1.1376 Acc: 0.7275        \n",
+            "Confusion Matrix:\n",
+            "[[38  0  7  0  3  0 12  0  6  0]\n",
+            " [ 1 12  0 24  0  2  0 16  0  9]\n",
+            " [ 2  0 87  1  1  0  4  0  6  0]\n",
+            " [ 0  0  0 67  0  1  0  3  0 16]\n",
+            " [ 1  0 11  0 34  0  1  0  1  0]\n",
+            " [ 0  2  0 18  0 16  0  0  0  3]\n",
+            " [ 0  0  5  0  0  0 48  1  1  0]\n",
+            " [ 0  2  0  6  0  0  0 32  0  6]\n",
+            " [ 0  0  6  0  0  0  2  0 86  0]\n",
+            " [ 0  2  0  8  0  0  0  1  0 90]]\n",
+            "Phase: train Epoch: 11/60 Loss: 1.1906 Acc: 0.6935        \n",
+            "Phase: validation   Epoch: 11/60 Loss: 1.1111 Acc: 0.7532        \n",
+            "Confusion Matrix:\n",
+            "[[39  0 12  0  0  0  9  0  6  0]\n",
+            " [ 0 28  0 11  0  5  0 11  0  9]\n",
+            " [ 1  0 94  0  0  0  2  0  3  1]\n",
+            " [ 0  1  1 61  0  6  0  2  0 16]\n",
+            " [ 2  0 11  0 35  0  0  0  0  0]\n",
+            " [ 0  3  0  9  0 24  0  0  0  3]\n",
+            " [ 0  0  7  0  0  0 47  1  0  0]\n",
+            " [ 0  8  0  7  0  0  0 27  0  4]\n",
+            " [ 0  0  8  0  0  0  3  0 83  0]\n",
+            " [ 0  3  0  6  0  0  1  1  0 90]]\n",
+            "Phase: train Epoch: 12/60 Loss: 1.0920 Acc: 0.7419        \n",
+            "Phase: validation   Epoch: 12/60 Loss: 1.0777 Acc: 0.7504        \n",
+            "Confusion Matrix:\n",
+            "[[39  0  7  0  3  0 10  0  7  0]\n",
+            " [ 0 24  0 15  0  4  0 12  0  9]\n",
+            " [ 1  0 89  0  1  0  5  0  5  0]\n",
+            " [ 0  1  0 67  0  2  0  2  0 15]\n",
+            " [ 1  0 11  0 35  0  1  0  0  0]\n",
+            " [ 0  3  1 10  0 22  0  0  0  3]\n",
+            " [ 0  0  5  0  0  0 49  1  0  0]\n",
+            " [ 0  4  0  7  0  0  1 29  0  5]\n",
+            " [ 2  0  6  0  0  0  3  0 83  0]\n",
+            " [ 0  3  0  7  0  0  1  1  0 89]]\n",
+            "Phase: train Epoch: 13/60 Loss: 1.0864 Acc: 0.7513        \n",
+            "Phase: validation   Epoch: 13/60 Loss: 1.0466 Acc: 0.7418        \n",
+            "Confusion Matrix:\n",
+            "[[31  0  7  0 13  0  9  0  6  0]\n",
+            " [ 0 30  0 13  0  6  0  6  0  9]\n",
+            " [ 1  0 89  1  1  0  4  0  5  0]\n",
+            " [ 0  5  1 59  0  6  0  1  0 15]\n",
+            " [ 0  0  9  0 38  0  1  0  0  0]\n",
+            " [ 0  2  0  8  0 26  0  0  0  3]\n",
+            " [ 0  0  5  0  0  0 49  1  0  0]\n",
+            " [ 0 11  0  8  0  1  0 20  0  6]\n",
+            " [ 2  0  4  0  0  0  3  0 85  0]\n",
+            " [ 0  5  0  3  0  0  0  0  0 93]]\n",
+            "Phase: train Epoch: 14/60 Loss: 1.0601 Acc: 0.7496        \n",
+            "Phase: validation   Epoch: 14/60 Loss: 1.0193 Acc: 0.7532        \n",
+            "Confusion Matrix:\n",
+            "[[43  0  5  0  5  0  8  0  4  1]\n",
+            " [ 0 35  0  8  0  3  0  9  0  9]\n",
+            " [ 3  0 86  0  3  0  4  0  4  1]\n",
+            " [ 0  4  0 60  0  4  0  3  0 16]\n",
+            " [ 3  0  8  0 36  0  1  0  0  0]\n",
+            " [ 0 10  0  9  0 18  0  0  0  2]\n",
+            " [ 0  0  5  0  0  0 48  2  0  0]\n",
+            " [ 0  7  0  5  0  0  0 25  0  9]\n",
+            " [ 2  0  5  0  0  0  2  0 84  1]\n",
+            " [ 0  2  0  3  0  0  0  3  0 93]]\n",
+            "Phase: train Epoch: 15/60 Loss: 1.0148 Acc: 0.7521        \n",
+            "Phase: validation   Epoch: 15/60 Loss: 0.9565 Acc: 0.7603        \n",
+            "Confusion Matrix:\n",
+            "[[36  0  7  0  5  0  9  0  9  0]\n",
+            " [ 2 21  0 14  0  7  0 12  0  8]\n",
+            " [ 1  0 90  0  1  0  5  0  4  0]\n",
+            " [ 0  0  0 71  0  4  0  2  0 10]\n",
+            " [ 0  0 11  0 37  0  0  0  0  0]\n",
+            " [ 0  2  1 10  0 25  0  0  0  1]\n",
+            " [ 0  0  5  0  0  0 50  0  0  0]\n",
+            " [ 0  5  0  7  0  0  0 31  0  3]\n",
+            " [ 1  0  6  0  0  0  3  0 84  0]\n",
+            " [ 0  3  0  6  0  0  1  3  0 88]]\n",
+            "Phase: train Epoch: 16/60 Loss: 0.9637 Acc: 0.7759        \n",
+            "Phase: validation   Epoch: 16/60 Loss: 0.9591 Acc: 0.7603        \n",
+            "Confusion Matrix:\n",
+            "[[41  0  5  0  3  0  9  0  8  0]\n",
+            " [ 2 25  0 19  0  1  0  9  0  8]\n",
+            " [ 2  0 94  0  0  0  2  0  3  0]\n",
+            " [ 0  0  2 71  0  2  0  1  0 11]\n",
+            " [ 3  0 11  0 33  0  0  0  1  0]\n",
+            " [ 0  2  1 13  0 21  0  0  0  2]\n",
+            " [ 0  0  6  0  0  0 49  0  0  0]\n",
+            " [ 0  5  0  9  0  0  2 24  0  6]\n",
+            " [ 0  0  6  0  0  0  3  0 85  0]\n",
+            " [ 0  4  0  6  0  0  1  0  0 90]]\n",
+            "Phase: train Epoch: 17/60 Loss: 0.9445 Acc: 0.7742        \n",
+            "Phase: validation   Epoch: 17/60 Loss: 0.8792 Acc: 0.7775        \n",
+            "Confusion Matrix:\n",
+            "[[44  0  5  0  3  0  8  0  6  0]\n",
+            " [ 1 30  0 13  0  3  0  8  0  9]\n",
+            " [ 2  0 90  0  1  0  3  0  5  0]\n",
+            " [ 0  0  0 66  0  4  0  2  0 15]\n",
+            " [ 2  0 11  0 35  0  0  0  0  0]\n",
+            " [ 1  3  0  9  0 23  0  0  0  3]\n",
+            " [ 0  0  5  0  0  0 50  0  0  0]\n",
+            " [ 0  5  0  7  0  0  1 26  0  7]\n",
+            " [ 0  0  4  0  0  0  2  0 88  0]\n",
+            " [ 0  4  0  3  0  0  0  1  0 93]]\n",
+            "Phase: train Epoch: 18/60 Loss: 0.9490 Acc: 0.7581        \n",
+            "Phase: validation   Epoch: 18/60 Loss: 0.8924 Acc: 0.7561        \n",
+            "Confusion Matrix:\n",
+            "[[41  0  4  0  3  0 11  0  7  0]\n",
+            " [ 0 28  0  8  0  4  0 12  0 12]\n",
+            " [ 2  0 84  0  1  0  7  0  6  1]\n",
+            " [ 0  4  0 59  0  5  0  2  0 17]\n",
+            " [ 2  0  9  0 36  0  1  0  0  0]\n",
+            " [ 0  7  0  7  0 21  0  0  0  4]\n",
+            " [ 0  0  4  0  0  0 51  0  0  0]\n",
+            " [ 0  3  0  3  0  0  1 28  0 11]\n",
+            " [ 0  0  4  0  0  0  3  0 87  0]\n",
+            " [ 0  2  0  1  0  0  0  3  0 95]]\n",
+            "Phase: train Epoch: 19/60 Loss: 0.9040 Acc: 0.7801        \n",
+            "Phase: validation   Epoch: 19/60 Loss: 0.8676 Acc: 0.7832        \n",
+            "Confusion Matrix:\n",
+            "[[46  0  4  0  0  0  9  0  7  0]\n",
+            " [ 0 28  0 14  0  6  0 10  0  6]\n",
+            " [ 1  0 90  0  0  0  3  0  6  1]\n",
+            " [ 0  1  0 70  0  6  0  1  0  9]\n",
+            " [ 2  0 11  0 35  0  0  0  0  0]\n",
+            " [ 0  2  0 10  0 26  0  0  0  1]\n",
+            " [ 0  0  4  0  0  0 50  1  0  0]\n",
+            " [ 0  5  0  7  0  0  0 30  0  4]\n",
+            " [ 1  0  5  1  0  0  3  0 84  0]\n",
+            " [ 0  3  0  6  0  0  0  2  0 90]]\n",
+            "Phase: train Epoch: 20/60 Loss: 0.8547 Acc: 0.7929        \n",
+            "Phase: validation   Epoch: 20/60 Loss: 0.8135 Acc: 0.7832        \n",
+            "Confusion Matrix:\n",
+            "[[45  0  4  0  1  0  9  0  7  0]\n",
+            " [ 0 29  0 14  0  3  0 11  0  7]\n",
+            " [ 2  0 91  0  1  0  4  0  2  1]\n",
+            " [ 0  1  0 65  0  6  0  3  0 12]\n",
+            " [ 2  0 10  0 36  0  0  0  0  0]\n",
+            " [ 0  2  1  8  0 27  0  0  0  1]\n",
+            " [ 0  0  4  0  0  0 50  1  0  0]\n",
+            " [ 0  4  0  7  0  0  0 31  0  4]\n",
+            " [ 0  0  5  0  0  0  3  0 86  0]\n",
+            " [ 0  3  0  5  0  0  0  4  0 89]]\n",
+            "Phase: train Epoch: 21/60 Loss: 0.7832 Acc: 0.8217        \n",
+            "Phase: validation   Epoch: 21/60 Loss: 0.8039 Acc: 0.7889        \n",
+            "Confusion Matrix:\n",
+            "[[52  0  2  0  2  0  5  0  5  0]\n",
+            " [ 2 30  0  9  0  4  0 10  0  9]\n",
+            " [ 1  0 86  0  4  0  3  0  7  0]\n",
+            " [ 0  1  1 63  0  4  0  3  0 15]\n",
+            " [ 2  0  9  0 37  0  0  0  0  0]\n",
+            " [ 1  2  0  9  0 24  0  0  0  3]\n",
+            " [ 0  0  5  0  0  0 49  1  0  0]\n",
+            " [ 0  1  0  6  0  0  0 33  0  6]\n",
+            " [ 0  0  4  0  0  0  2  0 88  0]\n",
+            " [ 0  3  0  4  0  0  0  3  0 91]]\n",
+            "Phase: train Epoch: 22/60 Loss: 0.8108 Acc: 0.7963        \n",
+            "Phase: validation   Epoch: 22/60 Loss: 0.7997 Acc: 0.7946        \n",
+            "Confusion Matrix:\n",
+            "[[48  0  4  0  0  0  9  0  5  0]\n",
+            " [ 0 31  0 11  0  5  0 10  0  7]\n",
+            " [ 3  0 92  0  1  0  4  0  0  1]\n",
+            " [ 0  1  0 61  0  8  0  3  0 14]\n",
+            " [ 2  0  9  0 37  0  0  0  0  0]\n",
+            " [ 0  3  0  8  0 25  0  0  0  3]\n",
+            " [ 0  0  4  0  0  0 50  1  0  0]\n",
+            " [ 0  3  0  4  0  0  0 33  0  6]\n",
+            " [ 0  0  5  0  0  0  3  0 86  0]\n",
+            " [ 0  2  0  3  0  0  0  2  0 94]]\n",
+            "Phase: train Epoch: 23/60 Loss: 0.7865 Acc: 0.8014        \n",
+            "Phase: validation   Epoch: 23/60 Loss: 0.7859 Acc: 0.7932        \n",
+            "Confusion Matrix:\n",
+            "[[49  0  3  0  0  0  9  0  5  0]\n",
+            " [ 0 28  0 11  0  3  0 13  0  9]\n",
+            " [ 2  0 87  0  1  0  6  0  4  1]\n",
+            " [ 0  1  0 66  0  4  0  3  0 13]\n",
+            " [ 2  0 10  0 36  0  0  0  0  0]\n",
+            " [ 0  4  0  9  0 25  0  0  0  1]\n",
+            " [ 0  0  4  0  0  0 50  1  0  0]\n",
+            " [ 0  3  0  3  0  0  0 37  0  3]\n",
+            " [ 1  0  4  0  0  0  4  0 85  0]\n",
+            " [ 0  2  0  3  0  0  0  3  0 93]]\n",
+            "Phase: train Epoch: 24/60 Loss: 0.7796 Acc: 0.8132        \n",
+            "Phase: validation   Epoch: 24/60 Loss: 0.7682 Acc: 0.7974        \n",
+            "Confusion Matrix:\n",
+            "[[55  0  2  0  1  0  4  0  4  0]\n",
+            " [ 1 31  0  9  0  6  0  8  0  9]\n",
+            " [ 6  0 83  0  4  0  3  0  4  1]\n",
+            " [ 0  2  1 59  1  8  0  3  0 13]\n",
+            " [ 2  0  8  0 38  0  0  0  0  0]\n",
+            " [ 1  2  0  5  0 29  0  0  0  2]\n",
+            " [ 0  0  5  0  0  0 49  1  0  0]\n",
+            " [ 0  3  0  4  0  0  0 34  0  5]\n",
+            " [ 1  0  1  0  0  0  2  0 90  0]\n",
+            " [ 0  2  0  4  0  0  0  4  0 91]]\n",
+            "Phase: train Epoch: 25/60 Loss: 0.7358 Acc: 0.8294        \n",
+            "Phase: validation   Epoch: 25/60 Loss: 0.7331 Acc: 0.7974        \n",
+            "Confusion Matrix:\n",
+            "[[50  0  2  0  0  0  9  0  5  0]\n",
+            " [ 0 34  0 10  0  4  0  9  0  7]\n",
+            " [ 4  0 84  0  4  0  3  0  5  1]\n",
+            " [ 0  0  0 62  0  9  0  3  0 13]\n",
+            " [ 2  0  7  0 39  0  0  0  0  0]\n",
+            " [ 0  1  0  8  0 29  0  0  0  1]\n",
+            " [ 0  0  4  0  0  0 50  1  0  0]\n",
+            " [ 0  2  0  6  0  0  0 34  0  4]\n",
+            " [ 1  0  3  0  0  0  3  0 87  0]\n",
+            " [ 0  2  0  5  0  0  0  4  0 90]]\n",
+            "Phase: train Epoch: 26/60 Loss: 0.7118 Acc: 0.8328        \n",
+            "Phase: validation   Epoch: 26/60 Loss: 0.7205 Acc: 0.8031        \n",
+            "Confusion Matrix:\n",
+            "[[52  0  4  0  1  0  6  0  3  0]\n",
+            " [ 1 37  0  8  0  5  0  6  0  7]\n",
+            " [ 4  0 90  0  3  0  3  0  0  1]\n",
+            " [ 0  2  0 63  0  6  0  3  0 13]\n",
+            " [ 3  0  5  0 40  0  0  0  0  0]\n",
+            " [ 0  2  0  6  0 29  0  0  0  2]\n",
+            " [ 0  0  6  0  0  0 48  1  0  0]\n",
+            " [ 0  7  0  7  0  0  0 25  0  7]\n",
+            " [ 3  0  4  0  0  0  1  0 85  1]\n",
+            " [ 0  4  0  3  0  0  0  0  0 94]]\n",
+            "Phase: train Epoch: 27/60 Loss: 0.7023 Acc: 0.8277        \n",
+            "Phase: validation   Epoch: 27/60 Loss: 0.7271 Acc: 0.7932        \n",
+            "Confusion Matrix:\n",
+            "[[46  0  3  0  0  0 10  0  7  0]\n",
+            " [ 2 24  0 17  0  5  0 10  0  6]\n",
+            " [ 2  0 91  0  2  0  4  0  2  0]\n",
+            " [ 0  0  0 75  0  3  0  3  0  6]\n",
+            " [ 1  0  8  0 38  0  0  0  1  0]\n",
+            " [ 0  1  1 10  0 27  0  0  0  0]\n",
+            " [ 0  0  5  0  0  0 48  1  1  0]\n",
+            " [ 0  1  0  7  0  0  0 34  0  4]\n",
+            " [ 0  0  3  0  0  0  3  0 88  0]\n",
+            " [ 0  3  0  8  0  0  0  5  0 85]]\n",
+            "Phase: train Epoch: 28/60 Loss: 0.7023 Acc: 0.8243        \n",
+            "Phase: validation   Epoch: 28/60 Loss: 0.7132 Acc: 0.7917        \n",
+            "Confusion Matrix:\n",
+            "[[48  0  2  0  1  0 10  0  5  0]\n",
+            " [ 0 29  0  8  0  7  0 12  0  8]\n",
+            " [ 4  0 81  0  5  0  7  0  4  0]\n",
+            " [ 0  2  0 56  0 12  0  3  0 14]\n",
+            " [ 1  0  3  0 43  0  1  0  0  0]\n",
+            " [ 0  2  0  5  0 31  0  0  0  1]\n",
+            " [ 0  0  3  0  0  0 50  2  0  0]\n",
+            " [ 0  2  0  5  0  0  0 35  0  4]\n",
+            " [ 2  0  1  1  0  0  2  0 88  0]\n",
+            " [ 0  2  0  3  0  0  0  2  0 94]]\n",
+            "Phase: train Epoch: 29/60 Loss: 0.6692 Acc: 0.8430        \n",
+            "Phase: validation   Epoch: 29/60 Loss: 0.7234 Acc: 0.7974        \n",
+            "Confusion Matrix:\n",
+            "[[57  0  3  0  1  0  3  0  2  0]\n",
+            " [ 2 30  0 16  0  5  0  5  0  6]\n",
+            " [ 5  0 91  0  4  0  1  0  0  0]\n",
+            " [ 0  2  0 70  0  5  0  3  0  7]\n",
+            " [ 3  0  4  0 41  0  0  0  0  0]\n",
+            " [ 0  2  0 10  0 27  0  0  0  0]\n",
+            " [ 0  0  6  0  0  0 48  1  0  0]\n",
+            " [ 0  2  0  8  0  0  0 32  0  4]\n",
+            " [ 6  0  6  1  0  0  3  0 78  0]\n",
+            " [ 0  6  0  7  0  0  0  3  0 85]]\n",
+            "Phase: train Epoch: 30/60 Loss: 0.6599 Acc: 0.8302        \n",
+            "Phase: validation   Epoch: 30/60 Loss: 0.7141 Acc: 0.7817        \n",
+            "Confusion Matrix:\n",
+            "[[43  0  4  0  0  0 13  0  6  0]\n",
+            " [ 1 30  0 12  0  4  0 10  0  7]\n",
+            " [ 1  0 87  0  0  0  5  0  8  0]\n",
+            " [ 0  2  1 65  0  4  0  3  0 12]\n",
+            " [ 1  0  9  0 35  0  1  0  2  0]\n",
+            " [ 0  1  1  9  0 26  0  0  0  2]\n",
+            " [ 0  0  4  0  0  0 50  0  1  0]\n",
+            " [ 0  2  0  6  0  0  1 34  0  3]\n",
+            " [ 0  0  2  0  0  0  2  0 90  0]\n",
+            " [ 0  1  0  4  0  0  0  8  0 88]]\n",
+            "Phase: train Epoch: 31/60 Loss: 0.6211 Acc: 0.8531        \n",
+            "Phase: validation   Epoch: 31/60 Loss: 0.6823 Acc: 0.8103        \n",
+            "Confusion Matrix:\n",
+            "[[46  0  3  0  0  0 12  0  5  0]\n",
+            " [ 0 29  0 17  0  2  0 11  0  5]\n",
+            " [ 3  0 89  0  2  0  5  0  2  0]\n",
+            " [ 0  1  0 72  0  4  0  3  0  7]\n",
+            " [ 3  0  5  0 40  0  0  0  0  0]\n",
+            " [ 0  1  0  9  0 29  0  0  0  0]\n",
+            " [ 0  0  3  0  0  0 51  1  0  0]\n",
+            " [ 0  2  0  7  0  0  0 33  0  4]\n",
+            " [ 1  0  1  0  0  0  3  0 89  0]\n",
+            " [ 0  3  0  5  0  0  0  2  1 90]]\n",
+            "Phase: train Epoch: 32/60 Loss: 0.6062 Acc: 0.8489        \n",
+            "Phase: validation   Epoch: 32/60 Loss: 0.6725 Acc: 0.7960        \n",
+            "Confusion Matrix:\n",
+            "[[43  0  3  0  0  0 12  0  8  0]\n",
+            " [ 2 28  0 15  0  3  0 10  0  6]\n",
+            " [ 1  0 91  0  0  0  5  0  4  0]\n",
+            " [ 0  2  0 69  0  5  0  3  0  8]\n",
+            " [ 2  0  9  0 37  0  0  0  0  0]\n",
+            " [ 0  2  1  7  0 28  0  0  0  1]\n",
+            " [ 0  0  5  0  0  0 49  1  0  0]\n",
+            " [ 0  2  0  6  0  0  0 34  0  4]\n",
+            " [ 0  0  3  0  0  0  4  0 87  0]\n",
+            " [ 0  2  0  4  0  0  1  2  0 92]]\n",
+            "Phase: train Epoch: 33/60 Loss: 0.6315 Acc: 0.8404        \n",
+            "Phase: validation   Epoch: 33/60 Loss: 0.6655 Acc: 0.7917        \n",
+            "Confusion Matrix:\n",
+            "[[44  0  3  0  0  0 12  0  7  0]\n",
+            " [ 1 35  0  8  0  4  0  9  0  7]\n",
+            " [ 1  0 89  0  0  0  3  0  8  0]\n",
+            " [ 0  3  0 59  0  9  0  3  0 13]\n",
+            " [ 1  0  9  0 35  0  1  0  2  0]\n",
+            " [ 1  2  0  6  0 28  0  0  0  2]\n",
+            " [ 0  0  4  0  0  0 49  1  1  0]\n",
+            " [ 1  2  0  4  0  0  0 33  0  6]\n",
+            " [ 0  0  1  0  0  0  2  0 91  0]\n",
+            " [ 0  2  0  3  0  0  0  4  0 92]]\n",
+            "Phase: train Epoch: 34/60 Loss: 0.6309 Acc: 0.8404        \n",
+            "Phase: validation   Epoch: 34/60 Loss: 0.6497 Acc: 0.7974        \n",
+            "Confusion Matrix:\n",
+            "[[46  0  3  0  0  0 10  0  7  0]\n",
+            " [ 1 30  0 14  0  2  0  8  0  9]\n",
+            " [ 3  0 90  0  1  0  4  0  2  1]\n",
+            " [ 0  2  1 67  0  3  0  1  0 13]\n",
+            " [ 1  0  7  0 39  0  0  0  1  0]\n",
+            " [ 1  1  0  9  0 26  0  0  0  2]\n",
+            " [ 0  0  3  0  0  0 51  1  0  0]\n",
+            " [ 0  6  0  6  0  0  0 27  0  7]\n",
+            " [ 1  0  1  0  0  0  3  0 89  0]\n",
+            " [ 0  2  0  4  0  0  0  1  0 94]]\n",
+            "Phase: train Epoch: 35/60 Loss: 0.5806 Acc: 0.8582        \n",
+            "Phase: validation   Epoch: 35/60 Loss: 0.6403 Acc: 0.8174        \n",
+            "Confusion Matrix:\n",
+            "[[53  0  3  0  0  0  6  0  4  0]\n",
+            " [ 1 43  0  7  0  2  0  4  0  7]\n",
+            " [ 2  0 91  0  1  0  3  0  3  1]\n",
+            " [ 0  5  0 58  0  9  0  1  0 14]\n",
+            " [ 1  0  6  0 40  0  0  0  1  0]\n",
+            " [ 0  2  0  7  0 29  0  0  0  1]\n",
+            " [ 0  0  5  0  0  0 49  1  0  0]\n",
+            " [ 0  5  0  5  0  0  0 27  0  9]\n",
+            " [ 1  0  2  0  0  0  2  0 89  0]\n",
+            " [ 0  3  0  2  0  0  0  2  0 94]]\n",
+            "Phase: train Epoch: 36/60 Loss: 0.5816 Acc: 0.8557        \n",
+            "Phase: validation   Epoch: 36/60 Loss: 0.6677 Acc: 0.8146        \n",
+            "Confusion Matrix:\n",
+            "[[56  0  3  0  0  0  5  0  2  0]\n",
+            " [ 1 42  0  7  0  1  0  5  0  8]\n",
+            " [ 2  0 90  0  3  0  4  0  2  0]\n",
+            " [ 0  4  1 55  0  8  0  5  0 14]\n",
+            " [ 1  0  4  0 42  0  0  0  1  0]\n",
+            " [ 1  1  0 10  0 26  0  0  0  1]\n",
+            " [ 0  0  5  0  0  0 49  1  0  0]\n",
+            " [ 1  3  0  5  0  0  0 34  0  3]\n",
+            " [ 4  0  1  0  0  0  3  0 86  0]\n",
+            " [ 0  2  0  3  0  0  1  4  0 91]]\n",
+            "Phase: train Epoch: 37/60 Loss: 0.5698 Acc: 0.8557        \n",
+            "Phase: validation   Epoch: 37/60 Loss: 0.6240 Acc: 0.8131        \n",
+            "Confusion Matrix:\n",
+            "[[55  0  5  0  0  0  5  0  1  0]\n",
+            " [ 1 41  0 10  0  2  0  4  0  6]\n",
+            " [ 1  0 94  0  1  0  3  0  1  1]\n",
+            " [ 0  5  0 64  0  8  0  1  0  9]\n",
+            " [ 1  0  7  0 39  0  0  0  1  0]\n",
+            " [ 0  4  0  5  0 30  0  0  0  0]\n",
+            " [ 0  0  5  0  0  0 48  1  1  0]\n",
+            " [ 0  8  0  6  0  0  0 27  0  5]\n",
+            " [ 2  0  7  0  0  0  3  0 82  0]\n",
+            " [ 0  5  0  5  0  0  0  1  0 90]]\n",
+            "Phase: train Epoch: 38/60 Loss: 0.5241 Acc: 0.8735        \n",
+            "Phase: validation   Epoch: 38/60 Loss: 0.6234 Acc: 0.8174        \n",
+            "Confusion Matrix:\n",
+            "[[53  0  3  0  0  0  7  0  3  0]\n",
+            " [ 0 41  0  9  0  3  0  4  0  7]\n",
+            " [ 2  0 87  0  2  0  6  0  3  1]\n",
+            " [ 0  4  0 64  0  5  0  2  0 12]\n",
+            " [ 4  0  5  0 39  0  0  0  0  0]\n",
+            " [ 0  1  0  7  0 30  0  0  0  1]\n",
+            " [ 0  0  5  0  0  0 49  1  0  0]\n",
+            " [ 0  6  0  6  0  0  0 29  0  5]\n",
+            " [ 0  0  1  0  0  0  3  0 90  0]\n",
+            " [ 0  4  0  4  0  0  0  2  0 91]]\n",
+            "Phase: train Epoch: 39/60 Loss: 0.5206 Acc: 0.8761        \n",
+            "Phase: validation   Epoch: 39/60 Loss: 0.6692 Acc: 0.8017        \n",
+            "Confusion Matrix:\n",
+            "[[60  0  1  0  0  0  3  0  2  0]\n",
+            " [ 2 47  0  6  0  0  0  4  0  5]\n",
+            " [13  0 82  0  3  0  3  0  0  0]\n",
+            " [ 0  6  1 58  0  9  0  2  0 11]\n",
+            " [ 5  0  3  0 40  0  0  0  0  0]\n",
+            " [ 1  6  0  4  0 28  0  0  0  0]\n",
+            " [ 0  0  5  0  0  0 48  1  1  0]\n",
+            " [ 0  7  0  3  0  0  0 34  0  2]\n",
+            " [ 8  0  2  0  0  0  3  0 81  0]\n",
+            " [ 0  5  0  7  0  0  0  5  0 84]]\n",
+            "Phase: train Epoch: 40/60 Loss: 0.5260 Acc: 0.8659        \n",
+            "Phase: validation   Epoch: 40/60 Loss: 0.6174 Acc: 0.8103        \n",
+            "Confusion Matrix:\n",
+            "[[53  0  2  0  0  0  6  0  5  0]\n",
+            " [ 0 41  0  7  0  1  0  8  0  7]\n",
+            " [ 4  0 88  0  1  0  6  0  1  1]\n",
+            " [ 0  6  0 60  0  4  0  3  0 14]\n",
+            " [ 3  0  7  0 37  0  0  0  1  0]\n",
+            " [ 0  6  0  5  0 26  0  0  0  2]\n",
+            " [ 0  0  4  0  0  0 50  1  0  0]\n",
+            " [ 0  3  0  4  0  0  0 32  0  7]\n",
+            " [ 1  0  1  1  0  0  3  0 88  0]\n",
+            " [ 0  2  0  3  0  0  0  3  0 93]]\n",
+            "Phase: train Epoch: 41/60 Loss: 0.4862 Acc: 0.8854        \n",
+            "Phase: validation   Epoch: 41/60 Loss: 0.5903 Acc: 0.8260        \n",
+            "Confusion Matrix:\n",
+            "[[57  0  2  0  0  0  5  0  2  0]\n",
+            " [ 1 44  0  5  0  1  0  6  0  7]\n",
+            " [ 8  0 88  0  1  0  3  0  0  1]\n",
+            " [ 0  6  0 59  0  6  0  4  0 12]\n",
+            " [ 4  0  4  0 40  0  0  0  0  0]\n",
+            " [ 1  3  0  5  0 29  0  0  0  1]\n",
+            " [ 0  0  5  0  0  0 49  1  0  0]\n",
+            " [ 0  3  0  4  0  0  0 34  0  5]\n",
+            " [ 2  0  2  0  0  0  3  0 87  0]\n",
+            " [ 0  2  0  3  0  0  0  4  0 92]]\n",
+            "Phase: train Epoch: 42/60 Loss: 0.4872 Acc: 0.8820        \n",
+            "Phase: validation   Epoch: 42/60 Loss: 0.5861 Acc: 0.8288        \n",
+            "Confusion Matrix:\n",
+            "[[56  0  2  0  0  0  5  0  3  0]\n",
+            " [ 1 44  0  7  0  2  0  4  0  6]\n",
+            " [ 5  0 90  0  2  0  3  0  1  0]\n",
+            " [ 0  8  0 64  0  6  0  1  0  8]\n",
+            " [ 3  0  3  0 42  0  0  0  0  0]\n",
+            " [ 0  3  0  6  0 30  0  0  0  0]\n",
+            " [ 0  0  6  0  0  0 49  0  0  0]\n",
+            " [ 0  9  0  5  0  0  0 27  0  5]\n",
+            " [ 3  0  1  0  0  0  3  0 87  0]\n",
+            " [ 0  4  0  4  0  0  0  1  0 92]]\n",
+            "Phase: train Epoch: 43/60 Loss: 0.5376 Acc: 0.8591        \n",
+            "Phase: validation   Epoch: 43/60 Loss: 0.5966 Acc: 0.8188        \n",
+            "Confusion Matrix:\n",
+            "[[55  0  2  0  0  0  5  0  4  0]\n",
+            " [ 1 28  0 19  0  2  0  9  0  5]\n",
+            " [ 4  0 91  0  2  0  4  0  0  0]\n",
+            " [ 0  1  1 73  0  4  0  2  0  6]\n",
+            " [ 1  0  3  0 44  0  0  0  0  0]\n",
+            " [ 1  1  0 11  0 26  0  0  0  0]\n",
+            " [ 0  0  3  0  0  0 50  1  1  0]\n",
+            " [ 0  2  0  5  0  0  0 35  0  4]\n",
+            " [ 1  0  2  0  0  0  4  0 87  0]\n",
+            " [ 0  4  0  8  0  0  0  4  0 85]]\n",
+            "Phase: train Epoch: 44/60 Loss: 0.4847 Acc: 0.8761        \n",
+            "Phase: validation   Epoch: 44/60 Loss: 0.5864 Acc: 0.8060        \n",
+            "Confusion Matrix:\n",
+            "[[59  0  3  0  0  0  2  0  2  0]\n",
+            " [ 1 39  0  7  0  4  0  8  0  5]\n",
+            " [ 7  0 89  0  2  0  2  0  1  0]\n",
+            " [ 1  4  1 58  0 10  0  4  0  9]\n",
+            " [ 2  0  5  0 41  0  0  0  0  0]\n",
+            " [ 1  1  0  7  0 30  0  0  0  0]\n",
+            " [ 1  0  5  0  0  0 47  1  1  0]\n",
+            " [ 0  2  0  5  0  0  0 36  0  3]\n",
+            " [ 4  0  2  0  0  0  1  0 87  0]\n",
+            " [ 0  4  0  9  0  0  0  9  0 79]]\n",
+            "Phase: train Epoch: 45/60 Loss: 0.4575 Acc: 0.8922        \n",
+            "Phase: validation   Epoch: 45/60 Loss: 0.6055 Acc: 0.8174        \n",
+            "Confusion Matrix:\n",
+            "[[57  0  0  0  0  0  7  0  2  0]\n",
+            " [ 0 45  0  8  0  1  0  6  0  4]\n",
+            " [ 8  0 82  0  5  0  5  0  0  1]\n",
+            " [ 0  4  0 65  0  8  0  4  0  6]\n",
+            " [ 3  0  4  0 41  0  0  0  0  0]\n",
+            " [ 1  4  0  5  0 29  0  0  0  0]\n",
+            " [ 0  0  3  0  0  0 51  1  0  0]\n",
+            " [ 0  4  0  4  0  0  0 34  0  4]\n",
+            " [ 2  0  2  1  0  0  4  0 85  0]\n",
+            " [ 0  5  0  7  0  0  0  5  0 84]]\n",
+            "Phase: train Epoch: 46/60 Loss: 0.4694 Acc: 0.8837        \n",
+            "Phase: validation   Epoch: 46/60 Loss: 0.5917 Acc: 0.8274        \n",
+            "Confusion Matrix:\n",
+            "[[52  0  1  0  1  0 10  0  2  0]\n",
+            " [ 1 41  0  5  0  2  0  5  0 10]\n",
+            " [ 1  0 85  0  4  0  5  0  5  1]\n",
+            " [ 0  4  1 57  0  6  0  5  0 14]\n",
+            " [ 2  0  3  0 42  0  0  0  1  0]\n",
+            " [ 1  3  0  4  0 29  0  0  0  2]\n",
+            " [ 0  0  1  0  0  0 52  1  1  0]\n",
+            " [ 0  3  0  3  0  0  0 36  0  4]\n",
+            " [ 1  0  1  0  0  0  1  0 91  0]\n",
+            " [ 0  1  0  1  0  0  0  4  0 95]]\n",
+            "Phase: train Epoch: 47/60 Loss: 0.4482 Acc: 0.8930        \n",
+            "Phase: validation   Epoch: 47/60 Loss: 0.5803 Acc: 0.8188        \n",
+            "Confusion Matrix:\n",
+            "[[58  0  0  0  0  0  5  0  3  0]\n",
+            " [ 1 43  0  9  0  1  0  4  0  6]\n",
+            " [ 5  0 82  0  4  0  4  0  5  1]\n",
+            " [ 0  3  1 61  0 10  0  5  0  7]\n",
+            " [ 2  0  4  0 42  0  0  0  0  0]\n",
+            " [ 1  2  0  4  0 32  0  0  0  0]\n",
+            " [ 0  0  4  0  0  0 49  1  1  0]\n",
+            " [ 0  7  0  2  0  0  0 33  0  4]\n",
+            " [ 2  0  1  0  0  0  2  0 88  1]\n",
+            " [ 0  3  0  7  0  0  0  5  0 86]]\n",
+            "Phase: train Epoch: 48/60 Loss: 0.4645 Acc: 0.8888        \n",
+            "Phase: validation   Epoch: 48/60 Loss: 0.6020 Acc: 0.8103        \n",
+            "Confusion Matrix:\n",
+            "[[56  0  2  0  0  0  5  0  3  0]\n",
+            " [ 1 42  0 14  0  1  0  3  0  3]\n",
+            " [10  0 85  0  2  0  4  0  0  0]\n",
+            " [ 0  5  0 71  0  3  0  3  0  5]\n",
+            " [ 3  0  4  0 41  0  0  0  0  0]\n",
+            " [ 1  5  0  7  0 26  0  0  0  0]\n",
+            " [ 1  0  4  0  1  0 48  1  0  0]\n",
+            " [ 0  4  0  5  0  0  0 35  0  2]\n",
+            " [ 3  0  2  0  0  0  3  0 86  0]\n",
+            " [ 0  8  0 10  0  0  0  5  0 78]]\n",
+            "Phase: train Epoch: 49/60 Loss: 0.4915 Acc: 0.8727        \n",
+            "Phase: validation   Epoch: 49/60 Loss: 0.6987 Acc: 0.7732        \n",
+            "Confusion Matrix:\n",
+            "[[41  0  6  0  0  0 11  0  8  0]\n",
+            " [ 3 17  2 23  2  3  2  5  0  7]\n",
+            " [ 0  0 95  0  1  0  2  0  3  0]\n",
+            " [ 0  1  3 71  0  3  0  1  0  8]\n",
+            " [ 1  0  8  0 38  0  1  0  0  0]\n",
+            " [ 0  0  2 11  0 25  0  0  0  1]\n",
+            " [ 0  0  3  0  0  0 52  0  0  0]\n",
+            " [ 0  2  1  5  0  0  3 29  1  5]\n",
+            " [ 1  0  3  0  0  0  3  0 87  0]\n",
+            " [ 1  1  0  7  0  0  3  2  0 87]]\n",
+            "Phase: train Epoch: 50/60 Loss: 0.4490 Acc: 0.8888        \n",
+            "Phase: validation   Epoch: 50/60 Loss: 0.5643 Acc: 0.8131        \n",
+            "Confusion Matrix:\n",
+            "[[61  0  0  0  0  0  3  0  2  0]\n",
+            " [ 1 41  0  8  0  1  0  7  0  6]\n",
+            " [10  0 81  0  5  0  3  0  2  0]\n",
+            " [ 0  5  0 61  0  6  0  5  0 10]\n",
+            " [ 3  0  2  0 43  0  0  0  0  0]\n",
+            " [ 1  3  0  8  0 26  0  0  0  1]\n",
+            " [ 0  0  4  0  0  0 49  1  1  0]\n",
+            " [ 0  4  0  4  0  0  0 35  0  3]\n",
+            " [ 4  0  1  0  0  0  3  0 86  0]\n",
+            " [ 0  3  0  5  0  0  0  6  0 87]]\n",
+            "Phase: train Epoch: 51/60 Loss: 0.4638 Acc: 0.8871        \n",
+            "Phase: validation   Epoch: 51/60 Loss: 0.5434 Acc: 0.8302        \n",
+            "Confusion Matrix:\n",
+            "[[54  0  1  0  0  0  5  0  6  0]\n",
+            " [ 1 38  0 13  0  1  0  5  0  6]\n",
+            " [ 3  0 92  0  0  0  3  0  2  1]\n",
+            " [ 0  4  0 66  0  4  0  2  0 11]\n",
+            " [ 2  0  7  0 38  0  0  0  1  0]\n",
+            " [ 1  3  0  4  0 29  0  0  0  2]\n",
+            " [ 0  0  4  0  0  0 50  0  1  0]\n",
+            " [ 0  4  0  5  0  0  0 33  0  4]\n",
+            " [ 0  0  2  0  0  0  2  0 90  0]\n",
+            " [ 0  2  0  4  0  0  0  3  0 92]]\n",
+            "Phase: train Epoch: 52/60 Loss: 0.4550 Acc: 0.8752        \n",
+            "Phase: validation   Epoch: 52/60 Loss: 0.5331 Acc: 0.8231        \n",
+            "Confusion Matrix:\n",
+            "[[56  0  1  0  0  0  5  0  4  0]\n",
+            " [ 1 41  0 12  0  3  0  4  0  3]\n",
+            " [ 6  0 86  0  3  0  3  0  2  1]\n",
+            " [ 0  7  0 65  0  6  0  2  0  7]\n",
+            " [ 2  0  3  0 42  0  0  0  1  0]\n",
+            " [ 0  3  0  7  0 29  0  0  0  0]\n",
+            " [ 0  0  2  0  0  0 52  0  1  0]\n",
+            " [ 0  3  0  6  0  0  0 33  0  4]\n",
+            " [ 2  0  2  1  0  0  3  0 86  0]\n",
+            " [ 0  4  0  6  0  0  0  4  0 87]]\n",
+            "Phase: train Epoch: 53/60 Loss: 0.4344 Acc: 0.8956        \n",
+            "Phase: validation   Epoch: 53/60 Loss: 0.5437 Acc: 0.8302        \n",
+            "Confusion Matrix:\n",
+            "[[55  0  3  0  0  0  6  0  2  0]\n",
+            " [ 1 37  0 13  0  3  0  4  0  6]\n",
+            " [ 0  0 92  0  5  0  3  0  0  1]\n",
+            " [ 0  3  0 67  0  7  0  2  0  8]\n",
+            " [ 0  0  3  0 45  0  0  0  0  0]\n",
+            " [ 0  1  0  7  0 30  0  0  0  1]\n",
+            " [ 0  0  4  0  0  0 51  0  0  0]\n",
+            " [ 0  5  0  5  0  0  0 30  0  6]\n",
+            " [ 3  0  4  1  0  0  3  0 83  0]\n",
+            " [ 0  3  0  4  0  0  0  2  0 92]]\n",
+            "Phase: train Epoch: 54/60 Loss: 0.3927 Acc: 0.9160        \n",
+            "Phase: validation   Epoch: 54/60 Loss: 0.5389 Acc: 0.8188        \n",
+            "Confusion Matrix:\n",
+            "[[57  0  2  0  0  0  4  0  3  0]\n",
+            " [ 1 32  0 15  0  1  0 10  0  5]\n",
+            " [ 6  0 92  0  1  0  2  0  0  0]\n",
+            " [ 0  1  0 70  0  6  0  2  0  8]\n",
+            " [ 1  0  4  0 43  0  0  0  0  0]\n",
+            " [ 1  1  0  7  0 30  0  0  0  0]\n",
+            " [ 0  0  5  0  2  0 47  0  1  0]\n",
+            " [ 0  2  0  7  0  0  0 35  0  2]\n",
+            " [ 2  0  4  1  0  0  3  0 84  0]\n",
+            " [ 0  4  0  9  0  0  0  4  0 84]]\n",
+            "Phase: train Epoch: 55/60 Loss: 0.4092 Acc: 0.8973        \n",
+            "Phase: validation   Epoch: 55/60 Loss: 0.5556 Acc: 0.8217        \n",
+            "Confusion Matrix:\n",
+            "[[54  0  2  0  0  0  7  0  3  0]\n",
+            " [ 0 41  0  9  0  1  0  7  0  6]\n",
+            " [ 4  0 87  0  1  0  7  0  1  1]\n",
+            " [ 0  5  0 60  0  6  0  4  0 12]\n",
+            " [ 3  0  4  0 40  0  0  0  1  0]\n",
+            " [ 0  3  0  4  0 30  0  0  0  2]\n",
+            " [ 0  0  2  0  0  0 52  1  0  0]\n",
+            " [ 1  2  0  5  0  0  0 33  0  5]\n",
+            " [ 3  0  1  1  0  0  1  1 87  0]\n",
+            " [ 0  1  0  3  0  0  0  5  0 92]]\n",
+            "Phase: train Epoch: 56/60 Loss: 0.4392 Acc: 0.8854        \n",
+            "Phase: validation   Epoch: 56/60 Loss: 0.5497 Acc: 0.8217        \n",
+            "Confusion Matrix:\n",
+            "[[55  0  2  0  0  0  5  0  4  0]\n",
+            " [ 1 43  1  7  0  0  0  7  0  5]\n",
+            " [ 6  0 89  0  2  0  3  0  1  0]\n",
+            " [ 0  4  1 59  1  5  0  7  0 10]\n",
+            " [ 3  0  5  0 40  0  0  0  0  0]\n",
+            " [ 1  3  0  7  0 28  0  0  0  0]\n",
+            " [ 1  0  4  0  0  0 49  0  1  0]\n",
+            " [ 0  3  0  2  0  0  1 37  0  3]\n",
+            " [ 3  0  2  0  0  0  3  0 86  0]\n",
+            " [ 0  2  0  4  0  0  0  5  0 90]]\n",
+            "Phase: train Epoch: 57/60 Loss: 0.4041 Acc: 0.9092        \n",
+            "Phase: validation   Epoch: 57/60 Loss: 0.5270 Acc: 0.8231        \n",
+            "Confusion Matrix:\n",
+            "[[50  0  4  0  0  0  6  0  6  0]\n",
+            " [ 1 34  0 13  0  5  0  5  0  6]\n",
+            " [ 1  0 94  0  1  0  3  0  1  1]\n",
+            " [ 0  2  0 69  0  7  0  0  0  9]\n",
+            " [ 0  0  4  0 42  0  0  0  2  0]\n",
+            " [ 0  1  0  7  0 30  0  0  0  1]\n",
+            " [ 0  0  4  0  0  0 50  0  1  0]\n",
+            " [ 0  4  0  7  0  0  0 29  0  6]\n",
+            " [ 1  0  2  1  0  0  3  0 87  0]\n",
+            " [ 0  1  0  7  0  0  0  1  0 92]]\n",
+            "Phase: train Epoch: 58/60 Loss: 0.3711 Acc: 0.9092        \n",
+            "Phase: validation   Epoch: 58/60 Loss: 0.5165 Acc: 0.8260        \n",
+            "Confusion Matrix:\n",
+            "[[54  0  3  0  0  0  5  0  4  0]\n",
+            " [ 1 31  0 16  0  5  0  5  0  6]\n",
+            " [ 3  0 91  0  3  0  3  0  0  1]\n",
+            " [ 0  1  0 70  0  6  0  0  0 10]\n",
+            " [ 0  0  3  0 45  0  0  0  0  0]\n",
+            " [ 0  1  0  7  0 31  0  0  0  0]\n",
+            " [ 0  0  3  0  0  0 50  1  1  0]\n",
+            " [ 0  2  0  8  0  0  0 32  0  4]\n",
+            " [ 1  0  2  1  0  0  3  0 87  0]\n",
+            " [ 0  2  0  8  0  0  0  3  0 88]]\n",
+            "Phase: train Epoch: 59/60 Loss: 0.4069 Acc: 0.8990        \n",
+            "Phase: validation   Epoch: 59/60 Loss: 0.5803 Acc: 0.8203        \n",
+            "Confusion Matrix:\n",
+            "[[57  0  2  0  0  0  5  0  2  0]\n",
+            " [ 0 42  0 10  0  0  0  5  0  7]\n",
+            " [ 6  0 87  0  2  0  5  0  0  1]\n",
+            " [ 0  6  0 61  0  5  0  1  0 14]\n",
+            " [ 0  0  4  0 43  0  0  0  1  0]\n",
+            " [ 1  4  0  5  0 28  0  0  0  1]\n",
+            " [ 0  0  3  0  0  0 51  1  0  0]\n",
+            " [ 0  5  0  6  0  0  0 28  0  7]\n",
+            " [ 3  0  5  1  0  0  3  0 82  0]\n",
+            " [ 0  3  0  1  0  0  0  1  0 96]]\n",
+            "Phase: train Epoch: 60/60 Loss: 0.3570 Acc: 0.9083        \n",
+            "Phase: validation   Epoch: 60/60 Loss: 0.5195 Acc: 0.8302        \n",
+            "Confusion Matrix:\n",
+            "[[56  0  3  0  0  0  6  0  1  0]\n",
+            " [ 1 49  0  4  0  1  0  4  0  5]\n",
+            " [ 4  0 91  0  0  0  4  0  2  0]\n",
+            " [ 0 11  0 57  0  8  0  3  0  8]\n",
+            " [ 0  0  4  0 42  0  0  0  2  0]\n",
+            " [ 0  6  0  4  0 29  0  0  0  0]\n",
+            " [ 0  1  3  0  0  0 51  0  0  0]\n",
+            " [ 0  3  0  5  0  0  0 33  0  5]\n",
+            " [ 1  0  2  1  0  0  4  0 86  0]\n",
+            " [ 0  4  0  6  0  0  0  3  0 88]]\n"
+          ]
+        }
+      ],
+      "source": [
+        "model_hybrid = train_model(\n",
+        "    model_hybrid, criterion, optimizer_hybrid, exp_lr_scheduler, num_epochs=num_epochs\n",
+        ")"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "s4cEc4mird0E"
+      },
+      "source": [
+        "Visualizing the model predictions\n",
+        "=================================\n"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "ARvjv_lbrd0E"
+      },
+      "source": [
+        "We first define a visualization function for a batch of test data.\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 108,
+      "metadata": {
+        "id": "CtUY4xU_rd0E"
+      },
+      "outputs": [],
+      "source": [
+        "def visualize_model(model, num_images=30, fig_name=\"Predictions\"):\n",
+        "    images_so_far = 0\n",
+        "    _fig = plt.figure(fig_name)\n",
+        "    model.eval()\n",
+        "    with torch.no_grad():\n",
+        "        for _i, (inputs, labels) in enumerate(dataloaders[\"validation\"]):\n",
+        "            inputs = inputs.to(device)\n",
+        "            labels = labels.to(device)\n",
+        "            outputs = model(inputs)\n",
+        "            _, preds = torch.max(outputs, 1)\n",
+        "            for j in range(inputs.size()[0]):\n",
+        "                images_so_far += 1\n",
+        "                ax = plt.subplot(num_images // 2, 2, images_so_far)\n",
+        "                ax.axis(\"off\")\n",
+        "                ax.set_title(\"[{}]\".format(class_names[preds[j]]))\n",
+        "                imshow(inputs.cpu().data[j])\n",
+        "                if images_so_far == num_images:\n",
+        "                    return"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "F6I5Rk92rd0E"
+      },
+      "source": [
+        "Finally, we can run the previous function to see a batch of images with\n",
+        "the corresponding predictions.\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 109,
+      "metadata": {
+        "id": "-RoYcZQXrd0E",
+        "colab": {
+          "base_uri": "https://localhost:8080/",
+          "height": 333
+        },
+        "outputId": "d2357b87-d820-4f83-9453-58d6d1724364"
+      },
+      "outputs": [
+        {
+          "output_type": "error",
+          "ename": "AttributeError",
+          "evalue": "ignored",
+          "traceback": [
+            "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+            "\u001b[0;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
+            "\u001b[0;32m<ipython-input-109-9d4df69fdea3>\u001b[0m in \u001b[0;36m<cell line: 1>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mvisualize_model\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel_hybrid\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnum_images\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m30\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      2\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+            "\u001b[0;32m<ipython-input-108-5ea7620bbf26>\u001b[0m in \u001b[0;36mvisualize_model\u001b[0;34m(model, num_images, fig_name)\u001b[0m\n\u001b[1;32m      2\u001b[0m     \u001b[0mimages_so_far\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0m_fig\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfig_name\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m     \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0meval\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      5\u001b[0m     \u001b[0;32mwith\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mno_grad\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      6\u001b[0m         \u001b[0;32mfor\u001b[0m \u001b[0m_i\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0minputs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabels\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdataloaders\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"validation\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+            "\u001b[0;31mAttributeError\u001b[0m: 'NoneType' object has no attribute 'eval'"
+          ]
+        },
+        {
+          "output_type": "display_data",
+          "data": {
+            "text/plain": [
+              "<Figure size 640x480 with 0 Axes>"
+            ]
+          },
+          "metadata": {}
+        }
+      ],
+      "source": [
+        "visualize_model(model_hybrid, num_images=30)\n",
+        "plt.show()"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "IBXZTnzjrd0E"
+      },
+      "source": [
+        "References\n",
+        "==========\n",
+        "\n",
+        "\\[1\\] Andrea Mari, Thomas R. Bromley, Josh Izaac, Maria Schuld, and\n",
+        "Nathan Killoran. *Transfer learning in hybrid classical-quantum neural\n",
+        "networks*. arXiv:1912.08278 (2019).\n",
+        "\n",
+        "\\[2\\] Rajat Raina, Alexis Battle, Honglak Lee, Benjamin Packer, and\n",
+        "Andrew Y Ng. *Self-taught learning: transfer learning from unlabeled\n",
+        "data*. Proceedings of the 24th International Conference on Machine\n",
+        "Learning\\*, 759--766 (2007).\n",
+        "\n",
+        "\\[3\\] Kaiming He, Xiangyu Zhang, Shaoqing ren and Jian Sun. *Deep\n",
+        "residual learning for image recognition*. Proceedings of the IEEE\n",
+        "Conference on Computer Vision and Pattern Recognition, 770-778 (2016).\n",
+        "\n",
+        "\\[4\\] Ville Bergholm, Josh Izaac, Maria Schuld, Christian Gogolin,\n",
+        "Carsten Blank, Keri McKiernan, and Nathan Killoran. *PennyLane:\n",
+        "Automatic differentiation of hybrid quantum-classical computations*.\n",
+        "arXiv:1811.04968 (2018).\n",
+        "\n",
+        "About the author\n",
+        "================\n"
+      ]
+    }
+  ],
+  "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.9.16"
+    },
+    "colab": {
+      "provenance": [],
+      "gpuType": "V100"
+    },
+    "accelerator": "GPU",
+    "gpuClass": "standard"
+  },
+  "nbformat": 4,
+  "nbformat_minor": 0
+}
\ No newline at end of file