{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import torch\n",
    "from sklearn.metrics import confusion_matrix\n",
    "\n",
    "from mnist_ten.data import test_loader\n",
    "from mnist_ten.models import classifier, weights_path\n",
    "\n",
    "from tqdm.auto import tqdm\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Sequential(\n",
       "  (0): Sequential(\n",
       "    (0): Conv2d(1, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "    (1): LeakyReLU(negative_slope=0.01)\n",
       "    (2): SqueezeLayer(\n",
       "      (short): AvgPool2d(kernel_size=2, stride=2, padding=0)\n",
       "      (long): Sequential(\n",
       "        (0): Conv2d(64, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "        (1): LeakyReLU(negative_slope=0.01)\n",
       "        (2): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "        (3): LeakyReLU(negative_slope=0.01)\n",
       "        (4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n",
       "      )\n",
       "    )\n",
       "    (3): SqueezeLayer(\n",
       "      (short): AvgPool2d(kernel_size=2, stride=2, padding=0)\n",
       "      (long): Sequential(\n",
       "        (0): Conv2d(64, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "        (1): LeakyReLU(negative_slope=0.01)\n",
       "        (2): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "        (3): LeakyReLU(negative_slope=0.01)\n",
       "        (4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n",
       "      )\n",
       "    )\n",
       "    (4): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1))\n",
       "    (5): LeakyReLU(negative_slope=0.01)\n",
       "    (6): Flatten()\n",
       "  )\n",
       "  (1): Sequential(\n",
       "    (0): Linear(in_features=3136, out_features=64, bias=True)\n",
       "    (1): LeakyReLU(negative_slope=0.01)\n",
       "    (2): Linear(in_features=64, out_features=10, bias=True)\n",
       "  )\n",
       ")"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "classifier.load_state_dict(torch.load(weights_path))\n",
    "classifier.eval()\n",
    "classifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "dba786832e944c45a1edc876fc827e41",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=625.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "real_labels = []\n",
    "predicted_labels = []\n",
    "\n",
    "for images, labels in tqdm(test_loader):\n",
    "    real_labels += list(labels)\n",
    "    predictions = classifier(images).detach().numpy()\n",
    "    predicted_labels += np.argmax(predictions, axis=1).tolist()\n",
    "\n",
    "real_labels = np.array(real_labels)\n",
    "predicted_labels = np.array(predicted_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy: 0.5263\n"
     ]
    }
   ],
   "source": [
    "print(f'Accuracy: {np.mean(predicted_labels == real_labels)}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "confusion = confusion_matrix(real_labels, predicted_labels)\n",
    "plt.xlabel('Predicted label')\n",
    "plt.ylabel('Real label')\n",
    "plt.imshow(confusion)\n",
    "plt.colorbar()\n",
    "plt.show()"
   ]
  }
 ],
 "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.8.3"
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "state": {
     "01400dc6a9044330ade5d63b63a80cf6": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "19f5da64f00242a7a1076d226f4d4d45": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": "initial"
      }
     },
     "1f7fef16e7f14160862181cc580675f3": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "20317563edd147bdb52187237be276d6": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "bar_style": "success",
       "description": "100%",
       "layout": "IPY_MODEL_01400dc6a9044330ade5d63b63a80cf6",
       "max": 625,
       "style": "IPY_MODEL_bbf98c3b755341ffa133e5c03953d3ba",
       "value": 625
      }
     },
     "2132ccdf1f53408092b52c82744adb28": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_3d8c97d3be7c4a1388cd14d9d21b1f06",
       "style": "IPY_MODEL_7282afea5f974f90b64946cd88c0a204",
       "value": " 625/625 [00:10&lt;00:00, 60.66it/s]"
      }
     },
     "21afa42d15e64d408330ca5f4b827d5f": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "276606057bee4a8b88530fe618219b51": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "290d35ea97e54cc38908bda875ff2ec0": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "bar_style": "success",
       "description": "100%",
       "layout": "IPY_MODEL_66d87033c0af4f5a8600189893a65be2",
       "max": 625,
       "style": "IPY_MODEL_c6ebc3336fd54c7995ab2738b1334b9c",
       "value": 625
      }
     },
     "2dcaa66f615a4c43a3cf16ec41fde8da": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_2f66bd9163b54235840265a898acd213",
        "IPY_MODEL_8ac3b117ae864a81a15226189583e530"
       ],
       "layout": "IPY_MODEL_276606057bee4a8b88530fe618219b51"
      }
     },
     "2ddf09e09a0348889e2fb55dbaa001bf": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "2f66bd9163b54235840265a898acd213": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "bar_style": "success",
       "description": "100%",
       "layout": "IPY_MODEL_4d5df61e798c460aa3f81bbcc81299ff",
       "max": 625,
       "style": "IPY_MODEL_8abf0afd48734f268fd2656cecc49d0c",
       "value": 625
      }
     },
     "311647af72c34273981b5da01eb11313": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "bar_style": "success",
       "description": "100%",
       "layout": "IPY_MODEL_6d6bbba0e2814341a926012838a2b1d5",
       "max": 625,
       "style": "IPY_MODEL_19f5da64f00242a7a1076d226f4d4d45",
       "value": 625
      }
     },
     "325d249115a44182b1b63130a2860010": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "3d8c97d3be7c4a1388cd14d9d21b1f06": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "48457bf6819d4d5db51a4ddb52d9e7c2": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_8fa00c94cdfc4f1bb3c251b0b0b2b85c",
       "style": "IPY_MODEL_f2d65dcbc1e8445587a1511be3000dff",
       "value": " 625/625 [03:43&lt;00:00,  2.80it/s]"
      }
     },
     "485879a6ad1e411aadb3512115e28946": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "4ae31bfe4aec4e3c99e59e8d799ebd9d": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "4d1db8757aa44be6a9fbfa8ca6b9ff65": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "4d5df61e798c460aa3f81bbcc81299ff": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "4f3664033db7470f8c4a8224a1a40a6b": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "5175531623314ea5836c2133208264aa": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_325d249115a44182b1b63130a2860010",
       "style": "IPY_MODEL_c1939233e854451397572d75d1ca3025",
       "value": " 625/625 [01:22&lt;00:00,  7.57it/s]"
      }
     },
     "51ba2fe0d08c4b3997c5fe18a4460f40": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": "initial"
      }
     },
     "55bb057b8df14ae9891ec26c2a28e40b": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_753b8921e17a410cb3ecae21680cd5e0",
       "style": "IPY_MODEL_73faa19003c34c59a10defa28178db1a",
       "value": " 625/625 [00:19&lt;00:00, 32.27it/s]"
      }
     },
     "57f5778e847a42acb2b01ecef4a3bcd3": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": "initial"
      }
     },
     "5828ae3b1c914d648d894536b6f8a64a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": "initial"
      }
     },
     "64bb013f953c48868a756f029294cf74": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_20317563edd147bdb52187237be276d6",
        "IPY_MODEL_55bb057b8df14ae9891ec26c2a28e40b"
       ],
       "layout": "IPY_MODEL_4f3664033db7470f8c4a8224a1a40a6b"
      }
     },
     "66d87033c0af4f5a8600189893a65be2": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "68d4e0c57f844e5cabfdd35719671a1e": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "6d6bbba0e2814341a926012838a2b1d5": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "7282afea5f974f90b64946cd88c0a204": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "73faa19003c34c59a10defa28178db1a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "753b8921e17a410cb3ecae21680cd5e0": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "75c759b12da24ce593256e8f1c6fe75a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "bar_style": "success",
       "description": "100%",
       "layout": "IPY_MODEL_f15d07497e6642f7b0bdcec4510555f3",
       "max": 60000,
       "style": "IPY_MODEL_51ba2fe0d08c4b3997c5fe18a4460f40",
       "value": 60000
      }
     },
     "7e2d0e331b1a43e499a93f8dc0de54bb": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_bf96d715b20e4899a0e4b9cb57b8028e",
        "IPY_MODEL_5175531623314ea5836c2133208264aa"
       ],
       "layout": "IPY_MODEL_21afa42d15e64d408330ca5f4b827d5f"
      }
     },
     "804ae52e24a241379e80eabc6717ba75": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "8abf0afd48734f268fd2656cecc49d0c": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": "initial"
      }
     },
     "8ac3b117ae864a81a15226189583e530": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_4ae31bfe4aec4e3c99e59e8d799ebd9d",
       "style": "IPY_MODEL_68d4e0c57f844e5cabfdd35719671a1e",
       "value": " 625/625 [03:38&lt;00:00,  2.85it/s]"
      }
     },
     "8bc3c6438a44411d95283a11b163ca61": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_8cb0bc631ac842b08dd8e59f9de59309",
        "IPY_MODEL_48457bf6819d4d5db51a4ddb52d9e7c2"
       ],
       "layout": "IPY_MODEL_2ddf09e09a0348889e2fb55dbaa001bf"
      }
     },
     "8cb0bc631ac842b08dd8e59f9de59309": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "bar_style": "success",
       "description": "100%",
       "layout": "IPY_MODEL_94305a2656574b60b347ba31106c2fb1",
       "max": 625,
       "style": "IPY_MODEL_a9eeba1b10bb4e45b210fdf4b1be93bb",
       "value": 625
      }
     },
     "8ec4ea01d1be4971829dd73432df94b5": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "8fa00c94cdfc4f1bb3c251b0b0b2b85c": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "94305a2656574b60b347ba31106c2fb1": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "981a00fe3d8c48c1bf6610e974ee242a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_c1c27839d6954309ac7c3c54e09d93f5",
       "style": "IPY_MODEL_8ec4ea01d1be4971829dd73432df94b5",
       "value": " 60000/60000 [00:04&lt;00:00, 14838.95it/s]"
      }
     },
     "981a9f1f14624cb8a9571e1e6ee6abc4": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_75c759b12da24ce593256e8f1c6fe75a",
        "IPY_MODEL_981a00fe3d8c48c1bf6610e974ee242a"
       ],
       "layout": "IPY_MODEL_ea9b4560ee594d198db1341fe45c25df"
      }
     },
     "a3b3cf5b6aa04c0187615260b1706e37": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "bar_style": "success",
       "description": "100%",
       "layout": "IPY_MODEL_4d1db8757aa44be6a9fbfa8ca6b9ff65",
       "max": 625,
       "style": "IPY_MODEL_5828ae3b1c914d648d894536b6f8a64a",
       "value": 625
      }
     },
     "a9eeba1b10bb4e45b210fdf4b1be93bb": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": "initial"
      }
     },
     "b24ab103821a415c9def22d40fbb97ad": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "b3275ab6b58b41ba825d45cf377b34df": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_a3b3cf5b6aa04c0187615260b1706e37",
        "IPY_MODEL_f8421c61c2554352956bfa519ccbfb8a"
       ],
       "layout": "IPY_MODEL_d395a8da313e4178ab6bd55cc1fd6414"
      }
     },
     "b8e71ec667fb409ea5307af3f77e1df2": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_bf28f1ebfc1a47d39f5ac8ca7d5187b7",
       "style": "IPY_MODEL_485879a6ad1e411aadb3512115e28946",
       "value": " 625/625 [00:13&lt;00:00, 44.82it/s]"
      }
     },
     "bbf98c3b755341ffa133e5c03953d3ba": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": "initial"
      }
     },
     "bf28f1ebfc1a47d39f5ac8ca7d5187b7": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "bf96d715b20e4899a0e4b9cb57b8028e": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "bar_style": "success",
       "description": "100%",
       "layout": "IPY_MODEL_804ae52e24a241379e80eabc6717ba75",
       "max": 625,
       "style": "IPY_MODEL_57f5778e847a42acb2b01ecef4a3bcd3",
       "value": 625
      }
     },
     "c1939233e854451397572d75d1ca3025": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "c1c27839d6954309ac7c3c54e09d93f5": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "c6ebc3336fd54c7995ab2738b1334b9c": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": "initial"
      }
     },
     "d22cdbbe814247e09a6072abbc617c64": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "d395a8da313e4178ab6bd55cc1fd6414": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "d4032d2621d14a53bb9161088d871679": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "dba786832e944c45a1edc876fc827e41": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_311647af72c34273981b5da01eb11313",
        "IPY_MODEL_2132ccdf1f53408092b52c82744adb28"
       ],
       "layout": "IPY_MODEL_b24ab103821a415c9def22d40fbb97ad"
      }
     },
     "ea2e5e283f5d478fab9061e82d2638e8": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_290d35ea97e54cc38908bda875ff2ec0",
        "IPY_MODEL_b8e71ec667fb409ea5307af3f77e1df2"
       ],
       "layout": "IPY_MODEL_d4032d2621d14a53bb9161088d871679"
      }
     },
     "ea9b4560ee594d198db1341fe45c25df": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "f15d07497e6642f7b0bdcec4510555f3": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "f2d65dcbc1e8445587a1511be3000dff": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "f8421c61c2554352956bfa519ccbfb8a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_d22cdbbe814247e09a6072abbc617c64",
       "style": "IPY_MODEL_1f7fef16e7f14160862181cc580675f3",
       "value": " 625/625 [15:09&lt;00:00,  1.46s/it]"
      }
     }
    },
    "version_major": 2,
    "version_minor": 0
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}