diff --git a/2-mnist_training.ipynb b/2-mnist_training.ipynb index 2ccded5..5a94be3 100644 --- a/2-mnist_training.ipynb +++ b/2-mnist_training.ipynb @@ -2,7 +2,11 @@ "cells": [ { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "# Neural Network Hands-On Tutorial Part 2\n", "\n", @@ -11,8 +15,12 @@ }, { "cell_type": "code", - "execution_count": 15, - "metadata": {}, + "execution_count": 1, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "outputs": [], "source": [ "# Import necessary libraries\n", @@ -31,7 +39,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "### Loading the MNIST Dataset\n", "\n", @@ -42,7 +54,7 @@ }, { "cell_type": "code", - "execution_count": 94, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -52,7 +64,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "### Looking at the Dataset\n", "\n", @@ -65,7 +81,7 @@ }, { "cell_type": "code", - "execution_count": 95, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -73,7 +89,7 @@ "output_type": "stream", "text": [ "60000\n", - "(, 5)\n" + "(, 5)\n" ] } ], @@ -82,9 +98,20 @@ "print(train_dataset[0])" ] }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Looking at the Dataset" + ] + }, { "cell_type": "code", - "execution_count": 96, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -111,14 +138,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ + "### Looking at the Dataset\n", + "\n", "Currently, the images are `PIL` images and the amplitudes range from 0 to 255." ] }, { "cell_type": "code", - "execution_count": 97, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -136,49 +169,61 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "### Data Preprocessing\n", "\n", "In order to train a neural network with the dataset, the train dataset needs to be pre-processed. In `PyTorch` and `torchvision`, this can be achieved by `torchvision.transforms`, which includes many common image processing methods.\n", "\n", - "Note that the images in the MNIST dataset are already _centered_ and _cropped to the same shape_. (For your own dataset, remember to perform these steps.)\n", - "\n", - "We only need to perform two steps:\n", - "\n", - "1. Convert the PIL images with amplitude $[0,255]$ to PyTorch Tensors in $[0,1]$, with `transforms.ToTensor()`\n", - "2. Normalize the images to $\\mu=0.5$ and $\\sigma=0.5$, with `transforms.Normalize()`" + "Note that the images in the MNIST dataset are already _centered_ and _cropped to the same shape_. (For your own dataset, remember to perform these steps.)\n" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ + "For the MNIST dataset, we only need to perform two steps:\n", + "\n", + "1. Convert the PIL images with amplitude $[0,255]$ to PyTorch Tensors in $[0,1]$, with `transforms.ToTensor()`\n", + "2. Normalize the images to $\\mu=0.5$ and $\\sigma=0.5$, with `transforms.Normalize()`\n", + "\n", "Multiple transformations can be chained by using `transforms.Compose`" ] }, { "cell_type": "code", - "execution_count": 98, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "mnist_transform = transforms.Compose([\n", " transforms.ToTensor(), # Convert image to tensor\n", - " # transforms.Normalize((0.5,), (0.5,)) # Normalize image to mean 0.5 and std 0.5\n", + " transforms.Normalize((0.5,), (0.5,)) # Normalize image to mean 0.5 and std 0.5\n", "])" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "Let's define the train and test dataset again, with the proper transformations" ] }, { "cell_type": "code", - "execution_count": 99, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -188,7 +233,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "We can load mini-batches of data from the dataset using `DataLoader`.\n", "\n", @@ -200,7 +249,7 @@ }, { "cell_type": "code", - "execution_count": 100, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -211,7 +260,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "We can now look at one batch of data sampled from the `DataLoader`\n", "\n", @@ -220,7 +273,7 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -241,6 +294,45 @@ { "cell_type": "markdown", "metadata": {}, + "source": [ + "Take a look at the sampled dataset (run the next cell several times to see random samples)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "images, labels = next(iter(train_loader))\n", + "idx = 0 # Change the index to see different images\n", + "\n", + "# Show some images\n", + "fig, axes = plt.subplots(1, 5, figsize=(7, 2.5))\n", + "for i in range(5):\n", + " axes[i].imshow(images[i+idx][0], cmap='gray')\n", + " axes[i].set_title(f\"label: {labels[i+idx]}\")\n", + " axes[i].axis('off')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "### Define the neural network structure\n", "\n", @@ -249,7 +341,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -269,9 +361,20 @@ " return x" ] }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "Create the NN" + ] + }, { "cell_type": "code", - "execution_count": 74, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -294,7 +397,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "### Define the loss function\n", "\n", @@ -303,7 +410,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "**Cross-entropy Loss**\n", "\n", @@ -321,9 +432,15 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ - "\n", + "$$\n", + "l_\\text{Cross-Entropy}(y,y') = - \\sum_{i=1}^{C} \\log \\frac{\\exp{y_i}}{\\sum_{c=1}^{C} \\exp{(y_{c})}} y'_{i},\n", + "$$\n", "\n", "- Note 1: The first part $\\exp{y_i}/\\sum_c\\exp{y_c}$ is a `Softmax` activation, mapping the unbounded outputs to probabilities between $[0,1]$.\n", "- Note 2: For the batched input, the loss is commonly averaged over the batches." @@ -331,16 +448,21 @@ }, { "cell_type": "code", - "execution_count": 75, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ + "# Define the loss function\n", "criterion = nn.CrossEntropyLoss()" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "### Define an optimizer\n", "\n", @@ -351,7 +473,7 @@ }, { "cell_type": "code", - "execution_count": 76, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -362,14 +484,18 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ - "### Start Training" + "### Define the training loop" ] }, { "cell_type": "code", - "execution_count": 77, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -389,35 +515,42 @@ " print(f'Epoch [{epoch+1}/{num_epochs}], Step [{i+1}/{len(train_loader)}], Loss: {loss.item():.4f}')" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Run the cell below to start training" + ] + }, { "cell_type": "code", - "execution_count": 78, + "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Epoch [1/10], Step [400/938], Loss: 0.2695\n", - "Epoch [1/10], Step [800/938], Loss: 0.1714\n", - "Epoch [2/10], Step [400/938], Loss: 0.1585\n", - "Epoch [2/10], Step [800/938], Loss: 0.0839\n", - "Epoch [3/10], Step [400/938], Loss: 0.0802\n", - "Epoch [3/10], Step [800/938], Loss: 0.1878\n", - "Epoch [4/10], Step [400/938], Loss: 0.0210\n", - "Epoch [4/10], Step [800/938], Loss: 0.0512\n", - "Epoch [5/10], Step [400/938], Loss: 0.0237\n", - "Epoch [5/10], Step [800/938], Loss: 0.1229\n", - "Epoch [6/10], Step [400/938], Loss: 0.0809\n", - "Epoch [6/10], Step [800/938], Loss: 0.0892\n", - "Epoch [7/10], Step [400/938], Loss: 0.0264\n", - "Epoch [7/10], Step [800/938], Loss: 0.0085\n", - "Epoch [8/10], Step [400/938], Loss: 0.0167\n", - "Epoch [8/10], Step [800/938], Loss: 0.0160\n", - "Epoch [9/10], Step [400/938], Loss: 0.0594\n", - "Epoch [9/10], Step [800/938], Loss: 0.0239\n", - "Epoch [10/10], Step [400/938], Loss: 0.0266\n", - "Epoch [10/10], Step [800/938], Loss: 0.0220\n" + "Epoch [1/10], Step [400/938], Loss: 0.2974\n", + "Epoch [1/10], Step [800/938], Loss: 0.4021\n", + "Epoch [2/10], Step [400/938], Loss: 0.1189\n", + "Epoch [2/10], Step [800/938], Loss: 0.1314\n", + "Epoch [3/10], Step [400/938], Loss: 0.2653\n", + "Epoch [3/10], Step [800/938], Loss: 0.1246\n", + "Epoch [4/10], Step [400/938], Loss: 0.2013\n", + "Epoch [4/10], Step [800/938], Loss: 0.0542\n", + "Epoch [5/10], Step [400/938], Loss: 0.1582\n", + "Epoch [5/10], Step [800/938], Loss: 0.1365\n", + "Epoch [6/10], Step [400/938], Loss: 0.0242\n", + "Epoch [6/10], Step [800/938], Loss: 0.0597\n", + "Epoch [7/10], Step [400/938], Loss: 0.0699\n", + "Epoch [7/10], Step [800/938], Loss: 0.0291\n", + "Epoch [8/10], Step [400/938], Loss: 0.0966\n", + "Epoch [8/10], Step [800/938], Loss: 0.0313\n", + "Epoch [9/10], Step [400/938], Loss: 0.1028\n", + "Epoch [9/10], Step [800/938], Loss: 0.0948\n", + "Epoch [10/10], Step [400/938], Loss: 0.0491\n", + "Epoch [10/10], Step [800/938], Loss: 0.0685\n" ] } ], @@ -427,21 +560,25 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "### Evaluating the model" ] }, { "cell_type": "code", - "execution_count": 79, + "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Test Accuracy: 97.67%\n" + "Test Accuracy: 96.73%\n" ] } ], @@ -465,19 +602,23 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "### Visualize the model predictions" ] }, { "cell_type": "code", - "execution_count": 108, + "execution_count": 18, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAACcCAYAAABlRUHuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAgQElEQVR4nO3de1hU1foH8O+ggoCXgFBEEH0gRFHTNI+iiMcLaSZqeUw7WqGlZqTmSTStUJNMLcMyb2VeC8W0NJ/Kk4nlJStBvGSEmpCaeb8EEiis3x/9XGftkcuADDNr+H6ex+d5995r9rzO24yrvfZa2ySEECAiIiLSkJOtEyAiIiIqL3ZkiIiISFvsyBAREZG22JEhIiIibbEjQ0RERNpiR4aIiIi0xY4MERERaYsdGSIiItIWOzJERESkLat3ZFasWAGTyYTMzMwyv7Zr165o0aJFhebTuHFjPPnkkxV6TkfHGuqN9dMb66c31s/6eEWmjM6cOYORI0eiSZMmcHV1RWBgICZMmICLFy/aOjWyUHx8PKKiolC/fn2YTCZMmzbN1imRhTIzM2EymYr8s3btWlunRxY4duwYBg4cCA8PD7i5uaFz585ITk62dVpkIXv8/axu6wR0kp2djY4dOyInJwdjxoyBv78/Dhw4gAULFiA5ORkpKSlwcmLf0N699NJL8PHxQZs2bbB161Zbp0PlMGTIEDz44IOGfR07drRRNmSpkydPomPHjqhWrRomTpwId3d3LF++HJGRkfj666/RpUsXW6dIpbDH3092ZMpg8+bNyMrKwpYtW9CnTx+539PTEzNmzMCBAwfQpk0bG2ZIljhx4gQaN26MCxcuwNvb29bpUDncd999GDp0qK3ToDJ6/fXXceXKFRw+fBhNmzYFADz99NMICQnB888/j5SUFBtnSKWxx99Pm1w+2LRpE/r06QNfX1+4uLggMDAQr776KgoKCopsn5KSgrCwMLi6uqJJkyZYvHjxbW3y8vIQFxeHoKAguLi4wN/fH7GxscjLyys1n+PHj+P48eOltrt27RoAoH79+ob9DRo0AAC4urqWeg5HoWsNgb/HiKs6net3S05ODvLz88v0Gkeha/127tyJNm3ayE4MALi5uSEqKgqpqak4evRoqedwBLrWD7DP30+bXJFZsWIFatWqhQkTJqBWrVrYvn07XnnlFVy7dg1z5841tL18+TIefPBBDBo0CEOGDEFSUhKeeeYZODs7Y/jw4QCAwsJCREVFYdeuXRg5ciSaNWuGQ4cO4a233kJGRgY+/fTTEvPp3r07AJR6M1aXLl3g5OSEcePG4c0334Sfnx8OHjyI+Ph49O/fHyEhIeX+THSjaw3pb7rXb/r06Zg4cSJMJhPatm2L+Ph4REZGlvlz0JWu9cvLy4OHh8dt+93c3AD8/Q/2PffcY+GnoC9d62e3hJUtX75cABAnTpyQ+65fv35bu1GjRgk3Nzfx119/yX0RERECgHjzzTflvry8PNG6dWtRr149kZ+fL4QQYvXq1cLJyUns3LnTcM7FixcLAGL37t1yX0BAgHjiiScM7QICAkRAQIBFf5/3339f3HXXXQKA/PPEE0+IGzduWPR6HTlaDW85f/68ACDi4uLK9DrdOFL9srKyRGRkpFi0aJHYvHmzSEhIEI0aNRJOTk5iy5Ytpb5eR45Uv759+4q77rpLXLt2zbC/Y8eOAoB44403Sj2Hbhypfip7+v20ydCSOgTz559/4sKFCwgPD8f169eRnp5uaFu9enWMGjVKbjs7O2PUqFE4d+6cHE9dv349mjVrhpCQEFy4cEH+6datGwCUekd8ZmamxT3Rhg0bon379khISMAnn3yCCRMm4MMPP8TkyZMter2j0LmGpG/9GjVqhK1bt2L06NHo27cvxo0bh/3798Pb2xv/+c9/LP3ra0/X+j3zzDO4cuUKHn30Uezfvx8ZGRkYP3489u3bBwDIzc216O+vO13rZ69sMrT0008/4aWXXsL27dvlfSe3XL161bDt6+sLd3d3w77g4GAAf3/4HTp0wNGjR/Hzzz8Xe+PRuXPnKiTv3bt346GHHsLevXvRrl07AED//v1Rp04dTJ8+HcOHD0fz5s0r5L3sna41pL85Uv08PT0RHR2N119/HadOnYKfn5/V3ste6Fq/3r1745133sHkyZNx3333AQCCgoIQHx+P2NhY1KpVq0Lex97pWj97VekdmStXriAiIgJ16tTBjBkzEBgYiJo1ayI1NRWTJk1CYWFhmc9ZWFiIli1bYt68eUUe9/f3v9O0AQBLlixB/fr1ZSfmlqioKEybNg179uypEh0ZnWtIjlm/W+e/dOmSw3dkdK9fTEwMoqOjcfDgQTg7O6N169ZYtmwZgP/9A+3IdK+fPar0jsyOHTtw8eJFbNy40bBmwIkTJ4ps//vvvyMnJ8fQI83IyADwv7unAwMDceDAAXTv3h0mk8lquZ89e7bIu8pv3LgBALh586bV3tue6FxDcsz6/frrrwBgN9NBrckR6ufu7m5Y92fbtm1wdXVFp06drP7etuYI9bM3lX6PTLVq1QAAQgi5Lz8/HwsXLiyy/c2bN7FkyRJD2yVLlsDb2xtt27YFAAwaNAinT5/Ge++9d9vrc3NzkZOTU2JOlk49Cw4OxtmzZ7Fjxw7D/sTERACoMmvI6FxD0rt+58+fv23f6dOn8cEHH6BVq1ZyKQRHpnP9irJnzx5s3LgRI0aMQN26dct1Dp04Wv3sQaVfkQkLC4OHhweeeOIJjB07FiaTCatXrzYUVeXr64vZs2cjMzMTwcHBWLduHdLS0rB06VLUqFEDADBs2DAkJSVh9OjRSE5ORqdOnVBQUID09HQkJSVh69attw0HqSydehYTE4Ply5ejb9++eO655xAQEIBvvvkGiYmJ6NmzJ/7xj3+U70PRjM41BIDVq1cjKysL169fBwB8++23mDlzpswjICCgLB+HdnSuX2xsLI4fP47u3bvD19cXmZmZWLJkCXJycjB//vzyfSCa0bl+WVlZGDRoEKKiouDj44OffvoJixcvRqtWrfDaa6+V7wPRjM71A+z099Pa06KKmnq2e/du0aFDB+Hq6ip8fX1FbGys2Lp1qwAgkpOTZbuIiAgRGhoq9u3bJzp27Chq1qwpAgICxIIFC257n/z8fDF79mwRGhoqXFxchIeHh2jbtq2YPn26uHr1qmx3p1PP0tPTxcCBA4W/v7+oUaOGCAgIEC+88ILIyckpy8eiFUer4a0pjUX9UXN3FI5Uv48++kh06dJFeHt7i+rVq4u7775bDBgwQKSkpJT1Y9GGI9Xv0qVLol+/fsLHx0c4OzuLJk2aiEmTJt02HduROFL9buVkb7+fJiGK6QYSERER2Tk+4ZCIiIi0xY4MERERaYsdGSIiItIWOzJERESkLXZkiIiISFvsyBAREZG22JEBYDKZMG3aNFunQeXE+umN9dMb66c3R6gfOzIV4OjRoxg8eDD8/Pzg5uaGkJAQzJgxQ658SPYrOzsbcXFx6NWrFzw9PWEymbBixQpbp0UW2rFjB0wmU5F/9u7da+v0yAIpKSno1asX6tSpg9q1ayMyMhJpaWm2TossYC+/n5X+iAJHc/LkSbRv3x5169ZFTEwMPD098d133yEuLg4pKSnYtGmTrVOkEly4cAEzZsxAo0aNcO+99972HC3Sw9ixY3H//fcb9gUFBdkoG7JUamoqOnfuDH9/f8TFxaGwsBALFy5EREQEfvjhBzRt2tTWKVIJ7OX3U+uOzPXr1+Hm5mbTHFavXo0rV65g165dCA0NBQCMHDkShYWFWLVqFS5fvgwPDw+b5miv7KF+DRo0wJkzZ+Dj44N9+/bd9o8hFc8e6ndLeHg4Bg4caOs0tGIP9Xv55Zfh6uqK7777Dl5eXgCAoUOHIjg4GFOmTMGGDRtsmp89s4f62cvvp02Hlm5dFl63bh2mTJkCHx8fuLu7IyoqCidPnjS07dq1K1q0aIGUlBR06dIFbm5umDJlCgAgLy8PcXFxCAoKgouLC/z9/REbG4u8vDzDOfLy8vD888/D29sbtWvXRlRUFE6dOlVkbunp6fjtt99K/Ttcu3YNAFC/fn3D/gYNGsDJyQnOzs4Wfx66cYT6ubi4wMfHp5yfgN4coX6qP//8Ezdv3izTa3TmCPXbuXMnevToITsxwN+/nREREdiyZQuys7PL+rFowxHqZy+/n3ZxRSY+Ph4mkwmTJk3CuXPnkJCQgB49eiAtLQ2urq6y3cWLF9G7d28MHjwYQ4cORf369VFYWIioqCjs2rULI0eORLNmzXDo0CG89dZbyMjIwKeffipf/9RTT2HNmjV47LHHEBYWhu3bt6NPnz5F5tSsWTNERESUeqmsa9eumD17NkaMGIHp06fDy8sLe/bswaJFizB27Fi4u7tXxEdk13SuHzlG/aKjo5GdnY1q1aohPDwcc+fOLfFpv45E5/rl5eUZcrzFzc0N+fn5OHz4MDp06FCuz0UXOtfPbtjkUZX/Lzk5WQAQDRs2NDz9NCkpSQAQ8+fPl/tuPXFz8eLFhnOsXr1aODk5iZ07dxr2L168WAAQu3fvFkIIkZaWJgCIMWPGGNo99thjAoCIi4sz7AcgIiIiLPp7vPrqq8LV1dXwFNCpU6da9FqdOUr9bvnxxx8FALF8+fIyvU5XjlC/3bt3i0ceeUQsW7ZMbNq0ScyaNUt4eXmJmjVritTUVEs+Bm05Qv1atmwpgoODxc2bN+W+vLw80ahRIwFAfPzxx6WeQ1eOUD+VLX8/7WLW0uOPP47atWvL7YEDB6JBgwb4/PPPDe1cXFwQHR1t2Ld+/Xo0a9YMISEhuHDhgvzTrVs3AEBycjIAyHONHTvW8Prx48cXmZMQwuLeaOPGjdGlSxcsXboUGzZswPDhw/Haa69hwYIFFr1ed7rXr6rTuX5hYWH4+OOPMXz4cERFRWHy5MnYu3cvTCYTXnzxxVJf7wh0rt+YMWOQkZGBESNG4MiRIzh8+DAef/xxnDlzBgCQm5tb6jl0p3P97IVdDC3dc889hm2TyYSgoCBkZmYa9jds2PC2e06OHj2Kn3/+Gd7e3kWe+9y5cwCArKwsODk5ITAw0HD8Tu+KX7t2LUaOHImMjAz4+fkBAB5++GEUFhZi0qRJGDJkiGH81xHpXD9yvPoFBQWhX79+2LhxIwoKClCtWrUKfw97onP9Ro8ejZMnT2Lu3LlYuXIlAKBdu3aIjY1FfHw8atWqdUfn14HO9bMXdtGRsVRRY6mFhYVo2bIl5s2bV+Rr/P39rZrTwoUL0aZNG9mJuSUqKgorVqzA/v370aNHD6vmoAt7rB9ZTqf6+fv7Iz8/Hzk5OahTp45NcrA39lq/+Ph4vPDCC/jpp59Qt25dtGzZUt7IGhwcbPX314W91s8e2EVH5ujRo4ZtIQSOHTuGVq1alfrawMBAHDhwAN27d4fJZCq2XUBAAAoLC3H8+HFDL/SXX34pf+IAzp49W+T06hs3bgBAlZhFoXP9yDHr9+uvv6JmzZpV4v/oHaF+Hh4e6Ny5s9zetm0b/Pz8EBISUiHnt2eOUD9bs4t7ZFatWoU///xTbn/88cc4c+YMevfuXeprBw0ahNOnT+O999677Vhubi5ycnIAQJ7r7bffNrRJSEgo8ryWTj8LDg7G/v37kZGRYdifmJgIJycni/5j1J3O9SO963f+/Pnb9h04cACbN29GZGQknJzs4ifOqnSuX1HWrVuHH3/8EePHj2f9SmGP9bMFu7gi4+npic6dOyM6Ohpnz55FQkICgoKC8PTTT5f62mHDhiEpKQmjR49GcnIyOnXqhIKCAqSnpyMpKQlbt25Fu3bt0Lp1awwZMgQLFy7E1atXERYWhq+//hrHjh0r8ryWTj+bOHEivvjiC4SHhyMmJgZeXl7YsmULvvjiCzz11FPw9fUtz0eiFZ3rBwALFizAlStX8PvvvwMAPvvsM7m+wnPPPYe6deta/mFoSOf6Pfroo3B1dUVYWBjq1auHI0eOYOnSpXBzc8Prr79eno9DOzrX79tvv8WMGTMQGRkJLy8v7N27F8uXL0evXr0wbty48nwc2tG5foCd/H5W+jwpxa3pZ4mJieLFF18U9erVE66urqJPnz4iKyvL0DYiIkKEhoYWeZ78/Hwxe/ZsERoaKlxcXISHh4do27atmD59urh69apsl5ubK8aOHSu8vLyEu7u76Nu3rzh58uQdTz/7/vvvRe/evYWPj4+oUaOGCA4OFvHx8eLGjRtl+jx04yj1CwgIMEydV/+cOHGiLB+JVhyhfvPnzxft27cXnp6eonr16qJBgwZi6NCh4ujRo2X+PHTjCPU7duyYiIyMFHfffbdwcXERISEhYtasWSIvL6/Mn4duHKF+QtjH76dddGTWr19vyzSonFg/vbF+emP99Mb6VRzHH4AkIiIih8WODBEREWmLHRkiIiLSlkkIIWydBBEREVF58IoMERERaYsdGSIiItKWxQvilbT8MVlPRY38sX62wfrprSJH3llD2+B3UG+W1I9XZIiIiEhb7MgQERGRttiRISIiIm2xI0NERETaYkeGiIiItMWODBEREWmLHRkiIiLSFjsyREREpC12ZIiIiEhb7MgQERGRttiRISIiIm2xI0NERETaYkeGiIiItMWODBEREWmLHRkiIiLSFjsyREREpK3qtk6gMgwYMEDGM2bMMBwLDQ2V8Q8//CDjqVOnGtp9/fXXVsqOrKFXr16G7cmTJ8t4woQJMk5NTa20nIgcnfpbq/62AsCOHTtkvGvXrspKicrg888/l/EDDzxgOHb48GEZd+3aVcaXL1+2el6l4RUZIiIi0hY7MkRERKQthx1aat26tYw3btwoY/XyGGAcgvjtt99k/PLLLxvatW3bVsZz5sypqDSpAj300EMyXrNmjeFYzZo1ZVy3bt1Ky6mqML8MfeDAARn/8ccfFp3DZDLJuKQatWnTRsbq9xIAOnXqJOOtW7cWe0zN99FHHzW0S05OtijfqqR+/foydnV1NRxbvHixjNUahoeHG9pNmzZNxurw7ttvv11RadIdEkIUGQPAkSNHZGwPw0kqXpEhIiIibbEjQ0RERNpy2KGluLg4GX/55Zcyfvjhhw3tcnNzi3z9448/btgeP368jGNjY2XMYSbbUmcjqXHt2rUN7dQhiLS0NKvnVRVERkbKWP2OAcCqVatkPHHiRBk3atTI0K5z584ybtKkiYyfe+65cuV08OBBGb/22muGY4mJiTJu3ry5jC9cuFCu93I0tWrVMmwvWLBAxl26dJGxh4eHod1dd90lY3U4Qh1mMnfPPfeUN02tOTs7FxlnZ2fbIh0AQEBAgIxbtGhhszzuBK/IEBERkbbYkSEiIiJtsSNDRERE2nKYe2RGjRpl2FbHvZ9++ukyn6+goMCwnZCQIOOvvvpKxj/++KOhHaduVi51pebCwkIZP/XUU4Z26nRgKr97771XxitXriy23bBhw2QcFRUl45KmVav3VJhP71y7dq2MO3bsKONPP/3U0E79nnp7exuOnT59WsbF3RtXlZnfl6QuZ6DeP2P+m6euBvvJJ5/IuF+/foZ26v0zap2qEh8fHxkHBwfLeNu2bbZIBwDQrFkzGTds2LDYdps2baqMdMqFV2SIiIhIW+zIEBERkba0HlpSp0j379/fcMz8suadUoea1EurXBXU+tTpnrNmzTIcq1GjhozV1XyXL19u/cSqgMaNGxu21Sm56mqvJSlpOEl9eOCJEydkrE6VBoDt27fLWF2l+dq1a8We++rVqxblV9WEhITIOD09XcbHjx83tDt27JiMFy1aJOMNGzYY2hU3dVg9N/1NXT1ejSuT+fDRsmXLimy3b98+w7Y6hGhveEWGiIiItMWODBEREWmLHRkiIiLSlnb3yLi5ucl43LhxMn722WcN7fLz8yslH0vvE6CyUZc9T0pKknG3bt0M7dR7ksaOHWv1vKqaJ5980rCtPkFadePGDcP2li1bZLxjxw4Zr1+/3tBOfTK2+dN2i1NZ321Hof5mAsDdd98t46VLl8p48ODBhnbqIx7U+2LM74lxcXEp8n3z8vLKnixZnflyJMX9G3b+/HnDdkn3o9kar8gQERGRttiRISIiIm1pPbSkPkH15MmTlfa+6pNg1ScuU8Xx8/OTsflwkkq95G2+GizduaysrGKPTZ06Vcbm0+LJtmJiYmT8yiuvGI6pQ0vqaq3qfqD4IbygoCDDtjpcWK9ePRkPHTrU0I5LU9iO+pT5MWPGFNtOXRF/7ty5Vs2pIvGKDBEREWmLHRkiIiLSlnZDSyr1QWZqXBHM78RXH1p36tQpGX/zzTcV+r70t549exa5f926dYbtd999tzLSqbLMVx+9efOmjJs3b17Z6ZCFevToIWNPT0/DMXVofM+ePTJWH7pqLjAwUMbqgyEBIDQ0tMjXTJkyxbDNoSXb+de//iVj8/8eVM8//7yMv/32W6vmVJF4RYaIiIi0xY4MERERaYsdGSIiItKWSVi4nKbJZLJ2LmX20Ucfydj8acdfffVVmc9Xu3ZtGR86dMhwTH3yZ0nT1yqapaudlsYe66dydXU1bGdkZMjY19dXxupYPQBkZmZaNa875Wj1S0tLk3GrVq1kHB0dbWi3cuXKykrJqiqqfkDl1lB9Qrj5d6u4ZQrq1Klj2FZX+lXvnWjatGmx73vp0iUZR0ZGGo6lpqaWkLH1ONp30FJdu3aV8ebNm2VsvtKzuoLvP//5Txnby9PLLakfr8gQERGRttiRISIiIm1pPf1avczdunVrwzFLh5YeeughGc+ZM0fG5qtS7tq1q+wJksVGjBhh2FaHk9544w0Znz59utJyotu9//77Mp43b56MP/jgA0O7ixcvylh9gCRZhzqMAADTpk2Tsfr9AYwP//Px8ZHxDz/8YGin1lRdXbukoSV1CMNWQ0n0N3VFZ/PhJNWECRNkbC/DSWXFKzJERESkLXZkiIiISFtaDy2pd8ibz5pISEiQsbqS4cyZMw3t1EurDz74oIztfTaMI1BXY+7fv7/h2B9//CHjBQsWyPjGjRtWz4uKp9ZiwIABMlZnOwDGy9o7d+6U8dWrV62YXdWlrtYLAB06dJDxpEmTDMeWLVsm423btsk4NzfX0E5dxbkk6orA6nAjVS5nZ2fDtvqdVGt05MgRQ7vExETrJlYJeEWGiIiItMWODBEREWmLHRkiIiLSltYr+/r5+cnYfNxvyZIlMlbvfXnnnXcM7d577z0ZFxQUVHSKd8yRV6WMjY2V8axZswzHDh8+LON777230nKqaI5cvwYNGsh47969hmP+/v4ybt++vYz37dtn/cQqkK4r+6qrLv/111+GY+rUeDUuibpK7/Tp0w3H7r//fhmHhITI+NixY5Yla2WO/B10d3eXsfkyB+p9U+q/bcOGDTO0W7dunZWyqxhc2ZeIiIgcGjsyREREpC2tp1+rU3S//PJLw7F///vfMm7btq2Mz5w5Y/3EyCLq9F1z6tAS2Sf1u9SvXz/DMXWFV3X4NiIiwtBOXWWWKs7Bgwfv+ByPPPKIjIsbPgKMU3uzs7Pv+H3Jci+88IKMw8PDi22nPlTZ3oeSyoNXZIiIiEhb7MgQERGRtrQeWoqJiZFxnz59DMfy8/NlrN7ZTfbJfMVe9QGeVLnq1q0rY0tX4lUf4AoYZ6GpDy0MCwsztDMfEibb6dGjh2F7xYoVMi7pNzQ+Pl7G6nA/WYeXl5eMn3322WLbZWVlyXju3LlWzcnWeEWGiIiItMWODBEREWmLHRkiIiLSlnYr+3bu3FnGa9askbG6ei8A9O7dW8bqCpObNm2yYnYVz5FXpfzuu+9kHBoaajhWp06dyk7HKnSs35AhQ2T8+eefG45Zes+Mm5ubjA8dOiRj8xW4+/btW54UK42uK/uWh6+vr2FbnUJ/3333yfjXX381tOvatauMT506ZZ3k7oCO38GSfPHFFzLu2bNnse2aNm0q4+PHj1s1J2viyr5ERETk0NiRISIiIm1pN/1avVy2Z88eGZtfsq5du7aMFy5cKOOdO3ca2l26dKmiUyTSWlBQkIzVqdiA5UNL169fl7G6ei+XQrBf6kN4AaB169ZFtlOHNgD7HE5yJOrDWQGgRYsWRbYzHz7SeTiprHhFhoiIiLTFjgwRERFpS7uhpV69esm4pEtn33//vYxv3rwp4wceeMDQLjExsQKzo7JQV/NVZ7kAxod+fvjhh5WWU1VkPhtDnaHy7rvvluucHTp0kHGTJk1kfOXKlXKdj6xPfbguADg5/e//c9W6lfe/CSofdaYucPtQ0y2vvvpqZaRjl3hFhoiIiLTFjgwRERFpix0ZIiIi0pZ298isX79exuHh4Ra95syZMzLmPTL2Izo6WsapqamGY+ZTQcl61HtiAKBfv34yNn9qrrrkgapdu3aG7VWrVslYXaX5v//9b7nzpIqnroA+ZcqUYtutXbtWxunp6VbNiSynfs8++ugjG2ZiW7wiQ0RERNpiR4aIiIi0pd3Q0pYtW2Q8fvx4GT/77LOGdmlpaTJu3ry5jJctW2a13Khs1Onz5lOsp06dKmP1oZ8bNmywfmJVzNmzZw3b2dnZMp43b57h2OjRo2Xcpk0bGb/11luGdupw0i+//CLjRYsW3VmyVKEGDx4s44YNGxqOZWRkyHjOnDmVlhNZTl1pu7Cw0IaZ2BavyBAREZG22JEhIiIibbEjQ0RERNrS7h4Z9am66jTR2NhYQ7uhQ4fKeOnSpTKeP3++FbOj8vrss88M26NGjZLxihUrZJyfn1/i66jszJ9erH7eMTExhmPm0+RvKSgoMGyr96LNnDlTxnxEgT5Wrlwp48zMTNslUsX9/PPPhu3Lly/bKBP7xSsyREREpC12ZIiIiEhbJiGEsKih2RNyqXJYWJ5SsX62oWP9XFxcZDxhwgTDMXX11x07dsh44sSJhnaOsvprRdUP4HfQVnT8DtL/WFI/XpEhIiIibbEjQ0RERNri0JKd42VRvbF+euPQkv74HdQbh5aIiIjIobEjQ0RERNpiR4aIiIi0xY4MERERaYsdGSIiItIWOzJERESkLYunXxMRERHZG16RISIiIm2xI0NERETaYkeGiIiItMWODBEREWmLHRkiIiLSFjsyREREpC12ZIiIiEhb7MgQERGRttiRISIiIm39H+CWAVPFFG3cAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -505,7 +646,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "### What's next\n", "\n", @@ -520,11 +665,6 @@ "\n", "Try a different network structure, which one would you use?" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] } ], "metadata": {