diff options
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/pytorch_vol2.ipynb | 388 | ||||
| -rw-r--r-- | docs/researchML.ipynb | 1953 | 
2 files changed, 2341 insertions, 0 deletions
diff --git a/docs/pytorch_vol2.ipynb b/docs/pytorch_vol2.ipynb new file mode 100644 index 00000000..7f931149 --- /dev/null +++ b/docs/pytorch_vol2.ipynb @@ -0,0 +1,388 @@ +{ +  "nbformat": 4, +  "nbformat_minor": 0, +  "metadata": { +    "colab": { +      "name": "pytorch.ipynb", +      "provenance": [], +      "collapsed_sections": [] +    }, +    "kernelspec": { +      "name": "python3", +      "display_name": "Python 3" +    }, +    "language_info": { +      "name": "python" +    }, +    "accelerator": "GPU" +  }, +  "cells": [ +    { +      "cell_type": "code", +      "execution_count": null, +      "metadata": { +        "colab": { +          "base_uri": "https://localhost:8080/" +        }, +        "id": "lxhgSo4rOWCg", +        "outputId": "5242373c-1d80-4a96-ef17-1243f7eea994" +      }, +      "outputs": [ +        { +          "output_type": "stream", +          "name": "stdout", +          "text": [ +            "Requirement already satisfied: torch in /usr/local/lib/python3.7/dist-packages (1.10.0+cu111)\n", +            "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.7/dist-packages (from torch) (3.10.0.2)\n" +          ] +        } +      ], +      "source": [ +        "pip install torch" +      ] +    }, +    { +      "cell_type": "code", +      "source": [ +        "print(torch.__version__)" +      ], +      "metadata": { +        "colab": { +          "base_uri": "https://localhost:8080/" +        }, +        "id": "458HSdE3WK68", +        "outputId": "be8888f7-f9ee-474f-b393-1d3545382b27" +      }, +      "execution_count": null, +      "outputs": [ +        { +          "output_type": "stream", +          "name": "stdout", +          "text": [ +            "1.10.0+cu111\n" +          ] +        } +      ] +    }, +    { +      "cell_type": "code", +      "source": [ +        "import torch\n", +        "from torchvision import datasets, transforms\n", +        "\n", +        "import torch.nn as nn\n", +        "import torch.nn.functional as F\n", +        "\n", +        "import torch.optim as optim\n", +        "import matplotlib.pyplot as plt\n", +        "\n", +        "from tqdm import tqdm\n", +        "\n", +        "if torch.cuda.is_available():\n", +        "  device = torch.device(\"cuda:0\")\n", +        "  print(\"GPU\")\n", +        "else:\n", +        "  device = torch.device(\"cpu\")\n", +        "  print(\"CPU\")" +      ], +      "metadata": { +        "colab": { +          "base_uri": "https://localhost:8080/" +        }, +        "id": "WoWY-yVoPKiI", +        "outputId": "707345d2-53fb-4b01-f417-0c5b2db0aafa" +      }, +      "execution_count": null, +      "outputs": [ +        { +          "output_type": "stream", +          "name": "stdout", +          "text": [ +            "GPU\n" +          ] +        } +      ] +    }, +    { +      "cell_type": "code", +      "source": [ +        "class Network(nn.Module):\n", +        "  def __init__(self):\n", +        "    super().__init__()\n", +        "    self.input_layer = nn.Linear(784, 64)\n", +        "    self.hidden1 = nn.Linear(64, 64)\n", +        "    self.hidden2 = nn.Linear(64, 64)\n", +        "    self.output = nn.Linear(64, 10)\n", +        "\n", +        "  def forward(self, data):\n", +        "    data = F.relu(self.input_layer(data))\n", +        "    data = F.relu(self.hidden1(data))\n", +        "    data = F.relu(self.hidden2(data))\n", +        "    data = F.relu(self.output(data))\n", +        "\n", +        "    return F.log_softmax(data, dim=1)" +      ], +      "metadata": { +        "id": "zHPjts1vPjDo" +      }, +      "execution_count": null, +      "outputs": [] +    }, +    { +      "cell_type": "code", +      "source": [ +        "from torch.utils.data.dataset import T\n", +        "training = datasets.MNIST(\"\", train = True, download = True,\n", +        "                          transform = transforms.Compose([transforms.ToTensor()]))\n", +        "\n", +        "testing = datasets.MNIST(\"\", train = False, download = True,\n", +        "                          transform = transforms.Compose([transforms.ToTensor()]))\n", +        "\n", +        "train_set = torch.utils.data.DataLoader(training, batch_size=10, shuffle=True)\n", +        "test_set = torch.utils.data.DataLoader(testing, batch_size=10, shuffle=True)" +      ], +      "metadata": { +        "id": "Phj4o7piR4FU" +      }, +      "execution_count": null, +      "outputs": [] +    }, +    { +      "cell_type": "code", +      "source": [ +        "from torch.autograd import backward\n", +        "network = Network().to(device)\n", +        "learn_rate = optim.Adam(network.parameters(), lr=0.001)\n", +        "epochs = 4\n", +        "\n", +        "for i in tqdm(range(epochs)):\n", +        "  for data in train_set:\n", +        "    image, output = data\n", +        "    image = image.to(device)\n", +        "    output = output.to(device)\n", +        "    network.zero_grad()\n", +        "    result = network(image.view(-1, 784))\n", +        "    loss = F.nll_loss(result, output)\n", +        "    loss.backward()\n", +        "    learn_rate.step()\n", +        "  print(loss)\n" +      ], +      "metadata": { +        "colab": { +          "base_uri": "https://localhost:8080/" +        }, +        "id": "eqIk--nMTYIm", +        "outputId": "44638ff7-e230-4f03-e4a7-cda5f75ea10d" +      }, +      "execution_count": null, +      "outputs": [ +        { +          "output_type": "stream", +          "name": "stderr", +          "text": [ +            " 25%|██▌       | 1/4 [00:15<00:45, 15.29s/it]" +          ] +        }, +        { +          "output_type": "stream", +          "name": "stdout", +          "text": [ +            "tensor(0.7714, device='cuda:0', grad_fn=<NllLossBackward0>)\n" +          ] +        }, +        { +          "output_type": "stream", +          "name": "stderr", +          "text": [ +            "\r 50%|█████     | 2/4 [00:30<00:30, 15.16s/it]" +          ] +        }, +        { +          "output_type": "stream", +          "name": "stdout", +          "text": [ +            "tensor(0.9215, device='cuda:0', grad_fn=<NllLossBackward0>)\n" +          ] +        }, +        { +          "output_type": "stream", +          "name": "stderr", +          "text": [ +            "\r 75%|███████▌  | 3/4 [00:45<00:15, 15.05s/it]" +          ] +        }, +        { +          "output_type": "stream", +          "name": "stdout", +          "text": [ +            "tensor(1.3817, device='cuda:0', grad_fn=<NllLossBackward0>)\n" +          ] +        }, +        { +          "output_type": "stream", +          "name": "stderr", +          "text": [ +            "100%|██████████| 4/4 [01:00<00:00, 15.09s/it]" +          ] +        }, +        { +          "output_type": "stream", +          "name": "stdout", +          "text": [ +            "tensor(1.6124, device='cuda:0', grad_fn=<NllLossBackward0>)\n" +          ] +        }, +        { +          "output_type": "stream", +          "name": "stderr", +          "text": [ +            "\n" +          ] +        } +      ] +    }, +    { +      "cell_type": "code", +      "source": [ +        "# Test Network\n", +        "network.eval()\n", +        "\n", +        "correct = 0\n", +        "total = 0\n", +        "\n", +        "with torch.no_grad():\n", +        "  for data in test_set:\n", +        "    image, output = data\n", +        "    image = image.to(device)\n", +        "    output = output.to(device)\n", +        "    result = network(image.view(-1, 784))\n", +        "    for index, tensor_value in enumerate(result):\n", +        "      total += 1\n", +        "      if torch.argmax(tensor_value) == output[index]:\n", +        "        correct += 1\n", +        "\n", +        "accuracy = correct/total\n", +        "print(f\"Accuracy: {accuracy}\")" +      ], +      "metadata": { +        "colab": { +          "base_uri": "https://localhost:8080/" +        }, +        "id": "fLRRyQnuYmRn", +        "outputId": "0dc1fc3c-bf92-40dc-fd3a-d7d0335fc94e" +      }, +      "execution_count": null, +      "outputs": [ +        { +          "output_type": "stream", +          "name": "stdout", +          "text": [ +            "Accuracy: 0.7795\n" +          ] +        } +      ] +    }, +    { +      "cell_type": "code", +      "source": [ +        "from google.colab import drive\n", +        "drive.mount('/content/gdrive', force_remount=True)" +      ], +      "metadata": { +        "colab": { +          "base_uri": "https://localhost:8080/" +        }, +        "id": "97UyaTsHcIft", +        "outputId": "be688931-b92b-4efb-b20e-12be438f03d8" +      }, +      "execution_count": null, +      "outputs": [ +        { +          "output_type": "stream", +          "name": "stdout", +          "text": [ +            "Mounted at /content/gdrive\n" +          ] +        } +      ] +    }, +    { +      "cell_type": "code", +      "source": [ +        "!ls '/content/gdrive/My Drive/TestPytorch'" +      ], +      "metadata": { +        "colab": { +          "base_uri": "https://localhost:8080/" +        }, +        "id": "RQop3IL3csZo", +        "outputId": "635017e3-b7d2-42a1-9e5c-72e6fefc2f73" +      }, +      "execution_count": null, +      "outputs": [ +        { +          "output_type": "stream", +          "name": "stdout", +          "text": [ +            "5.png  7.png\n" +          ] +        } +      ] +    }, +    { +      "cell_type": "code", +      "source": [ +        "from PIL import Image\n", +        "import numpy as np\n", +        "import PIL.ImageOps\n", +        "\n", +        "img = Image.open(\"gdrive/My Drive/TestPytorch/5.png\")\n", +        "img = img.resize((28, 28))\n", +        "img = img.convert(\"L\")\n", +        "img = PIL.ImageOps.invert(img)\n", +        "\n", +        "plt.imshow(img)\n", +        "\n", +        "img = np.array(img)\n", +        "img = img / 255\n", +        "image = torch.from_numpy(img)\n", +        "image = image.float()\n", +        "image = image.to(device)\n", +        "\n", +        "res = network.forward(image.view(-1, 28*28))\n", +        "res = res.to(device)\n", +        "print(torch.argmax(output))" +      ], +      "metadata": { +        "colab": { +          "base_uri": "https://localhost:8080/", +          "height": 283 +        }, +        "id": "GMf65cgLdlfa", +        "outputId": "422c46d3-526c-402f-f7b9-cfa713d3fd72" +      }, +      "execution_count": null, +      "outputs": [ +        { +          "output_type": "stream", +          "name": "stdout", +          "text": [ +            "tensor(6, device='cuda:0')\n" +          ] +        }, +        { +          "output_type": "display_data", +          "data": { +            "image/png": "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\n", +            "text/plain": [ +              "<Figure size 432x288 with 1 Axes>" +            ] +          }, +          "metadata": { +            "needs_background": "light" +          } +        } +      ] +    } +  ] +}
\ No newline at end of file diff --git a/docs/researchML.ipynb b/docs/researchML.ipynb new file mode 100644 index 00000000..2f120447 --- /dev/null +++ b/docs/researchML.ipynb @@ -0,0 +1,1953 @@ +{ +  "nbformat": 4, +  "nbformat_minor": 0, +  "metadata": { +    "colab": { +      "name": "researchML.ipynb", +      "provenance": [], +      "collapsed_sections": [] +    }, +    "kernelspec": { +      "name": "python3", +      "display_name": "Python 3" +    }, +    "language_info": { +      "name": "python" +    }, +    "widgets": { +      "application/vnd.jupyter.widget-state+json": { +        "7aaf00f20d77493fadb2b6ad0b96cf74": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "HBoxModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "HBoxView", +            "_dom_classes": [], +            "_model_name": "HBoxModel", +            "_view_module": "@jupyter-widgets/controls", +            "_model_module_version": "1.5.0", +            "_view_count": null, +            "_view_module_version": "1.5.0", +            "box_style": "", +            "layout": "IPY_MODEL_4b92939e2d45451da2334595d97bd68d", +            "_model_module": "@jupyter-widgets/controls", +            "children": [ +              "IPY_MODEL_12969beb96f7497181f7167e39c40bd0", +              "IPY_MODEL_74a47efac60c4af396b9d1e1f282827f", +              "IPY_MODEL_3d1920917c9947148a40db3bc30a4132" +            ] +          } +        }, +        "4b92939e2d45451da2334595d97bd68d": { +          "model_module": "@jupyter-widgets/base", +          "model_name": "LayoutModel", +          "model_module_version": "1.2.0", +          "state": { +            "_view_name": "LayoutView", +            "grid_template_rows": null, +            "right": null, +            "justify_content": null, +            "_view_module": "@jupyter-widgets/base", +            "overflow": null, +            "_model_module_version": "1.2.0", +            "_view_count": null, +            "flex_flow": null, +            "width": null, +            "min_width": null, +            "border": null, +            "align_items": null, +            "bottom": null, +            "_model_module": "@jupyter-widgets/base", +            "top": null, +            "grid_column": null, +            "overflow_y": null, +            "overflow_x": null, +            "grid_auto_flow": null, +            "grid_area": null, +            "grid_template_columns": null, +            "flex": null, +            "_model_name": "LayoutModel", +            "justify_items": null, +            "grid_row": null, +            "max_height": null, +            "align_content": null, +            "visibility": null, +            "align_self": null, +            "height": null, +            "min_height": null, +            "padding": null, +            "grid_auto_rows": null, +            "grid_gap": null, +            "max_width": null, +            "order": null, +            "_view_module_version": "1.2.0", +            "grid_template_areas": null, +            "object_position": null, +            "object_fit": null, +            "grid_auto_columns": null, +            "margin": null, +            "display": null, +            "left": null +          } +        }, +        "12969beb96f7497181f7167e39c40bd0": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "HTMLModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "HTMLView", +            "style": "IPY_MODEL_d3ab8f1573e54fb49837c7675c8a237e", +            "_dom_classes": [], +            "description": "", +            "_model_name": "HTMLModel", +            "placeholder": "", +            "_view_module": "@jupyter-widgets/controls", +            "_model_module_version": "1.5.0", +            "value": "", +            "_view_count": null, +            "_view_module_version": "1.5.0", +            "description_tooltip": null, +            "_model_module": "@jupyter-widgets/controls", +            "layout": "IPY_MODEL_b84a67505e3c4030a3839cbe0b5a2d6d" +          } +        }, +        "74a47efac60c4af396b9d1e1f282827f": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "FloatProgressModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "ProgressView", +            "style": "IPY_MODEL_9fa408a5efc84e64be85faca9e0701b4", +            "_dom_classes": [], +            "description": "", +            "_model_name": "FloatProgressModel", +            "bar_style": "success", +            "max": 9912422, +            "_view_module": "@jupyter-widgets/controls", +            "_model_module_version": "1.5.0", +            "value": 9912422, +            "_view_count": null, +            "_view_module_version": "1.5.0", +            "orientation": "horizontal", +            "min": 0, +            "description_tooltip": null, +            "_model_module": "@jupyter-widgets/controls", +            "layout": "IPY_MODEL_3041321e29fc4fab892a3e6b3b5c9bbd" +          } +        }, +        "3d1920917c9947148a40db3bc30a4132": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "HTMLModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "HTMLView", +            "style": "IPY_MODEL_3ebefec2c2aa499a96c4644d7855cd7d", +            "_dom_classes": [], +            "description": "", +            "_model_name": "HTMLModel", +            "placeholder": "", +            "_view_module": "@jupyter-widgets/controls", +            "_model_module_version": "1.5.0", +            "value": " 9913344/? [00:00<00:00, 23815934.67it/s]", +            "_view_count": null, +            "_view_module_version": "1.5.0", +            "description_tooltip": null, +            "_model_module": "@jupyter-widgets/controls", +            "layout": "IPY_MODEL_2fe247e330224176a25f48abca95cda2" +          } +        }, +        "d3ab8f1573e54fb49837c7675c8a237e": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "DescriptionStyleModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "StyleView", +            "_model_name": "DescriptionStyleModel", +            "description_width": "", +            "_view_module": "@jupyter-widgets/base", +            "_model_module_version": "1.5.0", +            "_view_count": null, +            "_view_module_version": "1.2.0", +            "_model_module": "@jupyter-widgets/controls" +          } +        }, +        "b84a67505e3c4030a3839cbe0b5a2d6d": { +          "model_module": "@jupyter-widgets/base", +          "model_name": "LayoutModel", +          "model_module_version": "1.2.0", +          "state": { +            "_view_name": "LayoutView", +            "grid_template_rows": null, +            "right": null, +            "justify_content": null, +            "_view_module": "@jupyter-widgets/base", +            "overflow": null, +            "_model_module_version": "1.2.0", +            "_view_count": null, +            "flex_flow": null, +            "width": null, +            "min_width": null, +            "border": null, +            "align_items": null, +            "bottom": null, +            "_model_module": "@jupyter-widgets/base", +            "top": null, +            "grid_column": null, +            "overflow_y": null, +            "overflow_x": null, +            "grid_auto_flow": null, +            "grid_area": null, +            "grid_template_columns": null, +            "flex": null, +            "_model_name": "LayoutModel", +            "justify_items": null, +            "grid_row": null, +            "max_height": null, +            "align_content": null, +            "visibility": null, +            "align_self": null, +            "height": null, +            "min_height": null, +            "padding": null, +            "grid_auto_rows": null, +            "grid_gap": null, +            "max_width": null, +            "order": null, +            "_view_module_version": "1.2.0", +            "grid_template_areas": null, +            "object_position": null, +            "object_fit": null, +            "grid_auto_columns": null, +            "margin": null, +            "display": null, +            "left": null +          } +        }, +        "9fa408a5efc84e64be85faca9e0701b4": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "ProgressStyleModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "StyleView", +            "_model_name": "ProgressStyleModel", +            "description_width": "", +            "_view_module": "@jupyter-widgets/base", +            "_model_module_version": "1.5.0", +            "_view_count": null, +            "_view_module_version": "1.2.0", +            "bar_color": null, +            "_model_module": "@jupyter-widgets/controls" +          } +        }, +        "3041321e29fc4fab892a3e6b3b5c9bbd": { +          "model_module": "@jupyter-widgets/base", +          "model_name": "LayoutModel", +          "model_module_version": "1.2.0", +          "state": { +            "_view_name": "LayoutView", +            "grid_template_rows": null, +            "right": null, +            "justify_content": null, +            "_view_module": "@jupyter-widgets/base", +            "overflow": null, +            "_model_module_version": "1.2.0", +            "_view_count": null, +            "flex_flow": null, +            "width": null, +            "min_width": null, +            "border": null, +            "align_items": null, +            "bottom": null, +            "_model_module": "@jupyter-widgets/base", +            "top": null, +            "grid_column": null, +            "overflow_y": null, +            "overflow_x": null, +            "grid_auto_flow": null, +            "grid_area": null, +            "grid_template_columns": null, +            "flex": null, +            "_model_name": "LayoutModel", +            "justify_items": null, +            "grid_row": null, +            "max_height": null, +            "align_content": null, +            "visibility": null, +            "align_self": null, +            "height": null, +            "min_height": null, +            "padding": null, +            "grid_auto_rows": null, +            "grid_gap": null, +            "max_width": null, +            "order": null, +            "_view_module_version": "1.2.0", +            "grid_template_areas": null, +            "object_position": null, +            "object_fit": null, +            "grid_auto_columns": null, +            "margin": null, +            "display": null, +            "left": null +          } +        }, +        "3ebefec2c2aa499a96c4644d7855cd7d": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "DescriptionStyleModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "StyleView", +            "_model_name": "DescriptionStyleModel", +            "description_width": "", +            "_view_module": "@jupyter-widgets/base", +            "_model_module_version": "1.5.0", +            "_view_count": null, +            "_view_module_version": "1.2.0", +            "_model_module": "@jupyter-widgets/controls" +          } +        }, +        "2fe247e330224176a25f48abca95cda2": { +          "model_module": "@jupyter-widgets/base", +          "model_name": "LayoutModel", +          "model_module_version": "1.2.0", +          "state": { +            "_view_name": "LayoutView", +            "grid_template_rows": null, +            "right": null, +            "justify_content": null, +            "_view_module": "@jupyter-widgets/base", +            "overflow": null, +            "_model_module_version": "1.2.0", +            "_view_count": null, +            "flex_flow": null, +            "width": null, +            "min_width": null, +            "border": null, +            "align_items": null, +            "bottom": null, +            "_model_module": "@jupyter-widgets/base", +            "top": null, +            "grid_column": null, +            "overflow_y": null, +            "overflow_x": null, +            "grid_auto_flow": null, +            "grid_area": null, +            "grid_template_columns": null, +            "flex": null, +            "_model_name": "LayoutModel", +            "justify_items": null, +            "grid_row": null, +            "max_height": null, +            "align_content": null, +            "visibility": null, +            "align_self": null, +            "height": null, +            "min_height": null, +            "padding": null, +            "grid_auto_rows": null, +            "grid_gap": null, +            "max_width": null, +            "order": null, +            "_view_module_version": "1.2.0", +            "grid_template_areas": null, +            "object_position": null, +            "object_fit": null, +            "grid_auto_columns": null, +            "margin": null, +            "display": null, +            "left": null +          } +        }, +        "526a499287d146c7b3c429d3460c6736": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "HBoxModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "HBoxView", +            "_dom_classes": [], +            "_model_name": "HBoxModel", +            "_view_module": "@jupyter-widgets/controls", +            "_model_module_version": "1.5.0", +            "_view_count": null, +            "_view_module_version": "1.5.0", +            "box_style": "", +            "layout": "IPY_MODEL_692b9b0b9f16464eb0426266b5123a9c", +            "_model_module": "@jupyter-widgets/controls", +            "children": [ +              "IPY_MODEL_cc94aeb409fd4393815cb855d952af12", +              "IPY_MODEL_cef5db1a425b481ab21d898a22a73763", +              "IPY_MODEL_13c1cd14c03248559d8b5a604269d800" +            ] +          } +        }, +        "692b9b0b9f16464eb0426266b5123a9c": { +          "model_module": "@jupyter-widgets/base", +          "model_name": "LayoutModel", +          "model_module_version": "1.2.0", +          "state": { +            "_view_name": "LayoutView", +            "grid_template_rows": null, +            "right": null, +            "justify_content": null, +            "_view_module": "@jupyter-widgets/base", +            "overflow": null, +            "_model_module_version": "1.2.0", +            "_view_count": null, +            "flex_flow": null, +            "width": null, +            "min_width": null, +            "border": null, +            "align_items": null, +            "bottom": null, +            "_model_module": "@jupyter-widgets/base", +            "top": null, +            "grid_column": null, +            "overflow_y": null, +            "overflow_x": null, +            "grid_auto_flow": null, +            "grid_area": null, +            "grid_template_columns": null, +            "flex": null, +            "_model_name": "LayoutModel", +            "justify_items": null, +            "grid_row": null, +            "max_height": null, +            "align_content": null, +            "visibility": null, +            "align_self": null, +            "height": null, +            "min_height": null, +            "padding": null, +            "grid_auto_rows": null, +            "grid_gap": null, +            "max_width": null, +            "order": null, +            "_view_module_version": "1.2.0", +            "grid_template_areas": null, +            "object_position": null, +            "object_fit": null, +            "grid_auto_columns": null, +            "margin": null, +            "display": null, +            "left": null +          } +        }, +        "cc94aeb409fd4393815cb855d952af12": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "HTMLModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "HTMLView", +            "style": "IPY_MODEL_bf19654df95e43289ed8071ad717045c", +            "_dom_classes": [], +            "description": "", +            "_model_name": "HTMLModel", +            "placeholder": "", +            "_view_module": "@jupyter-widgets/controls", +            "_model_module_version": "1.5.0", +            "value": "", +            "_view_count": null, +            "_view_module_version": "1.5.0", +            "description_tooltip": null, +            "_model_module": "@jupyter-widgets/controls", +            "layout": "IPY_MODEL_0597828f149d4901ba240137e35c5bf8" +          } +        }, +        "cef5db1a425b481ab21d898a22a73763": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "FloatProgressModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "ProgressView", +            "style": "IPY_MODEL_bd60eec9f2314e96ae5bde2cc2b5bd90", +            "_dom_classes": [], +            "description": "", +            "_model_name": "FloatProgressModel", +            "bar_style": "success", +            "max": 28881, +            "_view_module": "@jupyter-widgets/controls", +            "_model_module_version": "1.5.0", +            "value": 28881, +            "_view_count": null, +            "_view_module_version": "1.5.0", +            "orientation": "horizontal", +            "min": 0, +            "description_tooltip": null, +            "_model_module": "@jupyter-widgets/controls", +            "layout": "IPY_MODEL_0daf5c329df64e39b169cc136ceafcfd" +          } +        }, +        "13c1cd14c03248559d8b5a604269d800": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "HTMLModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "HTMLView", +            "style": "IPY_MODEL_6b03227602be48588c11acd7c06e599f", +            "_dom_classes": [], +            "description": "", +            "_model_name": "HTMLModel", +            "placeholder": "", +            "_view_module": "@jupyter-widgets/controls", +            "_model_module_version": "1.5.0", +            "value": " 29696/? [00:00<00:00, 409622.95it/s]", +            "_view_count": null, +            "_view_module_version": "1.5.0", +            "description_tooltip": null, +            "_model_module": "@jupyter-widgets/controls", +            "layout": "IPY_MODEL_2efd7ec451034ab8be703274233277ce" +          } +        }, +        "bf19654df95e43289ed8071ad717045c": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "DescriptionStyleModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "StyleView", +            "_model_name": "DescriptionStyleModel", +            "description_width": "", +            "_view_module": "@jupyter-widgets/base", +            "_model_module_version": "1.5.0", +            "_view_count": null, +            "_view_module_version": "1.2.0", +            "_model_module": "@jupyter-widgets/controls" +          } +        }, +        "0597828f149d4901ba240137e35c5bf8": { +          "model_module": "@jupyter-widgets/base", +          "model_name": "LayoutModel", +          "model_module_version": "1.2.0", +          "state": { +            "_view_name": "LayoutView", +            "grid_template_rows": null, +            "right": null, +            "justify_content": null, +            "_view_module": "@jupyter-widgets/base", +            "overflow": null, +            "_model_module_version": "1.2.0", +            "_view_count": null, +            "flex_flow": null, +            "width": null, +            "min_width": null, +            "border": null, +            "align_items": null, +            "bottom": null, +            "_model_module": "@jupyter-widgets/base", +            "top": null, +            "grid_column": null, +            "overflow_y": null, +            "overflow_x": null, +            "grid_auto_flow": null, +            "grid_area": null, +            "grid_template_columns": null, +            "flex": null, +            "_model_name": "LayoutModel", +            "justify_items": null, +            "grid_row": null, +            "max_height": null, +            "align_content": null, +            "visibility": null, +            "align_self": null, +            "height": null, +            "min_height": null, +            "padding": null, +            "grid_auto_rows": null, +            "grid_gap": null, +            "max_width": null, +            "order": null, +            "_view_module_version": "1.2.0", +            "grid_template_areas": null, +            "object_position": null, +            "object_fit": null, +            "grid_auto_columns": null, +            "margin": null, +            "display": null, +            "left": null +          } +        }, +        "bd60eec9f2314e96ae5bde2cc2b5bd90": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "ProgressStyleModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "StyleView", +            "_model_name": "ProgressStyleModel", +            "description_width": "", +            "_view_module": "@jupyter-widgets/base", +            "_model_module_version": "1.5.0", +            "_view_count": null, +            "_view_module_version": "1.2.0", +            "bar_color": null, +            "_model_module": "@jupyter-widgets/controls" +          } +        }, +        "0daf5c329df64e39b169cc136ceafcfd": { +          "model_module": "@jupyter-widgets/base", +          "model_name": "LayoutModel", +          "model_module_version": "1.2.0", +          "state": { +            "_view_name": "LayoutView", +            "grid_template_rows": null, +            "right": null, +            "justify_content": null, +            "_view_module": "@jupyter-widgets/base", +            "overflow": null, +            "_model_module_version": "1.2.0", +            "_view_count": null, +            "flex_flow": null, +            "width": null, +            "min_width": null, +            "border": null, +            "align_items": null, +            "bottom": null, +            "_model_module": "@jupyter-widgets/base", +            "top": null, +            "grid_column": null, +            "overflow_y": null, +            "overflow_x": null, +            "grid_auto_flow": null, +            "grid_area": null, +            "grid_template_columns": null, +            "flex": null, +            "_model_name": "LayoutModel", +            "justify_items": null, +            "grid_row": null, +            "max_height": null, +            "align_content": null, +            "visibility": null, +            "align_self": null, +            "height": null, +            "min_height": null, +            "padding": null, +            "grid_auto_rows": null, +            "grid_gap": null, +            "max_width": null, +            "order": null, +            "_view_module_version": "1.2.0", +            "grid_template_areas": null, +            "object_position": null, +            "object_fit": null, +            "grid_auto_columns": null, +            "margin": null, +            "display": null, +            "left": null +          } +        }, +        "6b03227602be48588c11acd7c06e599f": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "DescriptionStyleModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "StyleView", +            "_model_name": "DescriptionStyleModel", +            "description_width": "", +            "_view_module": "@jupyter-widgets/base", +            "_model_module_version": "1.5.0", +            "_view_count": null, +            "_view_module_version": "1.2.0", +            "_model_module": "@jupyter-widgets/controls" +          } +        }, +        "2efd7ec451034ab8be703274233277ce": { +          "model_module": "@jupyter-widgets/base", +          "model_name": "LayoutModel", +          "model_module_version": "1.2.0", +          "state": { +            "_view_name": "LayoutView", +            "grid_template_rows": null, +            "right": null, +            "justify_content": null, +            "_view_module": "@jupyter-widgets/base", +            "overflow": null, +            "_model_module_version": "1.2.0", +            "_view_count": null, +            "flex_flow": null, +            "width": null, +            "min_width": null, +            "border": null, +            "align_items": null, +            "bottom": null, +            "_model_module": "@jupyter-widgets/base", +            "top": null, +            "grid_column": null, +            "overflow_y": null, +            "overflow_x": null, +            "grid_auto_flow": null, +            "grid_area": null, +            "grid_template_columns": null, +            "flex": null, +            "_model_name": "LayoutModel", +            "justify_items": null, +            "grid_row": null, +            "max_height": null, +            "align_content": null, +            "visibility": null, +            "align_self": null, +            "height": null, +            "min_height": null, +            "padding": null, +            "grid_auto_rows": null, +            "grid_gap": null, +            "max_width": null, +            "order": null, +            "_view_module_version": "1.2.0", +            "grid_template_areas": null, +            "object_position": null, +            "object_fit": null, +            "grid_auto_columns": null, +            "margin": null, +            "display": null, +            "left": null +          } +        }, +        "b5eae176555e47b582757cd8543969d1": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "HBoxModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "HBoxView", +            "_dom_classes": [], +            "_model_name": "HBoxModel", +            "_view_module": "@jupyter-widgets/controls", +            "_model_module_version": "1.5.0", +            "_view_count": null, +            "_view_module_version": "1.5.0", +            "box_style": "", +            "layout": "IPY_MODEL_73209e9211ac4b929f3c112500ebed41", +            "_model_module": "@jupyter-widgets/controls", +            "children": [ +              "IPY_MODEL_752919f2449647039640f2b0cd2a1e40", +              "IPY_MODEL_8e577096756c42fdb6d2d0aafc080610", +              "IPY_MODEL_3c56e65e3c8c4bde81f72adc6eca04ce" +            ] +          } +        }, +        "73209e9211ac4b929f3c112500ebed41": { +          "model_module": "@jupyter-widgets/base", +          "model_name": "LayoutModel", +          "model_module_version": "1.2.0", +          "state": { +            "_view_name": "LayoutView", +            "grid_template_rows": null, +            "right": null, +            "justify_content": null, +            "_view_module": "@jupyter-widgets/base", +            "overflow": null, +            "_model_module_version": "1.2.0", +            "_view_count": null, +            "flex_flow": null, +            "width": null, +            "min_width": null, +            "border": null, +            "align_items": null, +            "bottom": null, +            "_model_module": "@jupyter-widgets/base", +            "top": null, +            "grid_column": null, +            "overflow_y": null, +            "overflow_x": null, +            "grid_auto_flow": null, +            "grid_area": null, +            "grid_template_columns": null, +            "flex": null, +            "_model_name": "LayoutModel", +            "justify_items": null, +            "grid_row": null, +            "max_height": null, +            "align_content": null, +            "visibility": null, +            "align_self": null, +            "height": null, +            "min_height": null, +            "padding": null, +            "grid_auto_rows": null, +            "grid_gap": null, +            "max_width": null, +            "order": null, +            "_view_module_version": "1.2.0", +            "grid_template_areas": null, +            "object_position": null, +            "object_fit": null, +            "grid_auto_columns": null, +            "margin": null, +            "display": null, +            "left": null +          } +        }, +        "752919f2449647039640f2b0cd2a1e40": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "HTMLModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "HTMLView", +            "style": "IPY_MODEL_66b17d032f8741bbb482737603af5a15", +            "_dom_classes": [], +            "description": "", +            "_model_name": "HTMLModel", +            "placeholder": "", +            "_view_module": "@jupyter-widgets/controls", +            "_model_module_version": "1.5.0", +            "value": "", +            "_view_count": null, +            "_view_module_version": "1.5.0", +            "description_tooltip": null, +            "_model_module": "@jupyter-widgets/controls", +            "layout": "IPY_MODEL_f3938db95eee4a218798a65ed2a9ec5d" +          } +        }, +        "8e577096756c42fdb6d2d0aafc080610": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "FloatProgressModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "ProgressView", +            "style": "IPY_MODEL_b2a53beffd864607b83f9e21662f1aec", +            "_dom_classes": [], +            "description": "", +            "_model_name": "FloatProgressModel", +            "bar_style": "success", +            "max": 1648877, +            "_view_module": "@jupyter-widgets/controls", +            "_model_module_version": "1.5.0", +            "value": 1648877, +            "_view_count": null, +            "_view_module_version": "1.5.0", +            "orientation": "horizontal", +            "min": 0, +            "description_tooltip": null, +            "_model_module": "@jupyter-widgets/controls", +            "layout": "IPY_MODEL_0280a38e8c6e4414b6fcde5e5f23b4f2" +          } +        }, +        "3c56e65e3c8c4bde81f72adc6eca04ce": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "HTMLModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "HTMLView", +            "style": "IPY_MODEL_856cc2055cce4a61be024950840a9e43", +            "_dom_classes": [], +            "description": "", +            "_model_name": "HTMLModel", +            "placeholder": "", +            "_view_module": "@jupyter-widgets/controls", +            "_model_module_version": "1.5.0", +            "value": " 1649664/? [00:00<00:00, 3605986.00it/s]", +            "_view_count": null, +            "_view_module_version": "1.5.0", +            "description_tooltip": null, +            "_model_module": "@jupyter-widgets/controls", +            "layout": "IPY_MODEL_c75692c664d04f19990180f3aab5ba5f" +          } +        }, +        "66b17d032f8741bbb482737603af5a15": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "DescriptionStyleModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "StyleView", +            "_model_name": "DescriptionStyleModel", +            "description_width": "", +            "_view_module": "@jupyter-widgets/base", +            "_model_module_version": "1.5.0", +            "_view_count": null, +            "_view_module_version": "1.2.0", +            "_model_module": "@jupyter-widgets/controls" +          } +        }, +        "f3938db95eee4a218798a65ed2a9ec5d": { +          "model_module": "@jupyter-widgets/base", +          "model_name": "LayoutModel", +          "model_module_version": "1.2.0", +          "state": { +            "_view_name": "LayoutView", +            "grid_template_rows": null, +            "right": null, +            "justify_content": null, +            "_view_module": "@jupyter-widgets/base", +            "overflow": null, +            "_model_module_version": "1.2.0", +            "_view_count": null, +            "flex_flow": null, +            "width": null, +            "min_width": null, +            "border": null, +            "align_items": null, +            "bottom": null, +            "_model_module": "@jupyter-widgets/base", +            "top": null, +            "grid_column": null, +            "overflow_y": null, +            "overflow_x": null, +            "grid_auto_flow": null, +            "grid_area": null, +            "grid_template_columns": null, +            "flex": null, +            "_model_name": "LayoutModel", +            "justify_items": null, +            "grid_row": null, +            "max_height": null, +            "align_content": null, +            "visibility": null, +            "align_self": null, +            "height": null, +            "min_height": null, +            "padding": null, +            "grid_auto_rows": null, +            "grid_gap": null, +            "max_width": null, +            "order": null, +            "_view_module_version": "1.2.0", +            "grid_template_areas": null, +            "object_position": null, +            "object_fit": null, +            "grid_auto_columns": null, +            "margin": null, +            "display": null, +            "left": null +          } +        }, +        "b2a53beffd864607b83f9e21662f1aec": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "ProgressStyleModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "StyleView", +            "_model_name": "ProgressStyleModel", +            "description_width": "", +            "_view_module": "@jupyter-widgets/base", +            "_model_module_version": "1.5.0", +            "_view_count": null, +            "_view_module_version": "1.2.0", +            "bar_color": null, +            "_model_module": "@jupyter-widgets/controls" +          } +        }, +        "0280a38e8c6e4414b6fcde5e5f23b4f2": { +          "model_module": "@jupyter-widgets/base", +          "model_name": "LayoutModel", +          "model_module_version": "1.2.0", +          "state": { +            "_view_name": "LayoutView", +            "grid_template_rows": null, +            "right": null, +            "justify_content": null, +            "_view_module": "@jupyter-widgets/base", +            "overflow": null, +            "_model_module_version": "1.2.0", +            "_view_count": null, +            "flex_flow": null, +            "width": null, +            "min_width": null, +            "border": null, +            "align_items": null, +            "bottom": null, +            "_model_module": "@jupyter-widgets/base", +            "top": null, +            "grid_column": null, +            "overflow_y": null, +            "overflow_x": null, +            "grid_auto_flow": null, +            "grid_area": null, +            "grid_template_columns": null, +            "flex": null, +            "_model_name": "LayoutModel", +            "justify_items": null, +            "grid_row": null, +            "max_height": null, +            "align_content": null, +            "visibility": null, +            "align_self": null, +            "height": null, +            "min_height": null, +            "padding": null, +            "grid_auto_rows": null, +            "grid_gap": null, +            "max_width": null, +            "order": null, +            "_view_module_version": "1.2.0", +            "grid_template_areas": null, +            "object_position": null, +            "object_fit": null, +            "grid_auto_columns": null, +            "margin": null, +            "display": null, +            "left": null +          } +        }, +        "856cc2055cce4a61be024950840a9e43": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "DescriptionStyleModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "StyleView", +            "_model_name": "DescriptionStyleModel", +            "description_width": "", +            "_view_module": "@jupyter-widgets/base", +            "_model_module_version": "1.5.0", +            "_view_count": null, +            "_view_module_version": "1.2.0", +            "_model_module": "@jupyter-widgets/controls" +          } +        }, +        "c75692c664d04f19990180f3aab5ba5f": { +          "model_module": "@jupyter-widgets/base", +          "model_name": "LayoutModel", +          "model_module_version": "1.2.0", +          "state": { +            "_view_name": "LayoutView", +            "grid_template_rows": null, +            "right": null, +            "justify_content": null, +            "_view_module": "@jupyter-widgets/base", +            "overflow": null, +            "_model_module_version": "1.2.0", +            "_view_count": null, +            "flex_flow": null, +            "width": null, +            "min_width": null, +            "border": null, +            "align_items": null, +            "bottom": null, +            "_model_module": "@jupyter-widgets/base", +            "top": null, +            "grid_column": null, +            "overflow_y": null, +            "overflow_x": null, +            "grid_auto_flow": null, +            "grid_area": null, +            "grid_template_columns": null, +            "flex": null, +            "_model_name": "LayoutModel", +            "justify_items": null, +            "grid_row": null, +            "max_height": null, +            "align_content": null, +            "visibility": null, +            "align_self": null, +            "height": null, +            "min_height": null, +            "padding": null, +            "grid_auto_rows": null, +            "grid_gap": null, +            "max_width": null, +            "order": null, +            "_view_module_version": "1.2.0", +            "grid_template_areas": null, +            "object_position": null, +            "object_fit": null, +            "grid_auto_columns": null, +            "margin": null, +            "display": null, +            "left": null +          } +        }, +        "e599af99f6cc4feeb0f3f20b61d59fc0": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "HBoxModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "HBoxView", +            "_dom_classes": [], +            "_model_name": "HBoxModel", +            "_view_module": "@jupyter-widgets/controls", +            "_model_module_version": "1.5.0", +            "_view_count": null, +            "_view_module_version": "1.5.0", +            "box_style": "", +            "layout": "IPY_MODEL_06a8f00a70e44ffaafa9e8d6c851020e", +            "_model_module": "@jupyter-widgets/controls", +            "children": [ +              "IPY_MODEL_b457e56a4a4a45578b0ab348b2be3a41", +              "IPY_MODEL_c7cb67769284415b99735bb819bb575b", +              "IPY_MODEL_2b926da18fd247b294fab2bf5c352238" +            ] +          } +        }, +        "06a8f00a70e44ffaafa9e8d6c851020e": { +          "model_module": "@jupyter-widgets/base", +          "model_name": "LayoutModel", +          "model_module_version": "1.2.0", +          "state": { +            "_view_name": "LayoutView", +            "grid_template_rows": null, +            "right": null, +            "justify_content": null, +            "_view_module": "@jupyter-widgets/base", +            "overflow": null, +            "_model_module_version": "1.2.0", +            "_view_count": null, +            "flex_flow": null, +            "width": null, +            "min_width": null, +            "border": null, +            "align_items": null, +            "bottom": null, +            "_model_module": "@jupyter-widgets/base", +            "top": null, +            "grid_column": null, +            "overflow_y": null, +            "overflow_x": null, +            "grid_auto_flow": null, +            "grid_area": null, +            "grid_template_columns": null, +            "flex": null, +            "_model_name": "LayoutModel", +            "justify_items": null, +            "grid_row": null, +            "max_height": null, +            "align_content": null, +            "visibility": null, +            "align_self": null, +            "height": null, +            "min_height": null, +            "padding": null, +            "grid_auto_rows": null, +            "grid_gap": null, +            "max_width": null, +            "order": null, +            "_view_module_version": "1.2.0", +            "grid_template_areas": null, +            "object_position": null, +            "object_fit": null, +            "grid_auto_columns": null, +            "margin": null, +            "display": null, +            "left": null +          } +        }, +        "b457e56a4a4a45578b0ab348b2be3a41": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "HTMLModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "HTMLView", +            "style": "IPY_MODEL_55aa50982905491eaa854d26cd7e79c9", +            "_dom_classes": [], +            "description": "", +            "_model_name": "HTMLModel", +            "placeholder": "", +            "_view_module": "@jupyter-widgets/controls", +            "_model_module_version": "1.5.0", +            "value": "", +            "_view_count": null, +            "_view_module_version": "1.5.0", +            "description_tooltip": null, +            "_model_module": "@jupyter-widgets/controls", +            "layout": "IPY_MODEL_cf701b836c794ddea46ba7242fe7125e" +          } +        }, +        "c7cb67769284415b99735bb819bb575b": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "FloatProgressModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "ProgressView", +            "style": "IPY_MODEL_630ce4632ce346d5a24fc7e619fc8c4e", +            "_dom_classes": [], +            "description": "", +            "_model_name": "FloatProgressModel", +            "bar_style": "success", +            "max": 4542, +            "_view_module": "@jupyter-widgets/controls", +            "_model_module_version": "1.5.0", +            "value": 4542, +            "_view_count": null, +            "_view_module_version": "1.5.0", +            "orientation": "horizontal", +            "min": 0, +            "description_tooltip": null, +            "_model_module": "@jupyter-widgets/controls", +            "layout": "IPY_MODEL_31fc6a8e3e8f42c08be70f8a8d6f72b3" +          } +        }, +        "2b926da18fd247b294fab2bf5c352238": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "HTMLModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "HTMLView", +            "style": "IPY_MODEL_fb030304a11345a4a88f618281ac1508", +            "_dom_classes": [], +            "description": "", +            "_model_name": "HTMLModel", +            "placeholder": "", +            "_view_module": "@jupyter-widgets/controls", +            "_model_module_version": "1.5.0", +            "value": " 5120/? [00:00<00:00, 5472.09it/s]", +            "_view_count": null, +            "_view_module_version": "1.5.0", +            "description_tooltip": null, +            "_model_module": "@jupyter-widgets/controls", +            "layout": "IPY_MODEL_36f61cfa17944f54b74701c57e12b526" +          } +        }, +        "55aa50982905491eaa854d26cd7e79c9": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "DescriptionStyleModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "StyleView", +            "_model_name": "DescriptionStyleModel", +            "description_width": "", +            "_view_module": "@jupyter-widgets/base", +            "_model_module_version": "1.5.0", +            "_view_count": null, +            "_view_module_version": "1.2.0", +            "_model_module": "@jupyter-widgets/controls" +          } +        }, +        "cf701b836c794ddea46ba7242fe7125e": { +          "model_module": "@jupyter-widgets/base", +          "model_name": "LayoutModel", +          "model_module_version": "1.2.0", +          "state": { +            "_view_name": "LayoutView", +            "grid_template_rows": null, +            "right": null, +            "justify_content": null, +            "_view_module": "@jupyter-widgets/base", +            "overflow": null, +            "_model_module_version": "1.2.0", +            "_view_count": null, +            "flex_flow": null, +            "width": null, +            "min_width": null, +            "border": null, +            "align_items": null, +            "bottom": null, +            "_model_module": "@jupyter-widgets/base", +            "top": null, +            "grid_column": null, +            "overflow_y": null, +            "overflow_x": null, +            "grid_auto_flow": null, +            "grid_area": null, +            "grid_template_columns": null, +            "flex": null, +            "_model_name": "LayoutModel", +            "justify_items": null, +            "grid_row": null, +            "max_height": null, +            "align_content": null, +            "visibility": null, +            "align_self": null, +            "height": null, +            "min_height": null, +            "padding": null, +            "grid_auto_rows": null, +            "grid_gap": null, +            "max_width": null, +            "order": null, +            "_view_module_version": "1.2.0", +            "grid_template_areas": null, +            "object_position": null, +            "object_fit": null, +            "grid_auto_columns": null, +            "margin": null, +            "display": null, +            "left": null +          } +        }, +        "630ce4632ce346d5a24fc7e619fc8c4e": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "ProgressStyleModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "StyleView", +            "_model_name": "ProgressStyleModel", +            "description_width": "", +            "_view_module": "@jupyter-widgets/base", +            "_model_module_version": "1.5.0", +            "_view_count": null, +            "_view_module_version": "1.2.0", +            "bar_color": null, +            "_model_module": "@jupyter-widgets/controls" +          } +        }, +        "31fc6a8e3e8f42c08be70f8a8d6f72b3": { +          "model_module": "@jupyter-widgets/base", +          "model_name": "LayoutModel", +          "model_module_version": "1.2.0", +          "state": { +            "_view_name": "LayoutView", +            "grid_template_rows": null, +            "right": null, +            "justify_content": null, +            "_view_module": "@jupyter-widgets/base", +            "overflow": null, +            "_model_module_version": "1.2.0", +            "_view_count": null, +            "flex_flow": null, +            "width": null, +            "min_width": null, +            "border": null, +            "align_items": null, +            "bottom": null, +            "_model_module": "@jupyter-widgets/base", +            "top": null, +            "grid_column": null, +            "overflow_y": null, +            "overflow_x": null, +            "grid_auto_flow": null, +            "grid_area": null, +            "grid_template_columns": null, +            "flex": null, +            "_model_name": "LayoutModel", +            "justify_items": null, +            "grid_row": null, +            "max_height": null, +            "align_content": null, +            "visibility": null, +            "align_self": null, +            "height": null, +            "min_height": null, +            "padding": null, +            "grid_auto_rows": null, +            "grid_gap": null, +            "max_width": null, +            "order": null, +            "_view_module_version": "1.2.0", +            "grid_template_areas": null, +            "object_position": null, +            "object_fit": null, +            "grid_auto_columns": null, +            "margin": null, +            "display": null, +            "left": null +          } +        }, +        "fb030304a11345a4a88f618281ac1508": { +          "model_module": "@jupyter-widgets/controls", +          "model_name": "DescriptionStyleModel", +          "model_module_version": "1.5.0", +          "state": { +            "_view_name": "StyleView", +            "_model_name": "DescriptionStyleModel", +            "description_width": "", +            "_view_module": "@jupyter-widgets/base", +            "_model_module_version": "1.5.0", +            "_view_count": null, +            "_view_module_version": "1.2.0", +            "_model_module": "@jupyter-widgets/controls" +          } +        }, +        "36f61cfa17944f54b74701c57e12b526": { +          "model_module": "@jupyter-widgets/base", +          "model_name": "LayoutModel", +          "model_module_version": "1.2.0", +          "state": { +            "_view_name": "LayoutView", +            "grid_template_rows": null, +            "right": null, +            "justify_content": null, +            "_view_module": "@jupyter-widgets/base", +            "overflow": null, +            "_model_module_version": "1.2.0", +            "_view_count": null, +            "flex_flow": null, +            "width": null, +            "min_width": null, +            "border": null, +            "align_items": null, +            "bottom": null, +            "_model_module": "@jupyter-widgets/base", +            "top": null, +            "grid_column": null, +            "overflow_y": null, +            "overflow_x": null, +            "grid_auto_flow": null, +            "grid_area": null, +            "grid_template_columns": null, +            "flex": null, +            "_model_name": "LayoutModel", +            "justify_items": null, +            "grid_row": null, +            "max_height": null, +            "align_content": null, +            "visibility": null, +            "align_self": null, +            "height": null, +            "min_height": null, +            "padding": null, +            "grid_auto_rows": null, +            "grid_gap": null, +            "max_width": null, +            "order": null, +            "_view_module_version": "1.2.0", +            "grid_template_areas": null, +            "object_position": null, +            "object_fit": null, +            "grid_auto_columns": null, +            "margin": null, +            "display": null, +            "left": null +          } +        } +      } +    } +  }, +  "cells": [ +    { +      "cell_type": "markdown", +      "source": [ +        "#TensorFlow vs PyTorch" +      ], +      "metadata": { +        "id": "vQG0yG7VjgGE" +      } +    }, +    { +      "cell_type": "markdown", +      "source": [ +        "Dve najpopularnije biblioteke deep-learning-a zasnovane na Python-u su PyTorch i TensorFlow. Početniku koji se bavi mašinskim učenjem može biti teško da odluči koju od ove dve biblioteke će koristiti kada radi sa modelom deep-learning-a. Razliku je najbolje uočiti tako što će biti kreiran klasifikator koji koristi oba framework-a za rešavanje istog problema." +      ], +      "metadata": { +        "id": "5wnwB9o0gs2L" +      } +    }, +    { +      "cell_type": "markdown", +      "source": [ +        "MNIST je akronim za skup podataka The Modified National Institute of Standards and Technology. To je kolekcija od 60.000 malih kvadratnih slika u nijansama sive boje pisanih cifara (od 0 do 9). Cilj je klasifikovati sliku koja je pisana rukom u jednu od deset klasa koje predstavljaju celobrojne vrednosti u rasponu od 0 do 9." +      ], +      "metadata": { +        "id": "HLVo2_kPi0Sg" +      } +    }, +    { +      "cell_type": "markdown", +      "source": [ +        "## Ukratko o TensorFlow-u" +      ], +      "metadata": { +        "id": "O9uIKVoGkG1b" +      } +    }, +    { +      "cell_type": "markdown", +      "source": [ +        "Google je razvio TensorFlow, koji je open source od 2015. godine. Razvio se iz Google-ovog internog softvera za mašinsko učenje, koji je refaktorisan i optimizovan za upotrebu u proizvodnji.\n", +        "\n", +        "Termin \"TensorFlow\" se odnosi na način na koji su podaci organizovani i obrađeni. Tenzor je najosnovnija struktura podataka u TensorFlow-u i PyTorch-u.\n", +        "\n", +        "TensorFlow je biblioteka za deep learning visokih performansi." +      ], +      "metadata": { +        "id": "Hu-RncH-kKgz" +      } +    }, +    { +      "cell_type": "markdown", +      "source": [ +        "## Ukratko o PyTorch-u" +      ], +      "metadata": { +        "id": "kk_iv5_Pxt5o" +      } +    }, +    { +      "cell_type": "markdown", +      "source": [ +        "PyTorch je jedan od najnovijih framework-a za deep learning, koji je razvio Facebook tim i objavljen na GitHub-u 2017. PyTorch dobija na popularnosti zbog svoje lakoće korišćenja, jednostavnosti i efikasnog korišćenja memorije. To je imperativ, što znači da se pokreće odmah, a korisnik može da ga testira da vidi da li radi pre nego što napiše ceo kod.\n", +        "\n", +        "Možemo napisati deo koda i pokrenuti ga u realnom vremenu jer ima ugrađenu Python implementaciju koja obezbeđuje kompatibilnost kao platforma za deep learning. Brzo je stekao popularnost zbog svog korisničkog interfejsa, što je navelo Tensorflow tim da ugradi svoje najpopularnije feature-e u Tensorflow 2.0." +      ], +      "metadata": { +        "id": "y_zQUFxdx7XH" +      } +    }, +    { +      "cell_type": "markdown", +      "source": [ +        "## Pravljenje deep learning modela za klasifikaciju slika" +      ], +      "metadata": { +        "id": "cJpjDu_Vy33y" +      } +    }, +    { +      "cell_type": "markdown", +      "source": [ +        "U daljem tekstu ćemo uporediti upotrebljivost koda i lakoću upotrebe TensorFlow-a i PyTorch-a na najčešće korišćenom skupu podataka MNIST za klasifikaciju rukom pisanih cifara. Koristeći oba okvira, proverićemo minimalne procedure koje treba sprovesti kako bismo imali odgovarajući model klasifikacije. U oba koraka modela koje treba preduzeti su učitavanje podataka, prethodna obrada, pravljenje modela, obuka i vizuelizacija rezultata. Za oba modela slojevi i konfiguracije hiperparametara su isti.\n", +        "\n", +        "Počećemo prvo sa TensorFlow-om." +      ], +      "metadata": { +        "id": "0ayWMoHuzIuQ" +      } +    }, +    { +      "cell_type": "markdown", +      "source": [ +        "####TensorFlow - Model building" +      ], +      "metadata": { +        "id": "_vMOqp_Zjsv4" +      } +    }, +    { +      "cell_type": "markdown", +      "source": [ +        "Pravimo model konvolucione neuronske mreže za klasifikaciju slika u TensorFlow-u." +      ], +      "metadata": { +        "id": "UM6BB4oj88C3" +      } +    }, +    { +      "cell_type": "code", +      "execution_count": null, +      "metadata": { +        "id": "hwAWAPoMjQhN" +      }, +      "outputs": [], +      "source": [ +        "import tensorflow as tf\n", +        "from tensorflow.keras.datasets import mnist \n", +        "from tensorflow.keras.utils import to_categorical\n", +        "from tensorflow.keras.layers import Conv2D, Flatten, Dense, MaxPooling2D\n", +        "from tensorflow.keras.models import Sequential\n", +        "import matplotlib.pyplot as plt" +      ] +    }, +    { +      "cell_type": "markdown", +      "source": [ +        "Proveravamo verziju TensorFlow-a." +      ], +      "metadata": { +        "id": "W9qjmDOX9WJM" +      } +    }, +    { +      "cell_type": "code", +      "source": [ +        "#pip install --upgrade tensorflow\n", +        "print(tensorflow.__version__)" +      ], +      "metadata": { +        "colab": { +          "base_uri": "https://localhost:8080/" +        }, +        "id": "X0sojNoGlLJh", +        "outputId": "9971bca4-15b5-4cef-b7b6-bb380c8523fe" +      }, +      "execution_count": null, +      "outputs": [ +        { +          "output_type": "stream", +          "name": "stdout", +          "text": [ +            "2.8.0\n" +          ] +        } +      ] +    }, +    { +      "cell_type": "markdown", +      "source": [ +        "Učitavamo skup podataka mnist i pravimo training i test skupove:" +      ], +      "metadata": { +        "id": "o1VR27929iWZ" +      } +    }, +    { +      "cell_type": "code", +      "source": [ +        "mnist = tf.keras.datasets.mnist\n", +        "(x_train, y_train),(x_test, y_test) = mnist.load_data()" +      ], +      "metadata": { +        "colab": { +          "base_uri": "https://localhost:8080/" +        }, +        "id": "Yk04SZJXsTeZ", +        "outputId": "1f88f77e-fa4d-4238-b4a9-98deb2242f74" +      }, +      "execution_count": null, +      "outputs": [ +        { +          "output_type": "stream", +          "name": "stdout", +          "text": [ +            "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz\n", +            "11493376/11490434 [==============================] - 0s 0us/step\n", +            "11501568/11490434 [==============================] - 0s 0us/step\n" +          ] +        } +      ] +    }, +    { +      "cell_type": "markdown", +      "source": [ +        "Takođe je neophodno da se srede ulazni podaci." +      ], +      "metadata": { +        "id": "Tei7ILqu9t_O" +      } +    }, +    { +      "cell_type": "code", +      "source": [ +        "# reshaping and one hot encoding\n", +        "x_train = x_train.reshape(x_train.shape[0], 28, 28, 1)\n", +        "x_test = x_test.reshape(x_test.shape[0], 28, 28, 1)\n", +        "y_train = to_categorical(y_train)\n", +        "y_test = to_categorical(y_test)" +      ], +      "metadata": { +        "id": "vxC2d4mfsez3" +      }, +      "execution_count": null, +      "outputs": [] +    }, +    { +      "cell_type": "code", +      "source": [ +        "# scaling\n", +        "x_train = x_train.astype('float32')\n", +        "x_test = x_test.astype('float32')\n", +        "x_train = x_train / 255.0\n", +        "x_test = x_test / 255.0" +      ], +      "metadata": { +        "id": "fVHrrpMIsgTY" +      }, +      "execution_count": null, +      "outputs": [] +    }, +    { +      "cell_type": "code", +      "source": [ +        "model = Sequential()\n", +        "model.add(Conv2D(32, (3,3), input_shape = (28,28,1), activation='relu'))\n", +        "model.add(Conv2D(64,(3,3), activation='relu'))\n", +        "model.add(MaxPooling2D((2,2)))\n", +        "model.add(Flatten())\n", +        "model.add(Dense(1024, activation='relu'))\n", +        "model.add(Dense(10, activation='softmax'))\n", +        "# compile\n", +        "model.compile(optimizer='sgd', loss='categorical_crossentropy', metrics=['accuracy'])" +      ], +      "metadata": { +        "id": "UK3Mr-QPslnC" +      }, +      "execution_count": null, +      "outputs": [] +    }, +    { +      "cell_type": "code", +      "source": [ +        "# training \n", +        "history = model.fit(x_train, y_train, validation_split=0.3, epochs=5)" +      ], +      "metadata": { +        "colab": { +          "base_uri": "https://localhost:8080/" +        }, +        "id": "5g4Lj3_MspM8", +        "outputId": "a0dfaa33-1d5b-4a60-e210-af127cd88dc9" +      }, +      "execution_count": null, +      "outputs": [ +        { +          "output_type": "stream", +          "name": "stdout", +          "text": [ +            "Epoch 1/5\n", +            "1313/1313 [==============================] - 209s 158ms/step - loss: 0.4175 - accuracy: 0.8820 - val_loss: 0.2058 - val_accuracy: 0.9382\n", +            "Epoch 2/5\n", +            "1313/1313 [==============================] - 209s 159ms/step - loss: 0.1549 - accuracy: 0.9522 - val_loss: 0.1585 - val_accuracy: 0.9532\n", +            "Epoch 3/5\n", +            "1313/1313 [==============================] - 206s 157ms/step - loss: 0.1115 - accuracy: 0.9653 - val_loss: 0.1066 - val_accuracy: 0.9688\n", +            "Epoch 4/5\n", +            "1313/1313 [==============================] - 206s 157ms/step - loss: 0.0881 - accuracy: 0.9725 - val_loss: 0.1051 - val_accuracy: 0.9675\n", +            "Epoch 5/5\n", +            "1313/1313 [==============================] - 205s 156ms/step - loss: 0.0749 - accuracy: 0.9763 - val_loss: 0.0923 - val_accuracy: 0.9718\n" +          ] +        } +      ] +    }, +    { +      "cell_type": "markdown", +      "source": [ +        "#### PyTorch - Model building" +      ], +      "metadata": { +        "id": "aqZ7Nc5TxDm3" +      } +    }, +    { +      "cell_type": "markdown", +      "source": [ +        "Pravimo model konvolucione neuronske mreže za klasifikaciju slika u PyTorch-u." +      ], +      "metadata": { +        "id": "x5sFtN51-vqI" +      } +    }, +    { +      "cell_type": "code", +      "source": [ +        "import torch\n", +        "import torch.nn as nn\n", +        "import torch.optim as optim\n", +        "import torch.nn.functional as F\n", +        "from torchvision import datasets, transforms" +      ], +      "metadata": { +        "id": "Al-YoL-VxHYS" +      }, +      "execution_count": null, +      "outputs": [] +    }, +    { +      "cell_type": "markdown", +      "source": [ +        "Učitavanje i preprocesiranje podataka." +      ], +      "metadata": { +        "id": "U9Tawkpb_umB" +      } +    }, +    { +      "cell_type": "code", +      "source": [ +        "# pre-processor\n", +        "transform = transforms.Compose([\n", +        "    transforms.Resize((8, 8)),\n", +        "    transforms.ToTensor(),\n", +        "    transforms.Normalize((0.1307,), (0.3081,))])" +      ], +      "metadata": { +        "id": "FNqQvbBrxU3s" +      }, +      "execution_count": null, +      "outputs": [] +    }, +    { +      "cell_type": "code", +      "source": [ +        "# load the data\n", +        "train_dataset = datasets.MNIST(\n", +        "    'data', train=True, download=True, transform=transform)\n", +        "test_dataset = datasets.MNIST(\n", +        "    'data', train=False, download=True, transform=transform)\n", +        " \n", +        "train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=512)\n", +        "test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=512)" +      ], +      "metadata": { +        "colab": { +          "base_uri": "https://localhost:8080/", +          "height": 436, +          "referenced_widgets": [ +            "7aaf00f20d77493fadb2b6ad0b96cf74", +            "4b92939e2d45451da2334595d97bd68d", +            "12969beb96f7497181f7167e39c40bd0", +            "74a47efac60c4af396b9d1e1f282827f", +            "3d1920917c9947148a40db3bc30a4132", +            "d3ab8f1573e54fb49837c7675c8a237e", +            "b84a67505e3c4030a3839cbe0b5a2d6d", +            "9fa408a5efc84e64be85faca9e0701b4", +            "3041321e29fc4fab892a3e6b3b5c9bbd", +            "3ebefec2c2aa499a96c4644d7855cd7d", +            "2fe247e330224176a25f48abca95cda2", +            "526a499287d146c7b3c429d3460c6736", +            "692b9b0b9f16464eb0426266b5123a9c", +            "cc94aeb409fd4393815cb855d952af12", +            "cef5db1a425b481ab21d898a22a73763", +            "13c1cd14c03248559d8b5a604269d800", +            "bf19654df95e43289ed8071ad717045c", +            "0597828f149d4901ba240137e35c5bf8", +            "bd60eec9f2314e96ae5bde2cc2b5bd90", +            "0daf5c329df64e39b169cc136ceafcfd", +            "6b03227602be48588c11acd7c06e599f", +            "2efd7ec451034ab8be703274233277ce", +            "b5eae176555e47b582757cd8543969d1", +            "73209e9211ac4b929f3c112500ebed41", +            "752919f2449647039640f2b0cd2a1e40", +            "8e577096756c42fdb6d2d0aafc080610", +            "3c56e65e3c8c4bde81f72adc6eca04ce", +            "66b17d032f8741bbb482737603af5a15", +            "f3938db95eee4a218798a65ed2a9ec5d", +            "b2a53beffd864607b83f9e21662f1aec", +            "0280a38e8c6e4414b6fcde5e5f23b4f2", +            "856cc2055cce4a61be024950840a9e43", +            "c75692c664d04f19990180f3aab5ba5f", +            "e599af99f6cc4feeb0f3f20b61d59fc0", +            "06a8f00a70e44ffaafa9e8d6c851020e", +            "b457e56a4a4a45578b0ab348b2be3a41", +            "c7cb67769284415b99735bb819bb575b", +            "2b926da18fd247b294fab2bf5c352238", +            "55aa50982905491eaa854d26cd7e79c9", +            "cf701b836c794ddea46ba7242fe7125e", +            "630ce4632ce346d5a24fc7e619fc8c4e", +            "31fc6a8e3e8f42c08be70f8a8d6f72b3", +            "fb030304a11345a4a88f618281ac1508", +            "36f61cfa17944f54b74701c57e12b526" +          ] +        }, +        "id": "SuSa2oifxaWN", +        "outputId": "8223ab58-4a27-4bde-ba95-f6c9d78ed907" +      }, +      "execution_count": null, +      "outputs": [ +        { +          "output_type": "stream", +          "name": "stdout", +          "text": [ +            "Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz\n", +            "Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz to data/MNIST/raw/train-images-idx3-ubyte.gz\n" +          ] +        }, +        { +          "output_type": "display_data", +          "data": { +            "application/vnd.jupyter.widget-view+json": { +              "model_id": "7aaf00f20d77493fadb2b6ad0b96cf74", +              "version_minor": 0, +              "version_major": 2 +            }, +            "text/plain": [ +              "  0%|          | 0/9912422 [00:00<?, ?it/s]" +            ] +          }, +          "metadata": {} +        }, +        { +          "output_type": "stream", +          "name": "stdout", +          "text": [ +            "Extracting data/MNIST/raw/train-images-idx3-ubyte.gz to data/MNIST/raw\n", +            "\n", +            "Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz\n", +            "Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz to data/MNIST/raw/train-labels-idx1-ubyte.gz\n" +          ] +        }, +        { +          "output_type": "display_data", +          "data": { +            "application/vnd.jupyter.widget-view+json": { +              "model_id": "526a499287d146c7b3c429d3460c6736", +              "version_minor": 0, +              "version_major": 2 +            }, +            "text/plain": [ +              "  0%|          | 0/28881 [00:00<?, ?it/s]" +            ] +          }, +          "metadata": {} +        }, +        { +          "output_type": "stream", +          "name": "stdout", +          "text": [ +            "Extracting data/MNIST/raw/train-labels-idx1-ubyte.gz to data/MNIST/raw\n", +            "\n", +            "Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz\n", +            "Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz to data/MNIST/raw/t10k-images-idx3-ubyte.gz\n" +          ] +        }, +        { +          "output_type": "display_data", +          "data": { +            "application/vnd.jupyter.widget-view+json": { +              "model_id": "b5eae176555e47b582757cd8543969d1", +              "version_minor": 0, +              "version_major": 2 +            }, +            "text/plain": [ +              "  0%|          | 0/1648877 [00:00<?, ?it/s]" +            ] +          }, +          "metadata": {} +        }, +        { +          "output_type": "stream", +          "name": "stdout", +          "text": [ +            "Extracting data/MNIST/raw/t10k-images-idx3-ubyte.gz to data/MNIST/raw\n", +            "\n", +            "Downloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz\n", +            "Downloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz to data/MNIST/raw/t10k-labels-idx1-ubyte.gz\n" +          ] +        }, +        { +          "output_type": "display_data", +          "data": { +            "application/vnd.jupyter.widget-view+json": { +              "model_id": "e599af99f6cc4feeb0f3f20b61d59fc0", +              "version_minor": 0, +              "version_major": 2 +            }, +            "text/plain": [ +              "  0%|          | 0/4542 [00:00<?, ?it/s]" +            ] +          }, +          "metadata": {} +        }, +        { +          "output_type": "stream", +          "name": "stdout", +          "text": [ +            "Extracting data/MNIST/raw/t10k-labels-idx1-ubyte.gz to data/MNIST/raw\n", +            "\n" +          ] +        } +      ] +    }, +    { +      "cell_type": "markdown", +      "source": [ +        "" +      ], +      "metadata": { +        "id": "qhPhR1gB_2Hu" +      } +    }, +    { +      "cell_type": "code", +      "source": [ +        "# Build a model\n", +        "class CNNModel(nn.Module):\n", +        "    def __init__(self):\n", +        "        super(CNNModel, self).__init__()\n", +        "        self.conv1 = nn.Conv2d(1, 32, 3, 1)\n", +        "        self.conv2 = nn.Conv2d(32, 64, 3, 1)\n", +        "        self.fc = nn.Linear(1024, 10)\n", +        " \n", +        "    def forward(self, x):\n", +        "        x = F.relu(self.conv1(x))\n", +        "        x = F.relu(self.conv2(x))\n", +        "        x = F.max_pool2d(x, 1)\n", +        "        x = torch.flatten(x, 1)\n", +        "        x = self.fc(x)\n", +        "        output = F.log_softmax(x, dim=1)\n", +        "        return output" +      ], +      "metadata": { +        "id": "khflrhn9xgZy" +      }, +      "execution_count": null, +      "outputs": [] +    }, +    { +      "cell_type": "code", +      "source": [ +        "net = CNNModel()\n", +        " \n", +        "# compiling\n", +        "optimizer = optim.SGD(net.parameters(), lr=0.01)\n", +        "criterion = nn.CrossEntropyLoss()" +      ], +      "metadata": { +        "id": "Yab4Lz95xlLR" +      }, +      "execution_count": null, +      "outputs": [] +    } +  ] +}
\ No newline at end of file  | 
