From 4d45df87261d0e02a6f5970901d8efffaca2d990 Mon Sep 17 00:00:00 2001 From: Colin Bernet Date: Mon, 11 Feb 2019 13:35:32 +0100 Subject: [PATCH] hwd convnet almost done --- hwd_deeplearning_google/hwd_dl_google.ipynb | 1351 +------------------ 1 file changed, 1 insertion(+), 1350 deletions(-) diff --git a/hwd_deeplearning_google/hwd_dl_google.ipynb b/hwd_deeplearning_google/hwd_dl_google.ipynb index 1f37f9e..69dc22b 100644 --- a/hwd_deeplearning_google/hwd_dl_google.ipynb +++ b/hwd_deeplearning_google/hwd_dl_google.ipynb @@ -1,1350 +1 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "SRvDywmJtVds" - }, - "source": [ - "## About this tutorial \n", - "\n", - "To do deep learning in practice, you need a Graphics Processing Unit (GPU). Or the time needed to train your deep neural nets on the CPU of your machine will be prohibitive.\n", - "\n", - "We have seen how to [install TensorFlow on Windows](https://thedatafrog.com/install-tensorflow-windows/) and [on Linux](https://thedatafrog.com/install-tensorflow-ubuntu/), which is useful if you have an nvidia graphics card in your PC. \n", - "\n", - "But what if you don't? \n", - "\n", - "If you just want to learn deep learning, there is a very easy solution that requires **no specific hardware or software**, the Colaboratory platform from Google.\n", - "\n", - "Let's try and use it for the first time. \n", - "\n", - "In this tutorial, you will learn: \n", - "\n", - "* What is the google colaboratory platform and how to use it. \n", - "* How to set up a first convolutional neural network to recognize handwritten digits with very high accuracy \n", - "\n", - "**Prerequisites**\n", - "\n", - "* Please have a look at [my first tutorial on handwritten digits](https://thedatafrog.com/handwritten-digit-recognition-scikit-learn/). This will show you which kind of performance we can get without deep learning, and will teach you the basics of numpy, matplotlib, and neural networks. \n", - "* You should know a bit of [Keras](https://thedatafrog.com/first-neural-network-keras/)\n", - "\n", - "\n", - "## The Google Colaboratory Platorm\n", - "\n", - "Google set up the [Colaboratory Platform](https://colab.research.google.com/notebooks/welcome.ipynb) to promote the use of TensorFlow for deep learning, and it's awesome! \n", - "\n", - "It provides: \n", - "\n", - "* python environments with all the necessary software, and you can install more if needed\n", - "* access to GPUs\n", - "* excellent tutorials\n", - "* the possibility to run your own code (and my stuff!)\n", - "\n", - "In particular, the author of Keras and google engineer François Chollet set up extremely useful tutorials in which Keras is used as an interface to TensorFlow, such as [this one](https://colab.research.google.com/github/tensorflow/tpu/blob/master/tools/colab/fashion_mnist.ipynb) where we learn how to classify clothing items (trousers, shoes, and whatnot). \n", - "\n", - "I do encourage you to dig into the google colab tutorials on your own! I would only advise you to stick to the keras-based tutorials which are much easier. \n", - "\n", - "On my side, I intend to use this tool to provide you with original content, and more details about the subjects already covered by google. \n", - "\n", - "💡 **To run your jupyter notebook on google colab, you just need to commit it to github, and to provide a specific url to direct google colab to the notebook.**\n", - "\n", - "The url of this tutorial on github is https://github.com/cbernet/maldives/blob/master/hwd_deeplearning_google/hwd_dl_google.ipynb\n", - "\n", - "The url to run it on google colab is https://colab.research.google.com/github/cbernet/maldives/blob/master/hwd_deeplearning_google/hwd_dl_google.ipynb\n", - "\n", - "Just follow this link now, and click on CONNECT on the top right side. \n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "9mw3fUDitVdy" - }, - "source": [ - "## The Dataset\n", - "\n", - "In [my first tutorial on handwritten digits](https://thedatafrog.com/handwritten-digit-recognition-scikit-learn/), we have used the simplify digits dataset provided with scikit-learn for simplicity, and because we didn't have the resources to process the [real MNIST handrwitten digits dataset](http://yann.lecun.com/exdb/mnist/) at that time. \n", - "\n", - "Here, we have access to TensorFlow, which provides an easy access to this dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 69 - }, - "colab_type": "code", - "executionInfo": { - "elapsed": 1914, - "status": "ok", - "timestamp": 1549723876909, - "user": { - "displayName": "Colin Bernet", - "photoUrl": "https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg", - "userId": "10813031011844134122" - }, - "user_tz": -60 - }, - "id": "jFKEynAytVd2", - "outputId": "d10957c8-95be-4708-dd83-bdf0ea7436ee" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz\n", - "11493376/11490434 [==============================] - 0s 0us/step\n", - "11501568/11490434 [==============================] - 0s 0us/step\n" - ] - } - ], - "source": [ - "import tensorflow as tf\n", - "(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "gQLSCxxYtVeC" - }, - "source": [ - "Let's have a look our dataset." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 34 - }, - "colab_type": "code", - "executionInfo": { - "elapsed": 1870, - "status": "ok", - "timestamp": 1549723876915, - "user": { - "displayName": "Colin Bernet", - "photoUrl": "https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg", - "userId": "10813031011844134122" - }, - "user_tz": -60 - }, - "id": "311Pzt80tVeG", - "outputId": "0f154208-e030-4f2f-805b-d5c561774870" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(60000, 28, 28) (60000,) (10000, 28, 28) (10000,)\n" - ] - } - ], - "source": [ - "print x_train.shape, y_train.shape, x_test.shape, y_test.shape" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "cxrNL8agtVeR" - }, - "source": [ - "so: \n", - "\n", - "* 60,000 training samples and 10,000 test samples\n", - "* images are 28x28 = 784 pixels, while they are 8x8=64 pixels in the digits dataset of sckikit-learn. We have images with much better resolution, but need networks with many more neurons to process them" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "FWCU17B1tVeU" - }, - "source": [ - "Now let's plot some of them. " - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "colab": {}, - "colab_type": "code", - "id": "umgVXlOetVeX" - }, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt\n", - "def plot_img(i):\n", - " # plot the image and the target for sample i\n", - " plt.imshow(x_train[i])\n", - " plt.title(y_train[i])" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 362 - }, - "colab_type": "code", - "executionInfo": { - "elapsed": 557, - "status": "ok", - "timestamp": 1549723883322, - "user": { - "displayName": "Colin Bernet", - "photoUrl": "https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg", - "userId": "10813031011844134122" - }, - "user_tz": -60 - }, - "id": "lf9qi83jtVed", - "outputId": "98e1ece7-ab57-4ce0-a005-efa31791d41d" - }, - "outputs": [ - { - "data": { - "image/png": "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\nmRLQvzt69Kh5740bN8x7R40aFcg46ADc7ggABsQSAAyIJQAYEEsAMCCWAGBALAHAgFgCgAGxBAAD\nYgkABsQSAAzMH/4L4H+WL19u3puXl2fem5OTY97blr9wifbjyhIADIglABgQSwAwIJYAYEAsAcCA\nWAKAAbEEAANiCQAGxBIADLrEHywDOou5c+c6PQKegytLADAglgBgQCwBwIBYAoABsQQAA2IJAAbE\nEgAMiCUAGBBLADAglgBgQCwBwIBYAoABsQQAA2IJAAbEEgAMiCUAGBBLADAglgBgQCwBwIBYAoAB\nsQQAA/66IxBifr/fvPfKlSvmva+99log4yBApljm5OSorKxMT5480dKlSzVmzBitXbtWDQ0Nio2N\n1fbt2xUZGRnqWQHAMa3G8syZM7p48aK8Xq9qamo0Z84cJSUlKT09XWlpadq5c6cKCwuVnp7eEfMC\ngCNafc1y/Pjx2r17tySpb9++qqurU2lpqaZNmyZJSk5OVklJSWinBACHtRrL7t27y+12S5IKCws1\nZcoU1dXVNT3tjomJkc/nC+2UAOAw8xs8x44dU2Fhofbv36/p06c3rbflxWvgRfHVV1+FZC/ClymW\np06dUl5enr755hv16dNHbrdbDx8+VM+ePVVVVaW4uLhQzwmEleXLl5v3fv311+a9J06cMO9NTk42\n70X7tfo0/N69e8rJydHevXsVHR0tSZo4caKKiookScXFxZo8eXJopwQAh7V6ZXn06FHV1NQoIyOj\naW3r1q1at26dvF6vEhISNHv27JAOCQBOazWW8+bN07x585qtHzhwICQDAUA44g4eIMRcLpd5b2Nj\nYwgnQXtwbzgAGBBLADAglgBgQCwBwIBYAoABsQQAA2IJAAbEEgAMiCUAGBBLADDgdkcgjLTlI9r+\n+WsF6BhcWQKAAbEEAANiCQAGxBIADIglABgQSwAwIJYAYEAsAcCAWAKAAbEEAANudwRCzO/3Oz0C\ngoArSwAwIJYAYEAsAcCAWAKAAbEEAANiCQAGxBIADIglABgQSwAw4A4eIAAffPCBeW9eXl4IJ0FH\n4coSAAyIJQAYEEsAMCCWAGBALAHAgFgCgAGxBAADYgkABsQSAAyIJQAYuPz8NSUAaJXp3vCcnByV\nlZXpyZMnWrp0qU6cOKELFy4oOjpakrRkyRJNnTo1lHMCgKNajeWZM2d08eJFeb1e1dTUaM6cOZow\nYYJWr16t5OTkjpgRABzXaizHjx+vsWPHSpL69u2ruro6NTQ0hHwwAAgnbXrN0uv16ty5c+revbt8\nPp/q6+sVExOj9evXq3///qGcEwAcZY7lsWPHtHfvXu3fv1/l5eWKjo6Wx+NRfn6+bty4oQ0bNoR6\nVgBwjOlXh06dOqW8vDwVFBSoT58+SkpKksfjkSSlpKSooqIipEMCgNNajeW9e/eUk5OjvXv3Nr37\nvXLlSlVWVkqSSktLNXz48NBOCQAOa/UNnqNHj6qmpkYZGRlNa3PnzlVGRoZ69eolt9ut7OzskA4J\nAE7jl9IBwIDbHQHAgFgCgAGxBAADYgkABsQSAAyIJQAYEEsAMCCWAGBALAHAgFgCgAGxBAADYgkA\nBsQSAAyIJQAYEEsAMCCWAGBALAHAgFgCgAGxBAADYgkABsQSAAyIJQAYEEsAMCCWAGBALAHAgFgC\ngAGxBAADYgkABsQSAAwinPihW7Zs0fnz5+VyuZSVlaWxY8c6MUZQlZaWatWqVRo+fLgkacSIEVq/\nfr3DUwWuoqJCy5cv1+LFi7VgwQJdv35da9euVUNDg2JjY7V9+3ZFRkY6PWabPPuYMjMzdeHCBUVH\nR0uSlixZoqlTpzo7ZBvl5OSorKxMT5480dKlSzVmzJhOf56k5o/rxIkTjp+rDo/l2bNndeXKFXm9\nXl2+fFlZWVnyer0dPUZIJCYmKjc31+kx2u3BgwfatGmTkpKSmtZyc3OVnp6utLQ07dy5U4WFhUpP\nT3dwyrZp6TFJ0urVq5WcnOzQVO1z5swZXbx4UV6vVzU1NZozZ46SkpI69XmSWn5cEyZMcPxcdfjT\n8JKSEqWmpkqShg4dqjt37qi2trajx8C/iIyMVEFBgeLi4prWSktLNW3aNElScnKySkpKnBovIC09\nps5u/Pjx2r17tySpb9++qqur6/TnSWr5cTU0NDg8lQOxrK6uVr9+/Zq+7t+/v3w+X0ePERKXLl3S\nsmXLNH/+fJ0+fdrpcQIWERGhnj17PrVWV1fX9HQuJiam052zlh6TJB06dEiLFi3SJ598otu3bzsw\nWeC6d+8ut9stSSosLNSUKVM6/XmSWn5c3bt3d/xcOfKa5f/z+/1OjxAUr776qlasWKG0tDRVVlZq\n0aJFKi4u7pSvF7XmRTlns2bNUnR0tDwej/Lz8/Xll19qw4YNTo/VZseOHVNhYaH279+v6dOnN613\n9vP0/4+rvLzc8XPV4VeWcXFxqq6ubvr65s2bio2N7egxgi4+Pl4zZsyQy+XS4MGDNWDAAFVVVTk9\nVtC43W49fPhQklRVVfVCPJ1NSkqSx+ORJKWkpKiiosLhidru1KlTysvLU0FBgfr06fPCnKdnH1c4\nnKsOj+WkSZNUVFQkSbpw4YLi4uIUFRXV0WME3ZEjR7Rv3z5Jks/n061btxQfH+/wVMEzceLEpvNW\nXFysyZMnOzxR+61cuVKVlZWS/n5N9p/fZOgs7t27p5ycHO3du7fpXeIX4Ty19LjC4Vy5/A5cq+/Y\nsUPnzp2Ty+XSxo0bNWrUqI4eIehqa2u1Zs0a3b17V/X19VqxYoXeeecdp8cKSHl5ubZt26Zr164p\nIiJC8fHx2rFjhzIzM/Xo0SMlJCQoOztbPXr0cHpUs5Ye04IFC5Sfn69evXrJ7XYrOztbMTExTo9q\n5vV6tWfPHg0ZMqRpbevWrVq3bl2nPU9Sy49r7ty5OnTokKPnypFYAkBnwx08AGBALAHAgFgCgAGx\nBAADYgkABsQSAAyIJQAYEEsAMPgvBwnlVMbd1SUAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "tags": [] - }, - "output_type": "display_data" - } - ], - "source": [ - "plot_img(2)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "rOzBtEWxtVem" - }, - "source": [ - "Please have a look at other images by repeating the plot above for different samples" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "wN7sUkhFtVeq" - }, - "source": [ - "Now we should check the actual data for a given image:" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 1476 - }, - "colab_type": "code", - "executionInfo": { - "elapsed": 428, - "status": "ok", - "timestamp": 1549723885621, - "user": { - "displayName": "Colin Bernet", - "photoUrl": "https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg", - "userId": "10813031011844134122" - }, - "user_tz": -60 - }, - "id": "JUBPdg6NtVeu", - "outputId": "519d4e2b-398d-4470-ff9b-bc927939cb72" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,\n", - " 18, 18, 18, 126, 136, 175, 26, 166, 255, 247, 127, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 0, 0, 30, 36, 94, 154, 170,\n", - " 253, 253, 253, 253, 253, 225, 172, 253, 242, 195, 64, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 0, 49, 238, 253, 253, 253, 253,\n", - " 253, 253, 253, 253, 251, 93, 82, 82, 56, 39, 0, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 0, 18, 219, 253, 253, 253, 253,\n", - " 253, 198, 182, 247, 241, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 0, 0, 80, 156, 107, 253, 253,\n", - " 205, 11, 0, 43, 154, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 1, 154, 253,\n", - " 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 253,\n", - " 190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 190,\n", - " 253, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35,\n", - " 241, 225, 160, 108, 1, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 81, 240, 253, 253, 119, 25, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 45, 186, 253, 253, 150, 27, 0, 0, 0, 0, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0, 16, 93, 252, 253, 187, 0, 0, 0, 0, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0, 0, 0, 249, 253, 249, 64, 0, 0, 0, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 46, 130, 183, 253, 253, 207, 2, 0, 0, 0, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39,\n", - " 148, 229, 253, 253, 253, 250, 182, 0, 0, 0, 0, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 114, 221,\n", - " 253, 253, 253, 253, 201, 78, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 0, 0, 23, 66, 213, 253, 253,\n", - " 253, 253, 198, 81, 2, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 18, 171, 219, 253, 253, 253, 253,\n", - " 195, 80, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 55, 172, 226, 253, 253, 253, 253, 244, 133,\n", - " 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 136, 253, 253, 253, 212, 135, 132, 16, 0,\n", - " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0]], dtype=uint8)" - ] - }, - "execution_count": 5, - "metadata": { - "tags": [] - }, - "output_type": "execute_result" - } - ], - "source": [ - "x_train[0]" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "3IDwJz6UtVe4" - }, - "source": [ - "We see that the values in the image array are between 0 and 255 (the values are coded on 8 bits). \n", - "\n", - "This is not adequate. Indeed, for a neural network to work well, it must deal with input values close to unity, and the weights in the network should be kept small. So we're going to normalize all images to values between 0. and 1: " - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 34 - }, - "colab_type": "code", - "executionInfo": { - "elapsed": 864, - "status": "ok", - "timestamp": 1549723887771, - "user": { - "displayName": "Colin Bernet", - "photoUrl": "https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg", - "userId": "10813031011844134122" - }, - "user_tz": -60 - }, - "id": "p1bOPi4ltVe8", - "outputId": "8f62512f-17aa-4b4d-bc11-9c7d9d8f973e" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.0\n" - ] - } - ], - "source": [ - "import numpy as np\n", - "x_train = np.divide(x_train, 255.)\n", - "print np.amax(x_train)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "votCeFOGtVfI" - }, - "source": [ - "💡 **Always normalize your input data.**" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "colab": {}, - "colab_type": "code", - "id": "QGVarm2ItVfL" - }, - "outputs": [], - "source": [ - "x_test = np.divide(x_test, 255.)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "n4QP_ozjtVfR" - }, - "source": [ - "We should also check our targets: " - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 34 - }, - "colab_type": "code", - "executionInfo": { - "elapsed": 448, - "status": "ok", - "timestamp": 1549723891183, - "user": { - "displayName": "Colin Bernet", - "photoUrl": "https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg", - "userId": "10813031011844134122" - }, - "user_tz": -60 - }, - "id": "tWDbXQCotVfT", - "outputId": "d2a30f4d-159d-4cf4-9a13-d3d06c1f8edf" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "5" - ] - }, - "execution_count": 8, - "metadata": { - "tags": [] - }, - "output_type": "execute_result" - } - ], - "source": [ - "y_train[0]" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "wzeZSdx9tVfa" - }, - "source": [ - "For the reasons explained in [our first keras tutorial](https://thedatafrog.com/first-neural-network-keras/), we're going to perform one-hot encoding on the targets: " - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 52 - }, - "colab_type": "code", - "executionInfo": { - "elapsed": 478, - "status": "ok", - "timestamp": 1549723893031, - "user": { - "displayName": "Colin Bernet", - "photoUrl": "https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg", - "userId": "10813031011844134122" - }, - "user_tz": -60 - }, - "id": "1oiAvEIxtVfc", - "outputId": "69e767fa-cea3-4920-efbc-53aeee0c4062" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Using TensorFlow backend.\n" - ] - } - ], - "source": [ - "from keras.utils import np_utils\n", - "y_train = np_utils.to_categorical(y_train, 10)\n", - "print y_train[0]" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "colab": {}, - "colab_type": "code", - "id": "wFmpoD8MtVfk" - }, - "outputs": [], - "source": [ - "y_test = np_utils.to_categorical(y_test, 10)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "YMUeoGyxtVfr" - }, - "source": [ - "## Convolutional Neural Networks" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "zjZ6JG1LtVft" - }, - "source": [ - "Classifying handwritten digits in 10 categories is a task of image recognition. \n", - "\n", - "Since convolutional neural networks are known to provide excellent performance for image recognition, we're going to use them. \n", - "\n", - "A convolutional neural network for image classification typically features the following layers: \n", - "\n", - "* the first layers are **convolutional layers**, interleaved with **pooling layers**. The role of these layers is to extract interesting features from the image.\n", - "* then come **dense layers**, which interpret the features from the first stage, and provides the probability for the image to belong to each category. \n", - "\n", - "In addition to these, **dropout** layers can be added to normalize the network or in other words, to make it more stable \n", - "\n", - "Before building the network, I'd like to explain each kind of layer in details. " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "CYREa4eftVfv" - }, - "source": [ - "### Convolutional layers" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "rxK8mGf0tVfx" - }, - "source": [ - "A 2D [convolutional layer](https://keras.io/layers/convolutional/) scans the input image from left to right and from top to bottom, with a small window, called the **kernel**. In the example below, we use a window of 5x5 pixel. After every step, the image moves right. Here, we use a **stride** of 1 pixel, meaning that we move the window by 1 pixel. When the right border of the window hits the right border of the image, the window is returned to the left and moved down by 1 pixel. \n", - "\n", - "![](https://github.com/cbernet/maldives/blob/master/hwd_deeplearning_google/conv_layer.png?raw=1)\n", - "\n", - "At each step, the pixels within the window are considered and a number of features are extracted. These features are just some values, and let's say there are **nf** features to be extracted for each position of the window (nf could be of the order of 10). \n", - "\n", - "At first these features are completely meaningless, but the network is going to be trained to extract meaningful features. For example, if you do face recognition, the features might be related to the presence of an eye or a nose. We will have a look at that later in the context of our handwritten digit recognition problem. For now, just keep in mind that a fixed number of values are extracted for each window, and that these values are going to make sense to the network (and maybe not to us!).\n", - "\n", - "Now, what kind of data do we get out of the convolutional layer? \n", - "Let **(nx, ny)** be the shape of the picture, so nx and ny are the numbers of pixels in the image along the horizontal and vertical directions, respectively. \n", - "\n", - "For each window position, we get 10 features, and the window positions are arranged in a 2D array. So the output of the convolutional layer is a 3D array (ox, oy, nf), where **ox** and **oy** are the numbers of output pixels along the horizontal and vertical directions, and nf is the number of features for each pixel.\n", - "\n", - "The user (we) decide on the number of features to be extracted, so we know that. But what about ox and oy? \n", - "\n", - "The answer is simple. For example: **ox = nx - kernel_size + 1**. \n", - "\n", - "To convince yourself, you can use the simple case below, with an image of size 7x5 and a window of size 3x3. \n", - "\n", - "![](https://github.com/cbernet/maldives/blob/master/hwd_deeplearning_google/conv_layer_simple.png?raw=1)\n", - "\n", - "Ok... I have spent three hours in blender trying to model a convolutional layer in 3D as an illustration, and barely managed to model a cube. So I gave up on this software and, as a last resort, went back to my favorite 3D modelling hardware: \n", - "\n", - "![](https://github.com/cbernet/maldives/blob/master/hwd_deeplearning_google/crayon.png?raw=1)\n", - "\n", - "And here's the result, with shading and transparency! \n", - "\n", - "![](https://github.com/cbernet/maldives/blob/master/hwd_deeplearning_google/conv_layer_schema.png?raw=1)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "ik0k9DqUtVfz" - }, - "source": [ - "### Pooling layers\n", - "\n", - "Pooling layers are used to reduce the size of the data at a given stage to reduce the complexity of the network. In this case we will use 2D pooling layers, and in particular, the [MaxPooling2D](https://keras.io/layers/pooling/). \n", - "\n", - "The keras documentation is a bit scarce, so let's see how it works on a simple image. Here we use [seaborn](https://seaborn.pydata.org/), a high-level interface to matplotlib, to get a heat map with annotations." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 368 - }, - "colab_type": "code", - "executionInfo": { - "elapsed": 705, - "status": "ok", - "timestamp": 1549723898031, - "user": { - "displayName": "Colin Bernet", - "photoUrl": "https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg", - "userId": "10813031011844134122" - }, - "user_tz": -60 - }, - "id": "cAugHvJNtVf3", - "outputId": "a4dc441c-918f-4db8-903c-06644439bf08" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 11, - "metadata": { - "tags": [] - }, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\nfMr/B8IrDNo8NumtAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "tags": [] - }, - "output_type": "display_data" - } - ], - "source": [ - "import numpy as np\n", - "import seaborn as sns\n", - "zero = np.array([[0,0,0,1,0,0,0,0],\n", - " [0,1,2,3,2,1,0,0],\n", - " [0,4,3,1,3,2,0,0],\n", - " [1,5,2,0,0,5,1,0],\n", - " [2,4,0,0,0,6,2,0],\n", - " [1,3,0,0,0,4,1,0],\n", - " [0,2,3,2,1,3,0,0],\n", - " [0,0,3,4,3,1,0,0]])\n", - "sns.heatmap(zero, annot=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "RIFajNK8tVgC" - }, - "source": [ - "Pooling layers are based on a pooling window that moves across the image like the kernel of the convolutional layers. For every position of the pooling window, a number is extracted, for example: \n", - "\n", - "* the maximum value in the window (max pooling)\n", - "* the average value over the window (average pooling)\n", - "\n", - "If we use a pooling window of 2x2 pixels, the extracted value would be 1 in the case of max pooling, and 1/4 = 0.25 in the case of average pooling. \n", - "\n", - "We're going to use [scikit-image](http://scikit-image.org/docs/dev/auto_examples/numpy_operations/plot_view_as_blocks.html) to perform each pooling operation. By the way I didn't know scikit-image, I just googled it. It's always useful to do that when you're trying to do something in python" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "colab": {}, - "colab_type": "code", - "id": "NzMgr3M1tVgF" - }, - "outputs": [], - "source": [ - "from skimage.util import view_as_blocks\n", - "pooling_window_shape = (2,2)\n", - "view = view_as_blocks(zero, pooling_window_shape)\n", - "flatten_view = view.reshape(view.shape[0], view.shape[1], -1)\n", - "mean_view = np.mean(flatten_view, axis=2)\n", - "max_view = np.max(flatten_view, axis=2)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 368 - }, - "colab_type": "code", - "executionInfo": { - "elapsed": 681, - "status": "ok", - "timestamp": 1549723900639, - "user": { - "displayName": "Colin Bernet", - "photoUrl": "https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg", - "userId": "10813031011844134122" - }, - "user_tz": -60 - }, - "id": "OOd8CPMPtVgN", - "outputId": "b8ca851b-a381-4265-f92c-880fca015b96" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 13, - "metadata": { - "tags": [] - }, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n16nI7OxszZgxQ7fddpuCwaBmzZqliIjm5zKKDQBgRLguscXExOipp5466/VsRQIAnMLEBgAwwhfh\njXtFUmwAACM8cg9ktiIBAG5hYgMAGOGVj62h2AAARnik1yg2AIAZXpnYuMYGAHAKExsAwAiPDGxM\nbAAAtzCxAQDM8MjIRrEBAIzwyuERig0AYIRHeo1iAwCY4ZV7RXJ4BADgFIoNAOAUtiIBAEZwjQ0A\n4BRORQIAnOKRXqPYAABmeGVi4/AIAMApFBsAwClsRQIAjPDITiTFBgAwwyvX2Cg2AIAZHrm4RbEB\nAIzwysTmkX71lu6De+lfls1UfKf2tqM4Z+OnmzXx9jt180+ydNc/36eyQ4dtR3JSp6REPf/qU3p3\n3VIte2+RhgwdZDuSc9qmp6jH+BvU8x9uUrebx8jfgZ8XXkGx/Z2o6CiN+NkYBWrqbEdxTl0goGkz\nZmn2zIf09vICXX/dtZrzRJ7tWE769b8/rHVFG3XTiGzN/bcFyv7HCbYjOSUqto1SRw1TSeEG7Vn2\nro7t2acuI662HQunUGx/Z/jEkdr1X5/rROCE7SjO2fTpFqWlpuryvn0kSePH3axPNmxSbW2t5WRu\nSe7SSZcP7K3XFy+XJH26/o968J9n2w3lmMaGBpUUrteJo9WSpLpD5fInxFtOZZ/P1/qHSWdVbI2N\njd95rayszGwSD0hM76T0K3ros7c32o7ipOJ9+5SWmtr0PDY2Vgnt22tfSYnFVO7p06+XDuwv1X3T\n79aKD1/RooL56tv/MtuxnBIK1qu25L9/BrZN66JAeaXFRN7g8/la/TCpxWJbs2aNRo8ereHDh+tX\nv/qVjh8/3vRn06ZNMxrECzKnjFXhS6vUEGqwHcVJgWC9/P7o017z+/0KBIKWErmpXfu2uqxPD23Z\nuE3jxvxc7/xhjX77/BxFRkbajuakuJQkJQ7orbINW21Hse6CmNheeOEF/eEPf9Ann3yiwYMHa/Lk\nyaqpqZH0/VPchWzgjwarsqRCB/+033YUZ7VpE6P6+tO3eIPBoGLbtLGUyE3Hq2tVWVGlojUfS5KW\nL31b8e3bqWuPNMvJ3NOua6pSRg7TvtVrm7YlL2oeabYWj/tHRkYqISFBkpSVlaXExERNnjxZ+fn5\nnjnWaUrPjN5K7tlFPYb8dcumTXysbn1ikt759zdVsrPYcjo3dO/WVavWfND0vOb4cVXX1Cg9/VKL\n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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "tags": [] - }, - "output_type": "display_data" - } - ], - "source": [ - "sns.heatmap(max_view, annot=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 368 - }, - "colab_type": "code", - "executionInfo": { - "elapsed": 607, - "status": "ok", - "timestamp": 1549723902714, - "user": { - "displayName": "Colin Bernet", - "photoUrl": "https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg", - "userId": "10813031011844134122" - }, - "user_tz": -60 - }, - "id": "_9_yO3pxtVgV", - "outputId": "e87d4447-e65a-4f97-c955-13fc54d74b35" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 14, - "metadata": { - "tags": [] - }, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\nUBdRKgi4AAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "tags": [] - }, - "output_type": "display_data" - } - ], - "source": [ - "sns.heatmap(mean_view, annot=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "gRi_9ACttVgg" - }, - "source": [ - "Coming back to our case, we will want to pool after a convolutional layer. The input to the pooling is a 3D array with several values (the features) for each pixel. \n", - "\n", - "In this case, the pooling layer will pool each feature separately for each pixel in x and y.\n", - "\n", - "So the pooling will reduce the dimensionality along the x and y directions, but the number of features in output will stay the same. That's good, because maxing or averaging over all features would not make any sense. " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "YrjHyl0FtVgj" - }, - "source": [ - "### Dense layers\n", - "\n", - "A sub-network of dense layers is added at the end of the deep neural network. The aim of this sub-network is to make use of the features extracted by the previous layers to perform the classification.\n", - "\n", - "We know about dense layers already, since the tutorial about [handwritten digits with scikit-learn](https://thedatafrog.com/handwritten-digit-recognition-scikit-learn/), so I'm not going to give details here. \n", - "\n", - "Two things to note: \n", - "\n", - "**1- Dense layers are fully connected to the previous layer.** This means that each neuron in the dense layer has a connection to all neurons in the previous layer. \n", - "\n", - "**2- The input to a dense layer is 1D.** But the output of our convolutional (or pooling) layers is 3D... So we will need to flatten the 3D data to 1D, by just serializing all numbers. To do that in keras, we will insert a [Flatten layer](https://keras.io/layers/core/) just before the dense layer. \n", - "\n", - "The last layer of our dense sub-network will have a **softmax activation**. This means that the output of neuron $k$ is set to \n", - "\n", - "$$y_k = \\frac{e^{z_k}}{\\sum_{i=1}^{N} e^{z_i}}$$,\n", - "\n", - "where the sum runs over the N neurons of the layer. \n", - "\n", - "Please note that the softmax activation is well suited to classification problems: \n", - "\n", - "* the probability for a given class is bound between 0 and 1. \n", - "* all probabilities sum up to 1\n", - "\n", - "### Dropout layers \n", - "\n", - "Deep convolutional neural networks are complicated and have a lot of tunable parameters. And for this reason, they can easily turn wrong.\n", - "\n", - "During the training, the network can **overfit** the training data. This means that it gets very good at recognizing specific examples of the training data, but looses its ability to recognize new, unseen examples. This is typically due to parts of the network that evolve in a coordinated way and in the wrong direction during training. \n", - "\n", - "**Dropout regularization** is a way to reduce this effect \n", - "\n", - "To perform dropout normalization, we will insert an additional layer just before the dense sub-network, containing one neuron per output variable in the previous layer. Each neuron acts as a gate, and is turned on and off randomly during the training. When it's on, the corresponding variable flows to the following layer. When it's off, the variable is blocked, and the neuron outputs zero. \n", - "\n", - "In this way, some part of the network, which is always changing, is deactivated, and only the rest is trained.\n", - "\n", - "After training, for the evaluation of the unseen test samples, the dropout layer is removed, and the whole network is used. \n", - "\n", - "To learn more about dropout regularization, you can refer to the [original paper](http://jmlr.org/papers/volume15/srivastava14a.old/srivastava14a.pdf).\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "pgluyk5btVgk" - }, - "source": [ - "## Building the network \n", - "\n", - "Let's first build a simple convolutional neural network with keras. " - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "colab": {}, - "colab_type": "code", - "id": "UlOHJrMZtVgm" - }, - "outputs": [], - "source": [ - "from keras import models\n", - "from keras import layers" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "eC6AaklatVgr" - }, - "source": [ - "We start with the convolutional layer, specifying that: \n", - "\n", - "* we want to extract 10 features for each kernel\n", - "* the kernel size is 4x4\n", - "* the input images are 28x28 pixels\n", - "* we use a ReLU activation. We could have used a sigmoid, but the ReLU is way better deep neural networks. If you want to know more, here is a [nice post about ReLUs](https://www.kaggle.com/dansbecker/rectified-linear-units-relu-in-deep-learning)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 89 - }, - "colab_type": "code", - "executionInfo": { - "elapsed": 657, - "status": "ok", - "timestamp": 1549723908741, - "user": { - "displayName": "Colin Bernet", - "photoUrl": "https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg", - "userId": "10813031011844134122" - }, - "user_tz": -60 - }, - "id": "pu0SWOnUtVgt", - "outputId": "46d56b14-bf35-4aac-ecfe-98f26fb560e5" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING:tensorflow:From /usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n", - "Instructions for updating:\n", - "Colocations handled automatically by placer.\n" - ] - } - ], - "source": [ - "model = models.Sequential()\n", - "model.add( layers.Conv2D(10, 4, input_shape=(28,28,1), activation='relu') )" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "VEWhpXJItVg5" - }, - "source": [ - "At this stage, here is a summary of our network:" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 173 - }, - "colab_type": "code", - "executionInfo": { - "elapsed": 435, - "status": "ok", - "timestamp": 1549723911345, - "user": { - "displayName": "Colin Bernet", - "photoUrl": "https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg", - "userId": "10813031011844134122" - }, - "user_tz": -60 - }, - "id": "Zv4dbI6EtVg-", - "outputId": "e6051920-71ae-42b1-d064-4202ec81e9e7" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "_________________________________________________________________\n", - "Layer (type) Output Shape Param # \n", - "=================================================================\n", - "conv2d_1 (Conv2D) (None, 25, 25, 10) 170 \n", - "=================================================================\n", - "Total params: 170\n", - "Trainable params: 170\n", - "Non-trainable params: 0\n", - "_________________________________________________________________\n" - ] - } - ], - "source": [ - "model.summary()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "ThENrOldtVhD" - }, - "source": [ - "In the output shape, we should ignore the first None. Then come the shape of the output array. The x and y dimensions are of size 28 - 4 + 1 = 25, and the last dimension corresponds to the number of features we have required. So far so good. \n", - "\n", - "Now, we add the dense neural network, forgetting about dropout for now. As a starting point, let's try a simple dense subnetwork with a single hidden layer of 100 neurons. Before the dense sub-network, the 3D array is flattened." - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "colab": {}, - "colab_type": "code", - "id": "rzk7CUDztVhF" - }, - "outputs": [], - "source": [ - "model.add( layers.Flatten() )\n", - "model.add( layers.Dense(100, activation='relu') )" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "ssV-E3cvtVhG" - }, - "source": [ - "And finally, our final softmax layer with 10 neurons, for the 10 digit categories:" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "colab": {}, - "colab_type": "code", - "id": "vMUArCqutVhI" - }, - "outputs": [], - "source": [ - "model.add( layers.Dense(10, activation='softmax') )" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 278 - }, - "colab_type": "code", - "executionInfo": { - "elapsed": 391, - "status": "ok", - "timestamp": 1549723915647, - "user": { - "displayName": "Colin Bernet", - "photoUrl": "https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg", - "userId": "10813031011844134122" - }, - "user_tz": -60 - }, - "id": "C5Q-4i2QtVhM", - "outputId": "31ff0ca2-8100-42bb-ac25-0f5e65d27f29" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "_________________________________________________________________\n", - "Layer (type) Output Shape Param # \n", - "=================================================================\n", - "conv2d_1 (Conv2D) (None, 25, 25, 10) 170 \n", - "_________________________________________________________________\n", - "flatten_1 (Flatten) (None, 6250) 0 \n", - "_________________________________________________________________\n", - "dense_1 (Dense) (None, 100) 625100 \n", - "_________________________________________________________________\n", - "dense_2 (Dense) (None, 10) 1010 \n", - "=================================================================\n", - "Total params: 626,280\n", - "Trainable params: 626,280\n", - "Non-trainable params: 0\n", - "_________________________________________________________________\n" - ] - } - ], - "source": [ - "model.summary()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "PDTkzJortVhR" - }, - "source": [ - "We have more than 600k parameters to optimize! let's compile the model, and then train it." - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "colab": {}, - "colab_type": "code", - "id": "11jVHnhetVhS" - }, - "outputs": [], - "source": [ - "from keras.optimizers import RMSprop\n", - "\n", - "model.compile(loss='categorical_crossentropy',\n", - " optimizer=RMSprop(lr=0.001),\n", - " metrics=['acc'])" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "colab": {}, - "colab_type": "code", - "id": "Pz38CbJQtVhY" - }, - "outputs": [], - "source": [ - "kx_train = x_train.reshape(len(x_train),28,28,1)\n", - "kx_test = x_test.reshape(len(x_test),28,28,1)" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 34 - }, - "colab_type": "code", - "executionInfo": { - "elapsed": 419, - "status": "ok", - "timestamp": 1549723921103, - "user": { - "displayName": "Colin Bernet", - "photoUrl": "https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg", - "userId": "10813031011844134122" - }, - "user_tz": -60 - }, - "id": "TH-ETwuEtVhb", - "outputId": "0fc4e0ee-6c37-41b3-e75e-5fca9cacf591" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(10000, 28, 28, 1)" - ] - }, - "execution_count": 23, - "metadata": { - "tags": [] - }, - "output_type": "execute_result" - } - ], - "source": [ - "kx_test.shape" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 211 - }, - "colab_type": "code", - "executionInfo": { - "elapsed": 108919, - "status": "ok", - "timestamp": 1549724030706, - "user": { - "displayName": "Colin Bernet", - "photoUrl": "https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg", - "userId": "10813031011844134122" - }, - "user_tz": -60 - }, - "id": "oihTfuPBtVhd", - "outputId": "086965da-fd72-428f-d5a2-ce81c0643513" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING:tensorflow:From /usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n", - "Instructions for updating:\n", - "Use tf.cast instead.\n", - "Train on 60000 samples, validate on 10000 samples\n", - "Epoch 1/3\n", - "60000/60000 [==============================] - 37s 611us/step - loss: 0.1696 - acc: 0.9489 - val_loss: 0.0698 - val_acc: 0.9777\n", - "Epoch 2/3\n", - "60000/60000 [==============================] - 36s 597us/step - loss: 0.0564 - acc: 0.9831 - val_loss: 0.0548 - val_acc: 0.9831\n", - "Epoch 3/3\n", - "60000/60000 [==============================] - 36s 593us/step - loss: 0.0372 - acc: 0.9889 - val_loss: 0.0559 - val_acc: 0.9821\n" - ] - } - ], - "source": [ - "history = model.fit(kx_train, y_train, validation_data=(kx_test,y_test),\n", - " batch_size=50, epochs=3)" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "colab": {}, - "colab_type": "code", - "id": "KyqZxpfuuiXz" - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "DqtRR4yUCwHc" - }, - "source": [ - "We're getting a 98% accuracty, much better than what we got with our simple dense neural network with scikit-learn. \n", - "\n", - "But that's not the end of the story, we can get better!" - ] - } - ], - "metadata": { - "accelerator": "TPU", - "colab": { - "name": "hwd_dl_google.ipynb", - "provenance": [ - { - "file_id": "https://github.com/cbernet/maldives/blob/master/hwd_deeplearning_google/hwd_dl_google.ipynb", - "timestamp": 1549723755354 - } - ], - "version": "0.3.2" - }, - "kernelspec": { - "display_name": "Python 2", - "language": "python", - "name": "python2" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 2 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.15" - } - }, - "nbformat": 4, - "nbformat_minor": 1 -} +{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"hwd_dl_google.ipynb","version":"0.3.2","provenance":[{"file_id":"https://github.com/cbernet/maldives/blob/master/hwd_deeplearning_google/hwd_dl_google.ipynb","timestamp":1549729378561}],"collapsed_sections":[]},"kernelspec":{"name":"python2","display_name":"Python 2"},"accelerator":"GPU"},"cells":[{"metadata":{"id":"SRvDywmJtVds","colab_type":"text"},"cell_type":"markdown","source":["## About this tutorial \n","\n","To do deep learning in practice, you need a Graphics Processing Unit (GPU). Or the time needed to train your deep neural nets on the CPU of your machine will be prohibitive.\n","\n","We have seen how to [install TensorFlow on Windows](https://thedatafrog.com/install-tensorflow-windows/) and [on Linux](https://thedatafrog.com/install-tensorflow-ubuntu/), which is useful if you have an nvidia graphics card in your PC. \n","\n","But what if you don't? \n","\n","If you just want to learn deep learning, there is a very easy solution that requires **no specific hardware or software**, the Colaboratory platform from Google.\n","\n","Let's try and use it for the first time. \n","\n","In this tutorial, you will learn: \n","\n","* What is the google colaboratory platform and how to use it. \n","* How to set up a first convolutional neural network to recognize handwritten digits with very high accuracy \n","\n","**Prerequisites**\n","\n","* Please have a look at [my first tutorial on handwritten digits](https://thedatafrog.com/handwritten-digit-recognition-scikit-learn/). This will show you which kind of performance we can get without deep learning, and will teach you the basics of numpy, matplotlib, and neural networks. \n","* You should know a bit of [Keras](https://thedatafrog.com/first-neural-network-keras/)\n","\n","\n","## The Google Colaboratory Platorm\n","\n","Google has recently set up the [Colaboratory Platform](https://colab.research.google.com/notebooks/welcome.ipynb) to promote the use of TensorFlow for deep learning, and it's awesome! \n","\n","It provides: \n","\n","* python environments with all the necessary software, and you can install more if needed\n","* access to GPUs\n","* excellent tutorials\n","* the possibility to run your own code (and my stuff!)\n","\n","In particular, the author of Keras and google engineer François Chollet set up extremely useful tutorials in which Keras is used as an interface to TensorFlow. For example, you can check out [this one](https://colab.research.google.com/github/tensorflow/tpu/blob/master/tools/colab/fashion_mnist.ipynb) where we learn how to classify clothing items (trousers, shoes, and whatnot). \n","\n","I do encourage you to dig into the google colab tutorials on your own! I would only advise you to stick to the keras-based tutorials which are much easier. \n","\n","On my side, I intend to use this tool to provide you with original content, as well as more details about the subjects already covered by google. \n","\n","💡 **To run your jupyter notebook on google colab, you can either:**\n","\n","* **commit it to github, and to provide a specific url to direct google colab to the notebook.**\n","* **put it in your google drive, and use Chrome to open it with Colab.**\n","\n","The url of this tutorial on github is https://github.com/cbernet/maldives/blob/master/hwd_deeplearning_google/hwd_dl_google.ipynb\n","\n","The url to run it on google colab is https://colab.research.google.com/github/cbernet/maldives/blob/master/hwd_deeplearning_google/hwd_dl_google.ipynb\n","\n","Just follow this link now. Then:\n","\n","* head to the Runtime (or Exécution) menu, and change the runtime to GPU\n","* click \"CONNECT\" on the top right.\n"]},{"metadata":{"id":"9mw3fUDitVdy","colab_type":"text"},"cell_type":"markdown","source":["## The Dataset\n","\n","In [my first tutorial on handwritten digits](https://thedatafrog.com/handwritten-digit-recognition-scikit-learn/), we have used the simplified digits dataset provided with scikit-learn because we didn't have the resources to process the [real MNIST handrwitten digits dataset](http://yann.lecun.com/exdb/mnist/) at that time. \n","\n","Here, we have access to the GPUs from Google, and to keras which provides an easy way to load this dataset:"]},{"metadata":{"id":"jFKEynAytVd2","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":68},"outputId":"4b98499b-24ce-4706-dbdf-aec5a0d03733","executionInfo":{"status":"ok","timestamp":1549887913711,"user_tz":-60,"elapsed":1698,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}}},"cell_type":"code","source":["import tensorflow as tf\n","(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()"],"execution_count":1,"outputs":[{"output_type":"stream","text":["Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz\n","11493376/11490434 [==============================] - 0s 0us/step\n","11501568/11490434 [==============================] - 0s 0us/step\n"],"name":"stdout"}]},{"metadata":{"id":"gQLSCxxYtVeC","colab_type":"text"},"cell_type":"markdown","source":["Let's have a look our dataset."]},{"metadata":{"id":"311Pzt80tVeG","colab_type":"code","outputId":"115ad5cb-6fc7-4e6c-bd90-12a1d64fd697","executionInfo":{"status":"ok","timestamp":1549887917098,"user_tz":-60,"elapsed":405,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":34}},"cell_type":"code","source":["print x_train.shape, y_train.shape, x_test.shape, y_test.shape"],"execution_count":2,"outputs":[{"output_type":"stream","text":["(60000, 28, 28) (60000,) (10000, 28, 28) (10000,)\n"],"name":"stdout"}]},{"metadata":{"id":"cxrNL8agtVeR","colab_type":"text"},"cell_type":"markdown","source":["so: \n","\n","* 60,000 training samples and 10,000 test samples\n","* images are 28x28 = 784 pixels, while they are 8x8=64 pixels in the simplified digits dataset of scikit-learn. We have images with much better resolution, but need networks with many more neurons to process them"]},{"metadata":{"id":"FWCU17B1tVeU","colab_type":"text"},"cell_type":"markdown","source":["Now let's plot some of these images. "]},{"metadata":{"id":"umgVXlOetVeX","colab_type":"code","colab":{}},"cell_type":"code","source":["import matplotlib.pyplot as plt\n","def plot_img(i):\n"," # plot the image and the target for sample i\n"," plt.imshow(x_train[i])\n"," plt.title(y_train[i])\n"," plt.axis('off')"],"execution_count":0,"outputs":[]},{"metadata":{"id":"lf9qi83jtVed","colab_type":"code","outputId":"e8ab3784-a0e3-40ec-a715-9f2c4c9a827d","executionInfo":{"status":"ok","timestamp":1549887967241,"user_tz":-60,"elapsed":406,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":362}},"cell_type":"code","source":["plot_img(2)"],"execution_count":6,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[]}}]},{"metadata":{"id":"rOzBtEWxtVem","colab_type":"text"},"cell_type":"markdown","source":["Please have a look at other images by repeating the plot above for different samples"]},{"metadata":{"id":"wN7sUkhFtVeq","colab_type":"text"},"cell_type":"markdown","source":["Now we should check the actual data for a given image. Let's put the values in the pixels of the first image in an histogram: "]},{"metadata":{"id":"JUBPdg6NtVeu","colab_type":"code","outputId":"15cc8bca-164b-4a27-93cb-1bbb01782463","executionInfo":{"status":"ok","timestamp":1549818229785,"user_tz":-60,"elapsed":3465,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":885}},"cell_type":"code","source":["plt.hist(x_train[0])"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["([array([28., 0., 0., 0., 0., 0., 0., 0., 0., 0.]),\n"," array([28., 0., 0., 0., 0., 0., 0., 0., 0., 0.]),\n"," array([28., 0., 0., 0., 0., 0., 0., 0., 0., 0.]),\n"," array([28., 0., 0., 0., 0., 0., 0., 0., 0., 0.]),\n"," array([26., 0., 1., 0., 0., 1., 0., 0., 0., 0.]),\n"," array([26., 0., 0., 0., 0., 0., 1., 0., 0., 1.]),\n"," array([26., 0., 0., 0., 0., 0., 0., 0., 1., 1.]),\n"," array([24., 1., 0., 0., 0., 0., 1., 0., 0., 2.]),\n"," array([21., 1., 0., 1., 0., 0., 0., 0., 3., 2.]),\n"," array([20., 1., 1., 0., 0., 1., 1., 0., 0., 4.]),\n"," array([20., 0., 0., 1., 1., 1., 0., 0., 1., 4.]),\n"," array([18., 0., 0., 0., 1., 1., 2., 0., 0., 6.]),\n"," array([15., 2., 0., 0., 0., 1., 1., 1., 1., 7.]),\n"," array([15., 0., 0., 2., 0., 1., 0., 2., 1., 7.]),\n"," array([16., 2., 1., 1., 0., 0., 0., 1., 2., 5.]),\n"," array([18., 0., 0., 0., 0., 1., 1., 3., 0., 5.]),\n"," array([15., 1., 0., 2., 2., 0., 0., 1., 0., 7.]),\n"," array([16., 0., 0., 0., 1., 1., 1., 1., 0., 8.]),\n"," array([19., 0., 0., 2., 0., 1., 1., 0., 1., 4.]),\n"," array([20., 2., 0., 1., 0., 0., 1., 2., 1., 1.]),\n"," array([24., 0., 1., 1., 0., 0., 1., 0., 0., 1.]),\n"," array([25., 0., 1., 0., 0., 0., 0., 0., 0., 2.]),\n"," array([25., 1., 0., 0., 0., 0., 0., 1., 0., 1.]),\n"," array([26., 0., 1., 0., 1., 0., 0., 0., 0., 0.]),\n"," array([28., 0., 0., 0., 0., 0., 0., 0., 0., 0.]),\n"," array([28., 0., 0., 0., 0., 0., 0., 0., 0., 0.]),\n"," array([28., 0., 0., 0., 0., 0., 0., 0., 0., 0.]),\n"," array([28., 0., 0., 0., 0., 0., 0., 0., 0., 0.])],\n"," array([ 0. , 25.5, 51. , 76.5, 102. , 127.5, 153. , 178.5, 204. ,\n"," 229.5, 255. ]),\n"," )"]},"metadata":{"tags":[]},"execution_count":50},{"output_type":"display_data","data":{"image/png":"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\nv1iD1AUgSvevAAAAAElFTkSuQmCC\n","text/plain":["
"]},"metadata":{"tags":[]}}]},{"metadata":{"id":"3IDwJz6UtVe4","colab_type":"text"},"cell_type":"markdown","source":["We see that the values in the image array are between 0 and 255 (the values are coded on 8 bits). \n","\n","This is not adequate. Indeed, for a neural network to work well, it must deal with input values close to unity. So we're going to normalize all images to values between 0 and 1: "]},{"metadata":{"id":"p1bOPi4ltVe8","colab_type":"code","outputId":"b2bbb439-e761-442d-cd5e-0832ffc4156e","executionInfo":{"status":"ok","timestamp":1549888056757,"user_tz":-60,"elapsed":1314,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":857}},"cell_type":"code","source":["import numpy as np\n","x_train = x_train/255.\n","plt.hist(x_train[0])"],"execution_count":7,"outputs":[{"output_type":"execute_result","data":{"text/plain":["([array([28., 0., 0., 0., 0., 0., 0., 0., 0., 0.]),\n"," array([28., 0., 0., 0., 0., 0., 0., 0., 0., 0.]),\n"," array([28., 0., 0., 0., 0., 0., 0., 0., 0., 0.]),\n"," array([28., 0., 0., 0., 0., 0., 0., 0., 0., 0.]),\n"," array([26., 0., 1., 0., 0., 1., 0., 0., 0., 0.]),\n"," array([26., 0., 0., 0., 0., 0., 1., 0., 0., 1.]),\n"," array([26., 0., 0., 0., 0., 0., 0., 0., 1., 1.]),\n"," array([24., 1., 0., 0., 0., 0., 1., 0., 0., 2.]),\n"," array([21., 1., 0., 1., 0., 0., 0., 0., 3., 2.]),\n"," array([20., 1., 1., 0., 0., 1., 1., 0., 0., 4.]),\n"," array([20., 0., 0., 1., 1., 1., 0., 0., 1., 4.]),\n"," array([18., 0., 0., 0., 1., 1., 2., 0., 0., 6.]),\n"," array([15., 2., 0., 0., 0., 1., 1., 1., 1., 7.]),\n"," array([15., 0., 0., 2., 0., 1., 0., 2., 1., 7.]),\n"," array([16., 2., 1., 1., 0., 0., 0., 1., 2., 5.]),\n"," array([18., 0., 0., 0., 0., 1., 1., 3., 0., 5.]),\n"," array([15., 1., 0., 2., 2., 0., 0., 1., 0., 7.]),\n"," array([16., 0., 0., 0., 1., 1., 1., 1., 0., 8.]),\n"," array([19., 0., 0., 2., 0., 1., 1., 0., 1., 4.]),\n"," array([20., 2., 0., 1., 0., 0., 1., 2., 1., 1.]),\n"," array([24., 0., 1., 1., 0., 0., 1., 0., 0., 1.]),\n"," array([25., 0., 1., 0., 0., 0., 0., 0., 0., 2.]),\n"," array([25., 1., 0., 0., 0., 0., 0., 1., 0., 1.]),\n"," array([26., 0., 1., 0., 1., 0., 0., 0., 0., 0.]),\n"," array([28., 0., 0., 0., 0., 0., 0., 0., 0., 0.]),\n"," array([28., 0., 0., 0., 0., 0., 0., 0., 0., 0.]),\n"," array([28., 0., 0., 0., 0., 0., 0., 0., 0., 0.]),\n"," array([28., 0., 0., 0., 0., 0., 0., 0., 0., 0.])],\n"," array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ]),\n"," )"]},"metadata":{"tags":[]},"execution_count":7},{"output_type":"display_data","data":{"image/png":"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\nNcaPH598xoEi1y43btwYt956a1xzzTXFGG/A6GmPhw8fjo9//OOxfPnyaGxsjGeffbZYYw4IPe3y\nYx/7WDz22GMxceLEqK+vj89//vNOH+xBJpOJyy+//IL3FbI7JRXfD8v6Lai8udAu33vvvXj00Udj\n8eLF5/xFpmdn7/Jvf/tbbNy4MR588MEiTjQwnb3HbDYbhw4dihkzZkRzc3O8/vrrsX379uINN8Cc\nvcujR4/G2rVr46WXXoqtW7fGa6+9Fn/+85+LOB0XUlLx7enYyg/fd+jQoQu+TcC/5DoC9OjRo/Hd\n73435s6dG3fccUcxRhwwetrlzp074/Dhw/Htb387Hn/88di7d28sW7asWKOWtJ72WFNTEyNGjIjr\nrrsuKioqYuzYsdHZ2VmsUUteT7vct29fjBw5MoYOHRqVlZXxxS9+Mdrb24s16oBWyO6UVHx7Orby\n2muvjaNHj8bbb78dJ0+ejN/+9rdx++23F3PckpbrCNCmpqb4zne+E+PGjSvWiANGT7v8yle+Eps2\nbYpf//rXsXr16rjxxhtjwYIFxRy3ZPW0x0wmEyNHjoy//OUvZ+73VunF9bTLa665Jvbt2xcnTpyI\niIj29va4/vrrizXqgFbI7pTcCVerVq2KP/7xj2eOrXz99dejuro67r777ti1a1esWrUqIiLuueee\nePjhh4s8bWm72C7vuOOOGDNmTNxyyy1nrv36178eDQ0NRZy2tPX05/K0t99+O5566qnYsGFDESct\nbT3t8c0334z58+dHNpuNG264IZYsWRKXXlpSrw9KSk+7/NWvfhUbN26MioqKuOWWW2LevHnFHrdk\ntbe3x4oVK+LAgQORyWRi+PDhMWHChLj22msL2p2Siy8AlDv/WQkAiYkvACQmvgCQmPgCQGLiCwCJ\niS8AJCa+AJCY+AJAYv8LecSYOvKrzXUAAAAASUVORK5CYII=\n","text/plain":["
"]},"metadata":{"tags":[]}}]},{"metadata":{"id":"votCeFOGtVfI","colab_type":"text"},"cell_type":"markdown","source":["💡 **Always normalize your input data.**\n","\n","And we must do the same for the test dataset:"]},{"metadata":{"id":"QGVarm2ItVfL","colab_type":"code","colab":{}},"cell_type":"code","source":["x_test = x_test/255."],"execution_count":0,"outputs":[]},{"metadata":{"id":"n4QP_ozjtVfR","colab_type":"text"},"cell_type":"markdown","source":["We should also check our targets: "]},{"metadata":{"id":"tWDbXQCotVfT","colab_type":"code","outputId":"1b919ed7-f998-43d2-f916-ea4405e75046","executionInfo":{"status":"ok","timestamp":1549818231053,"user_tz":-60,"elapsed":4650,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":34}},"cell_type":"code","source":["y_train[0]"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["5"]},"metadata":{"tags":[]},"execution_count":53}]},{"metadata":{"id":"wzeZSdx9tVfa","colab_type":"text"},"cell_type":"markdown","source":["For the reasons explained in [our first keras tutorial](https://thedatafrog.com/first-neural-network-keras/), we're going to perform one-hot encoding on the targets: "]},{"metadata":{"id":"1oiAvEIxtVfc","colab_type":"code","outputId":"62ce848c-c6cb-44df-e9fd-dab55e4d3716","executionInfo":{"status":"ok","timestamp":1549888120273,"user_tz":-60,"elapsed":417,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":51}},"cell_type":"code","source":["from keras.utils import np_utils\n","y_train = np_utils.to_categorical(y_train, 10)\n","y_test = np_utils.to_categorical(y_test, 10)\n","print y_train[0]"],"execution_count":8,"outputs":[{"output_type":"stream","text":["[0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]\n"],"name":"stdout"},{"output_type":"stream","text":["Using TensorFlow backend.\n"],"name":"stderr"}]},{"metadata":{"id":"YMUeoGyxtVfr","colab_type":"text"},"cell_type":"markdown","source":["## Convolutional Neural Networks"]},{"metadata":{"id":"zjZ6JG1LtVft","colab_type":"text"},"cell_type":"markdown","source":["Classifying handwritten digits in 10 categories is a task of image recognition. \n","\n","Since convolutional neural networks are known to provide excellent performance for image recognition, we're going to use them. \n","\n","A convolutional neural network for image classification typically features the following layers: \n","\n","* the first layers are **convolutional layers**, interleaved with **pooling layers**. The role of these layers is to extract interesting features from the image.\n","* then come **dense layers**, which interpret the features from the first stage, and provide the probability for the image to belong to each category. \n","\n","In addition to these, **dropout** layers can be added to regularize the network or in other words, to make it more stable. \n","\n","Before building the network, I'd like to explain each kind of layer in details. "]},{"metadata":{"id":"CYREa4eftVfv","colab_type":"text"},"cell_type":"markdown","source":["### Convolutional layers"]},{"metadata":{"id":"rxK8mGf0tVfx","colab_type":"text"},"cell_type":"markdown","source":["A 2D [convolutional layer](https://keras.io/layers/convolutional/) scans the input image from left to right and from top to bottom, with a small window, called the **kernel**. In the example below, we use a window of 5x5 pixel. After every step, the image moves right. Here, we use a **stride** of 1 pixel, meaning that we move the window by 1 pixel. When the right border of the window hits the right border of the image, the window is returned to the left and moved down by 1 pixel. \n","\n","![](https://github.com/cbernet/maldives/blob/master/hwd_deeplearning_google/conv_layer.png?raw=1)\n","\n","At each step, the pixels within the window are considered and a number of features are extracted. Each feature is just a value. Let's say there are **nf** features to be extracted for each position of the window (nf could be of the order of 10). \n","\n","At first these features are completely meaningless, but the network is going to be trained to extract meaningful features. For example, if you do face recognition, the features might be related to the presence of an eye or a nose. For now, just keep in mind that a fixed number of values are extracted for each window, and that these values are going to make sense to the network (and maybe not to us!).\n","\n","Now, what kind of data do we get out of the convolutional layer? \n","Let **(nx, ny)** be the shape of the picture, so nx and ny are the numbers of pixels in the image along the horizontal and vertical directions, respectively. \n","\n","For each window position, we get 10 features, and the window positions are arranged in a 2D array. So the output of the convolutional layer is a 3D array (ox, oy, nf), where **ox** and **oy** are the numbers of output pixels along the horizontal and vertical directions, and nf is the number of features for each pixel.\n","\n","The user (we) decide on the number of features to be extracted, so we know that. But what about ox and oy? \n","\n","The answer is simple. For example, the number of output pixels along the horizontal direction is **ox = nx - kernel_size + 1**. \n","\n","To convince yourself, you can use the simple case below, with an image of size 7x5 and a window of size 3x3. \n","\n","![](https://github.com/cbernet/maldives/blob/master/hwd_deeplearning_google/conv_layer_simple.png?raw=1)\n","\n","Ok... I have spent three hours in blender trying to model a convolutional layer in 3D as an illustration, and barely managed to model a cube. So I gave up on this software and, as a last resort, went back to my favorite 3D modelling hardware: \n","\n","![](https://github.com/cbernet/maldives/blob/master/hwd_deeplearning_google/crayon.png?raw=1)\n","\n","And here's the result, with shading and transparency! \n","\n","![](https://github.com/cbernet/maldives/blob/master/hwd_deeplearning_google/conv_layer_schema.png?raw=1)"]},{"metadata":{"id":"ik0k9DqUtVfz","colab_type":"text"},"cell_type":"markdown","source":["### Pooling layers\n","\n","Pooling layers are used to reduce the size of the data at a given stage to reduce the complexity of the network. In this case we will use 2D pooling layers, and in particular, the [MaxPooling2D](https://keras.io/layers/pooling/). \n","\n","The keras documentation is a bit scarce, so let's see how it works on a simple image. Here we use [seaborn](https://seaborn.pydata.org/), a high-level interface to matplotlib, to get a heat map with annotations."]},{"metadata":{"id":"cAugHvJNtVf3","colab_type":"code","outputId":"6b76efed-53e6-40ac-f325-67a50ad05b3f","executionInfo":{"status":"ok","timestamp":1549818231066,"user_tz":-60,"elapsed":4589,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":368}},"cell_type":"code","source":["import numpy as np\n","import seaborn as sns\n","zero = np.array([[0,0,0,1,0,0,0,0],\n"," [0,1,2,3,2,1,0,0],\n"," [0,4,3,1,3,2,0,0],\n"," [1,5,2,0,0,5,1,0],\n"," [2,4,0,0,0,6,2,0],\n"," [1,3,0,0,0,4,1,0],\n"," [0,2,3,2,1,3,0,0],\n"," [0,0,3,4,3,1,0,0]])\n","sns.heatmap(zero, annot=True)"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{"tags":[]},"execution_count":56},{"output_type":"display_data","data":{"image/png":"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\nfMr/B8IrDNo8NumtAAAAAElFTkSuQmCC\n","text/plain":["
"]},"metadata":{"tags":[]}}]},{"metadata":{"id":"RIFajNK8tVgC","colab_type":"text"},"cell_type":"markdown","source":["Pooling layers are based on a pooling window that moves across the image like the kernel of the convolutional layers. For every position of the pooling window, a number is extracted, for example: \n","\n","* the maximum value in the window (max pooling)\n","* the average value over the window (average pooling)\n","\n","If we use a pooling window of 2x2 pixels, the extracted value would be 1 in the case of max pooling, and 1/4 = 0.25 in the case of average pooling. \n","\n","We're going to use [scikit-image](http://scikit-image.org/docs/dev/auto_examples/numpy_operations/plot_view_as_blocks.html) to perform each pooling operation. By the way I didn't know scikit-image, I just googled it. It's always useful to do that when you're trying to do something in python"]},{"metadata":{"id":"NzMgr3M1tVgF","colab_type":"code","colab":{}},"cell_type":"code","source":["from skimage.util import view_as_blocks\n","pooling_window_shape = (2,2)\n","view = view_as_blocks(zero, pooling_window_shape)\n","flatten_view = view.reshape(view.shape[0], view.shape[1], -1)\n","mean_view = np.mean(flatten_view, axis=2)\n","max_view = np.max(flatten_view, axis=2)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"OOd8CPMPtVgN","colab_type":"code","outputId":"6588c784-fbc8-4cfa-f53b-86fe5f8bf0fe","executionInfo":{"status":"ok","timestamp":1549818231578,"user_tz":-60,"elapsed":5048,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":368}},"cell_type":"code","source":["sns.heatmap(max_view, annot=True)"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{"tags":[]},"execution_count":58},{"output_type":"display_data","data":{"image/png":"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\n16nI7OxszZgxQ7fddpuCwaBmzZqliIjm5zKKDQBgRLguscXExOipp5466/VsRQIAnMLEBgAwwhfh\njXtFUmwAACM8cg9ktiIBAG5hYgMAGOGVj62h2AAARnik1yg2AIAZXpnYuMYGAHAKExsAwAiPDGxM\nbAAAtzCxAQDM8MjIRrEBAIzwyuERig0AYIRHeo1iAwCY4ZV7RXJ4BADgFIoNAOAUtiIBAEZwjQ0A\n4BRORQIAnOKRXqPYAABmeGVi4/AIAMApFBsAwClsRQIAjPDITiTFBgAwwyvX2Cg2AIAZHrm4RbEB\nAIzwysTmkX71lu6De+lfls1UfKf2tqM4Z+OnmzXx9jt180+ydNc/36eyQ4dtR3JSp6REPf/qU3p3\n3VIte2+RhgwdZDuSc9qmp6jH+BvU8x9uUrebx8jfgZ8XXkGx/Z2o6CiN+NkYBWrqbEdxTl0goGkz\nZmn2zIf09vICXX/dtZrzRJ7tWE769b8/rHVFG3XTiGzN/bcFyv7HCbYjOSUqto1SRw1TSeEG7Vn2\nro7t2acuI662HQunUGx/Z/jEkdr1X5/rROCE7SjO2fTpFqWlpuryvn0kSePH3axPNmxSbW2t5WRu\nSe7SSZcP7K3XFy+XJH26/o968J9n2w3lmMaGBpUUrteJo9WSpLpD5fInxFtOZZ/P1/qHSWdVbI2N\njd95rayszGwSD0hM76T0K3ros7c32o7ipOJ9+5SWmtr0PDY2Vgnt22tfSYnFVO7p06+XDuwv1X3T\n79aKD1/RooL56tv/MtuxnBIK1qu25L9/BrZN66JAeaXFRN7g8/la/TCpxWJbs2aNRo8ereHDh+tX\nv/qVjh8/3vRn06ZNMxrECzKnjFXhS6vUEGqwHcVJgWC9/P7o017z+/0KBIKWErmpXfu2uqxPD23Z\nuE3jxvxc7/xhjX77/BxFRkbajuakuJQkJQ7orbINW21Hse6CmNheeOEF/eEPf9Ann3yiwYMHa/Lk\nyaqpqZH0/VPchWzgjwarsqRCB/+033YUZ7VpE6P6+tO3eIPBoGLbtLGUyE3Hq2tVWVGlojUfS5KW\nL31b8e3bqWuPNMvJ3NOua6pSRg7TvtVrm7YlL2oeabYWj/tHRkYqISFBkpSVlaXExERNnjxZ+fn5\nnjnWaUrPjN5K7tlFPYb8dcumTXysbn1ikt759zdVsrPYcjo3dO/WVavWfND0vOb4cVXX1Cg9/VKL\n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\n","text/plain":["
"]},"metadata":{"tags":[]}}]},{"metadata":{"id":"_9_yO3pxtVgV","colab_type":"code","outputId":"2ffe98fd-5585-4be6-a3ad-559dbb2327de","executionInfo":{"status":"ok","timestamp":1549818232159,"user_tz":-60,"elapsed":5599,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":368}},"cell_type":"code","source":["sns.heatmap(mean_view, annot=True)"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{"tags":[]},"execution_count":59},{"output_type":"display_data","data":{"image/png":"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\nUBdRKgi4AAAAAElFTkSuQmCC\n","text/plain":["
"]},"metadata":{"tags":[]}}]},{"metadata":{"id":"gRi_9ACttVgg","colab_type":"text"},"cell_type":"markdown","source":["Coming back to our case, we will want to pool after a convolutional layer. The input to the pooling is a 3D array with several values (the features) for each pixel. \n","\n","In this case, the pooling layer will pool each feature separately for each pixel in x and y.\n","\n","So the pooling will reduce the dimensionality along the x and y directions, but the number of features in output will stay the same. That's good, because maxing or averaging over all features would not make any sense. "]},{"metadata":{"id":"YrjHyl0FtVgj","colab_type":"text"},"cell_type":"markdown","source":["### Dense layers\n","\n","A sub-network of dense layers is added at the end of the deep neural network. The aim of this sub-network is to make use of the features extracted by the previous layers to perform the classification.\n","\n","We know about dense layers already, since the tutorial about [handwritten digits with scikit-learn](https://thedatafrog.com/handwritten-digit-recognition-scikit-learn/), so I'm not going to give details here. \n","\n","Two things to note: \n","\n","**1- Dense layers are fully connected to the previous layer.** This means that each neuron in the dense layer has a connection to all neurons in the previous layer. \n","\n","**2- The input to a dense layer is 1D.** But the output of our convolutional (or pooling) layers is 3D... So we will need to flatten the 3D data to 1D, by just serializing all numbers. To do that in keras, we will insert a [Flatten layer](https://keras.io/layers/core/) just before the dense layer. \n","\n","The last layer of our dense sub-network will have a **softmax activation**. This means that the output of neuron $k$ is set to \n","\n","$$y_k = \\frac{e^{z_k}}{\\sum_{i=1}^{N} e^{z_i}}$$,\n","\n","where the sum runs over the N neurons of the layer. \n","\n","Please note that the softmax activation is well suited to classification problems: \n","\n","* the probability for a given class is bound between 0 and 1. \n","* all probabilities sum up to 1\n","\n","### Dropout layers \n","\n","Deep convolutional neural networks are complicated and have a lot of tunable parameters. And for this reason, they can easily turn wrong.\n","\n","During the training, the network can **overfit** the training data. This means that it gets very good at recognizing specific examples of the training data, but looses its ability to recognize new, unseen examples. This is typically due to parts of the network that evolve in a coordinated way and in the wrong direction during training. \n","\n","**Dropout regularization** is a way to reduce this effect \n","\n","To perform dropout normalization, we will insert an additional layer just before the dense sub-network, containing one neuron per output variable in the previous layer. Each neuron acts as a gate, and is turned on and off randomly during the training. When it's on, the corresponding variable flows to the following layer. When it's off, the variable is blocked, and the neuron outputs zero. \n","\n","In this way, some part of the network, which is always changing, is deactivated, and only the rest is trained.\n","\n","After training, for the evaluation of the unseen test samples, the dropout layer is removed, and the whole network is used. \n","\n","To learn more about dropout regularization, you can refer to the [original paper](http://jmlr.org/papers/volume15/srivastava14a.old/srivastava14a.pdf).\n","\n"]},{"metadata":{"id":"pgluyk5btVgk","colab_type":"text"},"cell_type":"markdown","source":["## Building the network \n","\n","Let's first build a simple convolutional neural network with keras. "]},{"metadata":{"id":"UlOHJrMZtVgm","colab_type":"code","colab":{}},"cell_type":"code","source":["from keras import models\n","from keras import layers"],"execution_count":0,"outputs":[]},{"metadata":{"id":"eC6AaklatVgr","colab_type":"text"},"cell_type":"markdown","source":["We start with the convolutional layer, specifying that: \n","\n","* we want to extract 10 features for each kernel\n","* the kernel size is 4x4\n","* the input images are 28x28 pixels\n","* we use a ReLU activation. We could have used a sigmoid, but the ReLU is way better deep neural networks. If you want to know more, here is a [nice post about ReLUs](https://www.kaggle.com/dansbecker/rectified-linear-units-relu-in-deep-learning)"]},{"metadata":{"id":"pu0SWOnUtVgt","colab_type":"code","colab":{}},"cell_type":"code","source":["model = models.Sequential()\n","model.add( layers.Conv2D(10, 4, input_shape=(28,28,1), activation='relu') )"],"execution_count":0,"outputs":[]},{"metadata":{"id":"VEWhpXJItVg5","colab_type":"text"},"cell_type":"markdown","source":["At this stage, here is a summary of our network:"]},{"metadata":{"id":"Zv4dbI6EtVg-","colab_type":"code","outputId":"c512db93-f772-44b9-9daa-19f47497f8f2","executionInfo":{"status":"ok","timestamp":1549818232192,"user_tz":-60,"elapsed":5548,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":173}},"cell_type":"code","source":["model.summary()"],"execution_count":0,"outputs":[{"output_type":"stream","text":["_________________________________________________________________\n","Layer (type) Output Shape Param # \n","=================================================================\n","conv2d_18 (Conv2D) (None, 25, 25, 10) 170 \n","=================================================================\n","Total params: 170\n","Trainable params: 170\n","Non-trainable params: 0\n","_________________________________________________________________\n"],"name":"stdout"}]},{"metadata":{"id":"ThENrOldtVhD","colab_type":"text"},"cell_type":"markdown","source":["In the output shape, we should ignore the first None. Then come the shape of the output array. The x and y dimensions are of size 28 - 4 + 1 = 25, and the last dimension corresponds to the number of features we have required. So far so good. \n","\n","Now, we add the dense neural network, forgetting about dropout for now. As a starting point, let's try a simple dense subnetwork with a single hidden layer of 100 neurons. Before the dense sub-network, the 3D array is flattened."]},{"metadata":{"id":"rzk7CUDztVhF","colab_type":"code","colab":{}},"cell_type":"code","source":["model.add( layers.Flatten() )\n","model.add( layers.Dense(100, activation='relu') )"],"execution_count":0,"outputs":[]},{"metadata":{"id":"ssV-E3cvtVhG","colab_type":"text"},"cell_type":"markdown","source":["And finally, our final softmax layer with 10 neurons, for the 10 digit categories:"]},{"metadata":{"id":"vMUArCqutVhI","colab_type":"code","colab":{}},"cell_type":"code","source":["model.add( layers.Dense(10, activation='softmax') )"],"execution_count":0,"outputs":[]},{"metadata":{"id":"C5Q-4i2QtVhM","colab_type":"code","outputId":"8fe83f11-cb18-4eda-cdd5-6bc73d9c7532","executionInfo":{"status":"ok","timestamp":1549818232219,"user_tz":-60,"elapsed":5521,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":278}},"cell_type":"code","source":["model.summary()"],"execution_count":0,"outputs":[{"output_type":"stream","text":["_________________________________________________________________\n","Layer (type) Output Shape Param # \n","=================================================================\n","conv2d_18 (Conv2D) (None, 25, 25, 10) 170 \n","_________________________________________________________________\n","flatten_10 (Flatten) (None, 6250) 0 \n","_________________________________________________________________\n","dense_19 (Dense) (None, 100) 625100 \n","_________________________________________________________________\n","dense_20 (Dense) (None, 10) 1010 \n","=================================================================\n","Total params: 626,280\n","Trainable params: 626,280\n","Non-trainable params: 0\n","_________________________________________________________________\n"],"name":"stdout"}]},{"metadata":{"id":"PDTkzJortVhR","colab_type":"text"},"cell_type":"markdown","source":["We have more than 600k parameters to optimize! let's compile the model, and then train it."]},{"metadata":{"id":"11jVHnhetVhS","colab_type":"code","colab":{}},"cell_type":"code","source":["from keras.optimizers import RMSprop"],"execution_count":0,"outputs":[]},{"metadata":{"id":"RVC9fzwg2Glz","colab_type":"code","colab":{}},"cell_type":"code","source":["model.compile(loss='categorical_crossentropy',\n"," optimizer=RMSprop(lr=0.001),\n"," metrics=['acc'])"],"execution_count":0,"outputs":[]},{"metadata":{"id":"Pz38CbJQtVhY","colab_type":"code","colab":{}},"cell_type":"code","source":["kx_train = x_train.reshape(len(x_train),28,28,1)\n","kx_test = x_test.reshape(len(x_test),28,28,1)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"TH-ETwuEtVhb","colab_type":"code","outputId":"564d1d7f-7de4-4ff3-82f1-61b412c956b8","executionInfo":{"status":"ok","timestamp":1549818232238,"user_tz":-60,"elapsed":5480,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":34}},"cell_type":"code","source":["kx_test.shape"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(10000, 28, 28, 1)"]},"metadata":{"tags":[]},"execution_count":69}]},{"metadata":{"id":"oihTfuPBtVhd","colab_type":"code","outputId":"28fa3095-6a61-4363-9db4-802f2c444c51","executionInfo":{"status":"ok","timestamp":1549818310394,"user_tz":-60,"elapsed":83610,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":382}},"cell_type":"code","source":["history = model.fit(kx_train, y_train, validation_data=(kx_test,y_test),\n"," batch_size=50, epochs=10)"],"execution_count":0,"outputs":[{"output_type":"stream","text":["Train on 60000 samples, validate on 10000 samples\n","Epoch 1/10\n","60000/60000 [==============================] - 9s 142us/step - loss: 0.1668 - acc: 0.9501 - val_loss: 0.0583 - val_acc: 0.9818\n","Epoch 2/10\n","60000/60000 [==============================] - 8s 130us/step - loss: 0.0586 - acc: 0.9822 - val_loss: 0.0580 - val_acc: 0.9802\n","Epoch 3/10\n","60000/60000 [==============================] - 8s 130us/step - loss: 0.0393 - acc: 0.9881 - val_loss: 0.0452 - val_acc: 0.9856\n","Epoch 4/10\n","60000/60000 [==============================] - 8s 129us/step - loss: 0.0283 - acc: 0.9913 - val_loss: 0.0550 - val_acc: 0.9840\n","Epoch 5/10\n","60000/60000 [==============================] - 8s 130us/step - loss: 0.0208 - acc: 0.9939 - val_loss: 0.0560 - val_acc: 0.9842\n","Epoch 6/10\n","60000/60000 [==============================] - 8s 130us/step - loss: 0.0153 - acc: 0.9956 - val_loss: 0.0561 - val_acc: 0.9846\n","Epoch 7/10\n","60000/60000 [==============================] - 8s 131us/step - loss: 0.0116 - acc: 0.9970 - val_loss: 0.0665 - val_acc: 0.9844\n","Epoch 8/10\n","60000/60000 [==============================] - 8s 129us/step - loss: 0.0091 - acc: 0.9977 - val_loss: 0.0576 - val_acc: 0.9855\n","Epoch 9/10\n","60000/60000 [==============================] - 8s 127us/step - loss: 0.0062 - acc: 0.9983 - val_loss: 0.0768 - val_acc: 0.9843\n","Epoch 10/10\n","60000/60000 [==============================] - 8s 128us/step - loss: 0.0047 - acc: 0.9988 - val_loss: 0.0733 - val_acc: 0.9852\n"],"name":"stdout"}]},{"metadata":{"id":"MPta7Q6gFCD6","colab_type":"text"},"cell_type":"markdown","source":["We're getting an accuracy larger than 98% from this first try. Much better than the mere 91% we got from the simple dense neural net we set up with scikit-learn. Deep learning starts to show its power!\n","\n","And it's not the end of the story. Let's try and do even better. \n","\n","## Tuning the network \n","\n","### Dealing with overfitting\n","\n","A neural network has *parameters* (weights and biases) that are tuned during the training. The **hyperparameters** are the parameters affecting the network configuration, such as the number of layers, the number of neurons per layer, the number of features extracted by the convolutional layers, etc. \n","\n","We can try and improve the performance by tuning the hyperparameters. \n","\n","But how should we start? \n","\n","First of all: \n","\n","💡**VERY IMPORTANT: Start with a very simple network, and tune it by making it more complex.**\n","\n","If you start from a complex network, you'll have many more hyperparameters to play with, and it's easy to get lost. \n","\n","Then, we should not tune blindly, so let's start by having a more detailed look at the performance. First of all, we can plot the evolution of the accuracy as a function of the training evolution. The accuracy is computed for both the training and the test samples. \n"]},{"metadata":{"id":"KyqZxpfuuiXz","colab_type":"code","colab":{}},"cell_type":"code","source":["def plot_accuracy(history, miny=None):\n"," acc = history.history['acc']\n"," test_acc = history.history['val_acc']\n"," epochs = range(len(acc))\n"," plt.plot(epochs, acc)\n"," plt.plot(epochs, test_acc)\n"," if miny:\n"," plt.ylim(miny, 1.0)\n"," plt.title('accuracy') \n"," plt.figure()\n"],"execution_count":0,"outputs":[]},{"metadata":{"id":"2a0GtdyuH-tK","colab_type":"code","outputId":"69050329-46d3-493b-a0fe-c362589d9b90","executionInfo":{"status":"ok","timestamp":1549818396399,"user_tz":-60,"elapsed":73374,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":379}},"cell_type":"code","source":["plot_accuracy(history, miny=0.9)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"image/png":"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\nGcIZAACbIZwBALAZwhkAAJshnAEAsBnCGQAAmyGcAQCwGcIZAACbIZwBALAZwhkAAJshnAEAsBnC\nGQAAmyGcAQCwGcIZAACbIZwBALAZwhkAAJshnAEAsBnCGQAAmyGcAQCwGcIZAACbIZwBALAZwhkA\nAJshnAEAsBnCGQAAmyGcAQCwGcIZAACbIZwBALAZwhkAAJs5p3DeuHGj1q5dq6qqKu3evXvQttra\nWt1xxx2688479dRTT53TawAAwPBcIz2hvr5ehw4dUk1NjQ4cOKDq6mrV1NRIkkzT1IYNG7RlyxYV\nFBTonnvuUUVFhQ4fPjzsawAAwNmNGM47d+5URUWFJGnu3Llqb29XV1eXfD6fwuGw8vLyFAgEJEnX\nXHONduzYoYaGhmFfAwAAzm7Ebu1QKKTCwsLUciAQUHNzc2q+u7tbBw8eVDwe165duxQKhc76GgAA\ncHYj7jmfzrKs1LxhGHrwwQdVXV0tv9+vsrKyEV8znOJi//mWkpH3xJlo5/SgndOHtk4P2nl4I4Zz\nMBhUKBRKLTc1Nam4uDi1XF5erqefflqS9PDDD6u0tFTRaPSsrwEAAMMbsVt72bJl2rp1qyRpz549\nCgaDg44d33333WppaVFPT4/q6uq0dOnSEV8DAACGN+Ke86JFizR//nxVVVXJMAw98MAD2rx5s/x+\nvyorK7VmzRrdddddMgxD69evVyAQUCAQOOM1AADg3BjWuRwQBgAAacMIYQAA2AzhDACAzUzIcGbo\n0PR46KGHtHbtWt1xxx168cUXM13OhBaJRFRRUaHNmzdnupQJ6/nnn9cXvvAF3X777dq+fXumy5mQ\nuru79bd/+7f62te+pqqqKr322muZLsm2zvs6Z7s723CjGD2vv/66PvroI9XU1CgcDutLX/qSVq1a\nlemyJqzHHntM+fn5mS5jwgqHw/r5z3+uZ599Vj09PXr00Ue1cuXKTJc14WzZskWzZ8/WfffdpxMn\nTugb3/iG/vCHP2S6LFuacOF8tuFGMXqWLFmiBQsWSJLy8vLU29urZDIpp9OZ4comngMHDmj//v2E\nxRjauXOnli5dKp/PJ5/Ppw0bNmS6pAmpsLBQH374oSSpo6Nj0EiSGGzCdWszdGh6OJ1O5eTkSJKe\neeYZXX/99QTzGNm0aZP+8R//MdNlTGiNjY2KRCL65je/qa9+9avauXNnpkuakG699VYdPXpUlZWV\nWrdunb73ve9luiTbmnB7zqfjSrGxVVtbq2eeeUa//vWvM13KhPTcc89p4cKFmjFjRqZLmfDa2tr0\ns5/9TEePHtXXv/511dXVyTCMTJc1ofz2t79VSUmJnnzySe3du1fV1dWcRzGMCRfOIw03itHz2muv\n6Ze//KWeeOIJ+f2MkTsWtm/froaGBm3fvl3Hjx+Xx+PRtGnTdO2112a6tAmlqKhIV111lVwul2bO\nnKnc3Fy1traqqKgo06VNKG+//baWL18uSbr88svV1NTE4bBhTLhubYYOTY/Ozk499NBDevzxx1VQ\nUJDpciasn/70p3r22Wf1m9/8Rl/5ylf0rW99i2AeA8uXL9frr78u0zQVDofV09PD8dAxMGvWLL3z\nzjuSpCNHjig3N5dgHsaE23MearhRjL4XXnhB4XBY9957b2rdpk2bVFJSksGqgE9n6tSpWr16tdas\nWSNJuv/+++VwTLh9l4xbu3atqqurtW7dOiUSCf3whz/MdEm2xfCdAADYDH8aAgBgM4QzAAA2QzgD\nAGAzhDMAADZDOAMAYDOEMwAANkM4AwBgM4QzAAA28/8DrxopEaeAALQAAAAASUVORK5CYII=\n","text/plain":["
"]},"metadata":{"tags":[]}},{"output_type":"display_data","data":{"text/plain":["
"]},"metadata":{"tags":[]}}]},{"metadata":{"id":"vM43vThyIxOH","colab_type":"text"},"cell_type":"markdown","source":["We see that the accuracy on the training sample continuously improves: the network gets better and better at recognizing the digits of this sample, because it's trained to do so. \n","\n","But the accuracy on the testing sample, which is not used for training, plateaus very early at about 98.6%. Training further will not help. \n","\n","That's a clear sign of overfitting. And the more complex the network, the easier it is for it to learn the specific examples of the training sample. \n","\n","**So our first step should not be to make the network more complex, but to solve this overfitting problem. **\n","\n","To do that, we'll create a new instance of our network, in which we will introduce a dropout layer, just before the dense sub-network:"]},{"metadata":{"id":"-RMe3RhFIBMs","colab_type":"code","outputId":"5caa60c1-ba22-4a84-bec0-5ca4ab7ddf55","executionInfo":{"status":"ok","timestamp":1549818310782,"user_tz":-60,"elapsed":83920,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":312}},"cell_type":"code","source":["model_do = models.Sequential()\n","model_do.add( layers.Conv2D(10, 4, input_shape=(28,28,1), activation='relu') )\n","model_do.add( layers.Flatten() )\n","model_do.add( layers.Dropout(rate=0.5) )\n","model_do.add( layers.Dense(100, activation='relu') )\n","model_do.add( layers.Dense(10, activation='softmax') )\n","model_do.summary()\n"],"execution_count":0,"outputs":[{"output_type":"stream","text":["_________________________________________________________________\n","Layer (type) Output Shape Param # \n","=================================================================\n","conv2d_19 (Conv2D) (None, 25, 25, 10) 170 \n","_________________________________________________________________\n","flatten_11 (Flatten) (None, 6250) 0 \n","_________________________________________________________________\n","dropout_9 (Dropout) (None, 6250) 0 \n","_________________________________________________________________\n","dense_21 (Dense) (None, 100) 625100 \n","_________________________________________________________________\n","dense_22 (Dense) (None, 10) 1010 \n","=================================================================\n","Total params: 626,280\n","Trainable params: 626,280\n","Non-trainable params: 0\n","_________________________________________________________________\n"],"name":"stdout"}]},{"metadata":{"id":"m78DB4CtKw_K","colab_type":"text"},"cell_type":"markdown","source":["The dropout layer has the same output shape as the flatten layer just before. It will drop 50% of the values from flatten, chosen on a random basis.\n","\n","Let's compile, fit, and then check the performance\n"]},{"metadata":{"id":"9jxrFBHzKloV","colab_type":"code","outputId":"ae3dd27b-59a9-4071-99ed-6e64ddc1a765","executionInfo":{"status":"ok","timestamp":1549818395787,"user_tz":-60,"elapsed":168895,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":382}},"cell_type":"code","source":["model_do.compile(loss='categorical_crossentropy',\n"," optimizer=RMSprop(lr=0.001),\n"," metrics=['acc'])\n","\n","history_do = model_do.fit(kx_train, y_train, validation_data=(kx_test,y_test),\n"," batch_size=50, epochs=10)"],"execution_count":0,"outputs":[{"output_type":"stream","text":["Train on 60000 samples, validate on 10000 samples\n","Epoch 1/10\n","60000/60000 [==============================] - 9s 147us/step - loss: 0.2026 - acc: 0.9382 - val_loss: 0.0800 - val_acc: 0.9739\n","Epoch 2/10\n","60000/60000 [==============================] - 8s 135us/step - loss: 0.0927 - acc: 0.9724 - val_loss: 0.0599 - val_acc: 0.9809\n","Epoch 3/10\n","60000/60000 [==============================] - 8s 137us/step - loss: 0.0745 - acc: 0.9776 - val_loss: 0.0543 - val_acc: 0.9816\n","Epoch 4/10\n","60000/60000 [==============================] - 8s 135us/step - loss: 0.0633 - acc: 0.9808 - val_loss: 0.0523 - val_acc: 0.9824\n","Epoch 5/10\n","60000/60000 [==============================] - 8s 137us/step - loss: 0.0587 - acc: 0.9823 - val_loss: 0.0482 - val_acc: 0.9844\n","Epoch 6/10\n","60000/60000 [==============================] - 8s 134us/step - loss: 0.0543 - acc: 0.9843 - val_loss: 0.0466 - val_acc: 0.9846\n","Epoch 7/10\n","60000/60000 [==============================] - 8s 134us/step - loss: 0.0508 - acc: 0.9850 - val_loss: 0.0447 - val_acc: 0.9853\n","Epoch 8/10\n","60000/60000 [==============================] - 8s 137us/step - loss: 0.0487 - acc: 0.9856 - val_loss: 0.0450 - val_acc: 0.9850\n","Epoch 9/10\n","60000/60000 [==============================] - 9s 146us/step - loss: 0.0474 - acc: 0.9865 - val_loss: 0.0451 - val_acc: 0.9864\n","Epoch 10/10\n","60000/60000 [==============================] - 10s 166us/step - loss: 0.0450 - acc: 0.9862 - val_loss: 0.0432 - val_acc: 0.9870\n"],"name":"stdout"}]},{"metadata":{"id":"TFsDJTK-LnIe","colab_type":"code","outputId":"b1d19574-7cd7-4f92-9746-5f19c90ca509","executionInfo":{"status":"ok","timestamp":1549818395792,"user_tz":-60,"elapsed":168877,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":379}},"cell_type":"code","source":["plot_accuracy(history_do)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[]}},{"output_type":"display_data","data":{"text/plain":["
"]},"metadata":{"tags":[]}}]},{"metadata":{"id":"O0-8a2kPPO9J","colab_type":"text"},"cell_type":"markdown","source":["The situation is improved, but the network would still be able to overtrain, given enough time (more epochs). And we might be seeing a hint for overfitting starting at epoch 9. Anyway, let's stick with this setting for now, and let's try to make our network more complex. \n","\n","One thing we can do is to play with the hyperparameters of the dense subnetwork. Let's try to add neurons to the hidden layer.\n","\n","### Tuning the dense sub-network"]},{"metadata":{"id":"M3kiFG4L5yHy","colab_type":"code","outputId":"45731305-08a6-4d0c-a456-9c9d69d43b4e","executionInfo":{"status":"ok","timestamp":1549818671382,"user_tz":-60,"elapsed":94419,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":677}},"cell_type":"code","source":["model_do_200 = models.Sequential()\n","model_do_200.add( layers.Conv2D(10, 4, input_shape=(28,28,1), activation='relu') )\n","model_do_200.add( layers.Flatten() )\n","model_do_200.add( layers.Dropout(rate=0.5) )\n","model_do_200.add( layers.Dense(200, activation='relu') )\n","model_do_200.add( layers.Dense(10, activation='softmax') )\n","model_do_200.summary()\n","\n","model_do_200.compile(loss='categorical_crossentropy',\n"," optimizer=RMSprop(lr=0.001),\n"," metrics=['acc'])\n","\n","history_do_200 = model_do_200.fit(kx_train, y_train, validation_data=(kx_test,y_test),\n"," batch_size=50, epochs=10)"],"execution_count":0,"outputs":[{"output_type":"stream","text":["_________________________________________________________________\n","Layer (type) Output Shape Param # \n","=================================================================\n","conv2d_20 (Conv2D) (None, 25, 25, 10) 170 \n","_________________________________________________________________\n","flatten_12 (Flatten) (None, 6250) 0 \n","_________________________________________________________________\n","dropout_10 (Dropout) (None, 6250) 0 \n","_________________________________________________________________\n","dense_23 (Dense) (None, 200) 1250200 \n","_________________________________________________________________\n","dense_24 (Dense) (None, 10) 2010 \n","=================================================================\n","Total params: 1,252,380\n","Trainable params: 1,252,380\n","Non-trainable params: 0\n","_________________________________________________________________\n","Train on 60000 samples, validate on 10000 samples\n","Epoch 1/10\n","60000/60000 [==============================] - 10s 170us/step - loss: 0.1795 - acc: 0.9441 - val_loss: 0.0671 - val_acc: 0.9785\n","Epoch 2/10\n","60000/60000 [==============================] - 9s 154us/step - loss: 0.0775 - acc: 0.9766 - val_loss: 0.0569 - val_acc: 0.9817\n","Epoch 3/10\n","60000/60000 [==============================] - 9s 154us/step - loss: 0.0607 - acc: 0.9817 - val_loss: 0.0479 - val_acc: 0.9850\n","Epoch 4/10\n","60000/60000 [==============================] - 9s 154us/step - loss: 0.0531 - acc: 0.9837 - val_loss: 0.0453 - val_acc: 0.9851\n","Epoch 5/10\n","60000/60000 [==============================] - 9s 153us/step - loss: 0.0465 - acc: 0.9855 - val_loss: 0.0444 - val_acc: 0.9859\n","Epoch 6/10\n","60000/60000 [==============================] - 9s 154us/step - loss: 0.0437 - acc: 0.9870 - val_loss: 0.0444 - val_acc: 0.9867\n","Epoch 7/10\n","60000/60000 [==============================] - 9s 157us/step - loss: 0.0406 - acc: 0.9884 - val_loss: 0.0473 - val_acc: 0.9860\n","Epoch 8/10\n","60000/60000 [==============================] - 9s 155us/step - loss: 0.0378 - acc: 0.9889 - val_loss: 0.0513 - val_acc: 0.9855\n","Epoch 9/10\n","60000/60000 [==============================] - 9s 154us/step - loss: 0.0350 - acc: 0.9891 - val_loss: 0.0392 - val_acc: 0.9879\n","Epoch 10/10\n","60000/60000 [==============================] - 9s 154us/step - loss: 0.0347 - acc: 0.9895 - val_loss: 0.0424 - val_acc: 0.9873\n"],"name":"stdout"}]},{"metadata":{"id":"Q45Q4PACYr9p","colab_type":"code","outputId":"9bf53eea-847c-4215-ed68-89b1f10ae26d","executionInfo":{"status":"ok","timestamp":1549818680961,"user_tz":-60,"elapsed":764,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":379}},"cell_type":"code","source":["plot_accuracy(history_do_200)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[]}},{"output_type":"display_data","data":{"text/plain":["
"]},"metadata":{"tags":[]}}]},{"metadata":{"id":"-5gPqgYHZgmX","colab_type":"text"},"cell_type":"markdown","source":["The validation accuracy, computed on the training sample, did not improve. But we see that overfitting is back, because the network is more complex. So we did not gain anything.\n","\n","But this is still teaching us something: 200 neurons on the hidden dense layer is not better than 100. Now, we started with 100... maybe it was too much. Could 50 neurons do the job? "]},{"metadata":{"id":"yxgQob5pZFK4","colab_type":"code","outputId":"7bfb10ec-a4c2-4939-c834-2a28a73c4b26","executionInfo":{"status":"ok","timestamp":1549818979799,"user_tz":-60,"elapsed":75656,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":677}},"cell_type":"code","source":["model_do_50 = models.Sequential()\n","model_do_50.add( layers.Conv2D(10, 4, input_shape=(28,28,1), activation='relu') )\n","model_do_50.add( layers.Flatten() )\n","model_do_50.add( layers.Dropout(rate=0.5) )\n","model_do_50.add( layers.Dense(50, activation='relu') )\n","model_do_50.add( layers.Dense(10, activation='softmax') )\n","model_do_50.summary()\n","\n","model_do_50.compile(loss='categorical_crossentropy',\n"," optimizer=RMSprop(lr=0.001),\n"," metrics=['acc'])\n","\n","history_do_50 = model_do_50.fit(kx_train, y_train, validation_data=(kx_test,y_test),\n"," batch_size=50, epochs=10)"],"execution_count":0,"outputs":[{"output_type":"stream","text":["_________________________________________________________________\n","Layer (type) Output Shape Param # \n","=================================================================\n","conv2d_21 (Conv2D) (None, 25, 25, 10) 170 \n","_________________________________________________________________\n","flatten_13 (Flatten) (None, 6250) 0 \n","_________________________________________________________________\n","dropout_11 (Dropout) (None, 6250) 0 \n","_________________________________________________________________\n","dense_25 (Dense) (None, 50) 312550 \n","_________________________________________________________________\n","dense_26 (Dense) (None, 10) 510 \n","=================================================================\n","Total params: 313,230\n","Trainable params: 313,230\n","Non-trainable params: 0\n","_________________________________________________________________\n","Train on 60000 samples, validate on 10000 samples\n","Epoch 1/10\n","60000/60000 [==============================] - 8s 136us/step - loss: 0.2041 - acc: 0.9389 - val_loss: 0.0770 - val_acc: 0.9770\n","Epoch 2/10\n","60000/60000 [==============================] - 7s 123us/step - loss: 0.0924 - acc: 0.9716 - val_loss: 0.0636 - val_acc: 0.9815\n","Epoch 3/10\n","60000/60000 [==============================] - 7s 123us/step - loss: 0.0737 - acc: 0.9773 - val_loss: 0.0574 - val_acc: 0.9825\n","Epoch 4/10\n","60000/60000 [==============================] - 7s 123us/step - loss: 0.0635 - acc: 0.9810 - val_loss: 0.0499 - val_acc: 0.9829\n","Epoch 5/10\n","60000/60000 [==============================] - 7s 123us/step - loss: 0.0559 - acc: 0.9824 - val_loss: 0.0485 - val_acc: 0.9847\n","Epoch 6/10\n","60000/60000 [==============================] - 8s 127us/step - loss: 0.0518 - acc: 0.9842 - val_loss: 0.0448 - val_acc: 0.9857\n","Epoch 7/10\n","60000/60000 [==============================] - 7s 123us/step - loss: 0.0478 - acc: 0.9856 - val_loss: 0.0448 - val_acc: 0.9854\n","Epoch 8/10\n","60000/60000 [==============================] - 7s 122us/step - loss: 0.0457 - acc: 0.9861 - val_loss: 0.0448 - val_acc: 0.9857\n","Epoch 9/10\n","60000/60000 [==============================] - 7s 123us/step - loss: 0.0444 - acc: 0.9863 - val_loss: 0.0466 - val_acc: 0.9861\n","Epoch 10/10\n","60000/60000 [==============================] - 7s 123us/step - loss: 0.0422 - acc: 0.9869 - val_loss: 0.0436 - val_acc: 0.9871\n"],"name":"stdout"}]},{"metadata":{"id":"zlsPc4u7Z72l","colab_type":"code","outputId":"d178fadc-06bc-4379-fa3b-4c7673932d25","executionInfo":{"status":"ok","timestamp":1549818998454,"user_tz":-60,"elapsed":585,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":379}},"cell_type":"code","source":["plot_accuracy(history_do_50)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"image/png":"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\nRESpjOFMRESUZBjORERESYbhTERElGQYzkREREmG4UxERJRkGM5ERERJhuFMRESUZBjORERESYbh\nTERElGQYzkREREkmabaMJCIioiE8ciYiIkoyDGciIqIkw3AmIiJKMgxnIiKiJMNwJiIiSjIMZyIi\noiSTluG8Y8cObNy4EdXV1Th+/LjS5aStH//4x9i4cSPuvfdevPPOO0qXk9aCwSCqqqqwe/dupUtJ\nW3v37sVdd92Fe+65BwcOHFC6nLTk8/nwrW99Cw888ACqq6vxwQcfKF1S0lIrXUC8HT16FC0tLait\nrUVTUxNqampQW1urdFlp5/Dhwzh16hRqa2vhcrlw991347bbblO6rLT13HPPITc3V+ky0pbL5cKz\nzz6LV155BX6/H8888wxuueUWpctKO3v27MH8+fPxne98B93d3fja176Gt99+W+myklLahfOhQ4dQ\nVVUFACgvL4fb7YbX64XBYFC4svRy3XXXYcmSJQAAk8mEQCCAaDQKlUqlcGXpp6mpCadPn2ZYzKJD\nhw5h+fLlMBgMMBgM2L59u9IlpSWz2YyGhgYAgMfjgdlsVrii5JV23dpOp3PMf3CLxQKHw6FgRelJ\npVIhJycHAPDyyy/jpptuYjDPkqeeegr//M//rHQZaa29vR3BYBAPP/wwvvrVr+LQoUNKl5SW1q9f\nj87OTqxevRqbNm3C9773PaVLSlppd+T8eVyddHbt378fL7/8Mv7rv/5L6VLS0quvvoqrrroKJSUl\nSpeS9vr7+/Hzn/8cnZ2dePDBB1FfXw9BEJQuK6289tprKCoqwosvvojPPvsMNTU1PI9iHGkXzjab\nDU6nM3a7p6cHVqtVwYrS1wcffID/+I//wAsvvACj0ah0OWnpwIEDaGtrw4EDB3Du3DlotVoUFBTg\nhhtuULq0tJKfn4+rr74aarUapaWl0Ov16OvrQ35+vtKlpZWPPvoIK1euBABceuml6Onp4XDYONKu\nW3vFihWoq6sDAJw8eRI2m43jzbNgYGAAP/7xj/H8888jLy9P6XLS1k9/+lO88sor+PWvf4377rsP\njzzyCIN5FqxcuRKHDx+GJElwuVzw+/0cD50F8+bNw7FjxwAAHR0d0Ov1DOZxpN2R89KlS1FRUYHq\n6moIgoBt27YpXVJa2rdvH1wuF7797W/H7nvqqadQVFSkYFVEMzN37lysWbMGGzZsAAA89thjEMW0\nO3ZR3MaNG1FTU4NNmzYhEongiSeeULqkpMUtI4mIiJIMvxoSERElGYYzERFRkmE4ExERJRmGMxER\nUZJhOBMRESUZhjMREVGSYTgTERElGYYzERFRkvn/ylORzrbITYgAAAAASUVORK5CYII=\n","text/plain":["
"]},"metadata":{"tags":[]}},{"output_type":"display_data","data":{"text/plain":["
"]},"metadata":{"tags":[]}}]},{"metadata":{"id":"ktbfm6eJajQk","colab_type":"text"},"cell_type":"markdown","source":["Indeed, we're getting the exact same performance with 50 neurons, so this network should be preferred to the one with more neuron, to reduce complexity and overfitting. So I went a bit overkill in my first try... remember: start small. \n","\n","Now can we go down to 10 neurons? "]},{"metadata":{"id":"LLPXT35caSui","colab_type":"code","outputId":"98760c53-5ebb-44ea-9b6e-52f471f3258e","executionInfo":{"status":"ok","timestamp":1549819778376,"user_tz":-60,"elapsed":72374,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":677}},"cell_type":"code","source":["model_do_10 = models.Sequential()\n","model_do_10.add( layers.Conv2D(10, 4, input_shape=(28,28,1), activation='relu') )\n","model_do_10.add( layers.Flatten() )\n","model_do_10.add( layers.Dropout(rate=0.5) )\n","model_do_10.add( layers.Dense(10, activation='relu') )\n","model_do_10.add( layers.Dense(10, activation='softmax') )\n","model_do_10.summary()\n","\n","model_do_10.compile(loss='categorical_crossentropy',\n"," optimizer=RMSprop(lr=0.001),\n"," metrics=['acc'])\n","\n","history_do_10 = model_do_10.fit(kx_train, y_train, validation_data=(kx_test,y_test),\n"," batch_size=50, epochs=10)"],"execution_count":0,"outputs":[{"output_type":"stream","text":["_________________________________________________________________\n","Layer (type) Output Shape Param # \n","=================================================================\n","conv2d_25 (Conv2D) (None, 25, 25, 10) 170 \n","_________________________________________________________________\n","flatten_17 (Flatten) (None, 6250) 0 \n","_________________________________________________________________\n","dropout_15 (Dropout) (None, 6250) 0 \n","_________________________________________________________________\n","dense_33 (Dense) (None, 10) 62510 \n","_________________________________________________________________\n","dense_34 (Dense) (None, 10) 110 \n","=================================================================\n","Total params: 62,790\n","Trainable params: 62,790\n","Non-trainable params: 0\n","_________________________________________________________________\n","Train on 60000 samples, validate on 10000 samples\n","Epoch 1/10\n","60000/60000 [==============================] - 8s 133us/step - loss: 0.3696 - acc: 0.8930 - val_loss: 0.1756 - val_acc: 0.9497\n","Epoch 2/10\n","60000/60000 [==============================] - 7s 117us/step - loss: 0.1681 - acc: 0.9497 - val_loss: 0.1051 - val_acc: 0.9692\n","Epoch 3/10\n","60000/60000 [==============================] - 7s 117us/step - loss: 0.1252 - acc: 0.9626 - val_loss: 0.0835 - val_acc: 0.9737\n","Epoch 4/10\n","60000/60000 [==============================] - 7s 117us/step - loss: 0.1039 - acc: 0.9688 - val_loss: 0.0735 - val_acc: 0.9770\n","Epoch 5/10\n","60000/60000 [==============================] - 7s 116us/step - loss: 0.0927 - acc: 0.9721 - val_loss: 0.0691 - val_acc: 0.9803\n","Epoch 6/10\n","60000/60000 [==============================] - 7s 117us/step - loss: 0.0872 - acc: 0.9731 - val_loss: 0.0624 - val_acc: 0.9802\n","Epoch 7/10\n","60000/60000 [==============================] - 7s 123us/step - loss: 0.0809 - acc: 0.9756 - val_loss: 0.0623 - val_acc: 0.9809\n","Epoch 8/10\n","60000/60000 [==============================] - 7s 119us/step - loss: 0.0782 - acc: 0.9765 - val_loss: 0.0576 - val_acc: 0.9824\n","Epoch 9/10\n","60000/60000 [==============================] - 7s 116us/step - loss: 0.0738 - acc: 0.9776 - val_loss: 0.0658 - val_acc: 0.9805\n","Epoch 10/10\n","60000/60000 [==============================] - 7s 116us/step - loss: 0.0705 - acc: 0.9787 - val_loss: 0.0593 - val_acc: 0.9827\n"],"name":"stdout"}]},{"metadata":{"id":"kvabZSV6asYu","colab_type":"code","outputId":"6319210f-804e-4a3b-8bc0-410dd1145d4f","executionInfo":{"status":"ok","timestamp":1549819780512,"user_tz":-60,"elapsed":463,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":379}},"cell_type":"code","source":["plot_accuracy(history_do_10)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[]}},{"output_type":"display_data","data":{"text/plain":["
"]},"metadata":{"tags":[]}}]},{"metadata":{"id":"9GasTWUcbsBY","colab_type":"text"},"cell_type":"markdown","source":["This time, the accuracy on the training sample plateau around 98%, because 10 neurons do not appear to be enough to capture all the information from the training samples. Let's go back to 50 neurons as our baseline. \n","\n","As an exercise, you could check what happens if you add a second hidden layer, with e.g. 50 neurons in both hidden layers. \n","\n","You will probably see that there is nothing to gain in playing this game. And if you manage to improve the performance in this way, please give details in the comments! \n","\n","Another way to improve performance is to act on the first stage of the network. Usually, image recognition is done with networks featuring stacked convolutional layers. Let's try that. \n","\n","### Stacked convolution layers"]},{"metadata":{"id":"_pwU79FMfGik","colab_type":"text"},"cell_type":"markdown","source":["In the model below, we stack a second convolutional layer after the first one. Directly stacking it on top of the first one would not bring us anything, we could as well try and extract more than 10 features. Instead, we perform a max pooling in a window of 2x2 pixels and then apply the new convolutional layer on the output of the max pooling layer. In this way, the second convolutional layer will learn longer-distance features. We also increase the number of features to be extracted from 10 to 20. "]},{"metadata":{"id":"_pxQOe3IbmnD","colab_type":"code","outputId":"a2e64620-8401-49dc-8605-3ec13415c29a","executionInfo":{"status":"ok","timestamp":1549820485960,"user_tz":-60,"elapsed":80673,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":746}},"cell_type":"code","source":["model_2c = models.Sequential()\n","model_2c.add( layers.Conv2D(10, 4, input_shape=(28,28,1), activation='relu') )\n","model_2c.add( layers.MaxPooling2D(2) )\n","model_2c.add( layers.Conv2D(20, 4, activation='relu') )\n","model_2c.add( layers.Flatten() )\n","model_2c.add( layers.Dropout(rate=0.5) )\n","model_2c.add( layers.Dense(50, activation='relu') )\n","model_2c.add( layers.Dense(10, activation='softmax') )\n","model_2c.summary()\n","\n","model_2c.compile(loss='categorical_crossentropy',\n"," optimizer=RMSprop(lr=0.001),\n"," metrics=['acc'])\n","\n","history_2c = model_2c.fit(kx_train, y_train, validation_data=(kx_test,y_test),\n"," batch_size=50, epochs=10)"],"execution_count":0,"outputs":[{"output_type":"stream","text":["_________________________________________________________________\n","Layer (type) Output Shape Param # \n","=================================================================\n","conv2d_26 (Conv2D) (None, 25, 25, 10) 170 \n","_________________________________________________________________\n","max_pooling2d_14 (MaxPooling (None, 12, 12, 10) 0 \n","_________________________________________________________________\n","conv2d_27 (Conv2D) (None, 9, 9, 20) 3220 \n","_________________________________________________________________\n","flatten_18 (Flatten) (None, 1620) 0 \n","_________________________________________________________________\n","dropout_16 (Dropout) (None, 1620) 0 \n","_________________________________________________________________\n","dense_35 (Dense) (None, 50) 81050 \n","_________________________________________________________________\n","dense_36 (Dense) (None, 10) 510 \n","=================================================================\n","Total params: 84,950\n","Trainable params: 84,950\n","Non-trainable params: 0\n","_________________________________________________________________\n","Train on 60000 samples, validate on 10000 samples\n","Epoch 1/10\n","60000/60000 [==============================] - 9s 147us/step - loss: 0.2207 - acc: 0.9325 - val_loss: 0.0653 - val_acc: 0.9785\n","Epoch 2/10\n","60000/60000 [==============================] - 8s 130us/step - loss: 0.0818 - acc: 0.9749 - val_loss: 0.0444 - val_acc: 0.9856\n","Epoch 3/10\n","60000/60000 [==============================] - 8s 130us/step - loss: 0.0631 - acc: 0.9809 - val_loss: 0.0384 - val_acc: 0.9865\n","Epoch 4/10\n","60000/60000 [==============================] - 8s 130us/step - loss: 0.0542 - acc: 0.9840 - val_loss: 0.0361 - val_acc: 0.9893\n","Epoch 5/10\n","60000/60000 [==============================] - 8s 130us/step - loss: 0.0482 - acc: 0.9851 - val_loss: 0.0333 - val_acc: 0.9892\n","Epoch 6/10\n","60000/60000 [==============================] - 8s 131us/step - loss: 0.0449 - acc: 0.9867 - val_loss: 0.0344 - val_acc: 0.9883\n","Epoch 7/10\n","60000/60000 [==============================] - 8s 131us/step - loss: 0.0432 - acc: 0.9873 - val_loss: 0.0332 - val_acc: 0.9893\n","Epoch 8/10\n","60000/60000 [==============================] - 8s 130us/step - loss: 0.0407 - acc: 0.9874 - val_loss: 0.0313 - val_acc: 0.9900\n","Epoch 9/10\n","60000/60000 [==============================] - 8s 134us/step - loss: 0.0385 - acc: 0.9887 - val_loss: 0.0309 - val_acc: 0.9910\n","Epoch 10/10\n","60000/60000 [==============================] - 8s 129us/step - loss: 0.0385 - acc: 0.9887 - val_loss: 0.0320 - val_acc: 0.9910\n"],"name":"stdout"}]},{"metadata":{"id":"eV8_ARDugAtx","colab_type":"text"},"cell_type":"markdown","source":["We achieved a test accuracy over 99%, which is great! but can we do even better? \n","\n","### To one and beyond\n","\n","After one hour of optimizations, I converged to this network: "]},{"metadata":{"id":"AoubrswNfqVW","colab_type":"code","outputId":"f5aec7f6-dc46-41e3-dcd2-fa736c1f5da6","executionInfo":{"status":"ok","timestamp":1549820830872,"user_tz":-60,"elapsed":130462,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":1823}},"cell_type":"code","source":["model_best = models.Sequential()\n","model_best.add( layers.Conv2D(16, 4, input_shape=(28,28,1), activation='relu') )\n","model_best.add( layers.MaxPooling2D(2) )\n","model_best.add( layers.Conv2D(32, 4, activation='relu') )\n","model_best.add( layers.MaxPooling2D(2) )\n","model_best.add( layers.Flatten() )\n","model_best.add( layers.Dropout(0.4) )\n","model_best.add( layers.Dense(100, activation='relu') )\n","model_best.add( layers.Dense(10, activation='softmax') )\n","model_best.summary()\n","model_best.compile(loss='categorical_crossentropy',\n"," optimizer=RMSprop(lr=0.001),\n"," metrics=['acc'])\n","\n","history_best = model_best.fit(kx_train, y_train, validation_data=(kx_test,y_test),\n"," batch_size=200, epochs=40)"],"execution_count":0,"outputs":[{"output_type":"stream","text":["_________________________________________________________________\n","Layer (type) Output Shape Param # \n","=================================================================\n","conv2d_28 (Conv2D) (None, 25, 25, 16) 272 \n","_________________________________________________________________\n","max_pooling2d_15 (MaxPooling (None, 12, 12, 16) 0 \n","_________________________________________________________________\n","conv2d_29 (Conv2D) (None, 9, 9, 32) 8224 \n","_________________________________________________________________\n","max_pooling2d_16 (MaxPooling (None, 4, 4, 32) 0 \n","_________________________________________________________________\n","flatten_19 (Flatten) (None, 512) 0 \n","_________________________________________________________________\n","dropout_17 (Dropout) (None, 512) 0 \n","_________________________________________________________________\n","dense_37 (Dense) (None, 100) 51300 \n","_________________________________________________________________\n","dense_38 (Dense) (None, 10) 1010 \n","=================================================================\n","Total params: 60,806\n","Trainable params: 60,806\n","Non-trainable params: 0\n","_________________________________________________________________\n","Train on 60000 samples, validate on 10000 samples\n","Epoch 1/40\n","60000/60000 [==============================] - 4s 74us/step - loss: 0.3611 - acc: 0.8877 - val_loss: 0.0992 - val_acc: 0.9696\n","Epoch 2/40\n","60000/60000 [==============================] - 3s 54us/step - loss: 0.1255 - acc: 0.9606 - val_loss: 0.0579 - val_acc: 0.9817\n","Epoch 3/40\n","60000/60000 [==============================] - 3s 54us/step - loss: 0.0946 - acc: 0.9707 - val_loss: 0.0483 - val_acc: 0.9833\n","Epoch 4/40\n","60000/60000 [==============================] - 3s 54us/step - loss: 0.0764 - acc: 0.9764 - val_loss: 0.0445 - val_acc: 0.9854\n","Epoch 5/40\n","60000/60000 [==============================] - 3s 54us/step - loss: 0.0647 - acc: 0.9794 - val_loss: 0.0358 - val_acc: 0.9884\n","Epoch 6/40\n","60000/60000 [==============================] - 3s 54us/step - loss: 0.0578 - acc: 0.9822 - val_loss: 0.0336 - val_acc: 0.9893\n","Epoch 7/40\n","60000/60000 [==============================] - 3s 54us/step - loss: 0.0524 - acc: 0.9829 - val_loss: 0.0346 - val_acc: 0.9891\n","Epoch 8/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0486 - acc: 0.9847 - val_loss: 0.0298 - val_acc: 0.9908\n","Epoch 9/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0430 - acc: 0.9865 - val_loss: 0.0287 - val_acc: 0.9903\n","Epoch 10/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0427 - acc: 0.9868 - val_loss: 0.0291 - val_acc: 0.9904\n","Epoch 11/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0393 - acc: 0.9874 - val_loss: 0.0241 - val_acc: 0.9926\n","Epoch 12/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0381 - acc: 0.9882 - val_loss: 0.0248 - val_acc: 0.9924\n","Epoch 13/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0355 - acc: 0.9886 - val_loss: 0.0245 - val_acc: 0.9923\n","Epoch 14/40\n","60000/60000 [==============================] - 3s 54us/step - loss: 0.0325 - acc: 0.9895 - val_loss: 0.0271 - val_acc: 0.9913\n","Epoch 15/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0312 - acc: 0.9899 - val_loss: 0.0227 - val_acc: 0.9926\n","Epoch 16/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0311 - acc: 0.9901 - val_loss: 0.0253 - val_acc: 0.9907\n","Epoch 17/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0287 - acc: 0.9911 - val_loss: 0.0266 - val_acc: 0.9926\n","Epoch 18/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0280 - acc: 0.9911 - val_loss: 0.0221 - val_acc: 0.9932\n","Epoch 19/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0277 - acc: 0.9909 - val_loss: 0.0253 - val_acc: 0.9918\n","Epoch 20/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0258 - acc: 0.9917 - val_loss: 0.0212 - val_acc: 0.9928\n","Epoch 21/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0251 - acc: 0.9917 - val_loss: 0.0199 - val_acc: 0.9939\n","Epoch 22/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0247 - acc: 0.9917 - val_loss: 0.0222 - val_acc: 0.9931\n","Epoch 23/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0233 - acc: 0.9925 - val_loss: 0.0208 - val_acc: 0.9936\n","Epoch 24/40\n","60000/60000 [==============================] - 3s 54us/step - loss: 0.0230 - acc: 0.9927 - val_loss: 0.0222 - val_acc: 0.9929\n","Epoch 25/40\n","60000/60000 [==============================] - 3s 54us/step - loss: 0.0211 - acc: 0.9933 - val_loss: 0.0254 - val_acc: 0.9917\n","Epoch 26/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0200 - acc: 0.9930 - val_loss: 0.0246 - val_acc: 0.9923\n","Epoch 27/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0206 - acc: 0.9930 - val_loss: 0.0227 - val_acc: 0.9932\n","Epoch 28/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0219 - acc: 0.9929 - val_loss: 0.0233 - val_acc: 0.9933\n","Epoch 29/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0197 - acc: 0.9936 - val_loss: 0.0227 - val_acc: 0.9934\n","Epoch 30/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0210 - acc: 0.9937 - val_loss: 0.0224 - val_acc: 0.9937\n","Epoch 31/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0193 - acc: 0.9932 - val_loss: 0.0229 - val_acc: 0.9928\n","Epoch 32/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0189 - acc: 0.9936 - val_loss: 0.0262 - val_acc: 0.9931\n","Epoch 33/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0178 - acc: 0.9944 - val_loss: 0.0199 - val_acc: 0.9940\n","Epoch 34/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0189 - acc: 0.9938 - val_loss: 0.0209 - val_acc: 0.9937\n","Epoch 35/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0182 - acc: 0.9937 - val_loss: 0.0231 - val_acc: 0.9935\n","Epoch 36/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0179 - acc: 0.9946 - val_loss: 0.0228 - val_acc: 0.9931\n","Epoch 37/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0178 - acc: 0.9941 - val_loss: 0.0226 - val_acc: 0.9930\n","Epoch 38/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0174 - acc: 0.9946 - val_loss: 0.0210 - val_acc: 0.9934\n","Epoch 39/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0163 - acc: 0.9946 - val_loss: 0.0221 - val_acc: 0.9929\n","Epoch 40/40\n","60000/60000 [==============================] - 3s 53us/step - loss: 0.0181 - acc: 0.9943 - val_loss: 0.0246 - val_acc: 0.9935\n"],"name":"stdout"}]},{"metadata":{"id":"liMqdVECgyYW","colab_type":"code","outputId":"89725bc0-e1fd-4048-bd7b-5ac3d94793e1","executionInfo":{"status":"ok","timestamp":1549820991652,"user_tz":-60,"elapsed":826,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":379}},"cell_type":"code","source":["plot_accuracy(history_best, miny=0.98)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"image/png":"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\nQS6EEELo2P8Hi/PwWhEIISQAAAAASUVORK5CYII=\n","text/plain":["
"]},"metadata":{"tags":[]}},{"output_type":"display_data","data":{"text/plain":["
"]},"metadata":{"tags":[]}}]},{"metadata":{"id":"eZ0EWjFQiK5r","colab_type":"text"},"cell_type":"markdown","source":["The accuracy on the training sample now plateaus around 99.3%. \n","\n","In this attempt: \n","\n","* I extract more features from the two convolutional layers\n","* I added a second max pooling layer to reduce complexity before the dense network\n","* I went back to 100 neurons in the dense sub-network, after checking that the performance was improving (a little bit) and that overfitting did not become a problem\n","* I lowered the dropout rate to 40%, and I checked that overfitting appears if I go lower\n","* I increased the batch size to train faster, and trained for 40 epochs. I checked that more epochs are not useful \n","\n","**Can you do even better? If yes please tell us in the comments, I'd love to hear from it.**\n","\n","Obviously, we can't get an accuracy larger than one! And you really need to fight for 0.1% at the end. Moreover, when you're at this stage, you need to be careful about the performance metric. For instance:\n","\n","* what is the precision on the accuracy?\n","* the accuracy varies as a function of the epoch. What are we supposed to do with that? \n","\n","I'll come back to that in a future post. \n","\n","For now, let's have a look at the digits we did not manage to classify. \n","\n","## Learning from the failures\n","\n","First, we evaluate the predicions of the network for the whole testing sample, and we get the predicted and true digits for this sample: "]},{"metadata":{"id":"OZeKWdchh0w3","colab_type":"code","outputId":"b16262ab-0c9b-482c-c4e8-bb457c3fd346","executionInfo":{"status":"ok","timestamp":1549821834889,"user_tz":-60,"elapsed":1212,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":52}},"cell_type":"code","source":["preds = model_best.predict(kx_test)\n","pred_digits = np.argmax(preds, axis=1)\n","y_digits = np.argmax(y_test, axis=1)\n","print pred_digits\n","print y_digits"],"execution_count":0,"outputs":[{"output_type":"stream","text":["[7 2 1 ... 4 5 6]\n","[7 2 1 ... 4 5 6]\n"],"name":"stdout"}]},{"metadata":{"id":"-9iTUr9nlNIu","colab_type":"text"},"cell_type":"markdown","source":["Then we extract the images, the true labels, and the predicted labels for the misclassified digits: "]},{"metadata":{"id":"HzP31z1mkolq","colab_type":"code","outputId":"4d2794f1-c24b-40a3-ce5f-1949d0154c82","executionInfo":{"status":"ok","timestamp":1549821949148,"user_tz":-60,"elapsed":605,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":34}},"cell_type":"code","source":["mispred_img = x_test[pred_digits!=y_digits]\n","mispred_true = y_digits[pred_digits!=y_digits]\n","mispred_pred = pred_digits[pred_digits!=y_digits]\n","print 'number of misclassified digits:', mispred_img.shape[0]"],"execution_count":0,"outputs":[{"output_type":"stream","text":["number of misclassified digits: 65\n"],"name":"stdout"}]},{"metadata":{"id":"trGdOX5_lmPL","colab_type":"text"},"cell_type":"markdown","source":["Finally, let's have a look: "]},{"metadata":{"id":"6PrmA-_GlUx6","colab_type":"code","colab":{}},"cell_type":"code","source":["def plot_img_results(array, true, pred, i, n=1):\n"," # plot the image and the target for sample i\n"," ncols = 5\n"," nrows = n/ncols + 1\n"," fig = plt.figure( figsize=(ncols*1.5, nrows*1.5), dpi=90)\n"," for j in range(n):\n"," index = j+i\n"," plt.subplot(nrows,ncols, j+1)\n"," plt.imshow(array[index])\n"," plt.title('true: {} pred: {}'.format(true[index], pred[index]))\n"," plt.axis('off')"],"execution_count":0,"outputs":[]},{"metadata":{"id":"PACOrciTlpDS","colab_type":"code","outputId":"79c04ed4-fb2b-4015-da56-1b615fa56712","executionInfo":{"status":"ok","timestamp":1549822875017,"user_tz":-60,"elapsed":3545,"user":{"displayName":"Colin Bernet","photoUrl":"https://lh5.googleusercontent.com/-PT0Y40VvMq0/AAAAAAAAAAI/AAAAAAAAFEI/VsJO93FEElA/s64/photo.jpg","userId":"10813031011844134122"}},"colab":{"base_uri":"https://localhost:8080/","height":1398}},"cell_type":"code","source":["plot_img_results(mispred_img, mispred_true, mispred_pred, 0, len(mispred_img))"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"image/png":"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\nf/HFF0a3CQoKklntZitTpkzBFYyM2rVrl8wffvihzBUqVJB5+vTpMjdp0qRwCkbS/fv3ZR40aJDM\n6nfHzs5OZvX0oz5fv359mX///XeZy5Ytm3+FJQNqXSQkJMj80ksvydy5c2eZ161bJ3OpUqUKuHSU\nW7/++qvM6vdT1bhxY5nff/99mWNjY2VWh4zM1adPH5lXrVpl8f6WYM8MERERaRobM0RERKRpxW6Y\nKTU1VebnnntOZrX7zdfXV2a1m41dqYVv4sSJMmdkZMg8YcIEmdW6CwwMlPmjjz6SuX379gVVxGLn\n9u3bBo9XrFgh88iRI2VWh42Cg4NlXrZsmczqsJH6XevYsaPMH3zwgczqMCLlr5SUFJnVc6Mpv/zy\ni8zqOZOsT50BeOTIEZnVc6jq2WeflVn9PVD17t1b5pIlTU+EHjJkiMzqUH/p0qWzKXHesWeGiIiI\nNI2NGSIiItK0Yrdonno1/r1792Ru1aqVzBxasq7t27fLrHZ5LlmyRGZ7e3uZy5UrJ7O6CNu1a9cK\nqojFWt++fQ0e//DDDzK//vrrMqtDQupsCVPatGkjszpERYVj27ZtRp8/cOCAzEePHpXZ29u7wMtE\nuVOtWjWZ27ZtK/OLL74oc8OGDWUeOnSo0eOMGjVK5rlz58pcooTt9YPYXomIiIiILMDGDBEREWka\nGzNERESkacVuarZ6rYU6Lv/222/LvGjRokItExl67bXXZN6yZYvMDg4OOe7777//yvzXX3/JrF6P\nQeZRp2A3atRI5sdX4f3uu+9kVleLzQt1TL558+YyqyvTUt7pdDqZ1VWX1RXO1RWYy5cvXzgFowKR\nnp4us3p9248//mh0+9WrV8usLq9gi9gzQ0RERJrGxgwRERFpWrGYmv3ff/8V2mtdvHhR5uTkZJmb\nNm0qM29SaejUqVMGj9WhCnOGllTqVO7IyEiZDx48mMvSFV9jxoyRWV0Rdu/evQbb5dfNH9Vp9eoQ\nMKdpFxx1CMnUMggcWtK28+fPy6yunK4OLanfserVq8ts60NLKvbMEBERkaaxMUNERESaViyGmUzd\nZNDJyUlm9YaGefHNN9/IrHbpqTfOmz17tszOzs758rpa9viV9OrKlJZSu8RPnjwp85UrV2R+5pln\ncn384kRd2ffw4cMy59ew0uPUmRPqa3B2YeG7dOmStYtAeZCUlCTzjBkzZF61apXR7WvXri3zP//8\n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\ntXVWokQJlChRwuJrDxb9q1ChQpqvxR7OUl8zZszAhx9+iMGDB+PGjRuoWLEi3n33XfTo0SPN8jtb\nfQGZ/4wVMIxUC5qQTZs3b0ZISAj+85//ZOkCTJQ9IiIiMGDAAISHh+fYcBtlHOvLfFhn5pKX68tp\n75khIiIisgcbM0RERGRqHGYiIiIiU2PPDBEREZkaGzNERERkamzMEBERkamxMUNERESmxsYMERER\nmRobM0RERGRqbMwQERGRqbExQ0RERKbGxgwRERGZGndLJKJcc+nSJckPdpEHgLCwMMlZtTM1EeVd\n7JkhIiIiU2NjhoiIiEyNw0xElKOuXr0qeenSpZKvXbsm+YUXXpC8Zs0ayc8//3z2Fo6ITIk9M0RE\nRGRqbMwQERGRqXGYiYhy1IoVKyRPnz5dcoECBSTrISf9daL86K+//pL8yiuvSF61apXk0qVL52iZ\nnA17ZoiIiMjU2JghIiIiU8uTw0x37961eNy/f3/J27dvl/zII9bbcp988onkJ554wuoxPj4+kkuU\nKJGhchLlZYZhSI6Li5McHh6e7rn6M1WxYsWsLRiRyejPw6+//iq5SZMmkvfu3Sv5woULkp966inJ\njz76aDaVMPexZ4aIiIhMjY0ZIiIiMrUChu4LziN+++03i8cNGjSQnJKSItnWMJMt+twWLVpIHjFi\nhOR27dpJLlasmORChQo59Fxkv+XLl0v+97//LTkhIUGy3uvnypUrkvWP/1dffSW5V69eWV7O/ObY\nsWOSvby8rB6j3389a8nDw0OyrlOi/O6zzz6THBAQIFn/vdHDulOnTpX85ptvSo6Pj5c8fvx4yfpv\nm76+s2PPDBEREZkaGzNERERkanlyNlP58uUtHi9cuDDdc/bs2SN5y5Yt6R5/4MABq1kbNGiQ5KFD\nh0rWd6BT5lWuXFny4cOHJY8aNUry+++/L/mnn36S3Lt3b8kNGzbMriLmGz/88IPkwMDADF/n9u3b\nkvVwlaenZ4avSZQXfPfdd1a/roeWtEmTJkneuHGjZD3Ee/r0acl65hSHmYiIiIhyCBszREREZGps\nzBAREZGp5cmp2Rlx8eJFyc8884xkveFdZqZ1jx49WvLs2bMzUkSy4c8//5Rco0YNybq+tJMnT0rW\n98noKf21a9fOwhLmbfpXiF6dtG3btpKvXr2a7rn2bCi5cuVKyXo838XFxb7CksXP+dtvvy158+bN\nknU91q1bN2cKRiIpKcnicUxMjOSOHTtKPnLkiOSmTZtKjoiISPc5bH329O/En3/+2c4S5z72zBAR\nEZGpsTFDREREppYnp2bba+3atZLXrFkjWQ8tZUZwcLDkwYMHZ8k16WF6Kv7jjz+e7vG6C1ZPza5V\nq1bWFiwf0iv3ZoegoCDJerhQr2Bqa3PY/Cr1iuhPPvlkLpWE7JWYmGjxuFy5claPK126tOR//etf\nkvXfG3uGeDV9y4VeRb1w4cJplDj3sWeGiIiITI2NGSIiIjK1fDGb6Y8//pCsZ6k4OiNpzJgxkvXQ\nxrhx4zJROspKejXgCxcuSL5//75kvZFa8+bNJX/00UfZXLq8Qc+gAIAZM2ZI3rp1q0PXcnSGoD3H\nf/nll5J79uzpUHnyio8//ljy8OHD7TpHv1ebNm3K8jKR/WJjYy0elypVyupx+s/3sGHDJF+/fl2y\nnqVm61xbMwlfeuklyfpWDGcccmLPDBEREZkaGzNERERkavliNtOyZcsk665pe7q19YykadOmZW3B\nKMtVrVrV6tf1DLWzZ89KDg0NzfYy5TXz58+3eLxt2zbJ9ix85+3tLblOnTqSBwwYIHnp0qWS9dCV\n/szaeq433nhDcn4aZsrI0NLixYslv/7661leJlv0DKvvv//ernPatGkjmQv5PSw+Pl7yjz/+KLlQ\noUKS33nnHckLFiyQ/Pfff1u9pv79qGc2ff7555JdXV0zWOKsxZ4ZIiIiMjU2ZoiIiMjU8sVsJj3b\nSM9YcXQ2k+5e79evn+THHnssE6WjrHTo0CHJPj4+kidMmCD5ueeek9ylS5ecKZjJ6UW8Xn75ZYvv\n6WEme+iua1vDQPr5XnvtNclhYWGSbS0Gpum9nIC8vZ+TPUN8QM7uu6SHk7Jysb68PvNKz74EgO7d\nu0vWnwFbM5L0rF09nNSuXTvJetho48aNkmfOnCn5zJkzVsun/46OHDnSxqvIWeyZISIiIlNjY4aI\niIhMLV8MM61bt05yYGCgZEeHmfSCXb6+vpJ3796didJRdrl7967k0aNHSx4xYoTkRo0a5WiZzOrY\nsWOSvby8MnUte4aZNN3VXbx4ccnLly+XbGumYepfb6tXr5Y8cODA9AtrIvYOM2X3r3x7y5FV8sGf\nMIvZffr3l37tevhXfzaKFSvm0HPdvn1b8rx58yQvWbJE8p07dySfPn3a4nxbM0qzG3tmiIiIyNTY\nmCEiIiJTyxfDTNqePXsk6+7Qzz77TPLatWutnquHmfReGeHh4ZL1gmCUu3bs2CFZd5fq+sprM1qy\ni4eHh+RTp07ZdU7//v0lr1+/PlfKpD+zAPDMM89I1j8Htva+MZNevXpJtrUfD5A9M4EysmBfd2oS\nHgAAIABJREFUVslnf8IsFsSrVauWZDc3t2x93hdeeEHy9u3bJadebFEvxJiT2DNDREREpsbGDBER\nEZlavhtmcpReoKhjx46Sbc2E+uGHHyS3bNky+wpG6SpatKjkqVOnSh47dmxuFMfUGjZsKDkjw0x6\nRmFWOX78uOROnTpJvnLliuTUv96aNGki+dtvv5WcF4aZMrtAXWaGB/T+SmkNcWVGXl8oLy16MdA5\nc+ZI1nsH6p/t7BATEyNZLxSbenjrjz/+kFykSJFsLZPGnhkiIiIyNTZmiIiIyNQ4zOSAihUrSr5+\n/brVY0qXLi35yy+/lMwhp5xx9OhRyfo9v3jxomTupeW4jAwzVahQQXKfPn0kT58+XXJWdUPrhSv1\ncHDqX296BuO///1vyXpmVF6gh5zefvtti+9l1zBQVkg91JV6pkx+pd8HvSDemDFjJM+ePTvHyqNn\ngerhfMDyb2Pq72Un9swQERGRqbExQ0RERKZWMLcLYCaRkZGS9Vbqeu+YGzduSG7Tpo3kpKSkbC4d\nAcCWLVskt23bVjKHljJn8ODBkseNG2fXOXpW0fz58yWfO3dOsqenp2S9T5YeHtKzlvTX+/btK3nk\nyJF2lSm/qFu3ruTUM3/0EJSehaRlZnaSPbOiOHzkGHd3d6tf13uNDRo0SPJTTz2V5WU4ceKE1a+n\n3uMsJ4eWNPbMEBERkamxMUNERESmxmEmB1SqVEmyXnCrRo0auVEc+j+6q1UPZ+jFmyhz0lqIzlF6\nKFAPgdhaiFLTey1dunRJ8u+//57u8amfI79O5NRDUDprHAZyLnrBwEmTJkm+deuWZD17MzAwUHJI\nSIhkPdvWUVFRURk+NyewZ4aIiIhMjY0ZIiIiMjUumvd/9Eyl0NBQq8fotyo2NlbyypUr070+ZzNl\nra+++kqyntXy9ddfS+7QoUOOlikvi46Olty8eXOL7+khKEfpz5Re0C6rjq9Zs6bF46ZNm0qeNm2a\nZFuzRYiczQsvvCB5x44dku35PDzzzDOS/fz8JOuZUK6urpJXrFghecmSJZL1Pk2nT5+2eI6qVaum\nW47swJ4ZIiIiMjU2ZoiIiMjU8vUwk74TvEyZMuker2dG2DPzQktOTnboeHpYfHy8ZD1cUK5cOclh\nYWGS9f4hlHX0InaA5aJZthbWsiWrhpmeffZZyYsWLZJcvnx5i/OfeOIJh8pH5Gy2bdsmWc9ysufz\no+nPkpubm2S98GtiYqLk+vXrS9Yzp/TnLTexZ4aIiIhMjY0ZIiIiMrV8Pcx0//59yW+//bbkuXPn\nWj3e0WEm3cV94cKFjBSRFL21vH5vDx06JFnfrU85Q/8KGT58uOTly5c7dK7uJq9QoYJkPaSoj+/f\nv79kvQ9aqVKl7Ck2kSnpmbEzZ86U/P7770vWw0O2ODrEq/dc0kNOERER6Z6bE9gzQ0RERKbGxgwR\nERGZGhszREREZGr5+p4ZTW9U99xzz0nW09TsuWemTp06knfv3i25YsWKWVLO/OzDDz+UvHnzZsnf\nf/+95CJFiuRomYiInIHe/LhHjx6Sbd0/4+g9M1rv3r0lb9y40aFzswt7ZoiIiMjU2JghIiIiUyuY\n2wVwFnp4qH379pI///xzh66ju984tJR5f/zxh+TJkydL3rVrl2QOLRFRfqc3jtQbw+rV59955x3J\na9asSfeaVapUkezst02wZ4aIiIhMjY0ZIiIiMjXOZrLi7t27kv39/SXv2LFDst6Ya8OGDZL1hneF\nChXKriLmG3oTQz1r6ezZs5ILFy6co2UiIiLnwp4ZIiIiMjU2ZoiIiMjUOJvJihIlSkjeunVrLpaE\nihcvLnnVqlWSObREREQPsGeGiIiITI2NGSIiIjI1zmYiIiIiU2PPDBEREZkaGzNERERkamzMEBER\nkamxMUNERESmxsaMk5o7dy58fX1zuxhkJ9aXubC+zId1Zi45XV+5smjekSNHkJSUhGbNmuXG01v4\n5Zdf8MEHH+D06dMoWrQo2rdvj5CQEBQtWjS3i+aQq1evYs6cOTh48CBiY2Ph7u6OQYMGoWfPnpm+\ntrPUl4eHx0NfS0lJQfny5bFnz55cKFHGxcbGYv78+di9ezdu3boFd3d3DBs2DJ06dcr0tZ2lvrRb\nt26hS5cuqF69usVeZmayd+9ezJs3D1FRUShVqhR69uyJkSNHwsXFJdPXZp1lj+yqM2epr/v372Pp\n0qXYtm0brl+/jvLlyyMgIMBiT0EzuHjxIjp06PDQ15OTk+Hl5WXXz1+u9MysW7cOhw4dyo2nthAd\nHY3Bgwejc+fOOHToED7//HNERUWZctXfMWPG4MqVK9i0aRMOHz6MYcOG4e2338bBgwczfW1nqa8T\nJ05Y/Dt27BgaNmyYJQ22nDZp0iRERkZi3bp1OHz4MPr06YO33noLp06dyvS1naW+tGnTpiE+Pj63\ni5FhR44cwZgxY/DKK68gMjISy5Ytw/79+7F3794suT7rLOtlZ505S33Nnz8fmzZtwsKFC3H06FGM\nGzcO77//vsWmvGZQqVKlh36/Hz58GJUqVUKvXr3sukaON2b69u2L8PBwrFixAt7e3gCAgIAAvPfe\newgKCkKjRo2QnJyMgIAAjB071uLcl19+GRMmTJDHhw4dQr9+/eDt7Y0mTZpgzJgxuH79unx/4sSJ\nFrsup7Zq1Sp4e3sjICAARYsWRbVq1fDJJ5/g5Zdftnp8REQE6tati3379qFbt27w8PBAu3btLBoM\nvr6+WLhwIXr16gU/Pz8AQHx8PKZNmwZfX180bNgQHTt2tGgwpaSkYN68eWjZsiW8vLwQHByMhIQE\ni+cODAxESEiIzddy8uRJdOzYEeXLl4erqys6deqEMmXK4MSJEzbPsYcz1Vdq69evx7179/Dqq69a\n/b6z1pdhGChVqhTefvttVKlSBa6urujfvz9KlCiBw4cP2/36rXHG+vruu+9w+PBhvPjii2ke56z1\nBQBLly7FCy+8gM6dO6Nw4cKoX78+tmzZgjZt2qT7+tPDOjNXnTlTfRUsWBAhISF48skn4eLigrZt\n26J27do2/xPrzPWV2ocffojq1auje/fu9p1g5ILWrVsbH330kTz29/c3mjZtaoSFhRnJycnytbfe\nesvivL59+xrBwcGGYRjGmTNnjIYNGxobN240EhMTjWvXrhmBgYFGQECA3eVo3769MWPGDGPMmDGG\nl5eXlCsxMdHq8YcOHTLq1Klj+Pv7G9HR0UZsbKwxffp0w9PT04iJiZHX1qpVKyMyMtJISUkxDMMw\nxo0bZ7z44otGdHS0kZSUZISHhxv169c3Dh8+bBiGYWzZssVo0KCBceDAASMxMdEICwszGjdubLRu\n3dru1zJ27Fijb9++xsWLF4379+8b33zzjeHp6Wn8/vvvdl/DFmepL+3atWtGo0aNjKNHj9o8xpnr\nK7W//vrLqF+/vvHNN99k+BoPOFN93bx503j22WeNvXv3GgsWLDD8/f1tHuus9ZWcnGw0bNjQWLJk\niTFkyBCjcePGRvv27Y01a9ZIGTKLdWauOnOm+tISEhKMpk2bGitXrrT6fWetr9ROnz5teHh4GOfP\nn7f7HKe5AdjNzQ1+fn545BH7ihQaGop69eqhb9++cHV1Rbly5TB+/HhEREQgOjrarmtcuXIFmzdv\nRpcuXXDgwAFMmzYNn376KZYvX57mef7+/nB3d0exYsUwfPhwJCQkYP/+/fJ9Dw8PeHt7o0CBArh1\n6xZ27NiBUaNGwd3dHQULFkS7du3g6+uL0NBQAMCuXbvQsmVLNGvWDK6urvDz85MWv72mTp2KokWL\nonXr1njqqacQEhKC999/H7Vr13boOvbKjfrSFi1aBB8fHzRu3DjdY52xvrTExESMHz8edevWRbt2\n7TJ8nbTkVn1NnToVLVq0QKtWrew+x9nq6+bNm4iPj8fnn3+OYcOG4cCBAxg1ahRmz56Nbdu22X0d\nR7HOzFVnuf070TAMTJ48GUWKFEGfPn3SPNbZ6iu1OXPmoHfv3qhcubLd5zjNrtnu7u4OHR8VFYVj\nx449dFOoi4sLLly4gCpVqqR7DcMw0KpVK7njunnz5ujduze2bNmC4cOH2zyvZs2akkuVKoVHH30U\nly9ftvpazp07h5SUFAwbNgwFChSweG5PT08AwOXLl9G8eXOL56hVqxbOnDmT7mt4YPTo0UhJScF3\n332HsmXLYv/+/QgODsbjjz+eLTep5UZ9PXDt2jV89dVX+PTTT+063hnr64Fbt27hjTfeQExMDFat\nWpUlN5Nakxv19WCoYufOnQ49t7PVl/F/O750794dXl5eAIBOnTohLCwMW7Zssb8b3EGsM3PVWW7+\nToyPj0dwcDBOnDiB1atXo0SJEmke72z1pZ04cQI//fQTpk+f7tB5TtOYcXV1TfeYlJQUyUWKFMHz\nzz+PJUuWZPg5n3jiCTz22GMWX6tSpQquXr2a5nnJyckWjw3DsGiN69dSuHBhAP+0wuvXr2/1eomJ\niQ+15vVrTc/Zs2fxww8/4Msvv5QfQj8/P2zZsgUbN27MlsZMbtTXA7t27UL58uXRqFEju453tvp6\nIDo6GkOGDEGdOnWwdOlSFC9e3OFr2Cun6+vWrVt49913MXXqVDz66KMOnets9VW6dGm4urpa/V2x\ne/duu6/jKNaZueost34n3rhxA0OHDoWrqytCQ0NRtmzZdM9xtvrStm/fDi8vL5QvX96h85xmmCm1\nwoULW9xJn5KSggsXLsjjatWq4bfffrN4wxISEtJtiGh169Z96AbZ6OhoVKpUKc3zzp07J/nWrVu4\nc+cO3NzcrB7r7u4OFxeXh2apXLp0Cffv3wcAVKhQARcvXrT4/u+//27363jwHqT+AU1OTpb/oWS3\nnKivB8LCwhxav8DZ6gv4Zyr9oEGD5Ga77GzIWJPd9fXDDz/gr7/+woQJE+Dj4wMfHx+sXLkSP//8\nM3x8fCz+F5ias9XXI488glq1aln9XeFIN3hmsc7MVWc58Tvx7t27CAoKgru7O9atW2dXQwZwvvrS\nwsLC0LZtW4fPy5XGTNGiRREdHY2YmJiH/gA/UKNGDRw9ehQXL15EQkICFi5cKG8c8M8d5devX8e8\nefNw9+5d3L59G1OmTMHAgQPtbhEOHjwYx44dw9q1a5GQkIDIyEh8+eWX6N+/f5rnbdiwARcuXEBc\nXBwWL16MYsWK4bnnnrN6bPHixfHiiy9i8eLFOHXqFJKTkxEZGYkePXpg165dAP65e3z//v04cuQI\nEhMTsWvXLhw/ftyu1wAA1atXR+3atbFo0SJcuXIFSUlJ2LNnDw4ePJgl65Y4S30B/6yrcPLkSZv/\nQ7DG2eoLAN599114enpiwoQJFl23WcEZ6qtDhw7Yu3cvtm3bJv/69u2LBg0aYNu2bXjiiSdsnuuM\n9RUUFISwsDDs3LkTiYmJ2L17N7777rt0f1fYi3VmrjpzhvoCgHnz5qFIkSKYPXs2ChUqZHf5nbG+\ngH8aSNeuXUO9evUcPjdXhpn69euHOXPmoE2bNvJmpBYUFITffvsNnTt3RsmSJTFkyBD4+PjI9ytX\nroxly5Zh7ty5WLt2LYoVKwYvLy+sWLFCursmTpyI8+fPY926dVafw9vbGwsWLMD8+fMxZ84clClT\nBiNGjEh3waGXXnoJw4cPR1RUFNzc3LBs2bI0/2cdEhKCggULYsiQIYiNjUXFihUxcuRIdOvWDcA/\nN2NduXIFo0ePxr1799C6dWsMGDAAW7ZskWsEBgaifPnymDFjxkPXL1iwIJYuXYoPP/wQvXv3xq1b\nt1CxYkVMnjwZHTt2TPO12MNZ6gv458a+pKQklClTxu7yO1t9XblyBXv27IGrq+tD4+VNmjTB6tWr\n7X5t1jhDfRUtWvShhSdLlCiBQoUKoUKFCmmW39nqCwC6du2Ku3fvYt68eQgODoabmxs++OCDLFvh\nlHVmrjpzhvoCgM8++wwFChTA008/bfH1ihUr4ttvv7VZfmesL+Cf+yEBOPT7/YECRk6NQ+QBERER\nGDBgAMLDw1G1atXcLg6lg/VlLqwv82GdmUteri+nvWeGiIiIyB5szBAREZGpcZiJiIiITI09M0RE\nRGRqbMwQERGRqbExQ0RERKbGxgwRERGZGhszREREZGpszBAREZGpsTFDREREpsbGDBEREZkaGzNE\nRERkamzMEBERkamxMUNERESmxsYMERERmVrB3C5AfpSQkCB5586dFt/r2bNnTheHKNfoz0KHDh0k\n//e//5V86NAhyRUqVMiZglGG6TodOnSo5DFjxkhu1KhRjpaJ8j72zBAREZGpsTFDREREpsZhplww\nYMAAycOHD8/FkhDlrgULFkjev3+/5AIFCkgeNWqU5E8//VRywYL89eUsDMOQrIfON2zYILlevXqS\nOcxEWY09M0RERGRqbMwQERGRqbGfNhvpu/pDQ0Ml6+7xpk2b5miZiHLbjh07JO/bty/d4/XwhB5+\nIudx584dyS+++KJkFxcXyZypSdmJPTNERERkamzMEBERkalxmCmLXblyRfKwYcMknzp1ymrmjIy0\n3b59W/Lhw4clf/vtt+meq2dYrFixQrK7u7vk06dPS27Tpo1kT09Pu8oXGRkpuVKlSpI/++wzu87P\nj5YsWSI5PDzc6jG6jvRia3rYgnLX3bt3Jes60r766ivJderUyfYymUFcXJxk/R4WLlxYcsmSJS3O\n4fBq+tgzQ0RERKbGxgwRERGZWgFD98VThly6dEny2LFjJdetW1fyhAkTJOvuRHqY7np95ZVXJOsZ\nYbY89thjkvVQRWa6afU+QTExMTaPq1atmuSzZ89m+PnyooiICMkvvfSS5AsXLkhOSUmR3LFjR8m7\ndu3K5tJRRughVh8fH8llypSRrD8Hjz76aM4UzMn16tVLsr4toX379pKfffZZi3Patm2b/QUzOfbM\nEBERkamxMUNERESmxsYMERERmRrnBWfQ33//LVlPS9y7d6/k1atXS+Z9MvbT907o6ZwTJ06UrDfr\nfOSR/2+TlypVSnLp0qUzXIb4+HjJrVu3lqynhwPA448/LvnQoUMZfr68rly5cpIvXrwoWd/LVLRo\nUcmvv/56zhSMHJKYmChZ3weoP4Off/65ZN4n87DY2FjJ+nfGM888I7lr164W5yxfvlxyQEBANpbO\n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\ntm7dKnnu3LmSv/vuO8kBAQGSly5dKrly5crZWzgiIgfn7+9v8fFZs2ZJfv755yU7OTlle5lsxZ4Z\nIiIiMjQ2ZoiIiMjQnJRSyt6FcDSLFy+W3K9fP8kpKSn2KA79n4SEBMl9+/aVvGbNGsnVqlWTXKJE\nCclRUVGSq1atKvnkyZNZXk7KPnfv3pX8999/S163bp3kJ598UvKbb75pdr6rq2s2lo7ImK5cuSK5\ndu3akj09PSXrw/kFCxbMmYLZgD0zREREZGhszBAREZGhcTbT/7l27Zrk9957T/Kj3dRkP+PHj5e8\ncuVKyaNHj5b8v//9T3L+/Pktnrtw4ULJSUlJkvPl48fBUezfv1/yH3/8IXnq1KmSz5w5Y/FcfeQ8\nODjY7HseHh5ZVUTD0ofLDx48KDk6Ojrdc2fPni25bdu2FrM+c9ARZ73Q455++mnJpUqVkvzTTz9J\nfvHFFyXv3r1bsouLS/YWzkrsmSEiIiJDY2OGiIiIDI2zmf7PoUOHJNevX1/ynj17JDdu3DhHy0TA\njRs3JOuzVF577TXJ4eHhkvWhJd2FCxcku7u7S/7tt98kP/fcc5kqK1nn6NGjkr/++mvJy5Ytk3zp\n0iXJtg5V6L/S9CEqIO8MM+lDRrt27TL73vr16yVHRkbadF3986XPLtTFxsZKrlChgk3XJ/ubMGGC\n5LFjx0ouVKiQ5KtXr0ouUKBAzhQsHeyZISIiIkNjY4aIiIgMjY0ZIiIiMjTORf0/cXFxFh/Xp/Tq\n91e4ublJPnDggOTSpUtnQ+nyrrfffluyPmXwiy++kJzafTKp0e+pWLJkieRPP/00I0WkVPz333+S\n9enwkyZNkpzafRc6/V619u3bS9bvcerRo4fke/fuSS5cuLANJTa2+/fvSx4yZIjkffv2Zeq6lSpV\nkjxjxgzJL7/8ssXjTSZTpp6P7Ev/nasvgdGqVSvJjriSNntmiIiIyNDYmCEiIiJD4zDT/1m+fLnF\nx3fu3ClZH57Qp4ueO3dOMoeZMk8fztu4caNkfXgiM9MB9WEprvCcefoQ7bRp0yTPnz9f8vXr1yU3\nb95ccqNGjSSHhIRI1oeH9A1D9e7tU6dOSdaHtPr37y+5XLlyVr4KY9JX8w0KCpKc2aEl3dmzZyWn\nNrSk06fz6ssmODs7Z1mZKPvoS2CMHDlScs+ePSXrv4sdZdNJ9swQERGRobExQ0RERIaWp4eZ9K5v\n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\nZauuVbRoUcn79++XXKNGDZvKZCv2zBAREZGhsTFDREREhma4PvLk5GR7F+Ex8+fPl/zzzz9LPnHi\nhD2Kk2vpdb98+XKLx3h4eEj+66+/JOvdruvXr5ec2tCSPvwxevRoyU88wfa/tfTZLvpotj60Z+vQ\nUkpKisVr6sPPlH169uwped++fZL12TOvv/56ThYpV7p//77Z1++//77klStXStY/D6kNLT399NOS\n161bZ/FxFxcXyV988YVka4eWdEuWLJGc3UNLOv5mJiIiIkNjY4aIiIgMzXDDTJR36Qs16Rujbd68\nWXLr1q0l612cdevWTff677zzjuRJkyZluJx5md49/vHHH0vWZ5Dpi1jaKjQ0VPLJkyclHz58OMPX\npLTps5NWrVolWd+YVZ9VQ5mnzwICgJkzZ9p0fvXq1SXrQ0upDfvEx8dLXr16tU3P1b59e7Ovg4KC\nbDo/q7BnhoiIiAyNjRkiIiIyNA4zZaP8+fNLfvLJJ+1YktxBn1Xk6uoquW3bthaP1xcw1Bfv0vXv\n31+yvs8JZUxqs/k++ugjyfqiWtbQhxe3b98u+fr16xkpImnu3bsnWd9j7tSpU5L79esnWd9vq3fv\n3pILFy6cXUXMM/TZmkOHDrXqHH02oD7sN3v2bMmpzcC8ffu25LFjx0q2ZhauvliovuAeYL/3Antm\niIiIyNDYmCEiIiJD4zBTFvjzzz8lX7x4UbJ+h39qwxyUtfQ9mFLbA6thw4aS582bJ5l7A2XeoUOH\nLD7erFkzm64TExMjuWXLlpJTG1rSh0vc3Nxseq7c7vjx42ZfjxgxQvLevXslP7pQ20P6wmy6+vXr\nS9b33po4caLkZ555xrbC5mG7du2SrA/5pUXfh3Du3LnpHq/vlxYZGSn50aGi9OhDjO7u7jadm13Y\nM0NERESGxsYMERERGZqT0jc4oQzR7yLfvXu35J9++kmyvg8GZUzfvn0lL126VLLezanfoX/z5k2L\n1zl48KBkvaucMk+fwafn2NhYycWLF7d47pkzZyQ3b95csj50mBq9TuvVq2ddYXMxfWaMvujdo/Sf\n7YcffmjxGP3xsLAwyfoCbP/8849kfaaLPiuqatWqaRU5z9OH8/z8/My+d/To0XTP12d4piYxMVFy\nZv706zOkHh3Ot3XRvazCnhkiIiIyNDZmiIiIyNDy3GwmfeaRvh+FrkyZMpJLly4t2WQySdb3hVm8\n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\n/BxvzHTp0gXbt2/HokWLZAfW0NBQjB8/Hn369IGPjw+Sk5MRGhqKYcOGmZ3btWtXs51yDx48iG7d\nusHPzw/16tXDkCFDcPXqVfn+6NGj0aNHj1TL8uWXX6JTp07w9/eHq6sr/Pz80KlTJyxbtszi8efO\nnYOnpye+++47dO3aFbVr10aTJk2wadMmOcbSa0lOTsacOXMQHBwMb29vNG/e/LH/1S1fvhzNmzdH\nnTp10L9/f9y4ccPs++m9Fkuv7d69e3jzzTetPscSR6qv48ePo1mzZqhcuTKcnZ3h7+8PT09P/Pbb\nbxaP/+abb+Dt7Y09e/YgODgYXl5eaNeuHf744w85xtPTE+Hh4QgODkbPnj0BADdu3EBYWBiaNm0K\nb29vdOzYEXv27JFzTCYTxo4diwYNGqB+/fqYPHnyY7/4g4ODMWfOHIvlio+Px7BhwzBkyBAULlwY\nrq6uCAkJQXJyMv78889UX781HKm+ctPny9b3ni0cqc7+++8/jBkzBmPGjLGq7JGRkfD09MSePXvQ\nvn17eHl5oUWLFma9FoGBgZg9ezY6deqE4OBgAA+2qJg4cSICAwNRu3ZttGrVyuyPVkpKCmbOnIkm\nTZrA19cXYWFhSEhIMHvu3r17Y9SoUamWbcGCBXjppZfQpk0b5M+fHzVr1sSGDRvQvHlzq15bahyp\nvnLTZ2zJkiXw8/NDaGgoChYsiMqVK2P58uXo2rVrqueYUXYQEBCgPv30U/k6JCRE+fv7q61bt6rk\n5GR5bOjQoWbndenSRYWFhSmllDp9+rSqXbu2WrVqlTKZTOrKlSuqd+/eKjQ01KoyJCQkqBo1aqhN\nmzaZPb5582ZVvXp1de/evcfO+ffff5WHh4dq27atOnnypEpISFBLlixRnp6e6u+//071tcycOVM1\nb95c/fHHHyopKUlFRUWpunXrqg0bNiillIqKilIeHh7qu+++UyaTSUVGRqpGjRopDw8Pq17Lo65c\nuaJ8fHxUdHR0hs5/lCPUl1JKzZgxQwUHB6szZ86o5ORk9csvvygfHx+1b98+i8evX79eeXh4qIED\nB6r//vtP3b59W7377ruqadOmUm4PDw/Vpk0bdfr0aZWSkqKUUqpbt27qzTffVFevXlUJCQlq+fLl\nqmbNmio2NlYppdScOXOUv7+/OnHihEpISFBffvml8vHxUSEhIVa/Ft3169fVlClTVJMmTdT169cz\n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\n8HCzGQjpqVOnDuLj4zF+/HjcvHkTCQkJWLZsGWJjYzN1r9RDjlBfQO75fGXmvWctR6mzjPrqq69w\n7tw5xMfHY+7cuXBzc8MLL7xg8dhChQqhc+fOmDt3Lk6cOIHk5GRERUWhY8eOiIiIAPCgzvbu3YtD\nhw7BZDIhIiLC5pljffr0wdatW7FlyxaYTCbs2LEDP/zwA7p3757p1+so9ZVbPmMA0KtXLxw9ehTh\n4eFISEhAVFQU1q5da319WX2rcRZavny58vHxUfXq1VNXr161eNf3pUuX1Ouvv668vb1V48aNVXh4\nuBo4cKDcCa6UUj///LPq3Lmz8vLyUvXr11dvv/22zDhRSqn3339fvf7662mWZdWqVap58+bqueee\nUy1atFBr1qxJ9diHd4KvXLlSde3aVXl5eakmTZqoiIgIOcbSa0lKSlIzZ85UTZs2VbVq1VKBgYFq\n9uzZcqe4UkotXrxYBQQEKG9vb9W3b1+1fPlyszvBrXktV65cUR4eHmr37t1pHmcrR6mva9euqTFj\nxqhmzZqpWrVqqWbNmqmFCxeqpKQki8c/nM20Y8cOFRQUpGrVqqXat2+vTp8+Lcd4eHg8VufXrl1T\nQ4cOVfXq1VM+Pj7qpZdeMqvje/fuqZEjR6rnn39ePf/882rChAnqgw8+MJvNFBQUpGbPnp3qa/nz\nzz9Vnz59lI+Pj6pbt67q3Lmz2rlzZ6rH28JR6kup3PP5svW9ZytHqbP3339f1apVS9X6f+3deUCU\n1fs28NsQFXdzywVBJFAUNKGUNHchNfcdQUUp6+ueipppGrnvO+rPHffSNBdEc09T0axcszDRVFxy\nQUXW5/3D17t7cAZmYGDmwPX56xJmHg4cZjie+znn1Kihubi4aG5ublqNGjU0Hx8fvY9/tZppx44d\nWps2bbQaNWpozZs351VJmvb6yh9Ne/kamjBhgubt7a15eHhoH374oRYWFsafT0pK0qZMmaLVq1dP\ne+edd7TPP/9cmzdvns5qpsDAQG3UqFFp/lzXr1+vNWvWTKtevbrWrFkzbfv27Wk+3ljW0l+alnNe\nY5qmaREREVqrVq206tWraw0aNDBp9RkOmjTBzZs3qWnTprRy5crXbk4D67N161YaPXo0XbhwgfLm\ntZrbw8AAvL7Uc/LkSerZsydFRESQg4ODpZsD6cjJrzGrvWcGAAAAwBgYzAAAAIDSUGYCAAAApWFm\nBgAAAJSGwQwAAAAoDYMZAAAAUBoGMwAAAKA0DGYAAABAaRjMAAAAgNIwmAEAAAClYTADAAAASsNg\nBgAAAJSGwQwAAAAoDYMZAAAAUBoGMwAAAKC0vJZuAAAAAGSve/fuca5cuTLnXbt2cW7YsGG2tikz\nMDMDAAAASsNgBgAAAJSGMhMAAGSJKVOmcB4zZgznlJQUzlOnTuUcHBycPQ3LpTZs2MD52bNnnK9c\nucK5fPny2domc8HMDAAAACgNgxkAAABQWh5N0zRLNwJA+uOPPzi7urpydnFx4XzmzBnOhQsXzp6G\nAUC6ZCnD39+f8xtv/Pd/Z1lmkh9PTEzM4tblbg8fPuTs4ODAee3atZzbtm2brW0yF8zMAAAAgNIw\nmAEAAACl5brVTAkJCZwfP37MecWKFZxDQkI4N2vWjHN0dDTnX375hbOnpyfnzp07cx4wYADnQoUK\nZabZucrZs2c5yynoUqVKcba1tc3WNkHO8Oeff3L+66+/OFevXp1zhQoVOOfJkyd7GqY4Q6uW5F0M\nsrQkP3706NEsbh28UqJECc7379/nnDev+kMBzMwAAACA0jCYAQAAAKXlitVMycnJnIcNG8b51q1b\nnL/99lu9z5U/HlOnnAsUKMD5999/51ylShWTrpPbbNy4kXOPHj04y5//vn37ODdu3Dh7GgZKkKWk\nQ4cO6XxuyJAhnJ8/f673+fJ3q2nTpuZtXA6SmVVL8uPHjx/nXKdOHbO3E3IHzMwAAACA0jCYAQAA\nAKVhMAMAAABKyxX3zDx9+pRz7dq1OT958oSzo6MjZ7k0s2XLlpzv3LnD+fz585yvXbvG+dSpU5zl\nj7Z3796cV65caUrzcx25A3C1atU4y3tm6tWrxzkiIoJz/vz5zd6eGzducLa3tzf79SFj4uPjOe/a\ntYuzfK0lJSXpPMfb25uzr68vZ3mfzYsXLzivWbPGLG3NKeR7Zrdu3TiHh4dzlq9TQ/cchoWFce7e\nvbvZ2wnpk1uT3L17l3Pp0qU5Fy9ePFvblBmYmQEAAAClYTADAAAASlN/2z8j2NnZcf7kk084y+XS\nsnwwevRozsbs3Cunpbt27cp5x44dnDdv3sx57NixnJ2cnNK9fm4jD5SMjIzkPHjwYM6VK1fmXLBg\nQc5yuW1mSk7//PMP52nTpnGeP39+hq8Jmbdq1SrOX3/9Nee///6bc9WqVTmnLhN5eXnpve69e/c4\nb9myJZOtzLkuXLjAWS5hlyUkQ0uw5S7BKC1lH1lOmjdvHufp06dzjo2N5fzWW29xvnTpEmdrLzlh\nZgYAAACUhsEMAAAAKC1XlJlCQ0M5y5UyNWrU4CxXx5h6iKHc6VeuhJLi4uI4T5w4kfPy5ctN+lq5\nzTvvvMN57969nOVOrrIsFRAQwFmW9owhD16T066zZs0y6TpgXrNnz+Y8YcIEznJlzaRJkzgPGjSI\nsyxBpkWu4MCO0rqioqI4y/dJQ6uWDB0o+cEHH2RVE4F0y0n9+vXjLFeaycfIv1vydSJX7cryba1a\ntczW1qyAmRkAAABQGgYzAAAAoLQcU2aSG5utX79e53OylHP06FHOZcuWNXs75EZc8iDL7du3c372\n7JnZv25uIFelLVmyhLMsOd2+fTvD1x83bhznbdu2cZYbqplaggTjyZ/z8OHDOcvXjixtyNUV/fv3\n52xsackQuVEjEM2cOZOzMauW5Mfl+6Gbm1tWNRFId7Xnpk2bOMv3zbZt2+p9vDzQV64IbdWqFWe5\nIayh2yksCTMzAAAAoDQMZgAAAEBpOabMVLhwYc4JCQk6n5MrmLJas2bNOF++fJmz3EBPTtVC5tWt\nW1fvx/fs2cNZrlyTGyTK3w153pY860dO00LmyU0m5aaIcgrc2dmZs9yoMDExkfPq1as5582bY97K\nrIJcKSbPnjNm1ZIsLe3cuTOrmgiku8GjPO9Klofkx2VpVq4OlX8zZQl/2bJlnBs0aMBZbqaXL1++\nDLXd3DAzAwAAAErDYAYAAACUlmPmZuUqFnl+SHb7/vvvOctzmuR5T2Be3bp14xwfH8/54cOHnOUK\nl0WLFnGW52TJ8p/sx9q1a5uvsUCBgYGc5aqLcuXKcZarDm1sbDjLDRJdXV05oxRoXvI1ZeoZTPI1\nBeZ38eJFzvKMKw8PD87r1q3jXKxYMc6yxCtXAJ85c4azg4MD544dO3KuVKkS56CgIM6pzz+zFMzM\nAAAAgNIwmAEAAACl5ZgyU/78+TnL6WpLksetS3I6EMxL/h7IO/2HDh2q9/FyJVRISAhnnM+TebLk\n16VLF85yhcu0adM4yz6SpaWrV69ylitrRo0aZb7Ggs4ZTPI8H1PPYJIZzEOu4gsODuYsV2YePHiQ\nsywtSfI8JlkqMqRkyZKc5ZlncpWTtcDMDAAAACgNgxkAAABQWo4pM1WpUoXz7NmzLdiS/8iN/KQ2\nbdpkc0tyD3nu1aRJk9J9fOvWrTnL1TFgPFlWkGUguZrv7NmznOUKDHmuliwtyRLGlClTOHfu3Jmz\nn59fZpoNqVjqDKYNGzYY/Jz8XcnNrly5wllu6Ck3uDNUWjIXa9noZzPyAAAgAElEQVQczxDMzAAA\nAIDSMJgBAAAApeWYMpO8k/v06dM6n5N3f2cFeWS63Kjtgw8+4Fy1alXO1nh8ek7xv//9j/O9e/fS\nfbz8Xfnrr784z5o1i7OhcmFulXq1ys8//8y5ffv2nB88eMBZlopGjBih97rJycmcJ06cyHnjxo2c\n5RlnhQoVMqXZkA5DK5IMrVqSH5cbqhUtWjSrmgipyNdbVpB/2+bOncu5adOmWfp1MwIzMwAAAKA0\nDGYAAABAaTmmzCTLO9l9B7yccjt58iRneXe53JBKHsMO5rV27VrOckVGvXr1OMuzZuQme7/88ksW\nty5nkCvGiHR/trLEcPjwYc7vv/++3mslJSVx/umnnziPHz+e87hx4zhb4/S2yuT7UkREBGdTVzPJ\nx8vVSfKMLfmY+vXrc8aKpYzLilKr3Ozy448/5ixXG8qzn6wFZmYAAABAaRjMAAAAgNJyTJlJnsck\np0Kzijw+/dKlS3ofs2DBAs4lSpTI8jblVrI8JMsTp06d4ixLFbK0JL3zzjvmb1wOIV9TqcsCsrR0\n4MABzrVr1073uvL8rB49enD+7LPPOMs+BfOKiYnhLDc8NHU10+LFizmHhobqffzx48c5yzPRIH15\n8/73p1qW686dO8fZUCnXGPLsp4ULF3Levn0759WrV3OWZzxZC8zMAAAAgNIwmAEAAAClKV1mevTo\nEWc7OzvODg4OWfL17ty5w3nv3r2c3377bc4tW7bkLKfNwbxkaU9Oa8tykjz3Bxt5ZY5caSTPhiEi\n6tixI2dDpSVZlpUb6G3atInz1KlTOQ8fPjzjjQWjhYSEcDZm1ZKpH8/MmU3wH7npapkyZTjL0o+p\nZSa5IV6rVq04R0ZGcpZl4/fee8+k62c3zMwAAACA0jCYAQAAAKXl0VIftAI65N3ijRo14izvLu/c\nuTNneX6FtR+ZrjJ5931cXBznMWPGcJbnK9na2pp0fVkWsbe3z0gTcxS50uv69es6n/v77785y9Ux\nM2bM4Cw3MyxfvjznnTt3cpZT6ZB15PllskQrV8nIPwvGfFyW9n/88UfOlStXNkOLQTpy5Ajn/v37\nc5blIbliU/aZLM/Lv1u3b9/mLFemde3a1Qwtzh6YmQEAAAClYTADAAAASlN6NVN2GDp0KGd5Jo28\no1xO16G0lD0eP37MWW7gNH36dLNcX27mJld8yDPAcpNbt25xfvLkic7nZAlKbrwmz42RZ7xMnDiR\nc+HChc3aTkifLA+ZegaT/LhcldapUyfOKC1lLS8vL87y9SNLQvLvljyLTr72nJycOF++fJmz/Num\nEszMAAAAgNIwmAEAAAClYTADAAAASlN6aba8f0HWDk1dhpua3OlXHmApd1iUO6KCZR07doyz/J0o\nXbo0Z2dnZ85y2aLcOVouE5a/T2fPnuUcHBxshhar5+bNm5wHDhyo8zm5G7as248ePZqzi4tLFrYO\nTLFhwwbOa9as4RwREcHZ0BLssLAwzqkPHIXsJ3fxlYezyn598803OU+ePJlzr169OBs6fFclmJkB\nAAAApWEwAwAAAEpTuswkd3jt06ePwccVL16cszycMjY2lvPx48c59+7dm3PBggU5yx0WsfzQOsnd\ngN3d3TnLZfXy0Em5G61cSjx//nzOcpq2WLFi5musolK/ZcTHx3OWy+TB+sll9n5+fpz37NnDWS7B\nHjFiRPY0DMBEmJkBAAAApWEwAwAAAEpTuswkyRUn7dq10/mcLCXIO/PlbpanT5/m7OnpyXnq1Kmc\nmzRpYp7GQrY4ePAgZ9m/p06d4ixLh1evXuWc2RVxAACQfTAzAwAAAErDYAYAAACUlmPKTIcOHeKc\nuhwkv0W5CZ63tzfnhQsXcparV3BwJAAAgHXDzAwAAAAoDYMZAAAAUFqOKTMBAABA7oSZGQAAAFAa\nBjMAAACgNAxmAAAAQGkYzAAAAIDSMJixUsOHD6eAgABLNwOMNHv2bBx3oRD0l3rQZ2rJ7v7Km21f\nSYiMjKTExESdTess4enTpzRr1iw6cOAAPX78mMqWLUudOnWioKAgi7YrI5o0aUIxMTH0xhu649Md\nO3ZQ5cqVM3Vta+kvd3f31z6WkpJCZcuWpQMHDligRRn37Nkzmjt3Lu3bt48ePXpE9vb29Omnn1LL\nli0zfW1r6a8XL17Q4sWLaffu3XT37l2qVKkSDRs2jBo1amTRdpnqn3/+oQ8//PC1jycnJ5Onpyet\nXbs201/DWvqMiOjcuXM0ZcoUunTpEtnZ2ZGPjw+NHj2a7OzsLN00k9y+fZumT59OJ06coKdPn1KF\nChWob9++1Llz50xf21r6a9SoUbR9+3bKm1f3T/m4cePM8n1mt0OHDtGcOXMoKiqKihUrRh06dKBB\ngwaRjY1Nus+1yGBm9erV5OTkZPFfhAkTJtDFixdp1apVZG9vT6dPn6Z+/fpRiRIlqGPHjhZtW0aE\nhIRQhw4dzH5da+mv33//XeffKSkp1KNHD6pXr56FWpRxY8eOpWvXrtHq1aupXLlytHnzZho2bBg5\nOjqSm5tbpq5tLf01ZcoUOnToEC1atIicnZ3p0KFDNGTIENq0aRO5urpatG2mqFChwmu/e3FxcdSm\nTRuzvU9YS59FR0dTYGAgff7557Ry5UqKiYmhL7/8kr7//nvq3r27Rdtmqr59+5Krqyvt2rWLihQp\nQrt27aKRI0dSuXLlqH79+pm6trX0FxFR27ZtacqUKZZuRqZFRkbS0KFD6ZtvvqFmzZrRX3/9RWPG\njCEPDw9q2rRpus/P9jJTt27dKCIigpYtW0ZeXl5ERBQQEEBff/019e3bl2rVqkXJyckUEBBAw4cP\n13lu9+7dadSoUfzvn3/+mfz8/MjLy4veffddGjp0KN27d48//+WXX1KvXr0MtuX8+fPUqFEjcnR0\nJBsbG6pbty65urrSb7/9pvfxW7dupZo1a9Lhw4fJ19eX3N3dqXXr1nT58mV+jKurK61atYp8fX2p\nd+/eRET08OFDGjlyJDVs2JBq1qxJ7du3p8OHD/NzEhIS6KuvviJvb2+qU6cOTZ48mVJv/+Pr60sL\nFixI56drftbUX6mtWbOGnj9/Tv369dP7+ZMnT5KrqysdPnyY2rRpQ+7u7tS8eXM6ceIEP6ZJkyY0\nf/586tixI/n6+hLRyxmFb775hpo0aUIeHh7UokUL+v777/k5KSkpNGfOHGrQoAF5enrSyJEjKT4+\nXudr9+nTh0aPHq23XZqmUbFixeiLL76gSpUqka2tLfXo0YMKFy6sc6J3RlhTf+3du5e6d+9Obm5u\nlC9fPvLx8aGmTZvShg0b9D7eWvtLn5kzZ1LlypWpXbt2Rj/HEGvqs+XLl5OXlxcFBASQnZ0dOTo6\nUlhYmMGBjLX2WVxcHPXp04fGjBlDb775Jtna2lK7du2oaNGidOnSJYPfvzGsqb9MZa39RUQUGhpK\nbdu2pVatWlH+/PnJzc2Ntm3bZtRAhoiINAto3LixNmvWLP63v7+/VrduXS08PFxLTk7mjw0bNkzn\ned26ddNGjhypaZqmXb16VfPw8NA2bNigJSQkaHfv3tX69OmjBQQEGN2O2bNna76+vtqff/6pJScn\na6dOndJq1aqlHTt2TO/jv/vuO83FxUUbOHCgdv/+fe3JkyfaoEGDtIYNG3K7XVxctFatWmlXr17V\nUlJSNE3TND8/P61fv37avXv3tPj4eC0sLExzc3PToqOjNU3TtAULFmh169bVLl68qMXHx2tr1qzR\natWqpfn7+xv9vTRu3FgLCgrSWrRoodWuXVtr3769tm/fPqOfn961raG/pLt372q1atXSzpw5Y/Ax\nP//8s+bi4qL5+/tr0dHR2rNnz7SJEydqNWvW1GJjY/l7a9iwoXb69GnurxEjRmidOnXSoqOjtcTE\nRC0iIkJzc3PTTp06pWmapm3btk2rUaOGdvz4cS0hIUELDw/XateurTVu3DhD34umadr9+/c1Nzc3\nbc+ePRm+xivW0l/e3t7aokWLdD4WEhKidejQQe/jVemvS5cuae7u7tqNGzcy9Hx9rKXPfHx8tMmT\nJ2tDhw7VPD09uV0JCQl6H69Kn8XGxmorVqzQPD09taioqAxdQ7KW/ho5cqTWrl07rWvXrpqnp6fm\n4+OjhYaGaklJSXofb639lZycrHl4eGiLFy/WgoKCtNq1a2s+Pj7aypUruQ3psZobgMuVK0e+vr6v\n3fNhyObNm6latWrUrVs3srW1pdKlS1NwcDCdPHmSoqOjjbrG4MGDycPDg1q2bElubm4UGBhIgwcP\nTrds8cknn1DJkiWpSJEi9Nlnn9Ht27d1pqHr169Pzs7OlCdPHrp8+TJFRkbSyJEjqVSpUpQvXz7q\n0aMHubq60nfffUdERLt376bWrVtTtWrVKF++fBQQEEAVKlQw6nt4xcXFhZycnCgsLIwOHz5MzZs3\npwEDBtC5c+dMuo6xLNFf0oIFC6hOnTpUu3btdB/r7+9P9vb2VLBgQerfvz/Fx8fTkSNH+PPu7u7k\n5eVFefLkoUePHtEPP/xAgwcPJnt7e8qbNy81b96cmjRpQps3byail/3VoEED8vb2JltbW/L19eX/\noWVEQkICBQcHk6urKzVv3jzD10mLJfrLx8eHNmzYQL/99hslJibSiRMnKCIigh4+fJjm86y9v2bM\nmEGdO3emihUrZvgaxrBEn925c4e2bt1KH330ER0/fpy++eYbWrduHS1dujTN51lzn/n6+pKnpydt\n2rSJli1blul7CA2xRH9VrFiRKlasSBMnTqTjx49TcHAwhYaG0vLly9N8nrX118OHD+nFixe0ceNG\n+vTTT+n48eM0ePBgmj59Om3fvt2oa1jknhl97O3tTXp8VFQU/frrr6/dFGpjY0M3b96kSpUqpXuN\nkJAQunLlCv3www/k4OBAZ8+epSFDhlCxYsWoffv2Bp9XpUoVzq/e0G7fvk01a9Z87XuJiooiIqI2\nbdroXEPTNHJ2diYiolu3br32xujs7EwPHjxI93t4JTQ0VOffn332GUVERNDmzZupVq1aRl/HWJbo\nr1fu3r1L3377La1bt86ox8v+KlasGBUtWpRu377NH5Pfy/Xr1yklJYU+/fRTypMnD39c0zTu39u3\nb9P777+v8zWcnZ3p6tWrRn8Przx69IgGDhxIsbGxtHz5cqNudMsIS/RXcHAw2djY0IABAyg+Pp7q\n169PXbp0oR9++CHN51lzf/3+++/0008/0cSJE01+rqks0WeaplHDhg15Fcr7779PnTt3pm3btlH/\n/v0NPs+a+2zv3r0UGxtLO3bsoKCgIFqyZEmmBrOGWKK/BgwYoPPvpk2bUpcuXWjz5s30ySefGHye\ntfWX9v9vq2jXrh15enoSEVHLli0pPDyctm3bZlQ512oGM7a2tuk+JiUlhXOBAgWoUaNGtHjx4gx9\nvbi4ONqwYQPNnDmTXFxciIjI29ubWrduTWFhYWkOZpKTk1/7mByN58uXj3P+/PmJiOjYsWNUrFgx\nvddLTEx8bTQvv9eMqlSpEsXExGT6Ovpkd39Ju3fvprJlyxo9SEvdX5qm6fy85ffyqr82b95s8Ebc\nhIQEs/RXdHQ0BQUFkYuLC4WGhlKhQoVMvoaxLNFfBQsWpLFjx9LYsWP5Y1OnTqXy5cun+Txr7S+i\nl6sDPT09qWzZshl6viks0WdlypSh4sWL63zMmPcRa+4zIqIiRYpQjx496NixY7Rq1aosGcxY8j1R\nUrG/Xt3XpO93b9++fUZdw2rKTKnlz5+fXrx4wf9OSUmhmzdv8r8dHR3pypUrOj+w+Ph4o/94p6Sk\nkKZpr/3Ak5KSXrv5NrXr169zfjUdWK5cOb2PdXR0JCKiixcv6nz8xo0b/HXeeust+ueff3Q+/8cf\nf6T/TYhrTZgwgZ48eaLz8aioKHJwcDD6OpmR1f0lhYeHm7R/geyvR48e0ZMnTwz2l729PdnY2LzW\nX7du3aKkpCQiynx/ERHFxMRQ7969+Wa7rBzI6JMd/XXmzBmdGwuJiI4cOUJ16tRJ83nW2F+vhIeH\nU7NmzTL03MzKjj5zdXV9beVWdHR0umVva+uz8+fPU8OGDXV+PkQv/+hm1exnalndX8nJyTRt2rTX\nbiUw5n3f2vrrjTfeIGdnZ72/e8aWcy0ymLGzs6Po6GiKjY3VO8tBROTk5ERnzpyhf/75h+Lj42n+\n/Pn8gyN6eUf5vXv3aM6cOfT06VN6/PgxTZgwgXr16mXUiLBQoUJUr149Wr58OV27do2SkpIoMjKS\ndu/ene5eH0uWLKEHDx5QbGwshYaGkr29PdWoUUPvY6tUqUL169enqVOn0vXr1yk5OZn27dtHrVq1\nojNnzhDRy7vHd+zYQX/88QfFx8fTqlWrdO5oT0+pUqXoxx9/pAkTJtDDhw/p+fPntGDBArp27Rr5\n+/sbfR1DrKG/XklKSqLz58+btHx57dq1dPPmTYqLi6OFCxdSwYIF6YMPPtD72EKFClGnTp1o4cKF\ndPHiRUpOTqbTp09T+/btaffu3UT0sr+OHDlCkZGRlJCQQLt37za4As6Q8ePHU82aNWnUqFE6U7fm\nYC39dfbsWRo2bBj9+eeflJCQQHPmzKF///2XunbtmubzrLG/iF6+ed+9e5eqVatm8nPTYy19FhgY\nSL/++iutWrWK4uPj6fTp07Rlyxbq0aNHms+ztj5zcXEhOzs7CgkJoZiYGEpMTKQ9e/bQiRMn9O4Z\nZCpr6C8bGxuKjo6msWPHUlRUFCUmJtL+/fvp22+/pcDAwDSfa239RfRyKX14eDjt2rWLEhISaN++\nfbR///50f/desUiZyc/Pj2bMmEFNmzblH0Zqffv2pStXrlCrVq2oSJEiFBQUpPM/uooVK9KSJUto\n9uzZtGrVKipYsCB5enrSsmXLeLrryy+/pBs3btDq1av1fo3p06fTnDlzqE+fPnT//n0qVaoUBQUF\npfuL0KZNG/Lz86Nbt26Rk5MThYaGpvkHafr06TRp0iTq3LkzJSYmkoODA02dOpWnOocOHUqxsbG8\n42/r1q3po48+4vttiF7exNa6devXaqREL19YK1eupOnTp1OLFi0oLi6O3NzcKCwsjJycnNL8Xoxh\nLf1F9PJGscTERCpZsqTR7e/SpQv179+foqKiqFy5crRkyZI0Z0JGjx5NefPmpaCgIHr27BmVL1+e\n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\nFs516tTRm+UKGrnBVOopOpSKMufp06ec5Sqz3bt36328XFmzf/9+ztYydWpJckNGucIv9c/Gy8sr\n29okX4PNmzfnfP/+fc758+fnfOnSJZ3npy47wX/kCpgGDRrofYx835Pn+UD2kaVWWTKXrwdDpSIf\nHx/O8oy03r17c75165bex8jfD1lqln9TLQkzMwAAAKA0DGYAAABAabmupiE35ho5ciTnEydOcJYb\n1+3bt4+z3DBKnvkiN7SrUKECZ0NTfZB1ZKnIUGkpX758nGX/orSkS05ny9fNjz/+qPM4+XM2ZkPC\nP//8k7PcfKts2bKcL168yNnNzY3z3r17OcvSkjRs2DDOKCulTa7uPHnyJOchQ4Zwlpuu+fr6Zvhr\nydWF58+f51yiRAnO8uwtIpTdX4mPj+e8dOlSzrKf5PuaXKk7fvx4zlWrVuVsaJWmPC9NboAoV6/9\n/fffRrY8+2BmBgAAAJSGwQwAAAAoLdetZpLnucjzd+RqDVke2rZtG2e5gZ6c0gPLkmVB2Udy5Yvs\nr7lz53L+5JNPsrh16pKrGuQmWY0aNdJ5XJUqVdK91sOHDznLDfRKlizJWa5ECwsL4+zv768329jY\ncI6KiuJsjVPg1kqe4WZnZ8f5448/1vtxU8kyltz4U/5uSXIDUiLdFYk5XVxcHGf5+09E9M0333C+\nefOm3uf379+f87x58zLcDlkONHQGk+xXJyenDH8tc8LMDAAAACgNgxkAAABQWq64VTw5OZlz69at\nOcs75eWKDLlSSa52MWalBhhHrpSR06vGkiUkWVqSU6SS7Gu5kmLQoEEmf21DAgMDOb/zzjtmu66l\nyNVF8swwebYYkW7ZyNPTk/PmzZs5V69eXe915UoWmeWGbPL8Jnn206hRozifPn06rW8FDJArOs1F\nbq4mV4nK0pK8u0H2rzxrLreZMmUKZ1lWSouHhwfnWbNmmaUda9as0fvxJk2acLbGVYKYmQEAAACl\nYTADAAAASssVZaYJEyZwvnDhAudffvmFs1xVceTIEc7u7u6c5dTowoULzd7OnE5uLiinUQ1Na5qT\nLD+Z2ndyc6m0VrG9//77nHNCmUmeXebn58f5999/13mcnB6X5zTJs2Lkqgh5dpIhsvQgVyDK1S5t\n2rThLMtYYDz5mpSlA1M3q9uxYwfnMWPGcJbvt5KLiwtneV6Qt7e3SV83J5Gvt9TGjRvHOSIigvPP\nP//MWZ4RaOoqMLlh4ogRI/Q+Rr725EpCa4GZGQAAAFAaBjMAAACgtFxRZpJlDHn3viwtSfb29pwD\nAgI4nzp1Kgtal7PJzcxk6eXZs2eWaI7R5Hkm8lwiWTrJ6Sqq4qgAAATKSURBVOT5SJUqVeK8bNky\nnce99dZbep9fqlSpDH9tuclehw4dON++fZuzPCvNmNIVvE6+H65du5azoTJTbGwsZ7lyTZ63ZYj8\nHYqMjOScVnklt0q9l61cxSdX28qVgXIFoFy1W7hwYc5yFemAAQM4y/OeihcvzlmWlMuUKWP8N2AB\nmJkBAAAApWEwAwAAAErLFWUmaeXKlZwTEhI4P3r0iLOcypZ3cH/33XdZ3LqcR64ykT/vrPoaX3zx\nBef27dtn+Jpy1ZI8qys3kWeXyZxV5GtQ9qMsd12/fp1zgQIFsrxNOUFKSorOv2XZXa4UM7SC7OjR\no5wHDx7M2VBpSZ7lNGTIEM5fffUVZ/n6MnT+T24jf7dTv+fI1UZVq1bl3KNHD84HDx7kfOXKFc5y\nU1LZH3I1b+XKlTkfPnyYs7zlwtphZgYAAACUhsEMAAAAKC1XlJnkNLXc4Gvx4sWc5ZR1s2bNOJ87\nd47z22+/nVVNzLFq1qzJWa5Qked8pD4fSW5S5+bmlu7X2Lt3L+dy5cplqJ1gGXfu3OEsV1ds27aN\n84wZMzijtGQcWVqQ73lEumdmyTOt5DlKcuM0Q6s4ZXlXrrCR5V1DK93gdfPmzeN87do1nc8NHDhQ\n73NkCVGeffXee++l+/XkeWshISGcVSotSZiZAQAAAKVhMAMAAABKy6Ol3p0HwIyePn3KWW7YVKJE\nCc7x8fE6zxk1ahRnOfUqz3OR09oyW+OZIaBLbpIWFBTEeefOnZzr16/PWZaDVZ0Cz24rVqzgLH/G\nRESurq6c5WaDcmO2/fv3c75//z7nhg0bcpYrmzw8PDLZYpDCw8N1/i3f4+SqJ0n+KZeroRwdHTnL\n99ZOnTpxlu/HqsLMDAAAACgNgxkAAABQGgYzAAAAoDTcMwMWd+bMGZ1/G1pWuGTJEs6p7wMAdXz+\n+eec5W7bfn5+nOVBeWA6ea9a27ZtdT4nd4qV2yJMmzaNs9yh9/Hjx5zlLsEFCxY0T2MhXXKpvby3\nLPV75ytyF+bg4GC9H89pMDMDAAAASsNgBgAAAJSGMhNYXOoDIXft2sVZLiX89NNPOZcvXz7rGwaZ\nIg8rbN68OWd5kJ0sLYWFhWVPwwAgx8HMDAAAACgNgxkAAABQWq44aBLUIg/0/Prrry3YEjCV3OVZ\nrkiSh73KVWm9evXKnoYBQI6GmRkAAABQGgYzAAAAoDSsZgKATJGrlr744gvOS5cu5SwPLvTy8sqe\nhgFAroGZGQAAAFAaBjMAAACgNKxmAoBMuXz5MmdHR0fOR48e5ezu7p6dTQKAXAYzMwAAAKA0DGYA\nAABAaVjNBAAAAErDzAwAAAAoDYMZAAAAUBoGMwAAAKA0DGYAAABAaRjMAAAAgNIwmAEAAAClYTAD\nAAAASsNgBgAAAJSGwQwAAAAoDYMZAAAAUBoGMwAAAKA0DGYAAABAaRjMAAAAgNIwmAEAAAClYTAD\nAAAASsNgBgAAAJSGwQwAAAAoDYMZAAAAUBoGMwAAAKA0DGYAAABAaRjMAAAAgNIwmAEAAAClYTAD\nAAAASsNgBgAAAJSGwQwAAAAoDYMZAAAAUBoGMwAAAKA0DGYAAABAaRjMAAAAgNIwmAEAAAClYTAD\nAAAASsNgBgAAAJT2/wCfuuarW2GzbQAAAABJRU5ErkJggg==\n","text/plain":["
"]},"metadata":{"tags":[]}}]},{"metadata":{"id":"MbxwflYGlzbC","colab_type":"text"},"cell_type":"markdown","source":["Ok, we're not doing so bad after all. To get better results, it would help to: \n","\n","* give people a pen that works (or get more old pens in the training set)\n","* teach them how to write properly (or get more bad writers in the training set)\n","* get rid of all these europeans who add an horizontal bar to the 7 (or get more europeans in the training set)\n","\n","Still, for the major fraction of the misclassified digits, the human brain would perform better than our network, and we can always aim for better performance. \n","\n","The world record for this classification exercise is 99.8%. \n","\n","How well do you rank?\n","\n","Do you have any idea on how to manipulate the input images to help the network on such bad cases? hint: it's always possible to edit the images before feeding them to the network for training, a procedure called **data augmentation**. \n","\n","## Wrapping it up \n","\n","In this tutorial, you have learnt: \n","\n","* how to use the Google Colab platform to deep learning, without having to install software or to buy a GPU; \n","* how to use Google Colab to run your own notebooks;\n","* what is a convolutional network, and how its most important layers work: the convolutional layers, the maxpooling layers, and the dropout layers; \n","* how to build a simple convolutional network, and how to tune it to reach an accuracy over 99.3% in the recognition of handwritten digits. \n","\n","Now, you can try and tune the network further and join the contest! \n","\n","What's your highest accuracy? ? Please tell us in the comments. To claim your reward (a dinner at my place if you're around!), you should: \n","\n","* post your accuracy history plot\n","* give the code that describes your model \n","\n","In the future, we'll have a look at other image classification problems, and talk about data augmentation. \n","We will also learn about other kinds of deep neural networks for natural language processing and time series analysis. \n"]},{"metadata":{"id":"iuA5oljUlroJ","colab_type":"code","colab":{}},"cell_type":"code","source":[""],"execution_count":0,"outputs":[]}]} \ No newline at end of file