CoolFace
Apppublic

JimmyChin1998/Pytorch-Learning-File

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
PyTorch_Computer_Vision.ipynb1668 linesDownload Raw Back to root
1{2 "cells": [3  {4   "cell_type": "code",5   "execution_count": 3,6   "id": "e5ce61b0-1bf1-477e-9c11-80e1417cddff",7   "metadata": {},8   "outputs": [9    {10     "name": "stdout",11     "output_type": "stream",12     "text": [13      "PyTorch version: 2.5.0\n",14      "torchvision version: 0.20.0\n"15     ]16    }17   ],18   "source": [19    "# Import PyTorch\n",20    "import torch\n",21    "from torch import nn\n",22    "\n",23    "# Import torchvision \n",24    "import torchvision\n",25    "from torchvision import datasets\n",26    "from torchvision.transforms import ToTensor\n",27    "\n",28    "# Import matplotlib for visualization\n",29    "import matplotlib.pyplot as plt\n",30    "\n",31    "# Check versions\n",32    "# Note: your PyTorch version shouldn't be lower than 1.10.0 and torchvision version shouldn't be lower than 0.11\n",33    "print(f\"PyTorch version: {torch.__version__}\\ntorchvision version: {torchvision.__version__}\")"34   ]35  },36  {37   "cell_type": "code",38   "execution_count": 4,39   "id": "06161eb2-f811-4cdc-aaaa-d838f88960f8",40   "metadata": {},41   "outputs": [],42   "source": [43    "# Setup training data\n",44    "train_data = datasets.FashionMNIST(\n",45    "    root=\"data\", # where to download data to?\n",46    "    train=True, # get training data\n",47    "    download=True, # download data if it doesn't exist on disk\n",48    "    transform=ToTensor(), # images come as PIL format, we want to turn into Torch tensors\n",49    "    target_transform=None # you can transform labels as well\n",50    ")\n",51    "\n",52    "# Setup testing data\n",53    "test_data = datasets.FashionMNIST(\n",54    "    root=\"data\",\n",55    "    train=False, # get test data\n",56    "    download=True,\n",57    "    transform=ToTensor()\n",58    ")"59   ]60  },61  {62   "cell_type": "code",63   "execution_count": 5,64   "id": "bc82c5d5-4b44-4070-b246-1d0a813c4fce",65   "metadata": {},66   "outputs": [67    {68     "data": {69      "text/plain": [70       "(tensor([[[0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",71       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",72       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",73       "           0.0000, 0.0000, 0.0000, 0.0000],\n",74       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",75       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",76       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",77       "           0.0000, 0.0000, 0.0000, 0.0000],\n",78       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",79       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",80       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",81       "           0.0000, 0.0000, 0.0000, 0.0000],\n",82       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",83       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0039, 0.0000, 0.0000, 0.0510,\n",84       "           0.2863, 0.0000, 0.0000, 0.0039, 0.0157, 0.0000, 0.0000, 0.0000,\n",85       "           0.0000, 0.0039, 0.0039, 0.0000],\n",86       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",87       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0118, 0.0000, 0.1412, 0.5333,\n",88       "           0.4980, 0.2431, 0.2118, 0.0000, 0.0000, 0.0000, 0.0039, 0.0118,\n",89       "           0.0157, 0.0000, 0.0000, 0.0118],\n",90       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",91       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0235, 0.0000, 0.4000, 0.8000,\n",92       "           0.6902, 0.5255, 0.5647, 0.4824, 0.0902, 0.0000, 0.0000, 0.0000,\n",93       "           0.0000, 0.0471, 0.0392, 0.0000],\n",94       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",95       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.6078, 0.9255,\n",96       "           0.8118, 0.6980, 0.4196, 0.6118, 0.6314, 0.4275, 0.2510, 0.0902,\n",97       "           0.3020, 0.5098, 0.2824, 0.0588],\n",98       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",99       "           0.0000, 0.0000, 0.0000, 0.0039, 0.0000, 0.2706, 0.8118, 0.8745,\n",100       "           0.8549, 0.8471, 0.8471, 0.6392, 0.4980, 0.4745, 0.4784, 0.5725,\n",101       "           0.5529, 0.3451, 0.6745, 0.2588],\n",102       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",103       "           0.0000, 0.0039, 0.0039, 0.0039, 0.0000, 0.7843, 0.9098, 0.9098,\n",104       "           0.9137, 0.8980, 0.8745, 0.8745, 0.8431, 0.8353, 0.6431, 0.4980,\n",105       "           0.4824, 0.7686, 0.8980, 0.0000],\n",106       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",107       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.7176, 0.8824, 0.8471,\n",108       "           0.8745, 0.8941, 0.9216, 0.8902, 0.8784, 0.8706, 0.8784, 0.8667,\n",109       "           0.8745, 0.9608, 0.6784, 0.0000],\n",110       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",111       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.7569, 0.8941, 0.8549,\n",112       "           0.8353, 0.7765, 0.7059, 0.8314, 0.8235, 0.8275, 0.8353, 0.8745,\n",113       "           0.8627, 0.9529, 0.7922, 0.0000],\n",114       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",115       "           0.0000, 0.0039, 0.0118, 0.0000, 0.0471, 0.8588, 0.8627, 0.8314,\n",116       "           0.8549, 0.7529, 0.6627, 0.8902, 0.8157, 0.8549, 0.8784, 0.8314,\n",117       "           0.8863, 0.7725, 0.8196, 0.2039],\n",118       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",119       "           0.0000, 0.0000, 0.0235, 0.0000, 0.3882, 0.9569, 0.8706, 0.8627,\n",120       "           0.8549, 0.7961, 0.7765, 0.8667, 0.8431, 0.8353, 0.8706, 0.8627,\n",121       "           0.9608, 0.4667, 0.6549, 0.2196],\n",122       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",123       "           0.0000, 0.0157, 0.0000, 0.0000, 0.2157, 0.9255, 0.8941, 0.9020,\n",124       "           0.8941, 0.9412, 0.9098, 0.8353, 0.8549, 0.8745, 0.9176, 0.8510,\n",125       "           0.8510, 0.8196, 0.3608, 0.0000],\n",126       "          [0.0000, 0.0000, 0.0039, 0.0157, 0.0235, 0.0275, 0.0078, 0.0000,\n",127       "           0.0000, 0.0000, 0.0000, 0.0000, 0.9294, 0.8863, 0.8510, 0.8745,\n",128       "           0.8706, 0.8588, 0.8706, 0.8667, 0.8471, 0.8745, 0.8980, 0.8431,\n",129       "           0.8549, 1.0000, 0.3020, 0.0000],\n",130       "          [0.0000, 0.0118, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",131       "           0.0000, 0.2431, 0.5686, 0.8000, 0.8941, 0.8118, 0.8353, 0.8667,\n",132       "           0.8549, 0.8157, 0.8275, 0.8549, 0.8784, 0.8745, 0.8588, 0.8431,\n",133       "           0.8784, 0.9569, 0.6235, 0.0000],\n",134       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0706, 0.1725, 0.3216, 0.4196,\n",135       "           0.7412, 0.8941, 0.8627, 0.8706, 0.8510, 0.8863, 0.7843, 0.8039,\n",136       "           0.8275, 0.9020, 0.8784, 0.9176, 0.6902, 0.7373, 0.9804, 0.9725,\n",137       "           0.9137, 0.9333, 0.8431, 0.0000],\n",138       "          [0.0000, 0.2235, 0.7333, 0.8157, 0.8784, 0.8667, 0.8784, 0.8157,\n",139       "           0.8000, 0.8392, 0.8157, 0.8196, 0.7843, 0.6235, 0.9608, 0.7569,\n",140       "           0.8078, 0.8745, 1.0000, 1.0000, 0.8667, 0.9176, 0.8667, 0.8275,\n",141       "           0.8627, 0.9098, 0.9647, 0.0000],\n",142       "          [0.0118, 0.7922, 0.8941, 0.8784, 0.8667, 0.8275, 0.8275, 0.8392,\n",143       "           0.8039, 0.8039, 0.8039, 0.8627, 0.9412, 0.3137, 0.5882, 1.0000,\n",144       "           0.8980, 0.8667, 0.7373, 0.6039, 0.7490, 0.8235, 0.8000, 0.8196,\n",145       "           0.8706, 0.8941, 0.8824, 0.0000],\n",146       "          [0.3843, 0.9137, 0.7765, 0.8235, 0.8706, 0.8980, 0.8980, 0.9176,\n",147       "           0.9765, 0.8627, 0.7608, 0.8431, 0.8510, 0.9451, 0.2549, 0.2863,\n",148       "           0.4157, 0.4588, 0.6588, 0.8588, 0.8667, 0.8431, 0.8510, 0.8745,\n",149       "           0.8745, 0.8784, 0.8980, 0.1137],\n",150       "          [0.2941, 0.8000, 0.8314, 0.8000, 0.7569, 0.8039, 0.8275, 0.8824,\n",151       "           0.8471, 0.7255, 0.7725, 0.8078, 0.7765, 0.8353, 0.9412, 0.7647,\n",152       "           0.8902, 0.9608, 0.9373, 0.8745, 0.8549, 0.8314, 0.8196, 0.8706,\n",153       "           0.8627, 0.8667, 0.9020, 0.2627],\n",154       "          [0.1882, 0.7961, 0.7176, 0.7608, 0.8353, 0.7725, 0.7255, 0.7451,\n",155       "           0.7608, 0.7529, 0.7922, 0.8392, 0.8588, 0.8667, 0.8627, 0.9255,\n",156       "           0.8824, 0.8471, 0.7804, 0.8078, 0.7294, 0.7098, 0.6941, 0.6745,\n",157       "           0.7098, 0.8039, 0.8078, 0.4510],\n",158       "          [0.0000, 0.4784, 0.8588, 0.7569, 0.7020, 0.6706, 0.7176, 0.7686,\n",159       "           0.8000, 0.8235, 0.8353, 0.8118, 0.8275, 0.8235, 0.7843, 0.7686,\n",160       "           0.7608, 0.7490, 0.7647, 0.7490, 0.7765, 0.7529, 0.6902, 0.6118,\n",161       "           0.6549, 0.6941, 0.8235, 0.3608],\n",162       "          [0.0000, 0.0000, 0.2902, 0.7412, 0.8314, 0.7490, 0.6863, 0.6745,\n",163       "           0.6863, 0.7098, 0.7255, 0.7373, 0.7412, 0.7373, 0.7569, 0.7765,\n",164       "           0.8000, 0.8196, 0.8235, 0.8235, 0.8275, 0.7373, 0.7373, 0.7608,\n",165       "           0.7529, 0.8471, 0.6667, 0.0000],\n",166       "          [0.0078, 0.0000, 0.0000, 0.0000, 0.2588, 0.7843, 0.8706, 0.9294,\n",167       "           0.9373, 0.9490, 0.9647, 0.9529, 0.9569, 0.8667, 0.8627, 0.7569,\n",168       "           0.7490, 0.7020, 0.7137, 0.7137, 0.7098, 0.6902, 0.6510, 0.6588,\n",169       "           0.3882, 0.2275, 0.0000, 0.0000],\n",170       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.1569,\n",171       "           0.2392, 0.1725, 0.2824, 0.1608, 0.1373, 0.0000, 0.0000, 0.0000,\n",172       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",173       "           0.0000, 0.0000, 0.0000, 0.0000],\n",174       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",175       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",176       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",177       "           0.0000, 0.0000, 0.0000, 0.0000],\n",178       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",179       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",180       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",181       "           0.0000, 0.0000, 0.0000, 0.0000]]]),\n",182       " 9)"183      ]184     },185     "execution_count": 5,186     "metadata": {},187     "output_type": "execute_result"188    }189   ],190   "source": [191    "train_data[0]"192   ]193  },194  {195   "cell_type": "code",196   "execution_count": 7,197   "id": "055c9163-600b-45e0-a8f7-d0c7ba11523c",198   "metadata": {},199   "outputs": [200    {201     "data": {202      "text/plain": [203       "(tensor([[[0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",204       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",205       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",206       "           0.0000, 0.0000, 0.0000, 0.0000],\n",207       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",208       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",209       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",210       "           0.0000, 0.0000, 0.0000, 0.0000],\n",211       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",212       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",213       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",214       "           0.0000, 0.0000, 0.0000, 0.0000],\n",215       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",216       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0039, 0.0000, 0.0000, 0.0510,\n",217       "           0.2863, 0.0000, 0.0000, 0.0039, 0.0157, 0.0000, 0.0000, 0.0000,\n",218       "           0.0000, 0.0039, 0.0039, 0.0000],\n",219       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",220       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0118, 0.0000, 0.1412, 0.5333,\n",221       "           0.4980, 0.2431, 0.2118, 0.0000, 0.0000, 0.0000, 0.0039, 0.0118,\n",222       "           0.0157, 0.0000, 0.0000, 0.0118],\n",223       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",224       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0235, 0.0000, 0.4000, 0.8000,\n",225       "           0.6902, 0.5255, 0.5647, 0.4824, 0.0902, 0.0000, 0.0000, 0.0000,\n",226       "           0.0000, 0.0471, 0.0392, 0.0000],\n",227       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",228       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.6078, 0.9255,\n",229       "           0.8118, 0.6980, 0.4196, 0.6118, 0.6314, 0.4275, 0.2510, 0.0902,\n",230       "           0.3020, 0.5098, 0.2824, 0.0588],\n",231       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",232       "           0.0000, 0.0000, 0.0000, 0.0039, 0.0000, 0.2706, 0.8118, 0.8745,\n",233       "           0.8549, 0.8471, 0.8471, 0.6392, 0.4980, 0.4745, 0.4784, 0.5725,\n",234       "           0.5529, 0.3451, 0.6745, 0.2588],\n",235       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",236       "           0.0000, 0.0039, 0.0039, 0.0039, 0.0000, 0.7843, 0.9098, 0.9098,\n",237       "           0.9137, 0.8980, 0.8745, 0.8745, 0.8431, 0.8353, 0.6431, 0.4980,\n",238       "           0.4824, 0.7686, 0.8980, 0.0000],\n",239       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",240       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.7176, 0.8824, 0.8471,\n",241       "           0.8745, 0.8941, 0.9216, 0.8902, 0.8784, 0.8706, 0.8784, 0.8667,\n",242       "           0.8745, 0.9608, 0.6784, 0.0000],\n",243       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",244       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.7569, 0.8941, 0.8549,\n",245       "           0.8353, 0.7765, 0.7059, 0.8314, 0.8235, 0.8275, 0.8353, 0.8745,\n",246       "           0.8627, 0.9529, 0.7922, 0.0000],\n",247       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",248       "           0.0000, 0.0039, 0.0118, 0.0000, 0.0471, 0.8588, 0.8627, 0.8314,\n",249       "           0.8549, 0.7529, 0.6627, 0.8902, 0.8157, 0.8549, 0.8784, 0.8314,\n",250       "           0.8863, 0.7725, 0.8196, 0.2039],\n",251       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",252       "           0.0000, 0.0000, 0.0235, 0.0000, 0.3882, 0.9569, 0.8706, 0.8627,\n",253       "           0.8549, 0.7961, 0.7765, 0.8667, 0.8431, 0.8353, 0.8706, 0.8627,\n",254       "           0.9608, 0.4667, 0.6549, 0.2196],\n",255       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",256       "           0.0000, 0.0157, 0.0000, 0.0000, 0.2157, 0.9255, 0.8941, 0.9020,\n",257       "           0.8941, 0.9412, 0.9098, 0.8353, 0.8549, 0.8745, 0.9176, 0.8510,\n",258       "           0.8510, 0.8196, 0.3608, 0.0000],\n",259       "          [0.0000, 0.0000, 0.0039, 0.0157, 0.0235, 0.0275, 0.0078, 0.0000,\n",260       "           0.0000, 0.0000, 0.0000, 0.0000, 0.9294, 0.8863, 0.8510, 0.8745,\n",261       "           0.8706, 0.8588, 0.8706, 0.8667, 0.8471, 0.8745, 0.8980, 0.8431,\n",262       "           0.8549, 1.0000, 0.3020, 0.0000],\n",263       "          [0.0000, 0.0118, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",264       "           0.0000, 0.2431, 0.5686, 0.8000, 0.8941, 0.8118, 0.8353, 0.8667,\n",265       "           0.8549, 0.8157, 0.8275, 0.8549, 0.8784, 0.8745, 0.8588, 0.8431,\n",266       "           0.8784, 0.9569, 0.6235, 0.0000],\n",267       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0706, 0.1725, 0.3216, 0.4196,\n",268       "           0.7412, 0.8941, 0.8627, 0.8706, 0.8510, 0.8863, 0.7843, 0.8039,\n",269       "           0.8275, 0.9020, 0.8784, 0.9176, 0.6902, 0.7373, 0.9804, 0.9725,\n",270       "           0.9137, 0.9333, 0.8431, 0.0000],\n",271       "          [0.0000, 0.2235, 0.7333, 0.8157, 0.8784, 0.8667, 0.8784, 0.8157,\n",272       "           0.8000, 0.8392, 0.8157, 0.8196, 0.7843, 0.6235, 0.9608, 0.7569,\n",273       "           0.8078, 0.8745, 1.0000, 1.0000, 0.8667, 0.9176, 0.8667, 0.8275,\n",274       "           0.8627, 0.9098, 0.9647, 0.0000],\n",275       "          [0.0118, 0.7922, 0.8941, 0.8784, 0.8667, 0.8275, 0.8275, 0.8392,\n",276       "           0.8039, 0.8039, 0.8039, 0.8627, 0.9412, 0.3137, 0.5882, 1.0000,\n",277       "           0.8980, 0.8667, 0.7373, 0.6039, 0.7490, 0.8235, 0.8000, 0.8196,\n",278       "           0.8706, 0.8941, 0.8824, 0.0000],\n",279       "          [0.3843, 0.9137, 0.7765, 0.8235, 0.8706, 0.8980, 0.8980, 0.9176,\n",280       "           0.9765, 0.8627, 0.7608, 0.8431, 0.8510, 0.9451, 0.2549, 0.2863,\n",281       "           0.4157, 0.4588, 0.6588, 0.8588, 0.8667, 0.8431, 0.8510, 0.8745,\n",282       "           0.8745, 0.8784, 0.8980, 0.1137],\n",283       "          [0.2941, 0.8000, 0.8314, 0.8000, 0.7569, 0.8039, 0.8275, 0.8824,\n",284       "           0.8471, 0.7255, 0.7725, 0.8078, 0.7765, 0.8353, 0.9412, 0.7647,\n",285       "           0.8902, 0.9608, 0.9373, 0.8745, 0.8549, 0.8314, 0.8196, 0.8706,\n",286       "           0.8627, 0.8667, 0.9020, 0.2627],\n",287       "          [0.1882, 0.7961, 0.7176, 0.7608, 0.8353, 0.7725, 0.7255, 0.7451,\n",288       "           0.7608, 0.7529, 0.7922, 0.8392, 0.8588, 0.8667, 0.8627, 0.9255,\n",289       "           0.8824, 0.8471, 0.7804, 0.8078, 0.7294, 0.7098, 0.6941, 0.6745,\n",290       "           0.7098, 0.8039, 0.8078, 0.4510],\n",291       "          [0.0000, 0.4784, 0.8588, 0.7569, 0.7020, 0.6706, 0.7176, 0.7686,\n",292       "           0.8000, 0.8235, 0.8353, 0.8118, 0.8275, 0.8235, 0.7843, 0.7686,\n",293       "           0.7608, 0.7490, 0.7647, 0.7490, 0.7765, 0.7529, 0.6902, 0.6118,\n",294       "           0.6549, 0.6941, 0.8235, 0.3608],\n",295       "          [0.0000, 0.0000, 0.2902, 0.7412, 0.8314, 0.7490, 0.6863, 0.6745,\n",296       "           0.6863, 0.7098, 0.7255, 0.7373, 0.7412, 0.7373, 0.7569, 0.7765,\n",297       "           0.8000, 0.8196, 0.8235, 0.8235, 0.8275, 0.7373, 0.7373, 0.7608,\n",298       "           0.7529, 0.8471, 0.6667, 0.0000],\n",299       "          [0.0078, 0.0000, 0.0000, 0.0000, 0.2588, 0.7843, 0.8706, 0.9294,\n",300       "           0.9373, 0.9490, 0.9647, 0.9529, 0.9569, 0.8667, 0.8627, 0.7569,\n",301       "           0.7490, 0.7020, 0.7137, 0.7137, 0.7098, 0.6902, 0.6510, 0.6588,\n",302       "           0.3882, 0.2275, 0.0000, 0.0000],\n",303       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.1569,\n",304       "           0.2392, 0.1725, 0.2824, 0.1608, 0.1373, 0.0000, 0.0000, 0.0000,\n",305       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",306       "           0.0000, 0.0000, 0.0000, 0.0000],\n",307       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",308       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",309       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",310       "           0.0000, 0.0000, 0.0000, 0.0000],\n",311       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",312       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",313       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",314       "           0.0000, 0.0000, 0.0000, 0.0000]]]),\n",315       " 9)"316      ]317     },318     "execution_count": 7,319     "metadata": {},320     "output_type": "execute_result"321    }322   ],323   "source": [324    "# See first training sample\n",325    "#第一個位置是數據(圖像),第二個位置是標籤,變數名稱可自定義\n",326    "image, label = train_data[0]  \n",327    "image, label"328   ]329  },330  {331   "cell_type": "code",332   "execution_count": 8,333   "id": "ba3a23dd-fc98-4755-85dc-a492fe657bba",334   "metadata": {},335   "outputs": [336    {337     "data": {338      "text/plain": [339       "(torch.Size([1, 28, 28]), 3)"340      ]341     },342     "execution_count": 8,343     "metadata": {},344     "output_type": "execute_result"345    }346   ],347   "source": [348    "# [color_channels=1, height=28, width=28]\n",349    "# [batch_size, color_channels, height, width]\n",350    "# color_channels=1 (grayscale image) => 指不同強度的灰色組成的圖像\n",351    "# 1080p的正常照片 => (3, 1080, 1920) =>3為RGB\n",352    "image.shape, image.ndim"353   ]354  },355  {356   "cell_type": "code",357   "execution_count": 9,358   "id": "2875053f-9092-4735-a5e6-d79d47312bf8",359   "metadata": {},360   "outputs": [361    {362     "data": {363      "text/plain": [364       "(60000, 60000, 10000, 10000)"365      ]366     },367     "execution_count": 9,368     "metadata": {},369     "output_type": "execute_result"370    }371   ],372   "source": [373    "# How many samples are there? \n",374    "len(train_data.data), len(train_data.targets), len(test_data.data), len(test_data.targets)"375   ]376  },377  {378   "cell_type": "code",379   "execution_count": 10,380   "id": "9130a7e2-e1b8-427b-a615-f9f42f1cbba1",381   "metadata": {},382   "outputs": [383    {384     "data": {385      "text/plain": [386       "(['T-shirt/top',\n",387       "  'Trouser',\n",388       "  'Pullover',\n",389       "  'Dress',\n",390       "  'Coat',\n",391       "  'Sandal',\n",392       "  'Shirt',\n",393       "  'Sneaker',\n",394       "  'Bag',\n",395       "  'Ankle boot'],\n",396       " 10)"397      ]398     },399     "execution_count": 10,400     "metadata": {},401     "output_type": "execute_result"402    }403   ],404   "source": [405    "# See classes\n",406    "class_names = train_data.classes\n",407    "class_names, len(class_names)"408   ]409  },410  {411   "cell_type": "code",412   "execution_count": 11,413   "id": "806efb2d-39b9-4feb-ab1b-f6685ac88efd",414   "metadata": {},415   "outputs": [416    {417     "name": "stdout",418     "output_type": "stream",419     "text": [420      "Image shape: torch.Size([1, 28, 28])\n"421     ]422    },423    {424     "data": {425      "image/png": "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",426      "text/plain": [427       "<Figure size 640x480 with 1 Axes>"428      ]429     },430     "metadata": {},431     "output_type": "display_data"432    }433   ],434   "source": [435    "import matplotlib.pyplot as plt\n",436    "image, label = train_data[0]\n",437    "print(f\"Image shape: {image.shape}\")\n",438    "plt.imshow(image.squeeze()) # image shape is [1, 28, 28] (colour channels, height, width)\n",439    "plt.title(label);\n",440    "# [28,28]表示的是影像的高度和寬度,其中每個元素(像素)的值代表該位置的亮度或強度"441   ]442  },443  {444   "cell_type": "code",445   "execution_count": 12,446   "id": "1feeca9f-76c0-439e-86bf-097c887d384b",447   "metadata": {},448   "outputs": [449    {450     "data": {451      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaEAAAGxCAYAAADLfglZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAmsElEQVR4nO3df3CV1Z3H8c8NSS4hCddCSG6iMWS7UFxJqQXkhwiBSiQrTBFtoXa7sLu1FsFZFh271OnA7lqDVBm3S8WpWgpTUGZaZN1F0bT8dBELLl1YlnFQQIMhBFKSG5KQkOTsHwy3Xn7mHHNz8uP9mnlG73PPl+fk8CQfntznfm/AGGMEAIAHCb4nAADouQghAIA3hBAAwBtCCADgDSEEAPCGEAIAeEMIAQC8IYQAAN4QQgAAbwghdEs//elPFQgENHTo0M/9Z82ZM0dpaWnXHVdYWKjCwsLPfTzb48bDunXr9Nxzz3k5NnoWQgjd0i9+8QtJ0sGDB/Xee+95nk3XQwihoxBC6Hb27t2r//mf/9E999wjSXr55Zc9zwjA1RBC6HYuhs7SpUs1duxYvfrqq6qvr48Zc+zYMQUCAT3zzDNavny58vPzlZaWpjFjxmj37t3XPcZ//dd/KSMjQ1OnTlVdXd1VxzU1NenJJ5/UkCFDFAwGNWDAAP3N3/yNTp061eav5+DBg/ra176m1NRUDRgwQPPnz7/s6zl37pwWLVqk/Px8JScn68Ybb9S8efNUXV0dM661tVXLli2LziczM1N//dd/rePHj0fHFBYWatOmTfr4448VCASiGxAXBuhG6uvrTSgUMiNHjjTGGPPSSy8ZSeaXv/xlzLijR48aSWbgwIFmypQpZuPGjWbjxo2moKDAfOELXzDV1dXRsbNnzzapqanRx+vXrzfBYNDMnTvXNDc3R/dPmDDBTJgwIfq4paXFTJkyxaSmppp/+qd/MqWlpeall14yN954o/mLv/gLU19ff82vZfbs2SY5OdncfPPN5sc//rF5++23zZIlS0xiYqKZOnVqdFxra6u5++67TWJiovnRj35k3n77bfPMM8+Y1NRUc9ttt5lz585Fx37ve98zksz8+fPN5s2bzQsvvGAGDBhgcnNzzalTp4wxxhw8eNDccccdJhwOm3fffTe6AfFACKFbWbNmjZFkXnjhBWOMMbW1tSYtLc3ceeedMeMuhlBBQUFMkPz+9783kswrr7wS3ffZEFq6dKnp1auXefrppy879qUh9MorrxhJ5je/+U3MuD179hhJ5vnnn7/m1zJ79mwjyfzrv/5rzP4f//jHRpJ55513jDHGbN682Ugyy5Ytixm3fv16I8n8/Oc/N8YYc+jQISPJPPzwwzHj3nvvPSPJ/PCHP4zuu+eee0xeXt415we0B34dh27l5ZdfVkpKimbNmiVJSktL0ze+8Q3t3LlThw8fvmz8Pffco169ekUff/nLX5YkffzxxzHjjDF66KGHtHjxYq1bt06PP/74defyn//5n7rhhhs0bdo0NTc3R7evfOUrCofD2rZtW5u+pm9/+9sxjx944AFJ0tatWyVJW7ZskXThbrrP+sY3vqHU1FT97ne/ixl/6bjbb79dt9xyS3Qc0JEIIXQbH374oXbs2KF77rlHxhhVV1erurpa999/v6Q/3TH3Wf379495HAwGJUkNDQ0x+5uamrR+/XrdeuutKi4ubtN8Tp48qerqaiUnJyspKSlmq6io0OnTp6/7ZyQmJl42x3A4LEmqqqqK/jcxMVEDBgyIGRcIBBQOh2PGSVJ2dvZlx8nJyYk+D3SkRN8TANrLL37xCxlj9Otf/1q//vWvL3t+9erVevLJJ2OufNoqGAxq69atuvvuu3XXXXdp8+bN+sIXvnDNmoyMDPXv31+bN2++4vPp6enXPW5zc7OqqqpigqiiokLSnwK0f//+am5u1qlTp2KCyBijiooKjRw5Mmb8iRMndNNNN8Ucp7y8XBkZGdedD9DeuBJCt9DS0qLVq1fri1/8orZu3XrZ9uijj+rEiRN68803nY9x2223afv27Tp+/LgKCwtVWVl5zfFTp05VVVWVWlpaNGLEiMu2L33pS2067tq1a2Mer1u3TpKib4z92te+Jkn61a9+FTPuN7/5jerq6qLPT5o06Yrj9uzZo0OHDkXHSRdC99KrQSAeuBJCt/Dmm2+qvLxcTz/99BW7FgwdOlQrVqzQyy+/rKlTpzof55ZbbtHOnTt11113afz48frtb3972VXFRbNmzdLatWv1l3/5l/r7v/973X777UpKStLx48e1detWff3rX9e99957zeMlJyfr2Wef1dmzZzVy5Ejt2rVLTz75pIqLizVu3DhJ0uTJk3X33XfrBz/4gSKRiO644w7t379fixcv1m233abv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",452      "text/plain": [453       "<Figure size 640x480 with 1 Axes>"454      ]455     },456     "metadata": {},457     "output_type": "display_data"458    }459   ],460   "source": [461    "plt.imshow(image.squeeze(), cmap=\"gray\")\n",462    "plt.title(class_names[label]);"463   ]464  },465  {466   "cell_type": "code",467   "execution_count": 13,468   "id": "09df32e7-7e24-4f3f-8159-7de2d5e1a1b5",469   "metadata": {},470   "outputs": [471    {472     "data": {473      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAswAAALdCAYAAAA4WzUkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACjhUlEQVR4nOzdd5hV1dn//3uAYWAKZWBgGNogUgWkKkUFBUEFCxENYgFsRKMxRh/bV8UaEbvmsSUoGhvGggYbiGCh8yAgSO+9DAy9s39/+GOSYX3WZh8GmPZ+XZdXLm7WPnufc/beZ+VwPuuOC4IgMAAAAABSifw+AAAAAKAgY8IMAAAAhGDCDAAAAIRgwgwAAACEYMIMAAAAhGDCDAAAAIRgwgwAAACEYMIMAAAAhGDCDAAAAIQolBPmF1980eLi4qxJkyZ5fqx+/fpZcnLyEcd16tTJOnXqlOf9xbrf4+G9996z559/Pl/2jfwxadIk69mzp9WqVcsSEhKsatWq1q5dO7vjjjtyxmRmZlqPHj2O+Fhjx461uLg4Gzt2bKR9c77hRBg6dKjFxcXl+i8tLc06depkI0aMyO/DQxHDPCRvCuPnQqGcML/xxhtmZjZ79mybNGlSPh9N4VMYT1QcvS+++MLat29vW7dutcGDB9vIkSPthRdesA4dOtiwYcNifryWLVvahAkTrGXLlpHGc77hRHrzzTdtwoQJNn78eHv99detZMmSduGFF9q///3v/D40FCHMQ/KmMH4uFLoJ89SpU23GjBnWvXt3MzMbMmRIPh8RULANHjzY6tSpY99884317t3bOnbsaL1797ann37ali9fHvPjlStXztq2bWvlypULHbdz586jPWTgqDVp0sTatm1r7dq1s549e9qIESMsISHB3n///fw+NBQRzEOKp0I3YT50Yg4aNMjat29vH3zwgfPBvHTpUouLi7Onn37ann32WatTp44lJydbu3btbOLEiUfcx7hx46xy5crWo0cP27Fjh3fc3r177bHHHrOGDRtaQkKCpaWlWf/+/W3Dhg2Rn8/s2bOtc+fOlpSUZGlpaXbLLbc4z2f37t127733Wp06dax06dJWvXp1++Mf/2jZ2dm5xh08eNAGDx6cczxVqlSxa665xlauXJkzplOnTvbFF1/YsmXLcv3TJYqurKwsq1y5spUqVcr5uxIl3FvA119/bS1btrSyZctaw4YNc75JOUT9JOPQP+398ssv1rVrV0tJSbHOnTtzviHflSlTxkqXLm3x8fE5tYcffthOP/10S01NtXLlylnLli1tyJAhFgRBrm337Nljd9xxh6Wnp1tiYqKdddZZ9n//93+WmZlp/fr1O8HPBAUF85BiOg8JCpGdO3cG5cuXD9q0aRMEQRD84x//CMwsGDp0aK5xS5YsCcwsyMzMDM4777xg+PDhwfDhw4OmTZsGFStWDLKzs3PG9u3bN0hKSsr587Bhw4KEhITgpptuCvbv359T79ixY9CxY8ecPx84cCA477zzgqSkpODhhx8ORo0aFfzjH/8IqlevHjRu3DjYuXNn6HPp27dvULp06aBWrVrB448/HowcOTJ46KGHglKlSgU9evTIGXfw4MGgW7duQalSpYIHHnggGDlyZPD0008HSUlJQYsWLYLdu3fnjL3xxhsDMwtuueWW4Ouvvw5effXVIC0tLahZs2awYcOGIAiCYPbs2UGHDh2C9PT0YMKECTn/oei6/vrrAzMLbr311mDixInB3r175bjatWsHNWrUCBo3bhy8/fbbwTfffBNcdtllgZkF33//fc64MWPGBGYWjBkzJqfWt2/fID4+PsjMzAyeeOKJYPTo0cE333zD+YYT5s033wzMLJg4cWKwb9++YO/evcGKFSuCP/3pT0GJEiWCr7/+Omdsv379giFDhgSjRo0KRo0aFTz66KNB2bJlg4cffjjXY15xxRVBiRIlgnvuuScYOXJk8Pzzzwc1a9YMypcvH/Tt2/cEP0MUBMxDiu88pFBNmN9+++3AzIJXX301CIIg2LZtW5CcnByceeaZucYdOlGbNm2a62SbPHlyYGbB+++/n1P77xN10KBBQcmSJYMnn3zS2ffhJ+r7778fmFnw8ccf5xo3ZcqUwMyCl19+OfS59O3bNzCz4IUXXshVf/zxxwMzC3766acgCILg66+/DswsGDx4cK5xw4YNC8wseP3114MgCII5c+YEZhbcfPPNucZNmjQpMLPgvvvuy6l17949qF27dujxoejYuHFjcMYZZwRmFphZEB8fH7Rv3z544okngm3btuWMq127dlCmTJlg2bJlObVdu3YFqampwYABA3JqvgmzmQVvvPGGs3/ON5wIhybMh/+XkJAQej8+cOBAsG/fvuCRRx4JKlWqFBw8eDAI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/5xrTL9+/Sw5Odl++eUX69q1q6WkpFjnzp2P6WuDgi8rK8sqV66c6+Z7SIkS/7m8hw0bZl27drVq1apZ2bJlrVGjRnbPPffYjh07cm1z6LxauHChXXDBBZacnGw1a9a0O+64w/bs2ZNr7OrVq+3yyy+3lJQUK1++vP3+97+3tWvXOscxdepU6927t2VmZlrZsmUtMzPTrrjiClu2bNkxehVQXP31r3+1uLg4e/3113NNlg8pXbq0XXTRRWZmdvDgQRs8eLA1bNjQEhISrEqVKnbNNdfYypUrc20zatQou/jii61GjRpWpkwZO/nkk23AgAG2cePGnDEPPfSQ/c///I+ZmdWpU4ef9yES7teFW5H+hjmqNWvW2FVXXWV33XWX/fWvf7USJUrYhg0brH379rZ371579NFHLTMz00aMGGF33nmnLVq0yF5++eWY93PBBRfYgQMHbPDgwVarVi3buHGjjR8/Ptdv4P7617/a/fffb/3797f777/f9u7da0899ZSdeeaZNnny5Fw/H9m7d69ddNFFNmDAALvnnnts//79x+LlQCHSrl07+8c//mF/+tOf7Morr7SWLVtafHy8M27BggV2wQUX2J///GdLSkqyuXPn2pNPPmmTJ092fqK0b98+u+iii+y6666zO+64w3744Qd79NFHrXz58vbggw+amdmuXbusS5cutnr1anviiSesfv369sUXX9jvf/97Z99Lly61Bg0aWO/evS01NdXWrFljr7zyirVp08Z+/fVXq1y58vF5cVCkHThwwL777jtr1aqV1axZ84jjb7rpJnv99dftlltusR49etjSpUvtgQcesLFjx9q0adNyzsNFixZZu3bt7Prrr7fy5cvb0qVL7dlnn7UzzjjDfvnlF4uPj7frr7/eNm3aZC+99JJ98sknVq1aNTPj530Ix/26kAuKkb59+wZJSUm5ah07dgzMLBg9enSu+j333BOYWTBp0qRc9ZtuuimIi4sL5s2bFwRBEIwZMyYws2DMmDG5xi1ZsiQws+DNN98MgiAINm7cGJhZ8Pzzz3uPb/ny5UGpUqWCW2+9NVd927ZtQXp6enD55Zfnei5mFrzxxhuRnjuKpo0bNwZnnHFGYGaBmQXx8fFB+/btgyeeeCLYtm2b3ObgwYPBvn37gu+//z4ws2DGjBk5f3fovPrwww9zbXPBBRcEDRo0yPnzK6+8EphZ8Nlnn+Uad8MNN+Q675X9+/cH27dvD5KSkoIXXnghp+67lgBl7dq1gZkFvXv3PuLYOXPmBGYW3HzzzbnqkyZNCswsuO++++R2h66VZcuWOef7U089FZhZsGTJkjw9DxQf3K8Lt2L/kwwzs4oVK9o555yTq/bdd99Z48aN7bTTTstV79evnwVB4Py/vCNJTU21unXr2lNPPWXPPvus/fzzz7l+2mFm9s0339j+/fvtmmuusf379+f8V6ZMGevYsaP8575LL700puNA0VKpUiX78ccfbcqUKTZo0CC7+OKLbf78+Xbvvfda06ZNc/4ZefHixdanTx9LT0+3kiVLWnx8vHXs2NHMzObMmZPrMePi4uzCCy/MVWvWrFmuf5IbM2aMpaSk5Pxz9yF9+vRxjnH79u12991328knn2ylSpWyUqVKWXJysu3YscPZN3A8jBkzxsx+u3//t9NOO80aNWpko0ePzqmtX7/e/vCHP1jNmjWtVKlSFh8fb7Vr1zYz91oBYsH9unDjJxlmOf+c9t+ysrIsMzPTqWdkZOT8fSzi4uJs9OjR9sgjj9jgwYPtjjvusNTUVLvyyivt8ccft5SUFFu3bp2ZmbVp00Y+xn//xsnMLDEx0cqVKxfTcaBoat26tbVu3drMfvsnurvvvtuee+45Gzx4sD344IN25plnWpkyZeyxxx6z+vXrW2Jioq1YscJ+97vf2a5du3I9VmJiopUpUyZXLSEhwXbv3p3z56ysLKtatapzHOnp6U6tT58+Nnr0aHvggQesTZs2Vq5cOYuLi7MLLrjA2TcQVeXKlS0xMdGWLFlyxLGH7tfqXp+RkZEzuTh48KB17drVVq9ebQ888IA1bdrUkpKS7ODBg9a2bVvOVxwT3K8LJybM9ttk9nCVKlWyNWvWOPXVq1ebmeX8jufQiXr4D+z/OyBySO3atW3IkCFmZjZ//nz78MMP7aGHHrK9e/faq6++mvOYH330Uc43GrEeNxAfH28DBw605557zmbNmmXfffedrV692saOHZvzLYWZ5Wn92EqVKtnkyZOd+uEhki1bttiIESNs4MCBds899+TU9+zZc9zWx0XxULJkSevcubN99dVXtnLlSqtRo4Z3bKVKlczst7zK4eNWr16dc++dNWuWzZgxw4YOHWp9+/bNGbNw4cLj8AwA7teFCT/J8OjcubP9+uuvNm3atFz1t99+2+Li4uzss882M8v5FnrmzJm5xn3++eehj1+/fn27//77rWnTpjn76Natm5UqVcoWLVqU8/9AD/8P+G/q/9SZ/eef7TIyMnL+j9Xhqwi89tprR73fs88+27Zt2+ac5++9916uP8fFxVkQBM6+//GPf9iBAweOev+Amdm9995rQRDYDTfcYHv37nX+ft++ffbvf/875yd377zzTq6/nzJlis2ZMydnhaFYrpVDY4r7t26Ijvt14cY3zB633367vf3229a9e3d75JFHrHbt2vbFF1/Yyy+/bDfddJPVr1/fzH77J40uXbrYE088YRUrVrTatWvb6NGj7ZNPPsn1eDNnzrRbbrnFLrvsMqtXr56VLl3avvvuO5s5c2bO/5PLzMy0Rx55xP7f//t/tnjxYjvvvPOsYsWKtm7dOps8ebIlJSXZww8/fMJfCxRc3bp1sxo1atiFF15oDRs2tIMHD9r06dPtmWeeseTkZLvtttssIyPDKlasaH/4wx9s4MCBFh8fb++++67NmDHjqPd7zTXX2HPPPWfXXHONPf7441avXj378ssv7Ztvvsk1rly5cnbWWWfZU089ZZUrV7bMzEz7/vvvbciQITR7QJ61a9fOXnnlFbv55putVatWdtNNN9kpp5xi+/bts59//tlef/11a9KkiX366ad244032ksvvWQlSpSw888/P2eVjJo1a9rtt99uZmYNGza0unXr2j333GNBEFhqaqr9+9//tlGjRjn7btq0qZmZvfDCC9a3b1+Lj4+3Bg0aWEpKygl9DVB4cL8u5PI1cniC+VbJOOWUU+T4ZcuWBX369AkqVaoUxMfHBw0aNAieeuqp4MCBA7nGrVmzJujVq1eQmpoalC9fPrjqqquCqVOn5kqfrlu3LujXr1/QsGHDICkpKUhOTg6aNWsWPPfcc8H+/ftzPd7w4cODs88+OyhXrlyQkJAQ1K5dO+jVq1fw7bffhj4XFD/Dhg0L+vTpE9SrVy9ITk4O4uPjg1q1agVXX3118Ouvv+aMGz9+fNCuXbsgMTExSEtLC66//vpg2rRpTkLad14NHDgwOPx2sXLlyuDSSy8NkpOTg5SUlODSSy8Nxo8f7zzmoXEVK1YMUlJSgvPOOy+YNWtWULt27aBv374544pj6hrHxvTp04O+ffsGtWrVCkqXLh0kJSUF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V8/Ii+nTp8u6ak9evnx5p7ZmzZpjfUhAscY3zAAAAEAIJswAAABACCbMAAAAQAgmzAAAAECIuIB0GAAAAODFN8wAAABACCbMAAAAQAgmzAAAAEAIJswAAABACCbMAAAAQAgmzAAAAEAIJswAAABACCbMAAAAQAgmzAAAAEAIJswAAABAiCI5YR46dKjFxcXl/FeqVCmrUaOG9e/f31atWhXz48XFxdlDDz2U8+exY8daXFycjR079tgdNHAEkyZNsp49e1qtWrUsISHBqlatau3atbM77rgjvw/NzMwyMzOtR48e+X0YKGS4XwO5RbnXR73fxnr+v/fee/b8888f5ZEXbUVywnzIm2++aRMmTLBRo0bZDTfcYO+//76deeaZtmPHjvw+NCAmX3zxhbVv3962bt1qgwcPtpEjR9oLL7xgHTp0sGHDhuX34QF5xv0aOPb3+pYtW9qECROsZcuWkcYzYfYrld8HcDw1adLEWrdubWZmZ599th04cMAeffRRGz58uF155ZX5fHTHz65du6xMmTIWFxeX34eCY2Tw4MFWp04d++abb6xUqf9ctr1797bBgwfn45GdODt37rTExMT8PgwcJ9yvuV/j2N/ry5UrZ23btj3iOO6vR1akv2E+3KGTZtmyZdapUyfr1KmTM6Zfv36WmZl5VI//+eefW7t27SwxMdFSUlLs3HPPtQkTJuT8/fDhwy0uLs5Gjx7tbPvKK69YXFyczZw5M6c2depUu+iiiyw1NdXKlCljLVq0sA8//DDXdof+OXPkyJF27bXXWlpamiUmJtqePXuO6jmgYMrKyrLKlSvnuoEeUqLEfy7jQ/9M9/XXX1vLli2tbNmy1rBhQ3vjjTec7dauXWsDBgywGjVqWOnSpa1OnTr28MMP2/79+3ONe/jhh+3000+31NRUK1eunLVs2dKGDBliQRAc8bhffvllK1WqlA0cODCn9u2331rnzp2tXLlylpiYaB06dHCuiYceesji4uJs2rRp1qtXL6tYsaLVrVv3iPtD0cH9GsVR1Hv9IUe616ufZPTr18+Sk5Ptl19+sa5du1pKSop17tzZOnXqZF988YUtW7Ys18+k8JtiNWFeuHChmZmlpaUd88d+77337OKLL7Zy5crZ+++/b0OGDLHNmzdbp06d7KeffjIzsx49eliVKlXszTffdLYfOnSotWzZ0po1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w4Z28OBBmz59uj3zzDOWnJxst912W0yP98gjj9ioUaOsffv29qc//ckaNGhgu3fvtqVLl9qXX35pr776qtWoUcO6d+9uzz77rPXp08duvPFGy8rKsqeffjpn0uLTq1cvS0xMtF69etmuXbvs/ffft+TkZHvppZesb9++tmnTJuvVq5dVqVLFNmzYYDNmzLANGzbYK6+8kpeXCUUU92sUF8f6Xh+rpk2b2ieffGKvvPKKtWrVykqUKOH9l5/ipthOmDt06GBvvfVWzo/qTzrpJBs4cKB9+eWXR9VCtU+fPpaUlGRPPPGE/f73v7eSJUta27ZtbcyYMda+fXtnfP/+/e399983s9/WRDzc2WefbZMnT7bHH3/c/vznP9vmzZutUqVK1rhxY7v88stjPj4Ubvfff7999tln9txzz9maNWtsz549Vq1aNevSpYvde++91qhRo5ger1q1ajZ16lR79NFH7amnnrKVK1daSkqK1alTx84777ycb53POecce+ONN+zJJ5+0Cy+80KpXr2433HCDValSJednFz4XXHCBffnll3bhhRfaxRdfbJ988oldddVVVqtWLRs8eLANGDDAtm3bZlWqVLHmzZvL6wAw436N4uNY3+tjddttt9ns2bPtvvvusy1btlgQBJHW3C8O4gJeCQAAAMCrSC8rBwAAAOQVE2YAAAAgBBNmAAAAIAQTZgAAACAEE2YAAAAgBBNmAAAAIAQTZgAAACBE5MYlhanveFpamqxffPHFTm3Lli1ObcWKFZH3tXLlSqdWqpR+WUuXLu3UkpOT5diOHTs6te+//96pTZs27UiHWODl51Lghem8RuHCeX3s1apVy6mtWrVKjj1w4MAx3/+ll14q6x9//PEx31de38Pjdf5xXuev/27LfkjNmjWd2r59++T2TZs2dWp///vf5dj58+c7NfUeFIV2HlGeA98wAwAAACGYMAMAAAAhmDADAAAAIeKCiD8+ye/fDjVp0kTWu3fv7tR8vyFWvxdWtZIlS8rtN2/e7NT27Nnj1Hbu3Cm3L1++vFPzHauyfft2pxYfHy/Hzps3z6m9//77kfd1IvGbOBRFRfG8zuvvF5s3b+7Udu3aJcdmZGQ4tWHDhjk1X2blqaeecmobNmxwanXr1pXbX3nllU6tRAn9HdMnn3zi1N577z2nNmDAALn9JZdcIuuK+nxS78HB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UAS9+eabgZkFU6ZMyVV/4YUXAjMLXn/99aBjx45Bx44dnW379u0b1K5dO1fNzIKBAwfm/HnMmDGBmQVjxozJqb377ruBmQVdu3YNhg8fHgwbNixo1apVULp06eDHH38MgiAI9u3bF1SpUiW48sornf2edtppQcuWLXP+/N133wWlS5cOzjzzzGDYsGHB119/HfTr1y8ws+DNN990nmv16tWDG2+8Mfjqq6+Cjz76KNi/f3/0Fwz5aufOnUH58uWDNm3aBEEQBP/4xz8CMwuGDh2aa9ySJUsCMwsyMzOD8847Lxg+fHgwfPjwoGnTpkHFihWD7OzsnLF9+/YNkpKScv48bNiwICEhIbjppptynRuHXwcHDhwIzjvvvCApKSl4+OGHg1GjRgX/+Mc/gurVqweNGzcOdu7cGfpc+vbtG5QuXTqoVatW8PjjjwcjR44MHnrooaBUqVJBjx49csYdPHgw6NatW1CqVKnggQceCEaOHBk8/fTTQVJSUtCiRYtg9+7dOWNvvPHGwMyCW265Jfj666+DV199NUhLSwtq1qwZbNiwIQiCIJg9e3bQoUOHID09PZgwYULOf8g/nNec14jd9ddfH5hZcOuttwYTJ04M9u7dK8fVrl07qFGjRtC4cePg7bffDr755pvgsssuC8ws+P7773PGqflK3759g/j4+CAzMzN44okngtGjRwfffPMN59sRFOkJ88SJE4N9+/YF27ZtC0aMGBGkpaUFKSkpwdq1a4/phPnAgQNBRkZG0LRp0+DAgQM547Zt2xZUqVIlaN++fU7tL3/5S1C2bNlcHwK//vprYGbBSy+9lFNr2LBh0KJFi2Dfvn25jqVHjx5BtWrVcvZz6Llec801sb5MKCDefvvtwMyCV199NQiC386b5OTk4Mwzz8w17tDEomnTprkmB5MnTw7MLHj//fdzav89sRg0aFBQsmTJ4Mknn3T2ffh18P777wdmFnz88ce5xk2ZMiUws+Dll18OfS59+/YNzCx44YUXctUff/zxwMyCn376KQiCIPj6668DMwsGDx6ca9ywYcNy/k9tEATBnDlzAjMLbr755lzjJk2aFJhZcN999+XUunfv7ly7yD+c1//BeY2oNm7cGJxxxhmBmQVmFsTHxwft27cPnnjiiWDbtm0542rXrh2UKVMmWLZsWU5t165dQWpqajBgwICcmm/CbGbBG2+84eyf882vSP8ko23bthYfH28pKSnWo0cPS09Pt6+++sqqVq16TPczb948W716tV199dW5/skkOTnZLr30Ups4cWLOP9tde+21tmvXrlw/3n/zzTctISHB+vTpY2ZmCxcutLlz59qVV15pZmb79+/P+e+CCy6wNWvW2Lx583Idw6WXXnpMnxNOnCFDhljZsmWtd+/eZvbbeXPZZZfZjz/+aAsWLHDGd+/e3UqWLJnz52bNmpnZbz81+m9BENiAAQNs4MCB9t5779ldd911xGMZMWKEVahQwS688MJc513z5s0tPT09ctL60Ll7yKFze8yYMWZm9t1335nZb/80+N8uu+wyS0pKyvnZ0qHxh4877bTTrFGjRvLnTSgYOK//g/MaUVWqVMl+/PFHmzJlig0aNMguvvhimz9/vt17773WtGlT27hxY87Y5s2bW61atXL+XKZMGatfv75zzfgwb4hNkZ4wv/322zZlyhT7+eefbfXq1TZz5kzr0KHDMd9PVlaWmZlVq1bN+buMjAw7ePCgbd682czMTjnlFGvTpo29+eabZmZ24MABe+edd+ziiy+21NRUMzNbt26dmZndeeedFh8fn+u/m2++2cws10Xj2zcKvoULF9oPP/xg3bt3tyAILDs727Kzs61Xr15mZs7v0cx+u6H+t4SEBDP7Lez53/bu3WvDhg2zU045xc4///xIx7Nu3TrLzs620qVLO+fe2rVrnfNOKVWqlHOM6enpZvafayUrK8tKlSplaWlpucbFxcVZenp6rnFm/mvr0N+jYOG85rxG3rRu3druvvtu+9e//mWrV6+222+/3ZYuXWqDBw/OGXP4+Wj223Vz+DWjJCYmHjEIiNzcX5UXIY0aNbLWrVvLvytTpoxt2bLFqUe5cR7u0Em7Zs0a5+9Wr15tJUqUsIoVK+bU+vfvbzfffLPNmTPHFi9ebGvWrLH+/fvn/H3lypXNzOzee++13/3ud3KfDRo0yPVnfphfOL3xxhsWBIF99NFH9tFHHzl//9Zbb9ljjz2W65u3qBISEmzMmDHWrVs369Kli3399de5zkOlcuXKVqlSJfv666/l36ekpBxxv/v377esrKxcN/O1a9ea2X+ulUqVKtn+/fttw4YNuSYXQRDY2rVrrU2bNrnGr1mzxmrUqJFrP6tXr865VlCwcF5zXuPYiY+Pt4EDB9pzzz1ns2bNOiaPyZwhdkX6G+YwmZmZNn/+/FyrSWRlZdn48eNjfqwGDRpY9erV7b333su1nNuOHTvs448/zlk545ArrrjCypQpY0OHDrWhQ4da9erVrWvXrrker169ejZjxgxr3bq1/C/KDR4F24EDB+ytt96yunXr2pgxY5z/7rjjDluzZo199dVXR72PFi1a2Pfff28rV660Tp062fr160PH9+jRw7KysuzAgQPyvDv8/6j5vPvuu7n+/N5775mZ5axM07lzZzMze+edd3KN+/jjj23Hjh05f3/OOefIcVOmTLE5c+bkjDOL/s0Kji/Oa85rHD31xZuZ2Zw5c8zst3+BOJ443/yK9DfMYa6++mp77bXX7KqrrrIbbrjBsrKybPDgwUf1TxQlSpSwwYMH25VXXmk9evSwAQMG2J49e+ypp56y7OxsGzRoUK7xFSpUsJ49e9rQoUMtOzvb7rzzTme5mNdee83OP/9869atm/Xr18+qV69umzZtsjlz5ti0adPsX//6V56eP/LfV199ZatXr7Ynn3xSLnHYpEkT+9vf/mZDhgyJ1NHJp1GjRvbjjz9aly5d7KyzzrJvv/3W+VbrkN69e9u7775rF1xwgd1222122mmnWXx8vK1cudLGjBljF198sfXs2TN0f6VLl7ZnnnnGtm/fbm3atLHx48fbY489Zueff76dccYZZmZ27rnnWrdu3ezuu++2rVu3WocOHWzmzJk2cOBAa9GihV199dVm9tv/ebzxxhvtpZdeshIlStj5559vS5cutQceeMBq1qxpt99+e85+mzZtap988om98sor1qpVKytRooT3X5hw/HBec17j6HXr1s1q1KhhF154oTVs2NAOHjxo06dPt2eeecaSk5PttttuO67753wLkW9xw+PIt6zc4d56662gUaNGQZkyZYLGjRsHw4YNO+pl5YIgCIYPHx6cfvrpQZkyZYKkpKSgc+fOwbhx4+S+R44cmZOCnT9/vhwzY8aM4PLLLw+qVKkSxMfHB+np6cE555yTkzqP5bmi4LnkkkuC0qVLB+vXr/eO6d27d1CqVKlg7dq1OasJPPXUU864w8/Rw5ffCoIgWLlyZdCwYcMgMzMzWLRoURAE7moCQfDb8odPP/10cOqppwZlypQJkpOTg4YNGwYDBgwIFixYEPqcDu135syZQadOnYKyZcsGqampwU033RRs374919hdu3YFd999d1C7du0gPj4+qFatWnDTTTcFmzdvzjXuwIEDwZNPPhnUr18/iI+PDypXrhxcddVVwYoVK3KN27RpU9CrV6+gQoUKQVxcXFBEb28FHuc15zWO3rBhw4I+ffoE9erVC5KTk4P4+PigVq1awdVXXx38+uuvOeNq164ddO/e3dn+8HPft0rG4dfRIZxvfnFBQEs4AAAAwKfY/oYZAAAAiIIJMwAAABCCCTMAAAAQggkzAAAAEIIJMwAAABCCCTMAAAAQggkzAAAAECJypz/6juN4yc+lwIvCeV2yZEmnduDAgTw9ZqlS7q2hfv36cmzNmjWdmq/jmmpBXK1aNaeWlJQkt1djN27cKMd+//33Tu3ll192ajt37pTb5xXnNYoizutjT90Xr7jiCjn2119/dWrt27d3avPmzZPbL1++3Km1adNGjv3222+d2k8//STHFnZRzmu+YQYAAABCMGEGAAAAQjBhBgAAAEIwYQYAAABCxAURf8FfUH9sH8txRQ0rqBCVmdm//vUvp6Z+QB8fHy+337Vrl1Pr0qWLHHv55Zc7tfnz58uxSokS7v8X8j3//Axx5Pf+C+p5raj31Mzs4MGDTq1MmTJO7Z577pHbn3rqqU6tefPmTi01NVVuX65cOVnPizVr1si6uja3bNkix6r6ypUrnVrPnj3l9urciOVc5bxGUcR57WrdurVTq127thzbtm1bp6bu177XefHixU4tOTnZqf3yyy9y+8TERFlXqlev7tTKly/v1H744Qe5/ZQpU5xadnZ25P2fSIT+AAAAgDxiwgwAAACEYMIMAAAAhGDCDAAAAIRgwgwAAACEKDSrZMSyQkAsVPJftc81MytdurRTU69LSkqK3H7//v1Obffu3XLstm3bnNrDDz/s1BYuXCi3L0xIXUeTkJAg63v27HFqvXv3dmr//Oc/5fbqHFLnpW81CnVdVKxYUY5V14BaZcN3DanrYu3atXJsenq6U8vKynJqLVu2lNvnFec1jgfVtl5dV8dLYTmv87rKzZVXXunU1D3FzCwpKcmp+e5LixYtcmpqlYwDBw5E3pe6B/vOCfW6qP2b6ZW51OOq1t5m+j7u+xzZtGmTU/vmm2/k2OOBVTIAAACAPGLCDAAAAIRgwgwAAACEYMIMAAAAhHDTAwVULOE+1abSzOyyyy5zahkZGU5N/ajeTP8If+PGjU5NhTLMzDZv3hx5rAojPvnkk07N1y773XffdWqzZs2SY1E47Nu3L/JYFeLYvn27HKuCdOq8nDFjhtxeBU58bbQrVaoUaf++AIa6D6jW3mb6NVDPy9fae+vWrbKOwkuFx33nWl7Dbeeff75T8wVMzzvvPKem2hKb6c+ce++916nNmTNHbr969WpZL2pief+uvvpqp9a1a1en9tFHH8ntly5d6tTKli0bef8qCOeb86jW0moe4wv9qfuab1EF9Rqq57VgwQK5vXoOqo23mVmnTp2cmgppT506VW5/IvANMwAAABCCCTMAAAAQggkzAAAAEIIJMwAAABCCCTMAAAAQotC0xvZR7aLr168vx+7du9ep7dixw6n5nqtaDUC1c6xXr57cfsWKFU7Nl6RVbZBVwt/XLrlkyZJO7ddff5VjVcL6RCosrVbzWyzt4V944QWn1qtXL7n97NmznVqNGjWc2i+//CK3r1y5slPzrf5SrVo1p7Zq1SqnlpiYKLevWrWqU/O10Var3ajr4oEHHpDbDxo0SNaj4rwueNQ1FMsKTD179pT1F1980ampa8i3moA6L33Hpc7r+Ph4p6auSzP9OXD66afLsWplncJ8XqtVeszMLrjgAqdWpUoVpzZv3jy5vZpHqBUezPxtqA+X13bnvtbau3fvjnxM6r1W9+Zdu3bJ7dXKTmoeZaY/M9RxLV68WG6f19VfaI0NAAAA5BETZgAAACAEE2YAAAAgBBNmAAAAIEShCf1dddVVsq5CGOvWrTsux6B+rK5Cd76Wur4glKIeV4UAVFjETIdbVODKzGz69OlO7a677jrCER47hTlEciL5jlW9fh988IFT87WMVyGKRo0aObVYQn++9qfqWFWrX18IpXHjxk5NtdY2M6tYsWLkx1Xyem5wXhc8KmTtCyzdeOONTk2FzM3MNm/e7NTUPdgXeFKhPdUC2Uy3clfnmgqimengW/ny5eVY9XoV5vO6ffv2sl63bl2npt4/37myfPlyp+b7vFfvtQrH+UJ/qq6OVS1y4OO7L6p9qeelwqG+sb59qTDrsmXLnJoKY5qZjR8/XtajIvQHAAAA5BETZgAAACAEE2YAAAAgBBNmAAAAIET0FFo+83Ui8gV+olIhAt+Pv1XnpT179jg1X/c+9cN+XzBA7UvVfNur5+DrPNSyZUtZR8ESS9hGdXnyBVZ85+vhfGEL1flJBVvMzHbu3OnUVBDK1+lPbV+hQgU59r777nNqzz33nFObOHGi3L5fv35ObejQoXIsCh51b1TXQNu2beX2999/v1PzBfHUNaQ6UKrz10yHt31dXNW1pQJe1atXl9svXbrUqanPMTOzW265RdYLq5o1a8q6CqKpLr4qcGmmg8+qo56v7rtfRqXCeXkN8vnGKr7t1TH4PkdUpz41Z4olzHis8Q0zAAAAEIIJMwAAABCCCTMAAAAQggkzAAAAEIIJMwAAABCi0KyS4UunqsSpL7EZtdWlL7EadZWCWJLUvlafqq5qKkVqpp+rL/Ga14Qujr1YVm9RatWq5dR8qXtf/XCxtLv2JcTVOajOP7UijJlOSPtW+ViwYIGsH+6CCy6Q9S+++MKpsUpG0aPaWpvplSN814r6zFErYvgS/qotsO+8jmVlJkWtyJGWlhZ5X4VZtWrVZH3Lli1OTbUQ973/qg25b1Ui9V77zkFFnUNqHuD7XI9llQk1Vp3rvtbqarUmVTPTq8qo/atxZvoc3rBhgxx7tPiGGQAAAAjBhBkAAAAIwYQZAAAACMGEGQAAAAhRaEJ/vjaP6sfuvh+Fb9y40anFEqRSQToVzvL9qF2N9YWb1HGp/fvCVeoH8L7nqoJYFStWdGqxBBOQN+q98gVE1VgVWLvyyivl9iowpK4VX5hWhUvUuWqmjzWWsEbUVq1mZt26dXNqI0aMcGqqBa6Z2dtvvx15Xyh4fPfhw82bN0/WVTgulnbD6lz3HZO6t8Zyrqvj8oW7VHDNd1x///vfndrrr78e+bjyU9WqVZ2a7x6mXiv1Ovlaa6t5SFZWlhyr6uq99r3/6jlEDW6bxTaPUGNVTbVbNzOrU6eOU1OhRzP9uqjnum3bNrl948aNndr3338vxx4tvmEGAAAAQjBhBgAAAEIwYQYAAABCMGEGAAAAQjBhBgAAAEIUmlUyfG0e1coB6enpcuz69esjbe9buUKlplW62NfGW+0rltUE1P59SWi1ysXWrVvlWJVErV27tlNjlYzCY9CgQZFqZnqVgAoVKjg138oVqgWwjzqH1fk3ZswYuX2XLl2cmu+87Nevn1O79dZbj3CE//HKK69EHouCJ5YVkBS1UoxqOW+mWyv77u2K+szxrSYQ1fbt22VdraigPhsLu3bt2jm1jh07yrHvvfeeUzvppJOcWvfu3eX2Tz/9tFPzrRyh3tdY2lVHPa9849SKKr423moFIXVdlC5dWm6vVvo4++yz5dj/+7//c2pff/21U2vVqpXcXn1msUoGAAAAcAIxYQYAAABCMGEGAAAAQjBhBgAAAEIUyNBfcnKyU1NhITMd7PCF7tTj+oJwijoGFdbwtTCOJQSiqOfqCyhWqVLFqe3YsUOOVcertkf+ymuIyUe1xi5fvnykmpk+f1QwxEyfr5MnT3ZqKrRqpoMdvtBfZmamU+vRo4dTU+2yzaKHfFE0LVy40Km1aNFCjl2zZo1TS0xMdGq+dseq7gvTqmuocuXKTk0FEc3MKlWq5NR+/fVXObYwGz58uFPzBfH69u3r1P785z87tSlTpsjt1WdrWlqaHBu13bMv9On7HD+cb26g5ke+1tjqHPY9rqLO4bp168qx11xzjVO77777nNqkSZPk9l988UXk4zpafMMMAAAAhGDCDAAAAIRgwgwAAACEYMIMAAAAhCiQoT8VQoqlI56P+rG9Clv4utaobjyqA6HvmFRgyBciUs9X1XxhSBUCWb58uRy7b98+p6Z+7I+CSYXu1HnhCxypLl8qIKuuH9/Y7OxsOVZ1C1Tn6sknnyy3V9eA6lxmpoMsb7/9tlNLTU2V2xPwK96mTZvm1C677DI5Vp0rUcNZZrr7mu96y8rKcmrqM2vPnj1yexVGU90+i6Lp06dHrqvPy0WLFsnt+/Tp49TeeustOdZ3vzqc736t5hwqXOdb/EB9NvjmPIq6B6vz10wHr1WQz8zs97//vVN74YUXIh/XicA3zAAAAEAIJswAAABACCbMAAAAQAgmzAAAAEAIJswAAABAiAK5SoZqCelbJUMlTn0J/RUrVji1qlWrOjVfulmlS9WKGL50a9TtfdRr4GtpqVY+8LXaVNTKByiYYjkHldWrVzu1OnXqOLVNmzbJ7VVb3dmzZ8uxqr22asOu2vea6TS273pVyXH1uF26dJHbf/vtt7KOwkvdQ32tftVqFL6VU9R5rVav8VHnpe/erlZ1Uff7Xbt2Rd7/nDlzIo8tLGJ5r5Xnnnsu8thevXo5tfr168uxan6i3ivfsao22mrlDN/5o7avVq2aHKseV23v+7ypXr26U/vwww/l2KlTp8r64WK5rmKZX0XBN8wAAABACCbMAAAAQAgmzAAAAEAIJswAAABAiEIT+vP9qFyF/nw/9FbtP+vVq+fUtm7dKrdXgSMVAlE/lDfTIYRYWmOr9pXr1q2T28+aNcupNWjQQI5VYS5fyBJFT9SW7b5zVZ2XTZo0kWNHjhzp1MaNG+fU/t//+39yexWEUa3dzfT1qgIjqiWrGaG/oiiW0Jf6HPK1EN67d69TU+ear921Guv7zIvlcaPyfY4UZsc68BXGt9BA1LHq/PG1NlfnRdmyZZ2aL/Sntt+4caMcq8KIal+JiYlye9/j5oVaPMHM//l0LDErAgAAAEIwYQYAAABCMGEGAAAAQjBhBgAAAEIUyNCf6jLn+0G3CvZs2bJFjl21apVTU6FB376ihgh826vASSw/VFdhD18IRf3Y/vTTT5djVac33w/rUfBE7Wjle09VQE8FTnyBKdXlTHXZMzNLS0tzao0aNXJqqpuZme5o5nteKgilAje+wAqKt44dOzo1X7hLXS8VKlRwaikpKXJ7FVz1hf5iCeRGtXnz5jxtX9yp18/32azujeoeVrlyZbm9r+Pq4Xz3a3UO+kKjan6lwoS+RQJ8wcWo1JzH97xORMiTb5gBAACAEEyYAQAAgBBMmAEAAIAQTJgBAACAEEyYAQAAgBAFcpUMlcxUrSPNzKpWrerUFi1aJMeqdKdaJcOXGFUpTJVkjqX9aSzJTjXWt/22bducmmppaaZfW7XyAQqmqO1+n3zySVmvUqWKU1Otcn0t49V57WtXfcoppzi1U0891amp89f3uL5VLlauXOnUVGo7r22FUbipFthmZp06dXJqaqUlM7Ny5co5NfU55ls5QV1bvhUG1IoK6hqMZfUXtfpMYXciW2OrlSt8n6FqzqHmJr57qHr/1T1MnZNm+lxT56qZf6WWw/nmFr4Vy/Iilvb2xxrfMAMAAAAhmDADAAAAIZgwAwAAACGYMAMAAAAhCk3axReAUMEG1RbazCw+Pt6pxRIMUD+s9/0wX1HBDHVMZvqH/Sos4At2qBCCr4Xwrl27nJpqT47CrUePHrKughmq1anvXJs+fbpTy8rKkmMbNmzo1FS7YV9gRfEFgtX10qBBA6c2ePDgyPvCiRM1JK3G+cYqjzzyiKzHcr9XbbBVC2RfC+tYwuO+tvOHU0Eyn/bt28v6tGnTIj9GcaY+b33vX9T3xfd5HbUNum8/6lzzjVVhQHUN+K413/ymsOIbZgAAACAEE2YAAAAgBBNmAAAAIAQTZgAAACAEE2YAAAAgRIFcJUO1WfQloVUK07dKRkpKilNTiWNf60WVLlU13/YqNetLwioqneprtbp27VqnVq1aNTlWPYdY2qrixIhlNYBLLrnEqVWvXl1ur1pIq+tKXT9mZl9//bVTmz9/vhx7ww03OLW2bds6Nd9qBGr1Dl9qPC0tzaktWbLEqX344Ydy++IsrytPHC/q/Y+lVe6tt97q1P7yl7/IsT///LNTq1SpkhyrXhdV861woeq+lt3qfI9l9ZDVq1c7tc6dO8uxf/vb32QdR6bOVTP9XqnPcd+1pla0UKtZ+FbpUNeLb6wSdR5UFPENMwAAABCCCTMAAAAQggkzAAAAEIIJMwAAABCiQIb+0tPTnVosIaCFCxfKsSq0pH4Ar1rq+o5B/Vg/lhCK73mpx1UtgH3hPBW68h2Xeg1ViAD5K5bA1aeffurUZs6cKceq979GjRqRHtNMh/5atmwpx6rHVcFXX7trxRduUuGY5cuXR37cosb3OsUSPI4aOPNR55rvuPK6r+7duzu12267zaldfPHFcvshQ4Y4tc2bN8uxKrSnzmFf6E8FVH3vi3oNVWtuXyB827ZtTk21rEd0W7dudWpVq1aVYzMyMiKNzc7OlturgJ6aB0RtoW1m1qRJE1lXz0sFwn0B1byGhPM7ZHw4vmEGAAAAQjBhBgAAAEIwYQYAAABCMGEGAAAAQhSa0J/vx9+nnHKKU/vxxx/l2MsuuyzS/mMJW6gf4Pu63sTSpUr9sF5tn5qaKrdX3Q59x6XCIarbIo49XzeoWIKjmzZtcmqqS9n7778vtx80aJBTmzx5slPbtWuX3L5///5OrWPHjnKsCpeox/V1nlKvVyzX2zfffCPHRt0+lveloPHdQ09kl67j8fpdccUVsn7PPfc4tVNPPdWp3XnnnXL75ORkp7Zo0SI5Vn1mqdCfGmemg4++QLgKr6vanj175PbqPahYsaIci9x8AdWrrrrKqY0aNUqOVfc29bg7duyQ26tFCWrVquXUsrKy5Pbbt293ar4wqwoTqvPSFzBU4e+vvvpKji0M91a+YQYAAABCMGEGAAAAQjBhBgAAAEIwYQYAAABCMGEGAAAAQhTIVTLUCg2+hLdqf+tLh5YrVy7S/mNpIR3LOLX6hm+sLyF9OF+6ecuWLU5NtUQ1022wfQlr5OZLTasktDqvYmlf+vzzz8u6OgfU6iljxoyR26tz8MUXX3RqKl1tZnbttdc6NV9rdfUaqOvS18Jarejiew9UG+KRI0fKscVZ5cqVnZrv/qPuK8dL27Ztndq9997r1OrUqSO3f+6555za448/7tRUu2wzsw0bNji1evXqybFqpRHVLth3Xahry7dSkVq5QH0++valrgtfG+3iQt1D1GvqW/1HWbJkiayff/75Tm3FihVObf369XL76tWrOzV1/L5rVd1vfe+/mgeoOZdalcvMrEaNGk5NrZxhZjZ16lRZL0j4hhkAAAAIwYQZAAAACMGEGQAAAAjBhBkAAAAIUSBDfyosoVpFm5mtWrUq8uNWqVLFqamwhi+IFUtAS1GBJ1/AUAUOVBBHBUDMdMBv5cqVcqwKDPheb+TmC6NGDW2qwJWZbvc7YMAAOVa1Gn3ggQecWtOmTeX2W7dudWo33nijU1u7dq3cPjs726n5ArZpaWlOTbVlVcEkM31v8LXsVtfAzJkz5VilMLRqjYVqYW5m1qdPH6e2ePFiOVa1i1b3xZo1a8rtVQvn2rVry7HqHFKhTdUG3szsoYceinRcvvuioo7fV1dhWl/wWo313UPWrFnj1HzXS1S+gGBx4buPH+7kk0+WdfWe+N6/SpUqOTU1j/EtCJCZmenUVBt2da2a6dCej7o2VRjWdw9WwUNfcJbQHwAAAFDIMWEGAAAAQjBhBgAAAEIwYQYAAABCMGEGAAAAQhTIVTLUCg2+FO/8+fMjP65qF6zSnaqFtZleTUKlU33pevW8fC0p1b7U4/q2V2Pnzp0rx1aoUMGpqZUTEN2FF17o1MqXL+/UfKlr1YJ12rRpcmzjxo2dWpcuXZzaunXr5PZz5sxxair17VslpmfPnk7Nd73u2LHDqam2wE2aNJHbq1atavUbM7MPP/xQ1ourP/3pT7KuVo5Q90ozvaLJpk2bnJrvXFXvq+99Ui3fVbvsNm3ayO3VyhFqNQLfyhdqRRZfe/iFCxc6NdXa2Lcag9qXOtfN9CoHauUF38oFamxRWxHmeMnIyJB19V6rFbjM9MpIp556qlObMGGC3L5atWpOTa2+4rvfqzmDOv/MzE4//XSnpuZcvtWH0tPTnZr6vDIzK1XKnY76XsP8wjfMAAAAQAgmzAAAAEAIJswAAABACCbMAAAAQIgCGfpTgSFfEG/GjBmRH1e1BlaBFV9YQrWqjNpS00wH+VQtFp06dZJ11TJbhbvMdJCG1tjRzJ49W9azsrKcmgox+YJ0KthRtmxZOdYXWjpc9erVZX3jxo1OrVGjRk7N18JYXZu+cJQ6r+rUqePUVDDJzOycc85xas2aNZNjVWtkRYVNzApe4CSvJk6cKOuqBbV6/810kE691w0bNpTbq9e6a9eucqwKJ6nj8rWFVvdA9dniuwer+6WvtbU6h9V1qa41s+jHaqYDmao9/YoVK+T2KuD32GOPybGFmXpfY/m8Vu+J7x48ffp0p+Z7/9T9sm7duk5NLShgZpaQkODUYlm8QL3/vuel2mur6903X1DXsDpXzfTny6JFi+RYJa/vdxR8wwwAAACEYMIMAAAAhGDCDAAAAIRgwgwAAACEKJChP/VDbV8nIl9HKeWrr75yaupH6fv27ZPbq9CU+mG971hj+QG66rSmQgjvvPOO3F4FYRYvXizHnnnmmU6Nzk+u5s2bO7XMzEw5Vr3WavstW7bI7VXnJF/gyBfuOVzLli1lvUGDBk5NdRPznb/qXPGFGVVXyc8++8ypqTCumdlHH30UqRaLohbu87nppptkXd1XfIHJP/zhD05NhQbVY5rp7nW+gKG6N6v3yhfaVOerChypMLeZDon7qHNYXQO+5zpv3jyn5usqpwKVKvQ1adIkub0KJL/22mtybGGm3v9YAr6qS51vQQDVbVTdQ83061+rVq3I+1KdOVXN19lXXVe+jsFpaWlOTV3Dqnuhjy8QroLuKvTnC+ke64CfwjfMAAAAQAgmzAAAAEAIJswAAABACCbMAAAAQAgmzAAAAECIArlKhloNQKU1zcyWLFkS+XEffPDBoz6mosDXZlIlhH0J3+Ls/vvvd2q+1UTUihhqrC/ZqxLOCxYskGPVSi01atRwar7VX1TqWbVK9a18oZ6Xr7X1unXrnNr1118vxyoqzR3LqjS+51DU+JLkilpR56677pJjVb13795O7c4775Tbt2rVKvJxqfcvlucVlW9FlmeeecapDR48WI5dv369UxswYIBT+93vfie3r1q1qlNTLbDNzIYPH+7U1IoaTZo0kdu/9NJLsl4cxLIiTrNmzZyab6UitfKDr7W1Ot/UKilJSUly+xkzZjg1da34WmOrlUJ8+1q6dKlTUyt4qXbdZvr18n3mqVXIlBOxGoYP3zADAAAAIZgwAwAAACGYMAMAAAAhmDADAAAAIQpk6E8Fc1RLXTOzlStXRn5c1QK1sLeAjqVNpC80psIlsbyuxcW4ceOcWrdu3eRYFaJQ75VqaWpmdsstt0Q+LvVeb9261an5Wq2qIJ06J9RjmukgzebNm+XYzp07O7WNGzfKsYovSIPcYgnGqPMylu0/+OCDSDWfTp06yboKCPqCcIpqGT927Fin5mshnFeq3fTEiRPl2P+vvbvFWSQIwgBc6xAYPAkIFFwADFdBcQA0nntwJxI0KC6A3vXb1bVDyLd/PI+szMBAGubNJNWVNUdlzZgREePxuKllTWePx+NXl/hfe3ddZ+svG0sekf8vXa/X9NhsDPZsNmtq2bjtiIjVatXUsnzUa3DMju013GX3hu12O/i9RqNRU+v9hnv3jL+JJ8wAAFAQmAEAoCAwAwBAQWAGAICCwAwAAIVv3we2jX7FSNKew+HQ1JbLZXrsfr8f/LqfvktGz/l8bmrZLhnH43H4hb3gT466fHddZ93NERHr9bqpLRaLQbWIiMlk0tR640t7I69/1tth4vl8NrWsw7s3Wj3bPeR+vw+6ple92/n+O/3L6xp6Pnldz+fztJ7tXHK5XNJjp9NpU9vtdk3tdDql52fffzbG+3a7pedvNptB1xSRf4ZsNHZvvHy2I0Z2v4l4bbekrzBkXXvCDAAABYEZAAAKAjMAABQEZgAAKAxu+gMAgE/kCTMAABQEZgAAKAjMAABQEJgBAKAgMAMAQEFgBgCAgsAMAAAFgRkAAAoCMwAAFH4AvuvYhHfAwG0AAAAASUVORK5CYII=",474      "text/plain": [475       "<Figure size 900x900 with 16 Axes>"476      ]477     },478     "metadata": {},479     "output_type": "display_data"480    }481   ],482   "source": [483    "# Plot more images\n",484    "torch.manual_seed(42)\n",485    "fig = plt.figure(figsize=(9, 9))\n",486    "rows, cols = 4, 4\n",487    "for i in range(1, rows * cols + 1):\n",488    "    random_idx = torch.randint(0, len(train_data), size=[1]).item() #size=[1]只包含一個元素的tensor\n",489    "    img, label = train_data[random_idx]\n",490    "    fig.add_subplot(rows, cols, i)\n",491    "    plt.imshow(img.squeeze(), cmap=\"gray\")\n",492    "    plt.title(class_names[label])\n",493    "    plt.axis(False);"494   ]495  },496  {497   "cell_type": "code",498   "execution_count": 14,499   "id": "84d23202-35c3-4a43-af3d-4190cd0d329b",500   "metadata": {},501   "outputs": [502    {503     "name": "stdout",504     "output_type": "stream",505     "text": [506      "Dataloaders: (<torch.utils.data.dataloader.DataLoader object at 0x000001EBB7F854C0>, <torch.utils.data.dataloader.DataLoader object at 0x000001EBB80DC470>)\n",507      "Length of train dataloader: 1875 batches of 32\n",508      "Length of test dataloader: 313 batches of 32\n"509     ]510    }511   ],512   "source": [513    "from torch.utils.data import DataLoader\n",514    "\n",515    "# Setup the batch size hyperparameter\n",516    "BATCH_SIZE = 32\n",517    "\n",518    "# Turn datasets into iterables (batches)\n",519    "train_dataloader = DataLoader(train_data, # dataset to turn into iterable\n",520    "    batch_size=BATCH_SIZE, # how many samples per batch? \n",521    "    shuffle=True # shuffle data every epoch?\n",522    ")\n",523    "\n",524    "test_dataloader = DataLoader(test_data,\n",525    "    batch_size=BATCH_SIZE,\n",526    "    shuffle=False # don't necessarily have to shuffle the testing data\n",527    ")\n",528    "\n",529    "# Let's check out what we've created\n",530    "print(f\"Dataloaders: {train_dataloader, test_dataloader}\") \n",531    "print(f\"Length of train dataloader: {len(train_dataloader)} batches of {BATCH_SIZE}\")\n",532    "print(f\"Length of test dataloader: {len(test_dataloader)} batches of {BATCH_SIZE}\")"533   ]534  },535  {536   "cell_type": "code",537   "execution_count": 15,538   "id": "9e07853f-8541-4ecd-867f-d7122d961274",539   "metadata": {540    "scrolled": true541   },542   "outputs": [543    {544     "name": "stdout",545     "output_type": "stream",546     "text": [547      "torch.Size([32, 1, 28, 28]) torch.Size([32])\n",548      "32\n",549      "tensor([[[0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",550      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",551      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",552      "          0.0000, 0.0000, 0.0000, 0.0000],\n",553      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",554      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",555      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",556      "          0.0000, 0.0000, 0.0000, 0.0000],\n",557      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",558      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",559      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",560      "          0.0000, 0.0000, 0.0000, 0.0000],\n",561      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",562      "          0.0000, 0.0039, 0.0039, 0.0000, 0.0000, 0.0078, 0.0078, 0.0000,\n",563      "          0.0000, 0.0039, 0.0078, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",564      "          0.2863, 0.0000, 0.0000, 0.0078],\n",565      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",566      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",567      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",568      "          0.3725, 0.0000, 0.0000, 0.0000],\n",569      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",570      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.3373, 0.3569, 0.2039,\n",571      "          0.4980, 0.4196, 0.4706, 0.3608, 0.3961, 0.4706, 0.4471, 1.0000,\n",572      "          0.4314, 0.3451, 0.0078, 0.0000],\n",573      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",574      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0706, 0.0824, 0.0706,\n",575      "          0.4588, 0.4118, 0.4980, 0.2588, 0.2235, 0.2588, 0.0824, 0.0510,\n",576      "          0.1922, 0.5137, 0.5765, 0.0000],\n",577      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",578      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",579      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.1333,\n",580      "          0.8000, 0.5608, 0.5255, 0.2431],\n",581      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",582      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0039, 0.0039, 0.0000,\n",583      "          0.0000, 0.0000, 0.0000, 0.0078, 0.0000, 0.0000, 0.0000, 0.9137,\n",584      "          0.9686, 0.5137, 0.4353, 0.6471],\n",585      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",586      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",587      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0588, 0.3843,\n",588      "          0.6980, 0.0588, 0.2824, 0.1686],\n",589      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",590      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",591      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.1333, 0.2078, 0.2157,\n",592      "          0.6745, 0.2941, 0.1059, 0.0000],\n",593      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",594      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",595      "          0.0000, 0.0000, 0.0039, 0.0000, 0.0078, 0.3333, 0.2980, 0.2941,\n",596      "          0.2039, 0.0314, 0.0000, 0.0000],\n",597      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",598      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",599      "          0.0000, 0.0039, 0.0039, 0.0000, 0.2196, 0.5020, 0.0157, 0.0706,\n",600      "          0.3451, 0.3216, 0.0588, 0.0000],\n",601      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",602      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",603      "          0.0000, 0.0000, 0.0000, 0.0157, 0.4863, 0.3843, 0.1804, 0.6235,\n",604      "          0.7882, 0.6000, 0.1569, 0.0000],\n",605      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",606      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",607      "          0.0000, 0.0000, 0.0000, 0.2863, 0.4431, 0.4196, 0.5882, 0.5020,\n",608      "          0.1020, 0.2235, 0.0549, 0.0000],\n",609      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",610      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",611      "          0.0000, 0.0000, 0.0039, 0.4078, 0.4314, 0.7137, 0.1843, 0.2196,\n",612      "          0.4118, 0.3216, 0.0196, 0.0000],\n",613      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0039, 0.0000, 0.0000, 0.0000,\n",614      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",615      "          0.0000, 0.0000, 0.2549, 0.5647, 0.6275, 0.0824, 0.0000, 0.0000,\n",616      "          0.5098, 0.3333, 0.0000, 0.0000],\n",617      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0039, 0.0039,\n",618      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",619      "          0.0000, 0.3333, 0.5647, 0.5529, 0.0000, 0.0000, 0.0000, 0.0000,\n",620      "          0.6510, 0.3059, 0.0000, 0.0000],\n",621      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",622      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",623      "          0.1922, 0.7216, 0.4510, 0.0000, 0.0000, 0.0157, 0.0000, 0.0000,\n",624      "          0.6275, 0.2667, 0.0000, 0.0000],\n",625      "         [0.0000, 0.0000, 0.0000, 0.0039, 0.0000, 0.0000, 0.0784, 0.0784,\n",626      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0706,\n",627      "          0.6392, 0.3804, 0.0000, 0.0000, 0.0000, 0.0314, 0.0000, 0.0000,\n",628      "          0.6667, 0.1529, 0.0000, 0.0000],\n",629      "         [0.0000, 0.0000, 0.0039, 0.0000, 0.0314, 0.2471, 0.2980, 0.1686,\n",630      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.5255,\n",631      "          0.5333, 0.0000, 0.0000, 0.0000, 0.0000, 0.0078, 0.0000, 0.0000,\n",632      "          0.6784, 0.0706, 0.0000, 0.0039],\n",633      "         [0.0039, 0.0039, 0.0000, 0.0000, 0.0706, 0.0941, 0.0000, 0.0196,\n",634      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.3451, 0.7137,\n",635      "          0.0275, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",636      "          0.6588, 0.0039, 0.0000, 0.0039],\n",637      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0078, 0.1922, 0.1059, 0.1216,\n",638      "          0.2196, 0.0667, 0.0000, 0.0000, 0.0000, 0.3451, 0.6000, 0.1922,\n",639      "          0.0000, 0.0196, 0.0000, 0.0039, 0.0000, 0.0000, 0.0000, 0.0000,\n",640      "          0.6471, 0.0000, 0.0000, 0.0039],\n",641      "         [0.0510, 0.0275, 0.0000, 0.0000, 0.0000, 0.3294, 0.3804, 0.4000,\n",642      "          0.4941, 0.3882, 0.0000, 0.0196, 0.5020, 0.6000, 0.2863, 0.0000,\n",643      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0039,\n",644      "          0.5451, 0.0000, 0.0000, 0.0000],\n",645      "         [0.3176, 0.5961, 0.5725, 0.5490, 0.4863, 0.4824, 0.5098, 0.4941,\n",646      "          0.4431, 0.4431, 0.4471, 0.7216, 0.6235, 0.1647, 0.0000, 0.0000,\n",647      "          0.0000, 0.0078, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",648      "          0.7294, 0.0000, 0.0000, 0.0039],\n",649      "         [0.0000, 0.0000, 0.0000, 0.0941, 0.1647, 0.1804, 0.2235, 0.2549,\n",650      "          0.2706, 0.2549, 0.2471, 0.1569, 0.0000, 0.0000, 0.0000, 0.0000,\n",651      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",652      "          0.7137, 0.0157, 0.0000, 0.0039],\n",653      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",654      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",655      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",656      "          0.0000, 0.0000, 0.0000, 0.0000],\n",657      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",658      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",659      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",660      "          0.0000, 0.0000, 0.0000, 0.0000]]]) torch.Size([1, 28, 28])\n"661     ]662    }663   ],664   "source": [665    "# Check out what's inside the training dataloader\n",666    "# 內建__getitem__()返回tuple(data, label)\n",667    "train_features_batch, train_labels_batch = next(iter(train_dataloader)) \n",668    "print(train_features_batch.shape, train_labels_batch.shape)\n",669    "print(len(train_features_batch))\n",670    "print(train_features_batch[0], train_features_batch[0].shape)"671   ]672  },673  {674   "cell_type": "code",675   "execution_count": 16,676   "id": "5eca53b1-d96f-4c30-8006-49835998bc39",677   "metadata": {},678   "outputs": [679    {680     "name": "stdout",681     "output_type": "stream",682     "text": [683      "Image size: torch.Size([1, 28, 28])\n",684      "Label: 6, label size: torch.Size([])\n"685     ]686    },687    {688     "data": {689      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAGZCAYAAABmNy2oAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAQcElEQVR4nO3dS4gd9NnH8efMJXPJTDKJ0WlKjBE1RrwQ0vSSCipa2o2x1NKFO8WtF0REFFHciVDaYqnQRaEbQVqEQMVSaNEWsbHQWuqdLIztGKITnZiJc8+8i8KDou/rPP83mWQmnw+40fnlHI9n/OY0zWNncXFxMQAgIrpO9xMA4MwhCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCqx4+/fvjx/84AexdevW6Ovri9HR0dizZ0/ce++9+TXbtm2LG2+88Ut/rOeffz46nU48//zzS3rsp556Kn760582PnM484gCK9qzzz4b3/72t+Pjjz+Oxx9/PP7whz/Ez372s7j66qvj6aefLv94u3btipdeeil27dq1pK8XBVabjttHrGTXXnttjI2NxZtvvhk9PT2f+WsnTpyIrq7//rxn27ZtccUVV8Tvfve7k/K4n3zySQwODsaNN94Yr776arzzzjsn5ceF080nBVa0I0eOxKZNmz4XhIjIIHza73//+9i1a1cMDAzEjh074le/+tVn/voX/c9Ht956awwNDcW//vWv+O53vxvDw8Nxww03xHXXXRfPPvtsHDx4MDqdTv4BK5kosKLt2bMn9u/fH3fddVfs378/5ubm/tev/ec//xn33ntv3HPPPbFv37646qqr4vbbb48///nPX/o4s7OzcdNNN8X1118f+/bti0cffTR+8YtfxNVXXx1f+cpX4qWXXso/YCX7/E+vYAV57LHH4s0334wnnnginnjiiejt7Y2vf/3rsXfv3rjjjjtiaGgov3Z8fDxefPHF2Lp1a0REXHPNNfHHP/4xnnrqqbjmmmv+z8eZm5uLhx9+OG677bbP/PmRkZHo6+uLb33rWyf/bw5OA58UWNHOOeec+Mtf/hJ/+9vf4rHHHovvf//78fbbb8cDDzwQV155ZYyPj+fX7ty5M4MQEdHf3x/bt2+PgwcPLumxfvjDH5705w9nGlFgVdi9e3fcf//98Zvf/Cbee++9uOeee+Kdd96Jxx9/PL/mnHPO+dyur68vpqamvvTHHxwcjHXr1p3U5wxnIlFg1ent7Y1HHnkkIiJeffXVk/Jj+gVkzhaiwIp26NChL/zzb7zxRkREfPWrXz2lj7/UTxqwUviFZla0733ve7Fly5bYu3dv7NixI06cOBGvvPJK/PjHP46hoaG4++67T+njX3nllfHMM8/Ek08+GV/72teiq6srdu/efUofE04lUWBFe+ihh2Lfvn3xk5/8JA4dOhQzMzOxefPm+M53vhMPPPBAXHbZZaf08e++++547bXX4sEHH4yjR4/G4uJi+P2grGR+RzMAya8pAJBEAYAkCgAkUQAgiQIASRQASEv+fQp+mz+nywUXXFDefNnV0y/y97//vbw599xzy5ul/qc+T4aW71v/L/XVayn/bH1SACCJAgBJFABIogBAEgUAkigAkEQBgCQKACRRACCJAgBJFABIogBAWvJ/o9lBvOXV+nqvxmNmTz75ZHlz+eWXlze//e1vy5ubb765vPn5z39e3kS0Pb/VyJG/dg7iAVAiCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIAqed0PwG+2Jl+wGt0dLS8uf7665sea3x8vLwZHBwsb+67777yZmJiorzZs2dPeRMRceTIkfLmrbfeKm/ee++98mY5nenfGyudTwoAJFEAIIkCAEkUAEiiAEASBQCSKACQRAGAJAoAJFEAIIkCAEkUAEiiAEDqLC7x5GCn0znVz4VPueKKK5p2O3fuLG8uvvjipsequvDCC5t2w8PD5c0ll1xS3rS85i0XXP/617+WNxER69evL2+ee+658mZ6erq8+c9//lPevPzyy+VNRMTBgwebdiztwqxPCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASA7iLYOrrrqqvPnRj37U9Fivv/56eTM/P1/efPDBB+XN7t27y5uIiJtvvrm8+fWvf13e3H777eVNy3G2LVu2lDcREe+++25588tf/rK8GRkZKW82bdpU3mzcuLG8iWj7ezpy5EjTY602DuIBUCIKACRRACCJAgBJFABIogBAEgUAkigAkEQBgCQKACRRACCJAgDJQbxlcOedd5Y3H374YdNjtRxoGxoaKm96enrKm/fff7+8iYiYnJwsb9atW1fe3HLLLeXN2NhYefPCCy+UNxERCwsL5c3o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",690      "text/plain": [691       "<Figure size 640x480 with 1 Axes>"692      ]693     },694     "metadata": {},695     "output_type": "display_data"696    }697   ],698   "source": [699    "# Show a sample\n",700    "torch.manual_seed(42)\n",701    "random_idx = torch.randint(0, len(train_features_batch), size=[1]).item()\n",702    "img, label = train_features_batch[random_idx], train_labels_batch[random_idx]\n",703    "plt.imshow(img.squeeze(), cmap=\"gray\")\n",704    "plt.title(class_names[label])\n",705    "plt.axis(\"Off\");\n",706    "print(f\"Image size: {img.shape}\")\n",707    "print(f\"Label: {label}, label size: {label.shape}\")"708   ]709  },710  {711   "cell_type": "code",712   "execution_count": 17,713   "id": "713dade2-3d35-4e76-a4fe-c9e8e5a74d8b",714   "metadata": {},715   "outputs": [],716   "source": [717    "# nn.Flatten() 主要用於將輸入tensor的多維數據flatten成一維的向量\n",718    "# compresses the dimensions of a tensor into a single vector\n",719    "# 通常,輸入的形狀是 (batch_size, channels, height, width)\n",720    "# 經過 nn.Flatten() 後會變成 (batch_size, channels * height * width)"721   ]722  },723  {724   "cell_type": "code",725   "execution_count": 18,726   "id": "58eb9e34-a8dd-467f-88be-23b9afa7eabc",727   "metadata": {728    "scrolled": true729   },730   "outputs": [731    {732     "name": "stdout",733     "output_type": "stream",734     "text": [735      "Shape before flattening: torch.Size([1, 28, 28]) -> [color_channels, height, width]\n",736      "Shape after flattening: torch.Size([1, 784]) -> [color_channels, height*width]\n",737      "tensor([[[0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",738      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",739      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",740      "          0.0000, 0.0000, 0.0000, 0.0000],\n",741      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",742      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",743      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",744      "          0.0000, 0.0000, 0.0000, 0.0000],\n",745      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",746      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",747      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",748      "          0.0000, 0.0000, 0.0000, 0.0000],\n",749      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",750      "          0.0000, 0.0039, 0.0039, 0.0000, 0.0000, 0.0078, 0.0078, 0.0000,\n",751      "          0.0000, 0.0039, 0.0078, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",752      "          0.2863, 0.0000, 0.0000, 0.0078],\n",753      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",754      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",755      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",756      "          0.3725, 0.0000, 0.0000, 0.0000],\n",757      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",758      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.3373, 0.3569, 0.2039,\n",759      "          0.4980, 0.4196, 0.4706, 0.3608, 0.3961, 0.4706, 0.4471, 1.0000,\n",760      "          0.4314, 0.3451, 0.0078, 0.0000],\n",761      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",762      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0706, 0.0824, 0.0706,\n",763      "          0.4588, 0.4118, 0.4980, 0.2588, 0.2235, 0.2588, 0.0824, 0.0510,\n",764      "          0.1922, 0.5137, 0.5765, 0.0000],\n",765      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",766      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",767      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.1333,\n",768      "          0.8000, 0.5608, 0.5255, 0.2431],\n",769      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",770      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0039, 0.0039, 0.0000,\n",771      "          0.0000, 0.0000, 0.0000, 0.0078, 0.0000, 0.0000, 0.0000, 0.9137,\n",772      "          0.9686, 0.5137, 0.4353, 0.6471],\n",773      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",774      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",775      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0588, 0.3843,\n",776      "          0.6980, 0.0588, 0.2824, 0.1686],\n",777      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",778      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",779      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.1333, 0.2078, 0.2157,\n",780      "          0.6745, 0.2941, 0.1059, 0.0000],\n",781      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",782      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",783      "          0.0000, 0.0000, 0.0039, 0.0000, 0.0078, 0.3333, 0.2980, 0.2941,\n",784      "          0.2039, 0.0314, 0.0000, 0.0000],\n",785      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",786      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",787      "          0.0000, 0.0039, 0.0039, 0.0000, 0.2196, 0.5020, 0.0157, 0.0706,\n",788      "          0.3451, 0.3216, 0.0588, 0.0000],\n",789      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",790      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",791      "          0.0000, 0.0000, 0.0000, 0.0157, 0.4863, 0.3843, 0.1804, 0.6235,\n",792      "          0.7882, 0.6000, 0.1569, 0.0000],\n",793      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",794      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",795      "          0.0000, 0.0000, 0.0000, 0.2863, 0.4431, 0.4196, 0.5882, 0.5020,\n",796      "          0.1020, 0.2235, 0.0549, 0.0000],\n",797      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",798      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",799      "          0.0000, 0.0000, 0.0039, 0.4078, 0.4314, 0.7137, 0.1843, 0.2196,\n",800      "          0.4118, 0.3216, 0.0196, 0.0000],\n",801      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0039, 0.0000, 0.0000, 0.0000,\n",802      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",803      "          0.0000, 0.0000, 0.2549, 0.5647, 0.6275, 0.0824, 0.0000, 0.0000,\n",804      "          0.5098, 0.3333, 0.0000, 0.0000],\n",805      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0039, 0.0039,\n",806      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",807      "          0.0000, 0.3333, 0.5647, 0.5529, 0.0000, 0.0000, 0.0000, 0.0000,\n",808      "          0.6510, 0.3059, 0.0000, 0.0000],\n",809      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",810      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",811      "          0.1922, 0.7216, 0.4510, 0.0000, 0.0000, 0.0157, 0.0000, 0.0000,\n",812      "          0.6275, 0.2667, 0.0000, 0.0000],\n",813      "         [0.0000, 0.0000, 0.0000, 0.0039, 0.0000, 0.0000, 0.0784, 0.0784,\n",814      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0706,\n",815      "          0.6392, 0.3804, 0.0000, 0.0000, 0.0000, 0.0314, 0.0000, 0.0000,\n",816      "          0.6667, 0.1529, 0.0000, 0.0000],\n",817      "         [0.0000, 0.0000, 0.0039, 0.0000, 0.0314, 0.2471, 0.2980, 0.1686,\n",818      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.5255,\n",819      "          0.5333, 0.0000, 0.0000, 0.0000, 0.0000, 0.0078, 0.0000, 0.0000,\n",820      "          0.6784, 0.0706, 0.0000, 0.0039],\n",821      "         [0.0039, 0.0039, 0.0000, 0.0000, 0.0706, 0.0941, 0.0000, 0.0196,\n",822      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.3451, 0.7137,\n",823      "          0.0275, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",824      "          0.6588, 0.0039, 0.0000, 0.0039],\n",825      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0078, 0.1922, 0.1059, 0.1216,\n",826      "          0.2196, 0.0667, 0.0000, 0.0000, 0.0000, 0.3451, 0.6000, 0.1922,\n",827      "          0.0000, 0.0196, 0.0000, 0.0039, 0.0000, 0.0000, 0.0000, 0.0000,\n",828      "          0.6471, 0.0000, 0.0000, 0.0039],\n",829      "         [0.0510, 0.0275, 0.0000, 0.0000, 0.0000, 0.3294, 0.3804, 0.4000,\n",830      "          0.4941, 0.3882, 0.0000, 0.0196, 0.5020, 0.6000, 0.2863, 0.0000,\n",831      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0039,\n",832      "          0.5451, 0.0000, 0.0000, 0.0000],\n",833      "         [0.3176, 0.5961, 0.5725, 0.5490, 0.4863, 0.4824, 0.5098, 0.4941,\n",834      "          0.4431, 0.4431, 0.4471, 0.7216, 0.6235, 0.1647, 0.0000, 0.0000,\n",835      "          0.0000, 0.0078, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",836      "          0.7294, 0.0000, 0.0000, 0.0039],\n",837      "         [0.0000, 0.0000, 0.0000, 0.0941, 0.1647, 0.1804, 0.2235, 0.2549,\n",838      "          0.2706, 0.2549, 0.2471, 0.1569, 0.0000, 0.0000, 0.0000, 0.0000,\n",839      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",840      "          0.7137, 0.0157, 0.0000, 0.0039],\n",841      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",842      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",843      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",844      "          0.0000, 0.0000, 0.0000, 0.0000],\n",845      "         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",846      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",847      "          0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",848      "          0.0000, 0.0000, 0.0000, 0.0000]]])\n",849      "tensor([[0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",850      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",851      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",852      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",853      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",854      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",855      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",856      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",857      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",858      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",859      "         0.0000, 0.0000, 0.0000, 0.0039, 0.0039, 0.0000, 0.0000, 0.0078, 0.0078,\n",860      "         0.0000, 0.0000, 0.0039, 0.0078, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",861      "         0.2863, 0.0000, 0.0000, 0.0078, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",862      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",863      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",864      "         0.0000, 0.3725, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",865      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",866      "         0.3373, 0.3569, 0.2039, 0.4980, 0.4196, 0.4706, 0.3608, 0.3961, 0.4706,\n",867      "         0.4471, 1.0000, 0.4314, 0.3451, 0.0078, 0.0000, 0.0000, 0.0000, 0.0000,\n",868      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",869      "         0.0000, 0.0706, 0.0824, 0.0706, 0.4588, 0.4118, 0.4980, 0.2588, 0.2235,\n",870      "         0.2588, 0.0824, 0.0510, 0.1922, 0.5137, 0.5765, 0.0000, 0.0000, 0.0000,\n",871      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",872      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",873      "         0.0000, 0.0000, 0.0000, 0.1333, 0.8000, 0.5608, 0.5255, 0.2431, 0.0000,\n",874      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",875      "         0.0000, 0.0000, 0.0000, 0.0039, 0.0039, 0.0000, 0.0000, 0.0000, 0.0000,\n",876      "         0.0078, 0.0000, 0.0000, 0.0000, 0.9137, 0.9686, 0.5137, 0.4353, 0.6471,\n",877      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",878      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",879      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0588, 0.3843, 0.6980, 0.0588, 0.2824,\n",880      "         0.1686, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",881      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",882      "         0.0000, 0.0000, 0.0000, 0.0000, 0.1333, 0.2078, 0.2157, 0.6745, 0.2941,\n",883      "         0.1059, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",884      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",885      "         0.0000, 0.0000, 0.0039, 0.0000, 0.0078, 0.3333, 0.2980, 0.2941, 0.2039,\n",886      "         0.0314, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",887      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",888      "         0.0000, 0.0000, 0.0039, 0.0039, 0.0000, 0.2196, 0.5020, 0.0157, 0.0706,\n",889      "         0.3451, 0.3216, 0.0588, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",890      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",891      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0157, 0.4863, 0.3843, 0.1804,\n",892      "         0.6235, 0.7882, 0.6000, 0.1569, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",893      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",894      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.2863, 0.4431, 0.4196,\n",895      "         0.5882, 0.5020, 0.1020, 0.2235, 0.0549, 0.0000, 0.0000, 0.0000, 0.0000,\n",896      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",897      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0039, 0.4078, 0.4314,\n",898      "         0.7137, 0.1843, 0.2196, 0.4118, 0.3216, 0.0196, 0.0000, 0.0000, 0.0000,\n",899      "         0.0000, 0.0000, 0.0039, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",900      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.2549, 0.5647,\n",901      "         0.6275, 0.0824, 0.0000, 0.0000, 0.5098, 0.3333, 0.0000, 0.0000, 0.0000,\n",902      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0039, 0.0039, 0.0000, 0.0000,\n",903      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.3333, 0.5647,\n",904      "         0.5529, 0.0000, 0.0000, 0.0000, 0.0000, 0.6510, 0.3059, 0.0000, 0.0000,\n",905      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",906      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.1922, 0.7216,\n",907      "         0.4510, 0.0000, 0.0000, 0.0157, 0.0000, 0.0000, 0.6275, 0.2667, 0.0000,\n",908      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0039, 0.0000, 0.0000, 0.0784, 0.0784,\n",909      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0706, 0.6392,\n",910      "         0.3804, 0.0000, 0.0000, 0.0000, 0.0314, 0.0000, 0.0000, 0.6667, 0.1529,\n",911      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0039, 0.0000, 0.0314, 0.2471, 0.2980,\n",912      "         0.1686, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.5255,\n",913      "         0.5333, 0.0000, 0.0000, 0.0000, 0.0000, 0.0078, 0.0000, 0.0000, 0.6784,\n",914      "         0.0706, 0.0000, 0.0039, 0.0039, 0.0039, 0.0000, 0.0000, 0.0706, 0.0941,\n",915      "         0.0000, 0.0196, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.3451,\n",916      "         0.7137, 0.0275, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",917      "         0.6588, 0.0039, 0.0000, 0.0039, 0.0000, 0.0000, 0.0000, 0.0000, 0.0078,\n",918      "         0.1922, 0.1059, 0.1216, 0.2196, 0.0667, 0.0000, 0.0000, 0.0000, 0.3451,\n",919      "         0.6000, 0.1922, 0.0000, 0.0196, 0.0000, 0.0039, 0.0000, 0.0000, 0.0000,\n",920      "         0.0000, 0.6471, 0.0000, 0.0000, 0.0039, 0.0510, 0.0275, 0.0000, 0.0000,\n",921      "         0.0000, 0.3294, 0.3804, 0.4000, 0.4941, 0.3882, 0.0000, 0.0196, 0.5020,\n",922      "         0.6000, 0.2863, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",923      "         0.0000, 0.0039, 0.5451, 0.0000, 0.0000, 0.0000, 0.3176, 0.5961, 0.5725,\n",924      "         0.5490, 0.4863, 0.4824, 0.5098, 0.4941, 0.4431, 0.4431, 0.4471, 0.7216,\n",925      "         0.6235, 0.1647, 0.0000, 0.0000, 0.0000, 0.0078, 0.0000, 0.0000, 0.0000,\n",926      "         0.0000, 0.0000, 0.0000, 0.7294, 0.0000, 0.0000, 0.0039, 0.0000, 0.0000,\n",927      "         0.0000, 0.0941, 0.1647, 0.1804, 0.2235, 0.2549, 0.2706, 0.2549, 0.2471,\n",928      "         0.1569, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",929      "         0.0000, 0.0000, 0.0000, 0.0000, 0.7137, 0.0157, 0.0000, 0.0039, 0.0000,\n",930      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",931      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",932      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",933      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",934      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",935      "         0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",936      "         0.0000]])\n"937     ]938    }939   ],940   "source": [941    "# Create a flatten layer\n",942    "flatten_model = nn.Flatten() # all nn modules function as a model (can do a forward pass)\n",943    "\n",944    "# Get a single sample\n",945    "x = train_features_batch[0]\n",946    "\n",947    "# Flatten the sample\n",948    "output = flatten_model(x) # perform forward pass\n",949    "\n",950    "# Print out what happened\n",951    "print(f\"Shape before flattening: {x.shape} -> [color_channels, height, width]\")\n",952    "print(f\"Shape after flattening: {output.shape} -> [color_channels, height*width]\")\n",953    "\n",954    "# Try uncommenting below and see what happens\n",955    "print(x)\n",956    "print(output)"957   ]958  },959  {960   "cell_type": "code",961   "execution_count": 19,962   "id": "b8593bec-97f0-4b0b-9555-969d2760d314",963   "metadata": {},964   "outputs": [],965   "source": [966    "from torch import nn\n",967    "class FashionMNISTModelV0(nn.Module):\n",968    "    def __init__(self, input_shape: int, hidden_units: int, output_shape: int):\n",969    "        super().__init__()\n",970    "        self.layer_stack = nn.Sequential(\n",971    "            nn.Flatten(), # neural networks like their inputs in vector form\n",972    "            # in_features=輸入tensor的最後一個維度的大小\n",973    "            nn.Linear(in_features=input_shape, out_features=hidden_units), # in_features = number of features in a data sample (784 pixels)\n",974    "            nn.Linear(in_features=hidden_units, out_features=output_shape)\n",975    "        )\n",976    "    \n",977    "    def forward(self, x):\n",978    "        return self.layer_stack(x)"979   ]980  },981  {982   "cell_type": "code",983   "execution_count": 20,984   "id": "935f4271-0187-4b13-bd43-1eedff132222",985   "metadata": {},986   "outputs": [987    {988     "data": {989      "text/plain": [990       "FashionMNISTModelV0(\n",991       "  (layer_stack): Sequential(\n",992       "    (0): Flatten(start_dim=1, end_dim=-1)\n",993       "    (1): Linear(in_features=784, out_features=10, bias=True)\n",994       "    (2): Linear(in_features=10, out_features=10, bias=True)\n",995       "  )\n",996       ")"997      ]998     },999     "execution_count": 20,1000     "metadata": {},1001     "output_type": "execute_result"1002    }1003   ],1004   "source": [1005    "torch.manual_seed(42)\n",1006    "\n",1007    "# Need to setup model with input parameters\n",1008    "model_0 = FashionMNISTModelV0(input_shape=784, # one for every pixel (28x28)\n",1009    "    hidden_units=10, # how many units in the hidden layer\n",1010    "    output_shape=len(class_names) # one for every class\n",1011    ")\n",1012    "model_0.to(\"cpu\") # keep model on CPU to begin with "1013   ]1014  },1015  {1016   "cell_type": "code",1017   "execution_count": 21,1018   "id": "33683f71-270e-48b4-80a5-a3c1d6e9667f",1019   "metadata": {},1020   "outputs": [1021    {1022     "name": "stdout",1023     "output_type": "stream",1024     "text": [1025      "helper_functions.py already exists, skipping download\n"1026     ]1027    }1028   ],1029   "source": [1030    "import requests\n",1031    "from pathlib import Path \n",1032    "\n",1033    "# Download helper functions from Learn PyTorch repo (if not already downloaded)\n",1034    "if Path(\"helper_functions.py\").is_file():\n",1035    "  print(\"helper_functions.py already exists, skipping download\")\n",1036    "else:\n",1037    "  print(\"Downloading helper_functions.py\")\n",1038    "  # Note: you need the \"raw\" GitHub URL for this to work\n",1039    "  request = requests.get(\"https://raw.githubusercontent.com/mrdbourke/pytorch-deep-learning/main/helper_functions.py\")\n",1040    "  with open(\"helper_functions.py\", \"wb\") as f:\n",1041    "    f.write(request.content)"1042   ]1043  },1044  {1045   "cell_type": "code",1046   "execution_count": 22,1047   "id": "70af53e8-5fd8-4310-b487-a929d1dc9899",1048   "metadata": {},1049   "outputs": [],1050   "source": [1051    "# Import accuracy metric\n",1052    "from helper_functions import accuracy_fn # Note: could also use torchmetrics.Accuracy(task = 'multiclass', num_classes=len(class_names)).to(device)\n",1053    "\n",1054    "# Setup loss function and optimizer\n",1055    "# Multi-class Classification\n",1056    "loss_fn = nn.CrossEntropyLoss() # this is also called \"criterion\"/\"cost function\" in some places\n",1057    "optimizer = torch.optim.SGD(params=model_0.parameters(), lr=0.1)"1058   ]1059  },1060  {1061   "cell_type": "code",1062   "execution_count": 23,1063   "id": "c37646fc-4436-4795-adec-b8f04a5da6cf",1064   "metadata": {},1065   "outputs": [],1066   "source": [1067    "from timeit import default_timer as timer \n",1068    "def print_train_time(start: float, end: float, device: torch.device = None):\n",1069    "    \"\"\"Prints difference between start and end time.\n",1070    "\n",1071    "    Args:\n",1072    "        start (float): Start time of computation (preferred in timeit format). \n",1073    "        end (float): End time of computation.\n",1074    "        device ([type], optional): Device that compute is running on. Defaults to None.\n",1075    "\n",1076    "    Returns:\n",1077    "        float: time between start and end in seconds (higher is longer).\n",1078    "    \"\"\"\n",1079    "    total_time = end - start\n",1080    "    print(f\"Train time on {device}: {total_time:.3f} seconds\")\n",1081    "    return total_time"1082   ]1083  },1084  {1085   "cell_type": "code",1086   "execution_count": 24,1087   "id": "fdd989d6-46c8-4c3f-8ba7-930e7c80f329",1088   "metadata": {},1089   "outputs": [1090    {1091     "name": "stdout",1092     "output_type": "stream",1093     "text": [1094      "Batch: 0\n",1095      "X shape: torch.Size([32, 1, 28, 28])\n",1096      "X shape: torch.Size([32])\n"1097     ]1098    }1099   ],1100   "source": [1101    "for batch, (X, y) in enumerate(train_dataloader):\n",1102    "    print(f\"Batch: {batch}\")\n",1103    "    print(f\"X shape: {X.shape}\") # [batch_size, color_channel, height, width]\n",1104    "    print(f\"X shape: {y.shape}\") # 每批次32檔案,1檔案1label共32個\n",1105    "    break"1106   ]1107  },1108  {1109   "cell_type": "code",1110   "execution_count": 25,1111   "id": "d69691c8-97ed-4730-8e04-6134f17cb874",1112   "metadata": {},1113   "outputs": [],1114   "source": [1115    "# Import tqdm for progress bar\n",1116    "from tqdm.auto import tqdm # 進度條"1117   ]1118  },1119  {1120   "cell_type": "code",1121   "execution_count": 26,1122   "id": "07bf5951-2f27-4d02-9a9e-f20056453e94",1123   "metadata": {},1124   "outputs": [1125    {1126     "data": {1127      "application/vnd.jupyter.widget-view+json": {1128       "model_id": "178b100811844bb391a8b4d4fa8912ef",1129       "version_major": 2,1130       "version_minor": 01131      },1132      "text/plain": [1133       "  0%|          | 0/3 [00:00<?, ?it/s]"1134      ]1135     },1136     "metadata": {},1137     "output_type": "display_data"1138    },1139    {1140     "name": "stdout",1141     "output_type": "stream",1142     "text": [1143      "Epoch: 0\n",1144      "-------\n",1145      "Looked at 0/60000 samples\n",1146      "Looked at 12800/60000 samples\n",1147      "Looked at 25600/60000 samples\n",1148      "Looked at 38400/60000 samples\n",1149      "Looked at 51200/60000 samples\n",1150      "\n",1151      "Train loss: 0.59039 | Test loss: 0.50954, Test acc: 82.04%\n",1152      "\n",1153      "Epoch: 1\n",1154      "-------\n",1155      "Looked at 0/60000 samples\n",1156      "Looked at 12800/60000 samples\n",1157      "Looked at 25600/60000 samples\n",1158      "Looked at 38400/60000 samples\n",1159      "Looked at 51200/60000 samples\n",1160      "\n",1161      "Train loss: 0.47633 | Test loss: 0.47989, Test acc: 83.20%\n",1162      "\n",1163      "Epoch: 2\n",1164      "-------\n",1165      "Looked at 0/60000 samples\n",1166      "Looked at 12800/60000 samples\n",1167      "Looked at 25600/60000 samples\n",1168      "Looked at 38400/60000 samples\n",1169      "Looked at 51200/60000 samples\n",1170      "\n",1171      "Train loss: 0.45503 | Test loss: 0.47664, Test acc: 83.43%\n",1172      "\n",1173      "Train time on cpu: 18.773 seconds\n"1174     ]1175    }1176   ],1177   "source": [1178    "# Set the seed and start the timer\n",1179    "torch.manual_seed(42)\n",1180    "train_time_start_on_cpu = timer() # 當前時間\n",1181    "\n",1182    "# Set the number of epochs (we'll keep this small for faster training times)\n",1183    "epochs = 3\n",1184    "\n",1185    "# Create training and testing loop\n",1186    "for epoch in tqdm(range(epochs)):   # loop包含進度條\n",1187    "    print(f\"Epoch: {epoch}\\n-------\")\n",1188    "    ### Training\n",1189    "    train_loss = 0\n",1190    "    # Add a loop to loop through training batches\n",1191    "    for batch, (X, y) in enumerate(train_dataloader): # iterate tuple as (index , element)\n",1192    "        # batch 從index 0 開始\n",1193    "        # (X,y) => (data, label) => ([32,1,28,28], [32]) 尚未進入model的nn.Flatten()\n",1194    "        model_0.train() \n",1195    "        # 1. Forward pass\n",1196    "        y_pred = model_0(X) # [32,784]\n",1197    "\n",1198    "        # 2. Calculate loss (per batch)\n",1199    "        loss = loss_fn(y_pred, y)\n",1200    "        train_loss += loss # accumulatively add up the loss per epoch \n",

Showing the first 1,200 of 1668 lines. Download the file for the rest.