{ "cells": [ { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "7zSVW-HayxII", "slideshow": { "slide_type": "slide" } }, "source": [ "# Deep Feedforward Networks - a general description" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "SPkFcch2zKiP", "slideshow": { "slide_type": "slide" } }, "source": [ "**Deep feedforward networks**, also often called feedforward neural networks, or **multilayer perceptrons (MLPs)**, are the quintessential deep learning models. The goal of a feedforward network is to approximate some function $f^*$. For example, for a classifier, $y = f^∗(x)$ maps an input $x$ to a category $y$. A feedforward network defines a mapping $y = f (x; θ)$ and learns the value of the parameters θ that result in the best function approximation.\n", " \n", "These models are called feedforward because information flows through the function being evaluated from $x$, through the intermediate computations used to define $f$, and finally to the output $y$. \n", "\n", "Feedforward neural networks are called networks because they are typically represented by composing together many different functions. The model is asso- ciated with a directed acyclic graph describing how the functions are composed together. For example, we might have three functions $f^{(1)}$,$ f^{(2)}$, and $f^{(3)}$ connected in a chain, to form $f(x) = f^{(3)}(f^{(2)}(f^{(1)}(x)))$. These chain structures are the most commonly used structures of neural networks. In this case, $f^{(1)}$ is called the first layer of the network, $f^{(2)}$ is called the second layer, and so on. \n", "\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "The overall **length of the chain** gives the **depth** of the model. It is from this terminology that the name **“deep learning”** arises. The final layer of a feedforward network is called the **output layer**. During neural network training, we drive $f(x)$ to match $f^∗(x)$. The training data provides us with noisy, approximate examples of $f^∗(x)$ evaluated at different training points. Each example $x$ is accompanied by a label $y ≈ f^∗(x)$. The training examples specify directly what the output layer must do at each point x; it must produce a value that is close to $y$. The behavior of the other layers is not directly specified by the training data. The learning algorithm must decide how to use those layers to produce the desired output, but the training data does not say what each individual layer should do. Instead, the learning algorithm must decide how to use these layers to best implement an approximation of $f^∗$. Because the training data does not show the desired output for each of these layers, these layers are called **hidden layers**.\n", "\n", "Finally, these networks are called **neural** because they are loosely inspired by **neuroscience**. Each hidden layer of the network is typically **vector-valued**. The dimensionality of these hidden layers determines the width of the model. Each element of the vector may be interpreted as playing a role analogous to a neuron.\n", "\n", "![alt text](https://i.imgur.com/38lpenv.png\n", ")" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "rUOfJNmw5FFX", "slideshow": { "slide_type": "slide" } }, "source": [ "# Learning the XOR function " ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "3uXdVYV08xVS", "slideshow": { "slide_type": "slide" } }, "source": [ "To make the idea of a feedforward network more concrete, we begin with an example of a fully functioning feedforward network on a very simple task: learning the **XOR function**.\n", "\n", "The **XOR function (“exclusive or”)** is an operation on **two binary values, x1 and x2**. When **exactly one** of these binary values is **equal to 1**, the XOR function **returns** **1**. Otherwise, it returns 0. The XOR function provides the target function $y = f^∗(x)$ that we want to learn. Our model provides a function $y = f(x;θ)$ and our learning algorithm will adapt the parameters θ to make f as similar as possible to $f^∗$.\n", "\n", "In this simple example, we will not be concerned with statistical generalization. We want our network to perform correctly on the four points \n", "$\\mathbb{X}= \\{{[0,0]^T, [0,1]^T, [1,0]^T,[1,1]^T}\\}$. We will train the network on all four of these points. The only challenge is to fit the training set.\n", "\n", "Clearly, this is a regression problem where we can use the mean squared error loss function.\n", "\n", "Evaluated on our whole training set, the MSE loss function is\n", "\n", "$J(θ)= \\dfrac{1}{4} \\Sigma_{x\\epsilon\\mathbb{X}}(f (x)−f(x;θ))^2$ .\n", "\n", "Now we must choose the form of our model, f (x; θ). Suppose that we choose a linear model, with θ consisting of w and b. Our model is defined to be \n", "\n", "$f(x; w, b) = x^Tw + b$.\n", "\n", "We can minimize $J(θ)$ in closed form with respect to w and b using the normal\n", "equations.\n", "\n", "After solving the normal equations, we obtain a closed form solution, $w = 0$ and $b = 0.5$. This means that the linear model simply outputs 0.5 everywhere.\n", "\n", "**But why couldn't a linear model represent this function?**" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "47LeVbfZDXyJ", "slideshow": { "slide_type": "slide" } }, "source": [ "Let's now model this with a **DNN**. \n", "Specifically, we will introduce a very simple feedforward network with one\n", "hidden layer containing two hidden units. This feedforward network has a vector of hidden units $h$ that are\n", "computed by a function $f^{(1)} (x; W , c )$. The values of these hidden units are then\n", "used as the input for a second layer. The second layer is the output layer of the\n", "network. The output layer is still just a linear regression model, but now it is\n", "applied to $h$ rather than to $x$ . The network now contains two functions chained\n", "together: $h = f (1) (x; W , c )$ and $y = f^{(2)} (h; w, b)$, with the complete model being\n", "$f ( x ; W , c , w , b ) = f^{(2)} (f^{(1)} ( x ))$ .\n", "\n", "For a better illustration of the network, let's look at this figure.\n", "\n", "![alt text](https://imgur.com/BQH5IG1.png)\n", "\n", "Here $[x1,x2]$ is the input vector, and $y$ is the output. Now we need a non-linear transformation from the input feature space to the hidden feature space of $h$. This is achieved through the first layer. The first layer can be represented as $h=f^{(1)}(x,W,c)$ where $f^{(1)}$ is a non-linear transformation in itself. Thus $h = g(W^Tx+c) $ where $W^Tx+c$ is an affine transform and $g$ is a non-linear function. This function $g$ is called as the activation function. In this case, (and most cases we will) let's use a simple function known as **ReLU**. ReLU (Rectified Linear Unit), not as complex as it sounds, is the simple function $max\\{0,x\\}$. The output layer is just a linear function $w^Th+b$. Overall, the neural network represents the function\n", "\n", "$f(x;W,c,w,b)=w^Tmax\\{0,W^Tx+c\\} +b$\n", "\n", "\n", "**With this setup let's guess a solution**\n", "\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "3Un46qtVn3Tp", "slideshow": { "slide_type": "slide" } }, "source": [ "# Gradient-Based Learning\n", "**Can we keep guessing solutions like this ?**\n", "\n", "State-of-the-art neural networks have millions of parameters to be tuned. For optimizing these million parameters, we need an objective towards which we would like to drive our model. This objective is minimizing a value defined by a **cost function**. There are many cost functions which we use depending on the purpose" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "l0Ed4U8xpizs", "slideshow": { "slide_type": "slide" } }, "source": [ "## Cost functions\n", "The cost functions used in neural networks are the same as those used in simpler paramteric models such as the linear model. These cost functions represent a parametrized distribution whose parameters are to be optimized.\n", "\n", "You would have seen some cost functions yesterday. \n", "\n", "To name a few,\n", "\n", "* Mean Squared Error Loss\n", "* Cross Entropy Loss\n", "* L1 Loss\n", "\n", "Some times we use a neural network to model our loss function as well. You'll be learning that later.\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "7HhHKnE2rJvt", "slideshow": { "slide_type": "slide" } }, "source": [ "## Gradient Descent\n", "Our task is now to minimize the cost function.\n", "\n", "**How do we do that?**\n", " In the case of the linear model, the loss function was convex w.r.t the parameters as seen in the image. This is a plot of a loss function $J$ w.r.t a parameter $w$.\n", " ![alt text](https://i.imgur.com/LAJ8Uag.png)\n", " \n", " From, the figure it is clear that for convex functions we can achieve the minima by descending using gradients. \n", " Esssentially, we can represent this using the update statement. We see that the gradient is positive if we move far too much from the optimal point and negative if we are far behind the optimal point. Thus the negative of the gradient gives the direction in which we have to drive our parameter $w$.\n", " \n", " ![alt text](https://i.imgur.com/oBIKHky.png)\n", " \n", " Here, $\\alpha$ is known as the learning rate because it decides how much to alter the parameter in each step.\n", " \n", "For convex cost functions there are global convergance guarantees.\n", " \n", "This step represents one iteration of gradient descent. We do this iteratively until we reach the optimal point. \n", " \n", " While this is true for convex loss functions, what about neural networks?\n", "\n", " The cost functions for Neural Networks need not be convex. Thus, there is no guarantees as such.\n", " \n", "So what do we do?\n", "\n", "We continue using gradient descent with some precautions. **We initialise the weights to be some random numbers close to 0**.\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "O-dIQqj00umt", "slideshow": { "slide_type": "slide" } }, "source": [ "### Back Propagation\n", "While in linear models gradients are easy to compute, what about neural networks?\n", "\n", "This can be done using chain rule. \n", "\n", "In \"**Deep Learning**\", we call it backpropagation." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "0i2GSwye4Q_L", "slideshow": { "slide_type": "slide" } }, "source": [ "# Circuit Intuition for Back Prop\n", "\n", "![alt text](https://i.imgur.com/MjZjeSP.png)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "_5Le7tSs1ZBD", "slideshow": { "slide_type": "slide" } }, "source": [ "## Optimization\n", "\n", "We will now discuss 3 optimizers.\n", "\n", "* **Batch Gradient Descent**\n", "* **Stochastic Gradient Descent**\n", "* **Mini Batch Gradient Descent**\n", "\n", "**Batch Gradient Descent Optimization ** involves computing the loss for the entire dataset at once and then backpropagating and updating at a time.\n", "\n", "In **Stochastic Gradient Descent Optimization**, we compute the loss function for a single training example , one at a time, and then backpropagating.\n", "\n", "In **Mini Batch Gradient Descent**, the entire training data is divided into batches and we compute loss for each batch at a time and backpropagate.\n", "\n", "Mini Batch Gradient Descent technique is commonly used for some advantages that it provides.\n", "\n", "There are various complex optimization algorithms such as momentum, RMSprop, Adam etc. Of course, we won't go into details on them.\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "yPS1lbGE8ueK", "slideshow": { "slide_type": "slide" } }, "source": [ "## Hyperparameters\n", "\n", "Hyperparameters are some predefined constants used to train a network. \n", "For example, the learning rate, number of epochs to train for, batch size, number of layers in the network etc. are all hyperparameters\n", "\n", "There is no simple way to decide these. Basically, try them all and choose the best." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "0ec4pRkVu46U", "slideshow": { "slide_type": "slide" } }, "source": [ "# A Fast Pythonic Implementation of a Feed Forward Neural Network (Vectorised)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "79vGJ99fE17s", "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "# Setup\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "%matplotlib inline\n", "plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots\n", "plt.rcParams['image.interpolation'] = 'nearest'\n", "plt.rcParams['image.cmap'] = 'gray'\n", "\n", "# for auto-reloading extenrnal modules\n", "# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython\n", "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 }, "base_uri": "https://localhost:8080/", "height": 504 }, "colab_type": "code", "executionInfo": { "elapsed": 1228, "status": "ok", "timestamp": 1531822868765, "user": { "displayName": "Rishhanth Maanav", "photoUrl": "https://lh3.googleusercontent.com/a/default-user=s128", "userId": "116055284600069515854" }, "user_tz": -330 }, "id": "TStYjt7Fu-B2", "outputId": "381faa3c-156e-42a1-b94b-ed16e63d8238", "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/plain": [ "(-1, 1)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#generate random data -- not linearly separable \n", "np.random.seed(0)\n", "N = 100 # number of points per class\n", "D = 2 # dimensionality\n", "K = 3 # number of classes\n", "X = np.zeros((N*K,D))\n", "num_train_examples = X.shape[0]\n", "y = np.zeros(N*K, dtype='uint8')\n", "for j in range(K):\n", " ix = range(N*j,N*(j+1))\n", " r = np.linspace(0.0,1,N) # radius\n", " t = np.linspace(j*4,(j+1)*4,N) + np.random.randn(N)*0.2 # theta\n", " X[ix] = np.c_[r*np.sin(t), r*np.cos(t)]\n", " y[ix] = j\n", "fig = plt.figure()\n", "plt.scatter(X[:, 0], X[:, 1], c=y, s=40, cmap=plt.cm.Spectral)\n", "plt.xlim([-1,1])\n", "plt.ylim([-1,1])" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "73yCicW1vW3v", "slideshow": { "slide_type": "slide" } }, "source": [ "The sigmoid function \"squashes\" inputs to lie between 0 and 1. Unfortunately, this means that for inputs with sigmoid output close to 0 or 1, the gradient with respect to those inputs are close to zero. This leads to the phenomenon of vanishing gradients, where gradients drop close to zero, and the net does not learn well.\n", "\n", "On the other hand, the relu function (max(0, x)) does not saturate with input size. Plot these functions to gain intution." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "ZqIIKzcLvEeX", "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "def sigmoid(x):\n", " x = 1/(1+np.exp(-x))\n", " return x\n", "\n", "def sigmoid_grad(x):\n", " return (x)*(1-x)\n", "\n", "def relu(x):\n", " return np.maximum(0,x)\n", "\n", "def tanh(x):\n", " return (2*sigmoid(2*x) - 1)\n", "\n", "def tanh_grad(x):\n", " return (1 - (tanh(x))**2)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "pUrzH3KqvHQx", "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "#function to train a three layer neural net with either RELU or sigmoid nonlinearity via vanilla grad descent\n", "\n", "def three_layer_net(NONLINEARITY,X,y, model, step_size, reg):\n", " #parameter initialization\n", " \n", " h= model['h']\n", " h2= model['h2']\n", " W1= model['W1']\n", " W2= model['W2']\n", " W3= model['W3']\n", " b1= model['b1']\n", " b2= model['b2']\n", " b3= model['b3']\n", " \n", " \n", " # some hyperparameters\n", "\n", "\n", " # gradient descent loop\n", " num_examples = X.shape[0]\n", " plot_array_1=[]\n", " plot_array_2=[]\n", " for i in range(50000):\n", "\n", " #FOWARD PROP\n", "\n", " if NONLINEARITY== 'RELU':\n", " hidden_layer = relu(np.dot(X, W1) + b1)\n", " hidden_layer2 = relu(np.dot(hidden_layer, W2) + b2)\n", " scores = np.dot(hidden_layer2, W3) + b3\n", "\n", " elif NONLINEARITY == 'SIGM':\n", " hidden_layer = sigmoid(np.dot(X, W1) + b1)\n", " hidden_layer2 = sigmoid(np.dot(hidden_layer, W2) + b2)\n", " scores = np.dot(hidden_layer2, W3) + b3\n", " \n", " elif NONLINEARITY == 'TANH':\n", " hidden_layer = tanh(np.dot(X, W1) + b1)\n", " hidden_layer2 = tanh(np.dot(hidden_layer, W2) + b2)\n", " scores = np.dot(hidden_layer2, W3) + b3\n", "\n", " exp_scores = np.exp(scores)\n", " probs = exp_scores / np.sum(exp_scores, axis=1, keepdims=True) # [N x K]\n", "\n", " # compute the loss: average cross-entropy loss and regularization\n", " corect_logprobs = -np.log(probs[range(num_examples),y])\n", " data_loss = np.sum(corect_logprobs)/num_examples\n", " reg_loss = 0.5*reg*np.sum(W1*W1) + 0.5*reg*np.sum(W2*W2)+ 0.5*reg*np.sum(W3*W3)\n", " loss = data_loss + reg_loss\n", " if i % 1000 == 0:\n", " print(\"iteration : \"+ str(i) + \" loss : \" + str(loss) )\n", "\n", "\n", " # compute the gradient on scores\n", " dscores = probs\n", " dscores[range(num_examples),y] -= 1\n", " dscores /= num_examples\n", "\n", " \n", " # BACKPROP HERE\n", " dW3 = (hidden_layer2.T).dot(dscores)\n", " db3 = np.sum(dscores, axis=0, keepdims=True)\n", "\n", "\n", " if NONLINEARITY == 'RELU':\n", "\n", " #backprop ReLU nonlinearity here\n", " dhidden2 = np.dot(dscores, W3.T)\n", " dhidden2[hidden_layer2 <= 0] = 0\n", " dW2 = np.dot( hidden_layer.T, dhidden2)\n", " plot_array_2.append(np.sum(np.abs(dW2))/np.sum(np.abs(dW2.shape)))\n", " db2 = np.sum(dhidden2, axis=0)\n", " dhidden = np.dot(dhidden2, W2.T)\n", " dhidden[hidden_layer <= 0] = 0\n", " \n", " elif NONLINEARITY == 'SIGM':\n", "\n", " #backprop sigmoid nonlinearity here\n", " dhidden2 = dscores.dot(W3.T)*sigmoid_grad(hidden_layer2)\n", " dW2 = (hidden_layer.T).dot(dhidden2)\n", " plot_array_2.append(np.sum(np.abs(dW2))/np.sum(np.abs(dW2.shape)))\n", " db2 = np.sum(dhidden2, axis=0)\n", " dhidden = dhidden2.dot(W2.T)*sigmoid_grad(hidden_layer)\n", " \n", " elif NONLINEARITY == 'TANH':\n", " \n", " #backprop tanh nonlinearity here\n", " dhidden2 = dscores.dot(W3.T)*tanh_grad(hidden_layer2)\n", " dW2 = (hidden_layer.T).dot(dhidden2)\n", " plot_array_2.append(np.sum(np.abs(dW2))/np.sum(np.abs(dW2.shape)))\n", " db2 = np.sum(dhidden2, axis=0)\n", " dhidden = dhidden2.dot(W2.T)*tanh_grad(hidden_layer)\n", " \n", "\n", " \n", " dW1 = np.dot(X.T, dhidden)\n", " plot_array_1.append(np.sum(np.abs(dW1))/np.sum(np.abs(dW1.shape)))\n", " db1 = np.sum(dhidden, axis=0)\n", "\n", " # add regularization\n", " dW3+= reg * W3\n", " dW2 += reg * W2\n", " dW1 += reg * W1\n", " \n", " #option to return loss, grads -- uncomment next comment\n", " grads={}\n", " grads['W1']=dW1\n", " grads['W2']=dW2\n", " grads['W3']=dW3\n", " grads['b1']=db1\n", " grads['b2']=db2\n", " grads['b3']=db3\n", " #return loss, grads\n", " \n", " \n", " # update\n", " W1 += -step_size * dW1\n", " b1 += -step_size * db1\n", " W2 += -step_size * dW2\n", " b2 += -step_size * db2\n", " W3 += -step_size * dW3\n", " b3 += -step_size * db3\n", " # evaluate training set accuracy\n", " if NONLINEARITY == 'RELU':\n", " hidden_layer = relu(np.dot(X, W1) + b1)\n", " hidden_layer2 = relu(np.dot(hidden_layer, W2) + b2)\n", " elif NONLINEARITY == 'SIGM':\n", " hidden_layer = sigmoid(np.dot(X, W1) + b1)\n", " hidden_layer2 = sigmoid(np.dot(hidden_layer, W2) + b2)\n", " scores = np.dot(hidden_layer2, W3) + b3\n", " predicted_class = np.argmax(scores, axis=1)\n", " print(\"training accuracy:\" + str(np.mean(predicted_class == y))) \n", " #return cost, grads\n", " return plot_array_1, plot_array_2, W1, W2, W3, b1, b2, b3\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "xBECHHL3veTs", "slideshow": { "slide_type": "slide" } }, "source": [ "## Train net with sigmoid nonlinearity first" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 }, "base_uri": "https://localhost:8080/", "height": 884 }, "colab_type": "code", "executionInfo": { "elapsed": 123616, "status": "ok", "timestamp": 1531822994727, "user": { "displayName": "Rishhanth Maanav", "photoUrl": "https://lh3.googleusercontent.com/a/default-user=s128", "userId": "116055284600069515854" }, "user_tz": -330 }, "id": "22BtZy8-vJ1i", "outputId": "5748be4e-89e5-40ae-b24c-7552b64b2b48", "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "iteration : 0 loss : 1.1564048888640268\n", "iteration : 1000 loss : 1.1007369422747169\n", "iteration : 2000 loss : 0.9996976474584222\n", "iteration : 3000 loss : 0.8554946768068612\n", "iteration : 4000 loss : 0.8194272926985829\n", "iteration : 5000 loss : 0.8148248201455692\n", "iteration : 6000 loss : 0.8105259085596594\n", "iteration : 7000 loss : 0.8059427888467368\n", "iteration : 8000 loss : 0.8006883214893732\n", "iteration : 9000 loss : 0.7939760223457257\n", "iteration : 10000 loss : 0.7832005415212004\n", "iteration : 11000 loss : 0.759908785971414\n", "iteration : 12000 loss : 0.7197916117626575\n", "iteration : 13000 loss : 0.6831938875797994\n", "iteration : 14000 loss : 0.6558471217342812\n", "iteration : 15000 loss : 0.6349964251436383\n", "iteration : 16000 loss : 0.6185271218753057\n", "iteration : 17000 loss : 0.6022458750439876\n", "iteration : 18000 loss : 0.5797104701761298\n", "iteration : 19000 loss : 0.5462637334154149\n", "iteration : 20000 loss : 0.5128309779987612\n", "iteration : 21000 loss : 0.4924029190124008\n", "iteration : 22000 loss : 0.481853679426717\n", "iteration : 23000 loss : 0.4759230744953976\n", "iteration : 24000 loss : 0.4720309172464675\n", "iteration : 25000 loss : 0.4690859008806442\n", "iteration : 26000 loss : 0.4666108795626802\n", "iteration : 27000 loss : 0.46438591591476186\n", "iteration : 28000 loss : 0.4623058909741167\n", "iteration : 29000 loss : 0.46031896492095215\n", "iteration : 30000 loss : 0.4583980659317958\n", "iteration : 31000 loss : 0.4565275149552446\n", "iteration : 32000 loss : 0.4546971513008592\n", "iteration : 33000 loss : 0.4529003005451173\n", "iteration : 34000 loss : 0.4511336807434287\n", "iteration : 35000 loss : 0.4493981141115461\n", "iteration : 36000 loss : 0.4476992220805742\n", "iteration : 37000 loss : 0.4460474551202782\n", "iteration : 38000 loss : 0.44445704769582944\n", "iteration : 39000 loss : 0.44294387221970544\n", "iteration : 40000 loss : 0.4415226348528942\n", "iteration : 41000 loss : 0.44020421535901677\n", "iteration : 42000 loss : 0.43899396979334165\n", "iteration : 43000 loss : 0.43789142435001516\n", "iteration : 44000 loss : 0.43689121337531434\n", "iteration : 45000 loss : 0.43598470278212487\n", "iteration : 46000 loss : 0.4351616778814694\n", "iteration : 47000 loss : 0.43441168312159384\n", "iteration : 48000 loss : 0.4337248769098653\n", "iteration : 49000 loss : 0.4330924580113893\n", "training accuracy:0.97\n" ] } ], "source": [ "#Initialize toy model, train sigmoid net\n", "\n", "N = 100 # number of points per class\n", "D = 2 # dimensionality\n", "K = 3 # number of classes\n", "h=50\n", "h2=50\n", "num_train_examples = X.shape[0]\n", "\n", "model={}\n", "model['h'] = h # size of hidden layer 1\n", "model['h2']= h2# size of hidden layer 2\n", "model['W1']= 0.1 * np.random.randn(D,h)\n", "model['b1'] = np.zeros((1,h))\n", "model['W2'] = 0.1 * np.random.randn(h,h2)\n", "model['b2']= np.zeros((1,h2))\n", "model['W3'] = 0.1 * np.random.randn(h2,K)\n", "model['b3'] = np.zeros((1,K))\n", "\n", "(sigm_array_1, sigm_array_2, s_W1, s_W2,s_W3, s_b1, s_b2,s_b3) = three_layer_net('SIGM', X,y,model, step_size=1e-1, reg=1e-3)\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 }, "base_uri": "https://localhost:8080/", "height": 884 }, "colab_type": "code", "executionInfo": { "elapsed": 79867, "status": "ok", "timestamp": 1531823074622, "user": { "displayName": "Rishhanth Maanav", "photoUrl": "https://lh3.googleusercontent.com/a/default-user=s128", "userId": "116055284600069515854" }, "user_tz": -330 }, "id": "OkOedIPBvNXO", "outputId": "62e8b87c-b250-4ffa-e21e-3c1b004618ff", "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "iteration : 0 loss : 1.1161878505332794\n", "iteration : 1000 loss : 0.2750473719183876\n", "iteration : 2000 loss : 0.15229739108568793\n", "iteration : 3000 loss : 0.1363700498508273\n", "iteration : 4000 loss : 0.13085339604761723\n", "iteration : 5000 loss : 0.1278783087185082\n", "iteration : 6000 loss : 0.12595052350220223\n", "iteration : 7000 loss : 0.12459912899799815\n", "iteration : 8000 loss : 0.12350220538037718\n", "iteration : 9000 loss : 0.12259421916677461\n", "iteration : 10000 loss : 0.12183316159784804\n", "iteration : 11000 loss : 0.12120238213822207\n", "iteration : 12000 loss : 0.12064999237838808\n", "iteration : 13000 loss : 0.1201646007717303\n", "iteration : 14000 loss : 0.11973390288156793\n", "iteration : 15000 loss : 0.11934477378825434\n", "iteration : 16000 loss : 0.11900040882732316\n", "iteration : 17000 loss : 0.11869574387761538\n", "iteration : 18000 loss : 0.11842259785330742\n", "iteration : 19000 loss : 0.11816648588754516\n", "iteration : 20000 loss : 0.11793219180877035\n", "iteration : 21000 loss : 0.11771802461981937\n", "iteration : 22000 loss : 0.11752094533738827\n", "iteration : 23000 loss : 0.11733713100171589\n", "iteration : 24000 loss : 0.11716774683599088\n", "iteration : 25000 loss : 0.11701149261769367\n", "iteration : 26000 loss : 0.1168630591346129\n", "iteration : 27000 loss : 0.11672088022617585\n", "iteration : 28000 loss : 0.11657374759428504\n", "iteration : 29000 loss : 0.11642691110006997\n", "iteration : 30000 loss : 0.11629276946275235\n", "iteration : 31000 loss : 0.1161640711615598\n", "iteration : 32000 loss : 0.11603227969555499\n", "iteration : 33000 loss : 0.1159054915790851\n", "iteration : 34000 loss : 0.11578298884723828\n", "iteration : 35000 loss : 0.11566921776371392\n", "iteration : 36000 loss : 0.11555980390120035\n", "iteration : 37000 loss : 0.11545403322867147\n", "iteration : 38000 loss : 0.11535612294801542\n", "iteration : 39000 loss : 0.11526375605256224\n", "iteration : 40000 loss : 0.11517710451443897\n", "iteration : 41000 loss : 0.11509379999158459\n", "iteration : 42000 loss : 0.11501422326618407\n", "iteration : 43000 loss : 0.11493689583958515\n", "iteration : 44000 loss : 0.11486124742108847\n", "iteration : 45000 loss : 0.11478712171992289\n", "iteration : 46000 loss : 0.11471638412990753\n", "iteration : 47000 loss : 0.11464813357123718\n", "iteration : 48000 loss : 0.11458281113135187\n", "iteration : 49000 loss : 0.11452164702670961\n", "training accuracy:0.9933333333333333\n" ] } ], "source": [ "#Re-initialize model, train relu net\n", "\n", "model={}\n", "model['h'] = h # size of hidden layer 1\n", "model['h2']= h2# size of hidden layer 2\n", "model['W1']= 0.1 * np.random.randn(D,h)\n", "model['b1'] = np.zeros((1,h))\n", "model['W2'] = 0.1 * np.random.randn(h,h2)\n", "model['b2']= np.zeros((1,h2))\n", "model['W3'] = 0.1 * np.random.randn(h2,K)\n", "model['b3'] = np.zeros((1,K))\n", "\n", "(relu_array_1, relu_array_2, r_W1, r_W2,r_W3, r_b1, r_b2,r_b3) = three_layer_net('RELU', X,y,model, step_size=1e-1, reg=1e-3)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 }, "base_uri": "https://localhost:8080/", "height": 816 }, "colab_type": "code", "id": "bB9GjQWnvRCD", "outputId": "7b098450-c924-4978-f966-df5c4b8d7bde", "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "iteration : 0 loss : 1.1068763405022943\n", "iteration : 1000 loss : 0.765900305099139\n", "iteration : 2000 loss : 0.43433340575057927\n", "iteration : 3000 loss : 0.22102602425514709\n", "iteration : 4000 loss : 0.17630149048886168\n", "iteration : 5000 loss : 0.16120110789075087\n", "iteration : 6000 loss : 0.15403330978940422\n", "iteration : 7000 loss : 0.14995389923671038\n", "iteration : 8000 loss : 0.14756987592868553\n", "iteration : 9000 loss : 0.1460033554067789\n", "iteration : 10000 loss : 0.14484074848949718\n", "iteration : 11000 loss : 0.143917150556344\n", "iteration : 12000 loss : 0.1431524860703442\n", "iteration : 13000 loss : 0.1425024253504807\n", "iteration : 14000 loss : 0.1419396983654305\n", "iteration : 15000 loss : 0.14144531574346852\n", "iteration : 16000 loss : 0.14100513992998642\n", "iteration : 17000 loss : 0.1406086147052447\n", "iteration : 18000 loss : 0.14024783674661548\n", "iteration : 19000 loss : 0.1399167397799024\n", "iteration : 20000 loss : 0.1396105838903235\n", "iteration : 21000 loss : 0.13932578167142134\n", "iteration : 22000 loss : 0.13905997472316964\n", "iteration : 23000 loss : 0.13881219388086213\n", "iteration : 24000 loss : 0.13858276838754063\n", "iteration : 25000 loss : 0.1383725565194345\n", "iteration : 26000 loss : 0.13818155086583173\n", "iteration : 27000 loss : 0.13800777673779102\n", "iteration : 28000 loss : 0.13784743936906896\n", "iteration : 29000 loss : 0.1376962619276408\n", "iteration : 30000 loss : 0.1375508542335352\n", "iteration : 31000 loss : 0.13740910541048212\n", "iteration : 32000 loss : 0.137269810668697\n", "iteration : 33000 loss : 0.13713220837167583\n", "iteration : 34000 loss : 0.13699572940488333\n", "iteration : 35000 loss : 0.1368599317864888\n", "iteration : 36000 loss : 0.1367245167525608\n", "iteration : 37000 loss : 0.1365893505563261\n", "iteration : 38000 loss : 0.13645445725368094\n", "iteration : 39000 loss : 0.13631997913899033\n", "iteration : 40000 loss : 0.13618612025959603\n", "iteration : 41000 loss : 0.13605309543868602\n", "iteration : 42000 loss : 0.13592110291294712\n", "iteration : 43000 loss : 0.1357903243472332\n", "iteration : 44000 loss : 0.13566093965311873\n", "iteration : 45000 loss : 0.13553313752362012\n", "iteration : 46000 loss : 0.13540710938798145\n", "iteration : 47000 loss : 0.135283026892158\n", "iteration : 48000 loss : 0.13516101211596993\n", "iteration : 49000 loss : 0.13504111252381806\n", "training accuracy:0.9933333333333333\n" ] } ], "source": [ "#Re-initialize model, train tanh net\n", "\n", "model={}\n", "model['h'] = h # size of hidden layer 1\n", "model['h2']= h2# size of hidden layer 2\n", "model['W1']= 0.1 * np.random.randn(D,h)\n", "model['b1'] = np.zeros((1,h))\n", "model['W2'] = 0.1 * np.random.randn(h,h2)\n", "model['b2']= np.zeros((1,h2))\n", "model['W3'] = 0.1 * np.random.randn(h2,K)\n", "model['b3'] = np.zeros((1,K))\n", "\n", "(tanh_array_1, tanh_array_2, t_W1, t_W2,t_W3, t_b1, t_b2,t_b3) = three_layer_net('TANH', X,y,model, step_size=1e-1, reg=1e-3)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "pWJ8yas8vj7W", "slideshow": { "slide_type": "slide" } }, "source": [ "## The Vanishing Gradient Issue" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "DH7Wcv-Hvlqk", "slideshow": { "slide_type": "slide" } }, "source": [ "We can use the sum of the magnitude of gradients for the weights between hidden layers as a cheap heuristic to measure speed of learning (you can also use the magnitude of gradients for each neuron in the hidden layer here). Intuitevely, when the magnitude of the gradients of the weight vectors or of each neuron are large, the net is learning faster. (NOTE: For our net, each hidden layer has the same number of neurons. If you want to play around with this, make sure to adjust the heuristic to account for the number of neurons in the layer)." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 }, "base_uri": "https://localhost:8080/", "height": 214 }, "colab_type": "code", "executionInfo": { "elapsed": 2938, "status": "error", "timestamp": 1531822681048, "user": { "displayName": "Rishhanth Maanav", "photoUrl": "https://lh3.googleusercontent.com/a/default-user=s128", "userId": "116055284600069515854" }, "user_tz": -330 }, "id": "jnXq-vKPvkWy", "outputId": "62c28bb4-001a-48fe-ebd6-3d387d7810c9", "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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TO8al7/xxht07NiR1157DYBt27ZVW75mzRp+9atf8cUXX9CyZUtOOukk+vfvX7V869atvPfee0yZMoUxY8bw6aef8thjjzF48GBmz57NgAEDqtJedtllfPLJJ5xxxhmMHz+eFStWVNvW1KlTmTNnDq1bt+b3v/89p5xyCrfccgsVFRXs2rWL733vezz44IPMnj077n4/8cQTtG7dmt27dzN48GDOOeccJkyYQL9+/fjd735HMBjkySef5OGHH2bBggW88MILfPrppwSDQa666iqee+45LrzwQnbu3EmfPn248847E3m765VdIRhjalXfvn155513uOGGG/j4449p1ar6LYqnT5/OCSecQOvWrQkGg5x77rnVlo8ZMwYRoW/fvrRv356+ffuSkpJC79699zvgx3PyySfTunVrAAYPHsyTTz7JHXfcwdy5c2nZsuUB5fXAAw/Qv39/hg0bxqpVq1i8eDEtWrTgpJNO4tVXX2XhwoWUlZXRt29f3n33XWbNmsXgwYMZMGAA7777LsuWLQMgEAhwzjnnHNC260vyXCHYjYBMEop1Jl9XjjjiCGbNmsXrr7/OTTfdxKhRo7j99turlse7KVd6ejoAKSkpVdOh17HaAqJp0aJF1fTw4cP56KOPeO2117jgggu4/vrrufDCCxPK54MPPuCdd95h6tSpZGVlMWLEiKr+/pdddhm/+c1vOOqoo/jJT35StY8XXXQRd9999355ZWRkEAgEDmg/6kuSXCFYn2xj6suaNWvIysrixz/+Mddddx1ffPFFteVDhgzhww8/ZOvWrZSXl/PSS/XTJXzlypW0a9eOn/70p1x66aVV5QoGg5SVlcVcd9u2beTl5ZGVlcXChQv5/PPPq5YNHTqUVatW8fzzz3PeeecBMHLkSCZPnsyGDRsA2LJlCytXJjQCdYNKnisEY0y9mDt3Ltdffz0pKSkEg0H+8pe/VFveqVMnbr75ZoYOHUrHjh3p1avXftVKdeGDDz7g3nvvJRgMkp2dzd/+9jcALr/8cvr168fAgQN57rnnoq576qmn8te//pV+/fpx5JFHMmzYsGrLf/CDHzB79mzy8vIA6NWrF3fddRejRo2isrKSYDDIQw89RNeuXet2Jw9Rk7qn8qBBg/SgbpDz0DBo2wN++EztF8qYRmbBggX07NmzoYsRU0lJCdnZ2ZSXl3PWWWdx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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(np.array(sigm_array_1))\n", "plt.plot(np.array(sigm_array_2))\n", "plt.title('Sum of magnitudes of gradients -- SIGM weights')\n", "plt.legend((\"sigm first layer\", \"sigm second layer\"))\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "ptKnXtCdvr3q", "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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xjNGcQxQqKorfcHTgPOA4Jko5wGT/PwM4BEREVXdCXwoIgdHK1xEegFdgA/iqEvjKd8ded4YY+rguuuu4/XXX2fWrH2/hyKeQNEDWB14XgQcGy2PqpaJyDYgB9gYR/ljgOlatWlzkYichGvJ/Jeqrg5fSUTGAeMA9t9//zg2E4WkgZZDWTBQlNa9PGOMAf74xz8mugoNJp4xikhXkwrvr4onTzSjgeAhDq8A+araD3gLeCrSSqr6mKoOUtVBubk13hs8urRMN60SKPbUvTxjjGlm4gkURUDPwPM8YE20PCKSDrQHNtdUsIj0B9JV9dNQmqpuUtXQr/bjwMA46lh3af5GHhYojDEmongCxSdALxEpEJFMXAtgZliemcDlfn4U8I7WNErujKFqawIRCR7CcC6wJI5y6q6FP7klGBys68kYYyrVOEbhxxzGA28AacAUVV0kIpOB+ao6E3gCeEZECnEtidGh9UVkFdAOyBSR84EzAkdM/Qg4K2yT14vIuUCZL2tsPfavZuJjZfAkuzIbzDbGmJC4zqNQ1VmqeoiqHqSqd/m0iT5IoKolqnqxqh6sqseEjpDyy/JVtZOqtlHVvOBhtap6oKouDdvWzaraR1X7q+op4csbnPgWRWng7E5rURiTdGp7mfFkMHbsWGbMmBF3erKyM7NDLYrgFWNtjMKYJqeqVNi9YBpEWVlZg5ZngaIyUASuGGuBwpgm0ViXGQeYM2cOAwYMYMCAARx55JGVl+O47777OProo+nXrx+33XZbZf6nn36afv360b9/fy67zJ1w+8033zBs2DD69evHsGHD+PbbbwHXIrj++us5/vjjOfDAAytbB6rK+PHj6d27N2effTbr16+v8TWYPHkyRx99NH379mXcuHGoKitWrOCoo46qzLN8+XIGDnTH9Xz66acMHTqUgQMHMnz4cNauXQu4FtdvfvMbhg4dyh/+8Icat1sbdlHA0GB2mXU9mRT3+gT4/suGLXO/I+DMu2NmaYzLjAPcf//9PProowwZMoTi4mKys7OZPXs2y5cvZ968eagq5557Lu+//z45OTncdddd/POf/6Rz585s3uwO2hw/fjw//vGPufzyy5kyZQrXX389L730EgBr167lww8/ZOnSpZx77rmMGjWKF198kWXLlvHll1+ybt06evfuzZVXXhmznuPHj6/cv8suu4xXX32V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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(np.array(relu_array_1))\n", "plt.plot(np.array(relu_array_2))\n", "plt.title('Sum of magnitudes of gradients -- ReLU weights')\n", "plt.legend((\"relu first layer\", \"relu second layer\"))" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "WLHDF9lOvwif", "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(np.array(tanh_array_1))\n", "plt.plot(np.array(tanh_array_2))\n", "plt.title('Sum of magnitudes of gradients -- TANH weights')\n", "plt.legend((\"tanh first layer\", \"tanh second layer\"))" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "QQQmG_DBvwj_", "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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48c7l/fkgw8+ICoqioiICAYOHMj58+dJSEigbt26pKSkAHD27Fnq1KlDSkoKe/fu5aabbqJFixZ06NCBHTt2ADBixAgeffRRunTpwhNPPJHTXZvnCne4UkrlyDP//YttR8/map6h1crwdO8mWabZuXMns2bN4t///jenTp3iueeeY+nSpZQsWZKXX36ZN954gylTplzReitXrsyHH37Ia6+9xnffXf6U3HPnzhEWFsa0adOIjY3l3nvvZceOHYgIcXFxlCtXjj59+tCrVy8GDcr6ccYDBgzgvvvuA2Dy5Ml89NFHjBs3js6dO/P999/Tr18/5s6dy8CBAwkMDGT06NG8++671K9fn7Vr1zJmzBiWLVsGwK5du1i6dKnbGkthowFBKZXrateuTZs2bQD47bff2LZtG+3atQMgOTmZtm3b5vo6/f39GThwIABlypQhODiYUaNGceutt9KrV68ryuvPP/9k8uTJxMXFkZiYSM+ePQEYNWoUr7zyCv369WPWrFl88MEHJCYm8uuvvzJ48GDn8hcvXnqU9+DBg4tEMABfCgj6ICDlg7I7k88rJUuWdL43xtCjRw+++OKLLJdxvWTyaq6lDw4Odh54AwICWLduHT/99BNz585lxowZzjN2b4wYMYIFCxYQERHB7NmzWbFiBQDt2rVj//79rFy5krS0NMLCwjh79izlypVz9mtk5rovCjvf6EMQSNeAoFSBaNOmDatXr2bPnj0AnD9/nl27dl2WrkqVKmzfvp309HS+/TZnjwpPTEwkPj6eW265hbfeest5sC5dujQJCQnZLp+QkEDVqlVJSUlhzpw5GeYNHz6coUOHcs899wBWbaRu3bp89dVXgBUA//jjjxyVv6D4REDYHQBfndxH0rnLO7KUUnmrUqVKzJ49m6FDhxIeHk6bNm2cna6uXnrpJXr16kXXrl2pWrVqjtaZkJBAr169CA8Pp1OnTrz55psADBkyhFdffZVmzZpl2an87LPP0rp1a3r06EGjRo0yzBs2bBhnzpxh6NChzmlz5szho48+IiIigiZNmrBw4cIclb+gFKlnKrds2dJczQNy3h/ciwQ/GPH6vwmpUSsPSqZU4bF9+3YaN25c0MW4Zs2fP5+FCxfy6aefFnRR3HL3+YvIRmNMy+yW9Yk+BEfLZHpaWoGWQylVtI0bN44ffviBxdfoyAc+ERCc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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Overlaying the two plots to compare\n", "plt.plot(np.array(relu_array_1))\n", "plt.plot(np.array(relu_array_2))\n", "plt.plot(np.array(sigm_array_1))\n", "plt.plot(np.array(sigm_array_2))\n", "plt.plot(np.array(tanh_array_1))\n", "plt.plot(np.array(tanh_array_2))\n", "plt.title('Sum of magnitudes of gradients -- hidden layer neurons')\n", "plt.legend((\"relu first layer\", \"relu second layer\",\"sigm first layer\", \"sigm second layer\",\"tanh first layer\",\"tanh second layer\"))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "S0fw2FG5v55n", "slideshow": { "slide_type": "slide" } }, "source": [ "We can see how well each classifier does in terms of distinguishing the toy data classes. As expected, since the ReLU net trains faster, for a set number of epochs it performs better compared to the sigmoid net" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "1HVsYKhNvwlk", "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/plain": [ "(-1.8712034092398278, 1.8687965907601756)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "\n", "# plot the classifiers- SIGMOID\n", "h = 0.02\n", "x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1\n", "y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1\n", "xx, yy = np.meshgrid(np.arange(x_min, x_max, h),\n", " np.arange(y_min, y_max, h))\n", "Z = np.dot(sigmoid(np.dot(sigmoid(np.dot(np.c_[xx.ravel(), yy.ravel()], s_W1) + s_b1), s_W2) + s_b2), s_W3) + s_b3\n", "Z = np.argmax(Z, axis=1)\n", "Z = Z.reshape(xx.shape)\n", "fig = plt.figure()\n", "plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral, alpha=0.8)\n", "plt.scatter(X[:, 0], X[:, 1], c=y, s=40, cmap=plt.cm.Spectral)\n", "plt.xlim(xx.min(), xx.max())\n", "plt.ylim(yy.min(), yy.max())\n", "\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "5bAFKBFMvwp6", "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/plain": [ "(-1.8712034092398278, 1.8687965907601756)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# plot the classifiers-- RELU\n", "h = 0.02\n", "x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1\n", "y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1\n", "xx, yy = np.meshgrid(np.arange(x_min, x_max, h),\n", " np.arange(y_min, y_max, h))\n", "Z = np.dot(relu(np.dot(relu(np.dot(np.c_[xx.ravel(), yy.ravel()], r_W1) + r_b1), r_W2) + r_b2), r_W3) + r_b3\n", "Z = np.argmax(Z, axis=1)\n", "Z = Z.reshape(xx.shape)\n", "fig = plt.figure()\n", "plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral, alpha=0.8)\n", "plt.scatter(X[:, 0], X[:, 1], c=y, s=40, cmap=plt.cm.Spectral)\n", "plt.xlim(xx.min(), xx.max())\n", "plt.ylim(yy.min(), yy.max())\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "XmnhXwPjwCQE", "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/plain": [ "(-1.8712034092398278, 1.8687965907601756)" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "h = 0.02\n", "x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1\n", "y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1\n", "xx, yy = np.meshgrid(np.arange(x_min, x_max, h),\n", " np.arange(y_min, y_max, h))\n", "Z = np.dot(tanh(np.dot(tanh(np.dot(np.c_[xx.ravel(), yy.ravel()], t_W1) + t_b1), t_W2) + t_b2), t_W3) + t_b3\n", "Z = np.argmax(Z, axis=1)\n", "Z = Z.reshape(xx.shape)\n", "fig = plt.figure()\n", "plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral, alpha=0.8)\n", "plt.scatter(X[:, 0], X[:, 1], c=y, s=40, cmap=plt.cm.Spectral)\n", "plt.xlim(xx.min(), xx.max())\n", "plt.ylim(yy.min(), yy.max())\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "qvWJhpih1rZr" }, "source": [ "# Overfitting and Underfitting" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "HfAwGQ3x11hJ" }, "source": [ "![overfitting](https://cdn-images-1.medium.com/max/1125/1*_7OPgojau8hkiPUiHoGK_w.png)\n", "\n", "![overfittign](https://www.apixio.com/wp-content/uploads/2017/10/classification-with-overfitting-2.png)\n", "\n", "![over](https://raw.githubusercontent.com/alexeygrigorev/wiki-figures/master/ufrt/kddm/overfitting-logreg-ex.png)\n", "\n", "![fitting_curves](http://bioinfo.iric.ca/wpbioinfo/wp-content/uploads/2017/10/error_curves.png)\n", "\n", "![overfitting](http://srdas.github.io/DLBook/DL_images/UnderfittingOverfitting.png)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "MIUR7PBY3cAo" }, "source": [ "# Overfitting\n", "\n", "Overfitting refers to a model that models the training data too well.\n", "\n", "- Overfitting happens when a model learns the **detail and noise** in the training data to the extent that it **negatively** impacts the performance of the model on new data.\n", "- **Noise or random fluctuations** in the training data is picked up and **learned** as concepts by the model\n", "\n", "- Occurs when the **Representation Power** of the model is way too much when compared to the **actual complexity** needed to solve the problem." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "OLpeC9a74l3O" }, "source": [ "# Underfitting\n", "\n", "Underfitting refers to a model that can neither model the training data nor generalize to new data.\n", "\n", "- An underfit machine learning model is not a suitable model and will be obvious as it will have poor performance on the training data.\n", "\n", "- Underfitting can easily be detected as the training performance will be low given a proper metric. So its obviously not suitable for deployment.\n", "\n", "- Increase the model's representation power by increasing the number of parameters to optimize incase of parametric models\n", " - In neural Nets, increase the number of hidden layers and no of neurons per hidden layer. This increases the models representation capability.\n", " " ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "CUpvJ-6i9PBk" }, "source": [ "# How to avoid overfitting? \n", "\n", "> Regularization" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "sdxXCCiQ9dt0" }, "source": [ "## Parameter Penalties\n", "\n", "- Adding Parameter norm penalty $\\Omega(\\theta)$ to the loss function\n", "- $\\Omega(\\theta)$ can be any function of $\\theta$, we will see about it in detail.\n", "\n", "\\begin{equation}\n", "\\vec J(\\theta: X,y) = J(\\theta : X, y) + \\alpha\\ \\Omega(\\theta) \\\\\n", "\\alpha\\ \\epsilon\\ [0, \\infty]\n", "\\end{equation}\n", "\n", "The term $\\alpha$ decides the amount of regularization term to add.\n", "\n", "| $\\alpha$ | Regularization |\n", "|---|---|\n", "|0| No Regularization whatsoever| \n", "| $\\downarrow$ | $\\downarrow$ |\n", "| $\\uparrow$ | $\\uparrow$ |\n", "| $\\infty$ | Infinite Penalty, $\\theta$ collapses to 0\n", "\n", "- In Neural nets, only $W$ parameters are subject to regularization, bias vectors ($b$) are not. This is because, \n", " - Each weight $W_{ij}$ specifies how 2 variables interact. Fitting / finding the correct Weight value requires observing different values of the 2 variables at different conditions.\n", " - Bias Vectors control only single variable.\n", " - We might induce underfitting by including redularization in bias values." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "Hgn4SAppDyy1" }, "source": [ "### $L^2$ Parameter Regularization\n", "\n", "> Commonly known as **weight decay**.\n", "\n", "- This regularization strategy drives weights close to **origin**.\n", "\n", "- $\\Omega(\\theta) = \\frac{1}{2}||w||_2^2$\n", "\n", "- Also known as **ridge regression** or **Tikhonov Regression**\n", "\n", "Lets assume A, B are highly correlated features.\n", "\n", "> Corellation means A and B are couppled in a sense. +ve correlation and -ve correlation.\n", "\n", "They are so correlated so that we can assume A $\\approx$ B. \n", "\n", "These 2 being the features of the model, the weights will multiply them and we get\n", "\n", "$\n", " Y = W_aA + W_bB\n", "$\n", "\n", "Lets assume $W_a = 4, W_b = -2$, but since A and B are almost equal so\n", "\n", "\\begin{equation}\n", "Y = 4A - 2B \\approx 2A\n", "\\end{equation}\n", "\n", "But,\n", "\n", "\\begin{equation}\n", "Y = 10A - 8B \\approx 2A\n", "\\end{equation}\n", "\n", "and again,\n", "\n", "\\begin{equation}\n", "Y = 1000002A - 1000000B \\approx 2A\n", "\\end{equation}\n", "\n", "So you can see the difficulty in $optimization$. So this regularization basically says, if such a condition arises, choose the smallest (closest to origin) $W_a, W_b$ which satisfies the condition.\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "CXvP8w7-H9f6" }, "source": [ "### $L^1$ Regularization\n", "\n", "Here similar to $L^2$ Regularization, but the regularization function is different.\n", "\n", "\\begin{equation}\n", "\\Omega(\\theta) = ||w||_1 = \\sum_i|w_i|\n", "\\end{equation}\n", "\n", "Here the optimal solution for some paramters will be 0. This means, $L^1$ regularization will favour **sparse** solutions. \n", "\n", "Can be used in **feature selection** mechanism. If weights of some features reduces to 0, this means we can safely disregard those features from our model.\n", " - Remember $W$ values for features implies the importance of the features in the prediction output. If the weight for a particular feature is 0, this means its nor important.\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "TBIzPubsLCoe" }, "source": [ "### Norm Regularizations as Constraint Optimizations\n", "\n", "Recall,\n", "\n", "\\begin{equation}\n", "\\vec J(\\theta; X, y) = J(\\theta; X, y) + \\alpha\\ \\Omega(\\theta)\n", "\\end{equation}\n", "\n", "Also recalling Lagrange Multipliers, \n", "\n", "![lagrange_multipliers](https://i.stack.imgur.com/9NIoJ.png)\n", "\n", "![lagrange_multipliers](http://math.etsu.edu/multicalc/prealpha/chap2/chap2-9/10-8-20.gif)\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "B5-kcQSU-waE" }, "source": [ "# We'll now see an example of overfitting and another where we try to combat that using regularization" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "Gcv-ZlCp--DZ" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Using TensorFlow backend.\n" ] } ], "source": [ "from keras.datasets import mnist\n", "(train_images, train_labels), (test_images, test_labels) = mnist.load_data()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "dthGvXbN_IG3" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training data shape : (60000, 28, 28) (60000,)\n", "Testing data shape : (10000, 28, 28) (10000,)\n", "Total number of outputs : 10\n", "Output classes : [0 1 2 3 4 5 6 7 8 9]\n" ] }, { "data": { "text/plain": [ "Text(0.5,1,'Ground Truth : 7')" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from keras.utils import to_categorical\n", " \n", "print('Training data shape : ', train_images.shape, train_labels.shape)\n", " \n", "print('Testing data shape : ', test_images.shape, test_labels.shape)\n", " \n", "# Find the unique numbers from the train labels\n", "classes = np.unique(train_labels)\n", "nClasses = len(classes)\n", "print('Total number of outputs : ', nClasses)\n", "print('Output classes : ', classes)\n", " \n", "plt.figure(figsize=[10,5])\n", " \n", "# Display the first image in training data\n", "plt.subplot(121)\n", "plt.imshow(train_images[0,:,:], cmap='gray')\n", "plt.title(\"Ground Truth : {}\".format(train_labels[0]))\n", " \n", "# Display the first image in testing data\n", "plt.subplot(122)\n", "plt.imshow(test_images[0,:,:], cmap='gray')\n", "plt.title(\"Ground Truth : {}\".format(test_labels[0]))" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "KRENCQ3-_Kt0" }, "outputs": [], "source": [ "# Change from matrix to array of dimension 28x28 to array of dimention 784\n", "dimData = np.prod(train_images.shape[1:])\n", "train_data = train_images.reshape(train_images.shape[0], dimData)\n", "test_data = test_images.reshape(test_images.shape[0], dimData)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "0cXV8R_q_M-K" }, "outputs": [], "source": [ "# Change to float datatype\n", "train_data = train_data.astype('float32')\n", "test_data = test_data.astype('float32')\n", " \n", "# Scale the data to lie between 0 to 1\n", "train_data /= 255\n", "test_data /= 255" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "46HIlRDn_PSo" }, "outputs": [], "source": [ "# Change to float datatype\n", "train_data = train_data.astype('float32')\n", "test_data = test_data.astype('float32')\n", " \n", "# Scale the data to lie between 0 to 1\n", "train_data /= 255\n", "test_data /= 255" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Original label 0 : 5\n", "After conversion to categorical ( one-hot ) : [0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]\n" ] } ], "source": [ "# Change the labels from integer to categorical data\n", "train_labels_one_hot = to_categorical(train_labels)\n", "test_labels_one_hot = to_categorical(test_labels)\n", " \n", "# Display the change for category label using one-hot encoding\n", "print('Original label 0 : ', train_labels[0])\n", "print('After conversion to categorical ( one-hot ) : ', train_labels_one_hot[0])" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "9qsxxDFN_RIf" }, "outputs": [], "source": [ "from keras.models import Sequential\n", "from keras.layers import Dense\n", " \n", "model = Sequential()\n", "model.add(Dense(512, activation='relu', input_shape=(dimData,)))\n", "model.add(Dense(512, activation='relu'))\n", "model.add(Dense(nClasses, activation='softmax'))" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "mRKtJUtO_TPC" }, "outputs": [], "source": [ "model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "PJYgU0MS_Uke" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train on 60000 samples, validate on 10000 samples\n", "Epoch 1/20\n", "60000/60000 [==============================] - 10s 163us/step - loss: 1.0841 - acc: 0.6743 - val_loss: 0.5491 - val_acc: 0.8353\n", "Epoch 2/20\n", "60000/60000 [==============================] - 1s 13us/step - loss: 0.4411 - acc: 0.8705 - val_loss: 0.3729 - val_acc: 0.8888\n", "Epoch 3/20\n", "60000/60000 [==============================] - 1s 12us/step - loss: 0.3483 - acc: 0.8982 - val_loss: 0.3074 - val_acc: 0.9093\n", "Epoch 4/20\n", "60000/60000 [==============================] - 1s 12us/step - loss: 0.3021 - acc: 0.9117 - val_loss: 0.3059 - val_acc: 0.9067\n", "Epoch 5/20\n", "60000/60000 [==============================] - 1s 12us/step - loss: 0.2653 - acc: 0.9222 - val_loss: 0.2584 - val_acc: 0.9240\n", "Epoch 6/20\n", "60000/60000 [==============================] - 1s 13us/step - loss: 0.2335 - acc: 0.9309 - val_loss: 0.2581 - val_acc: 0.9220\n", "Epoch 7/20\n", "60000/60000 [==============================] - 1s 12us/step - loss: 0.2056 - acc: 0.9389 - val_loss: 0.2149 - val_acc: 0.9345\n", "Epoch 8/20\n", "60000/60000 [==============================] - 1s 12us/step - loss: 0.1821 - acc: 0.9463 - val_loss: 0.1679 - val_acc: 0.9490\n", "Epoch 9/20\n", "60000/60000 [==============================] - 1s 12us/step - loss: 0.1619 - acc: 0.9514 - val_loss: 0.1533 - val_acc: 0.9536\n", "Epoch 10/20\n", "60000/60000 [==============================] - 1s 13us/step - loss: 0.1445 - acc: 0.9564 - val_loss: 0.1392 - val_acc: 0.9581\n", "Epoch 11/20\n", "60000/60000 [==============================] - 1s 13us/step - loss: 0.1307 - acc: 0.9611 - val_loss: 0.1280 - val_acc: 0.9609\n", "Epoch 12/20\n", "60000/60000 [==============================] - 1s 12us/step - loss: 0.1187 - acc: 0.9647 - val_loss: 0.1193 - val_acc: 0.9646\n", "Epoch 13/20\n", "60000/60000 [==============================] - 1s 12us/step - loss: 0.1074 - acc: 0.9679 - val_loss: 0.1148 - val_acc: 0.9652\n", "Epoch 14/20\n", "60000/60000 [==============================] - 1s 13us/step - loss: 0.0986 - acc: 0.9700 - val_loss: 0.1116 - val_acc: 0.9655\n", "Epoch 15/20\n", "60000/60000 [==============================] - 1s 14us/step - loss: 0.0896 - acc: 0.9730 - val_loss: 0.1040 - val_acc: 0.9676\n", "Epoch 16/20\n", "60000/60000 [==============================] - 1s 13us/step - loss: 0.0829 - acc: 0.9751 - val_loss: 0.0958 - val_acc: 0.9698\n", "Epoch 17/20\n", "60000/60000 [==============================] - 1s 12us/step - loss: 0.0763 - acc: 0.9767 - val_loss: 0.0908 - val_acc: 0.9703\n", "Epoch 18/20\n", "60000/60000 [==============================] - 1s 12us/step - loss: 0.0706 - acc: 0.9785 - val_loss: 0.0941 - val_acc: 0.9709\n", "Epoch 19/20\n", "60000/60000 [==============================] - 1s 12us/step - loss: 0.0653 - acc: 0.9809 - val_loss: 0.0897 - val_acc: 0.9722\n", "Epoch 20/20\n", "60000/60000 [==============================] - 1s 13us/step - loss: 0.0601 - acc: 0.9819 - val_loss: 0.0791 - val_acc: 0.9747\n" ] } ], "source": [ "history = model.fit(train_data, train_labels_one_hot, batch_size=256, epochs=20, verbose=1, \n", " validation_data=(test_data, test_labels_one_hot))" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "lgs9evVP_Vno" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10000/10000 [==============================] - 0s 20us/step\n", "Evaluation result on Test Data : Loss = 0.07914772396665067, accuracy = 0.9747\n" ] } ], "source": [ "[test_loss, test_acc] = model.evaluate(test_data, test_labels_one_hot)\n", "print(\"Evaluation result on Test Data : Loss = {}, accuracy = {}\".format(test_loss, test_acc))" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "ZLMKzPOd_Z5C" }, "outputs": [ { "data": { "text/plain": [ "Text(0.5,1,'Accuracy Curves')" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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YBdLJKistWRlZbFz504Av4a9mu5FJKD2799P+/btSUhIIDIyUiEvAhhjiIuLIyUlhb179/r12gr68qyFw4dh+/Zgl0SkUcrNzSU2NjbYxRAJSbGxseTl5fn1mgp6T8uXQ/PmkJAAl14a7NKINFqqxYt4Vx//byjoPbVqBUeOuPVt24JbFhERET9Q0Htq3750fedOKCgIXllERET8QEHvKTYWkope71tQAHv2BLc8IiK1cMcdd2CMYU8t/w3Lzs7GGMP111/v55LVzMyZMzHGsHz58qCWo6FT0JfXoUPpuprvRaSWjDE+L1u2bAl2caUR0zj68jp0gC+/dOvbt8OgQcEtj4g0SM8++2yZ7U8++YTZs2czceJEhg4dWuZYUnFLop9MnTqV++67j5iYmFp9PiYmhqysLCIiFBGNgf4rltexY+m6htiJSC2NHz++zHZ+fj6zZ89m0KBBFY5VxlpLZmYmTZo0qdHvjoiIqHNI1/YmQUKPmu7LU9O9iATBO++8gzGGefPm8cgjj9CzZ0+io6N57LHHAFi2bBmXX3453bt3Jy4ujubNm3PqqafyxhtvVLiWt2f0xft+/PFHbr/9dlJSUoiJiWHAgAG89957ZT7v7Rm9576PP/6YIUOGEBcXR1JSEtdffz2ZmZkVyvH+++9z8sknExMTQ9u2bfnd737HV199hTGGv//977X+W/30009cf/31tG/fnqioKDp16sQtt9zCoUOHypyXkZHB3XffTY8ePYiNjSUhIYG+ffty1113lTlv0aJFDBkyhFatWhEbG0unTp0YO3YsmzdvrnUZQ4lq9OWpRi8iQfTggw+SlpbG1VdfTevWrenatSsA8+fP54cffuDiiy+mY8eO7Nu3j6eeeopRo0axYMECxowZ49P1L7nkEmJjY/n9739PVlYW//d//8d5553Hpk2bSElJqfbzX3zxBfPnz+eaa65h/PjxfPDBB8yaNYuoqCgeffTRkvM++OADzjnnHFq3bs2dd95Js2bNeOGFF/joo49q9XcpdvDgQQYNGsTWrVu59tprOeGEE/jiiy947LHHWLJkCcuXLycuLg6AiRMnMm/ePK688koGDhxIbm4uGzdu5MMPPyy53rvvvssFF1xA//79ueuuu4iPj2fHjh289957bNmypeTv36BZaxv8cuKJJ1q/+fRTa938eNb687oiYq21dt26dcEuQlDMnTvXAnbu3Llej7/99tsWsElJSfbAgQMVjh85cqTCvp9//tl26dLF9u/fv8z+P/zhDxawu3fvrrBvzJgxtrCwsGT/xx9/bAF73333lezLysqygL3uuusq7AsPD7dffvllmd83bNgwGx0dbbOzs0v29e3b18bFxdlt27aV7MvJybEnnniiBezf/vY3r38HT0888YQF7GeffVay79Zbb7WAnTNnTplzH3roIQvYqVOnWmutLSwstE2aNLEXXHBBlb/jhhtusMYYe/jw4WrLEyi+/D8CrLQ+ZqSa7svzbLpXjV4ksIwJ3SVArr76alq2bFlhv+dz+szMTA4cOEB2djannXYaq1evJicnx6frT5kypczsa0OGDCEqKoqNGzf69PnTTjuN/v37l9k3bNgwcnJy2F70b+bWrVtZs2YNY8eOpYPHv6lRUVFMnjzZp99TmYULF5KSksKVV15ZZv+kSZOIj49n4cKFgBv10KxZM9asWcP69esrvV58fDzWWhYsWEBBI507RUFfXtu2EB7u1vfuhezs4JZHRI4qPXr08Lp/9+7dXH311SQlJdGkSRMSExNJSkriqaeewlpLWlqaT9cv3xRtjCEhIYEDBw7U6vMArVq1Aii5xo8//gjAscceW+Fcb/t8Za1l69at9OrVi7CwsvEVHR1Nt27dyjxXf/TRR9mzZw+9e/eme/fuTJw4kTfeeANXIXamTJnC8ccfz4QJE2jVqhWjRo3i8ccf9/nv0RAo6MuLiIB27Uq3d+wIXllE5KhT/HzZU0FBAcOHD2fevHlMmDCBl156icWLF/Pee+8xduxYAAoLC326fnhxRaYcz/Crzec9r+HrtWqqpte96KKL2LJlC08//TSnnnoqixcvZtSoUYwYMYL8/HwAkpOT+fLLL3n//fe54YYbOHjwIJMnT6ZHjx6sWrWqPr5GwKkznjcdOpQ222/fDt26Bbc8IkeLegqIhm7lypWsX7+ev/71r/zxj38sc2z69OlBKlXlunTpAsCGDRsqHPO2z1dhYWF07tyZ7777jsLCwjK1+tzcXDZt2kS3cv9eJyYmcvnll3P55ZdjreW3v/0tjzzyCG+//TajRo0C3HDE4cOHM3z4cABWrVrFSSedxF//+lcWLFhQ6/KGCtXovVHPexEJIcW16PI12i+//JI333wzGEWqUufOnenTpw8vv/xyyXN7cGHs2TO/NkaPHs2OHTt45plnyux//PHHSUtL44ILLgAgLy+P9PT0MucYY+jXrx/geu8D7N+/v8Lv6N27N9HR0SXnNHSq0XujsfQiEkL69u1Ljx49mDp1KocPH6Z79+6sX7+eJ598kr59+/Jl8WyeIWTatGmcc845DBw4kOuvv55mzZoxb968ko6AtX0d61133cUrr7zCNddcw+eff07fvn1ZuXIlc+fOpU+fPvz2t78FXH+Brl27Mnr0aE444QSSkpL44YcfeOKJJ0hMTOTcc88F4LLLLuPQoUOcccYZdOrUiYyMDJ5//nmys7O5/PLL/fPHCDIFvTeq0YtICImKiuKtt97i9ttv5z//+Q9ZWVkcf/zxzJs3j6VLl4Zk0I8YMYI333yTu+++mwceeICEhAQuvfRSRo8ezamnnkpsbGytrtuyZUs+++wz7r33XhYtWsScOXNITk5m0qRJ/PnPfy7p4xAfH8/NN9/MBx98wDvvvENmZiZt27blwgsv5I9//GPJtMNXXXUVzzzzDHPnzmX//v3Ex8fTp08fFi1axHnnnee3v0cwmfrqNBFIqampduXKlf674KJFMHq0Wz/7bHj7bf9dW+Qot379enr16hXsYkiQPPfcc4wfP56FCxcyuvjfWSnDl/9HjDGrrLWpvlxPz+i90Vh6EZE6KSwsJDc3t8y+nJwcHn74YaKjoyu82Efqj5ruvVHTvYhInaSnp9OrVy/GjRtHjx492LdvH/PmzWPt2rXce++9JWPvpf4p6L1p1QpiYtxkOenpkJYG8fHBLpWISIMRGxvLmWeeySuvvFLycp2ePXsya9YsJk6cGOTSHV0U9N4Y45rvi6eE3L5dQS8iUgPR0dE8/fTTwS6GEOBn9MaY/xhj9hpjvq3kuDHGPGqM2WSMWWOMGRDI8pWh5nsREWkEAt0Z7yng7CqOnwN0L1omAk8EoEzeaSy9iIg0AgENemvtx0BVUw2dDzxT9Ba+5UALY0zbwJSuHPW8FxGRRiDUhtelAJ6puqNoX+B5Nt2rRi8iIg1UqAW9tzkRvc7oY4yZaIxZaYxZuW/fPv+XRDV6ERFpBEIt6HcAHglLe2CXtxOttbOttanW2tTiqQz9Sp3xRESkEQi1oH8NuLyo9/1AIM1auzsoJSlfo/fxXc8iIiKhJKDj6I0x84DTgURjzA7gXiASwFo7E3gLOBfYBGQCVwWyfGU0bQotWsDhw5CbC/v2QXJy0IojIiJSG4HudX+JtbattTbSWtveWjvHWjuzKOQp6m1/k7X2GGvt8dZaP76pphbUfC8iIWzIkCF069atzL7x48cTEeFbHW7Tpk0YY5g6darfy5afn48xhmuuucbv15aaCbWm+9CisfQiUksXXXQRxhhWr15d6TnWWrp06UKLFi3IysoKYOn84+DBg9x33318/PHHwS5KpYYMGUKLFi2CXYygUtBXRT3vRaSWJkyYAMDcuXMrPWfJkiVs2bKFiy++uNbvZy9v7ty5ZGRk+OVa1Tl48CB//vOfvQZ9REQEWVlZzJw5MyBlkcop6KuisfQiUktnnnkmHTp04LnnnqvwutZixTcBxTcF/hAZGUl0dLTfrlcXMTExPj9GkPqjoK+KavQiUkthYWFceeWVHDhwgNdee63C8fT0dF555RX69OnDSSedVLL/+eefZ9SoUXTs2JHo6GiSkpIYM2YM337r9RUhFVT2jP7jjz/mlFNOITY2ljZt2jB58mSvNf/8/HymTp3K0KFDSU5OJioqik6dOnHTTTdx8GDpxKbvv/8+3bt3B+Cee+7BGIMxpqTPQFXP6GfNmkX//v2JjY2lRYsWnHXWWSxbtqxCOYo/v3TpUoYOHUpcXByJiYlMnDixXlotFixYwKBBg2jSpAlNmzZl6NChvPHGGxXOW7p0KWeffTbJyclER0eTkpLCyJEj+eKLL0rOOXDgALfccgtdu3YlJiaGVq1akZqayrRp0/xe7uroVqsq6ownInVw1VVXMXXqVObOncvYsWPLHHvhhRfIzMysUJufPn06ycnJXHfddSQnJ7Np0yZmz57NKaecwldffcUxxxxT43IsW7aMESNG0KJFC+644w6aN2/OvHnzWLp0aYVzs7Oz+de//sWFF17I6NGjadKkCV988QWzZ8/m008/ZcWKFURGRtKnTx8eeughfve73zF27FjOP/98AJo1a1ZlWW677TamTZvGwIED+dvf/kZaWhqzZs3i9NNP54033uDMM88sc/6qVatYuHAhEyZMYPz48Xz44Yc8+eSTREREMGPGjBr/LSrz2GOPMXnyZHr16sW9995LYWEhc+fOZdSoUcyZM4err74agPXr13PmmWfSrl07pkyZQnJyMnv27OGTTz7hm2++4Re/+AUAY8aM4bPPPuP666+nb9++ZGRksH79ej766CNuvfVWv5XbJ9baBr+ceOKJtl5s3mwtuKVdu/r5HSJHmXXr1gW7CAE1bNgwGx4ebnfu3Flm/8CBA21UVJTdt29fmf1HjhypcI1vvvnGRkZG2ptvvrnM/sGDB9tjjjmmzL5x48bZ8PDwMvtOOukkGxUVZTdu3FiyLzs72w4YMMAC9v777y/ZX1BQYDMzMyuUYebMmRawCxYsKNm3cePGCp8vlpeXZwE7YcKEkn1r1661gD311FNtbm5uyf7t27fbZs2a2a5du9qCgoIynw8LC7MrVqwoc+0zzzzTRkVFeS1neYMHD7bx8fFVnrN//34bGxtre/ToYdPT00v2Hz582Hbq1Mk2b97cpqWlWWut/de//mUBu2rVqkqvd+DAAQtU+O/lK1/+HwFWWh8zUk33VUlJce+mB9i9G/LyglsekUbOmNBdamvChAkUFBTw7LPPluz77rvvWL58Oeeddx6JiYllzm/SpAngKmHp6ens37+fNm3a0K1bNz7//PMa//5du3axYsUKxowZU2YoXnR0NFOmTKlwflhYWEnHwIKCAg4fPsz+/fsZNmwYQK3KUOzVV18F4A9/+AORkZEl+9u3b8/ll1/O5s2bWbNmTZnPDBkyhNTU1DL7hg0bRm5uLlu3bq11WTwtXryYrKwsbrnlljItEvHx8UyaNIn09HQ+/PDDkn3F3yU7O9vr9eLi4oiMjGT58uV+K2NdKOirEhUFbdq4dWthl9fZeEVEKjVmzBhatGhRpvf9f/7zH4CS5mBPq1at4txzz6VZs2bEx8eTlJREUlIS69ev59ChQzX+/Zs3bwagZ8+eFY717t3b62deeOEFTjrpJGJjY0lISCApKYkePXoA1KoMxX788UcAjjvuuArH+vTpU6a8xbp27Vrh3FatWgHuObg/1KRc48aN45e//CX3338/LVu2ZPjw4fzjH/9gu8fj3ZiYGKZNm8bq1avp3Lkzffr0YfLkySxZssQv5a0pBX11NJZeROogJiaGSy+9lA0bNrBs2bKS2n379u0rPI/esmULp556Kt988w1/+tOfWLhwIe+++y7vvfcePXv2pLAWU3G7Vl4wXpolio95eumll7jkkkuIiIjg0Ucf5fXXX+e9997jzTffBKhVGar6fdUJDw/36/Xqep2YmBg+/PBDli9fzh133IExhrvvvptjjz22TKfLSZMm8eOPPzJr1iz69evHSy+9xLBhwxg/frxfylwT6oxXnQ4doLgnpTrkidQrP/27HXImTJjAjBkzmDt3LgcPHmTPnj3cddddFUJswYIFZGZm8s477zB06NCS/dZa9u/fX9JsXBPFnffWr19f4Zi3fc8++yxxcXEsWbKEmJiYkv3eev17u3nwpSxr166lU6dOZY6tW7cO8F6Dr2+e5TrttNN8KtfJJ5/MySefDMDWrVvp168f99xzD+edd17JOSkpKUycOJGJEyeSn5/PuHHjeO6557jtttvo379/fX6lMlSjr4563otIHQ0YMIB+/frx4osvMn36dIwxXHVVxVd5FAd/+RrmzJkz2b9/f61+d7t27UhNTeWVV15h06ZNJftzcnJ4+OGHvZYhLCysTM3dWut1mtymTZsClBl2V5Xinvn//Oc/yc/PL9m/c+dOnn76abp27Urfvn19+2J+dOaZZxIbG8ujjz5aZtheeno606dPp3nz5gwfPhzA63+Hjh07kpiYWPJ3yMzMrDDTYUREBMcffzzg+9/LX1Sjr46a7kXEDyZMmMDNN9/M4sWLOf30070Okxs5ciR33nkn48aN46abbiI+Pp5PP/2Ud955hy5dutT6d0+bNo3hw4czePBgbrzxRuLj43n++ee9NlmPHTuWRYsWMWzYMC677DJycnJYuHCh145nycnJdO7cmeeee47OnTvTunVrmjVrxsiRI72Wo3fv3tx6661MmzaN0047jV//+tekp6czc+ZMsrKymDFjBmFh/q9/5uTkVDqf/9ixY+nZsyd///vfueWWWzj55JO54oorKCws5KmnnuLHH39kzpw5JZ307rvvPpYsWcKvfvUrunTpQmFhIYsWLWLTpk3ceeedgGsFOOOMM7jgggs47rjjSEhIYN26dTzxxBMcc8wxDB482O/fsUq+ds8P5aXehtdZa+38+aVD7EaNqr/fI3KUONqG1xU7ePCgjYmJsYB95plnKj1vyZIl9pRTTrFNmza1LVq0sCNHjrRr1671OpTO1+F1xdcdOHCgjY6Otq1bt7aTJk2yq1ev9jo87oknnrA9e/a00dHRtm3btva6666ze/furTBczlprly1bZgcNGmTj4uIsUFIeb8Pris2cOdOecMIJNjo62jZr1syOGDHCLl26tMw5VX3+ySeftID95JNPKv07ev6N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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgAAAAGKCAYAAAB6u/nZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3Xl4VdW5x/Hvm5ARCQQIICCCCIIiFYl4VRRbW0ScqmgriopoQatttWodrgN6nW/rcB1RGVQUqogtzhXrUKcKKA5AQSYhMhMhjIEk6/6xzklOkpNwEs6U5Pd5nv1k77XX3uc9x2G9e+211zbnHCIiItK0pCQ6ABEREYk/JQAiIiJNkBIAERGRJkgJgIiISBOkBEBERKQJUgIgIiLSBCkBEIkRM3vazJyZ3Z/oWBoK884zs3fNbKOZ7TazAjObamY/TXR8Io2JaR4AkegzsyxgDZADrAM6OedKEhtVcjOzVGAqcAbwDPAqUAjsB5wNnAbkOuc2JyxIkUakWaIDEGmkzsA3/m8AQ4EhwGsJjSgMM8twzhUnOo6AG4CzgLOccy9X2fe8mQ0Gdu/thyTZdxZJGN0CEImNC4EfgZHADuCCcJXM7Cdm9kqgu3uHmS00sxuq1DnDzD42s61mVmRmn5vZaYF9XQO3GUZWOeb4QPnxIWXvm9lHZnaqmX1pZsXAbwP7rjCzT82s0Mw2mdlnZnZymHibm9k9ZrbEzIrNbI2ZvWxm7c2sf+AzTw9z3KRAV35qDb9DOnA18HqYxh8A59w/nHPbQ77L+2HOs9zMJoVsjwzEdJyZvWRmm4B/m9mfzGyXmbUJc475Zva3kO1sM7vXzJYFjllmZv9tZikhdfYxs4fNbEXgd1lrZjPNrFe47yKSDNQDIBJlZtYR+DnwpHNufaAxOdPMcp1zP4bUGwC8DywGrgIKgB5A35A6vwP+D/gbPqnYChwOdK1neD0D5/sfYCm+i53A+Z4GluP/v3Aq8JqZDXXOvRmIJR14BzgMuBv4DGgJnIjvmp9jZrOAMcDfQ75DK+BXwH3OudIa4soHWgEz6vm99uR5YAq+h6EZ8HXgO/waeCwk1v5Ab+DmwHYz4G3gYPxv9g3wX4H9rfFJC8AD+FsUNwLfAW2AYwLfSSQ5Oee0aNESxQW4DnDAUYHtEwPbl1ap9yGwEsiu4Tw5wBZgei2f1TVw7pFVyo8PlB8fUvY+UAYctof4U/CN5D+Av4eUjwqc87Rajh0JlAL7h5T9HigBOtdy3K8D5z4xwt/4feD9MOXLgUlV4nHAA2HqvgN8WqXsQXxSlBHYPj9w/HFV6v03sAtoF9j+Frg/0f/uadFSl0W3AESi7wLgO+fcp4HtmcAqQm4DmFk2/grxeRfo1g7jaGAf4MkoxrbcOTe3amGg+/41M1uLb6x3A78ADgqpNhhY45yr7Sp9KrAJ+E1I2Rh8137BXkdff6+EKXsO+C8z6wHlV/vnAC+6ijECQ4DvgU/MrFlwwSdHafjeAIBZwEgzu9HM8mu61SGSTJQAiESRmR2B7y6ebmatAt3fLYDpwFFm1jNQNRf/319tjWLw/nQ0G87VVQvMbD/gXXyX9u/wiccRwFtAZpV4fqjt5M65ncBE4OJAY3ks/vd4Yg9xrQz83T+C71Af1b438DKwDRgR2B4MtMcnBkHtAjHtrrJ8Htgf/Gf0O2AcvpdkFrDOzB4IJHoiSUkJgEh0XRj4ex1+EGBwuSJQHuwF+BHfHd+plnNtCPytrc7OwN/0KuXVBrcFhHvudwj+Xv6vnHMvOuc+c87NBqo2Xhv2EEvQ4/iG9HT81f9y/H302szG9xycGsH5wX/vqt8ZfBITTrXv7Zzbhu8ZOC9QNAJY6pz7OKTaRmAZPiEKt7waONdW59wNzrkD8bdl7sL/M781wu8jEndKAESiJDBI7hzg38BPwyxzgfPNzALd/h8BIwJzBoTzCX7Q3+haPnYtUAz0qVJebQR/LYINffkjdoGeimOq1PsH0MHMam2knXNLAnWvxQ+6e8o5V7aHY3YBfwFOMbNh4eqY2S9Crqi/B3oGfvPg/uPwvS118RzQ3cxOxCcsz1XZ/xZ+HoKtzrnZYZYNVU/onPveOfcX/IDBqv9cRJKGngIQiZ5T8FfeVzvn3q+608zG4a+OjwfeA64BPgA+NbO/4Lv6D8AP0vudc25L4JHAh83sZfxI9i34Ufg7nXMPO+ecmf0V3+W+CFiIb/yPr0PcM/H3/Z8NxLEvcBuwgsoXCZPx9/anmNnd+ESnBX6Q44POuf+E1H0M/yTAbmBChHHcDfwE+GvgUb7gRECdgWHAmfhbJ+DHGowGJgTqdgP+CNR1kqDg+Izx+ERocpX9zwMXAe8Gfpuv8D0P3fGj/n/pnNtuZp/in2D4Bp+0DQp8l2fqGI9I/CR6FKIWLY1lwTd4RdQ8qr8lsJ3Ko9T74Ru6Tfj5Av4DXFfluLPwje2OwPn/DZwSsr8V/sp1A77BfAKfBIR7CuCjGmL7VeCzdwLz8D0Zk/CDBkPr7QP8L/4KfBf+3vo0AqPhQ+ql4u+vv1TH39DwXfHv4W+T7MYnRlOAY6vUHYN/5G4HvrekPzU/BXBgLZ/5v4E6n9SwPxMYG/h9igO/8axAWbNAnXuBL/EJyDZ8IvD7RP87qUVLbYumAhaRqDOzX+BvA/zcOfduouMRkeqUAIhI1JhZd/xtjAeAYudc/wSHJCI10CBAEYmmm4E38V3lYac/FpHkoB4AERGRJkg9ACIiIk2QEgAREZEmqFHPA9C2bVvXtWvXRIchIiISN3PmzNngnMvbU71GnQB07dqV2bNnJzoMERGRuDGz7yOpp1sAIiIiTZASABERkSZICYCIiEgTpARARESkCVICICIi0gQpARAREWmClACIiIg0QUoAREREmiAlACIiIk2QEgAREZEmSAmAiIhIIjgH27fD+vUJ+fhG/S4AERGRqCgpgcJC2LrVL9u2Vf4briySfc758+/eDc3i2yQrARARkaatuBh++AEKCiovoWVr1kBZWexi2LYNWraM3fnDUAIgIiKN17ZtNTfqwSVBXfAAZGTAPvvAjh1KAERERGrkHBQV+UZ73Tr/N3QJlq1a5Rv3TZui87lm0Lo1tGjhG+zmzcP/rcu+5s3j3u0fSgmAiIgkjnO+ka7agNfUsG/YALt2RTeG1FTo2BE6dYLOncMv++4L6enR/dwEUwIgIiJ7r6QEfvzRD5QL/q26XtO+kpLYxZWe7hvw2hr39u19EtDEKAEQEZHKgt3sq1dXLGvW+CvwmhrzLVviF1/z5tCuHeTlVV+C5fvu6xv3tm19930Scq6ic6NPn/h/vhIAEZGmoqzMtzjBBj20gQ9t6Fev9oPS4qVFi8qNd7gGPXTJyopfbPXknM+PVq6svhQUVPwtLobMTD8dQLzzFCUAIiKNQUkJrFgBS5bA0qV+tHvVRn7tWigtjc3nm0Furh8oF/wbXGrbzs31I+EbmKKi2hv3lSt9ox6JnTth40bfWRFPSgBERBqKLVsqGvglSyqvf/99dBv3rCzfjR66tGsHbdqEb9BbtoSUhjW5rHP+KcHNmyNb1q+vaNyLiqITQ6tW/k7F5s1KAEREmq6yMn+lHq6BX7o0Os+r5+ZWNOgdOlRv5IPlOTkJvXdeVua7x3ft8n9rW8LV2bJlzw16UVHsOkTAD1XYb7+al86d/d2PRFECICISD6WlvgFfu9Yva9b4vz/8UNHAL13q+4Prq2NHOOAA6N7dtzBVG/UOHfwN5wiVlPgQV63yecmmTb6xDS67d1ferm9ZuEY9lg8GRENmZkUjXlMD37Jl0o4/BJQAiIjUX1mZv3kbbMxr+7thw95PJZueDt26+Qa+e/eKxr57d+jaFbKzIzrNrl2VG/bg39D1Vat8vhKcqr6xysryDXVNS6tWFeutW1c0+G3aJHfjHgklACIiNSkshEWL4Lvv/N+VKys37OvWRb8PuXXr6g188G+nTrXeZ9+xw4dVtTGv2rBv2BDdkGMlPd2PD4xkqVp3n31qb9iDS1paor9l4igBEJGmbevWiga+6t/Cwuh+Vps2ftKZYHd8cD14VX/AAf6SM0Swk2H1alizoGJg/5o1FUtwe/Pm6IZr5p+669jR30Vo06aisU1L83+DS9XtutQJ16CnpTX8K+xkpwRARBq/nTv9ffZwDf3q1Xt1ateyFWUdOlLSriOl7falpG0H/7dNe0rbtKOkdTv/t2UbSlPSKC3197eDf3fuDHQqfAqrp1dv1GPx5J6Zzz323beicQ/+DV1v375pXyE3dkoARKRxcI5dSwtY9O5KFn1WyJbvCyleXUjxmh8p/nE7xaSzi3SKyaCYgymmX2C9lsUyKU7bh12p2RRbJrtpRolLpdSlUFKWQmkplG422AwsTPQP4N8rE+xUqK1xb9cuoe+gkSShfwVEpGEpKWHXf5by3XsFzPu0iHnzHPNXtmDeps5857pTwn7R+ywHRPm9M/WRm1tx1yDYuIfbbt26wT2KLwmkBEBEktPOnez6dhHfvVfA/M+3MG9+CvMKcphX1IXvOJASeiY6wnIpKf5dMs2a1f1verq/Iq+pcW/fvk5P7olETAmAiCTW5s3s/nahv6KftY15C1KZv6oV87btzyJ6U0LfOp1u/4zVHJy3gbbtUsho05z0Njlk5OWQ0bxZvUeUhw5Ma9asekOuwWrSECkBEJG4KCqCZQt2svy9ZSz/91qWzd/B8oJUFm/vyCIOYzcD6nS+/TPXcHD7jRxy4C4O6Z/JIT/No/cxbdinxb7AvrH5EiKNiBIAEYmKrVth+XJYtsz/Xb60jOXfbmXZot0sX5vJj8XNgUygd2CJTJesdRzSoZBDDtrNwf2zOeSn7eg9oAUtWnQAOsTku4g0BUoARCQiO3aENO7Lq69v3Fj1iBQgJ+Lzd8lez8H7buKQXqUcckSgoe+XSYsW7YB2UfoWIhKkBEBEqikuhq+/htmzK5Z58/buefQMdtKV5XRtvp5unXbTtXcmXQe0p9ugLvTum0aLFnlAXtS+g4jUTgmASBO3ezd8+23lxv6bb3x5XaSxi/35nm4s8w09y+mWU0jXvjl0PaYT7X92CCkD8qFVr9h8ERGpEyUAIk1ISQksWFC5sf/qK3/FH4luLC1v4Cs19Cxj3+wiUo7oDwMGwJFHwoCT/JtTNEReJCkpARBppEpL/Wy3oY39l1/6e/mROJDvyGd2+dKPL8lhi9+Zmgp9+gQa+ot8o3/wwb5cRBoEJQAijYBzfiDerFl+mT0b5szxI/Mj0ZVllRr7w/mCXDZVVOjQAY4ZDEcd5Rv9fv2gefPYfBkRiQslACIN0Jo1FY3955/7Br/6KPzwOrOyUmPfnzm0JeTglBTo2xeOPtovxxwD+++vrnyRRibuCYCZDQEeAlKBp51z91TZvz8wAT8cuBAY4ZwrCOwrBb4JVF3hnDstboGLJMimTb6BDzb4s2ZBQUFkx7ZnDUcwq1Jj34G1lSvl5MB/DfYN/dFH++78nMgf3xORhimuCYCZpQKPAr8ACoBZZjbDOTc/pNqfgWedc8+Y2c+Au4HzA/t2OOcOi2fMIvG0Y4e/Tx/a2C9aFNmxrWwTR7jPOYJZ5UtHVlHtur1798pX97p3L9IkxbsHYACw2Dm3FMDMpgKnA6EJwMHAVYH194C/xTVCkTgqKIA336zoyv/228ietc9K2cnhbk55gz+Az+nullRv7NPToX//iqv7o47y9/NFpMmLdwLQCVgZsl0AHFmlzlfAMPxtgjOAFmbWxjm3Ecg0s9lACXCPc65acmBmo4HRAF26dIn+NxCJgpISuP9+uOWWPT+C18xK6Jv+H44o/qj8yv7gsvk0I0ym0KaNb+yDS//+epWciIQV7wQg3CgiV2X7GuARMxsJfAj8gG/wAbo451aZ2QHAP83sG+fckkonc+5J4EmA/Pz8qucWSbhvvoGLLvKj9KsycxzUvIAjdn/KEcX/4ghmcZibS2ZNWULPnr6hHzjQ/+3ZU4P1RCQi8U4ACoD9QrY7A6tCKzjnVgFnApjZPsAw59zmkH0455aa2ftAP6BSAiCSrHbtgrvu8kvoLHs/af4dw3dOYkDpJ/R3c8jZuiX8CdLSID+/osE/+mjI09S5IlI/8U4AZgE9zKwb/sr+HODc0Apm1hYodM6VATfgnwjAzHKB7c654kCdY4D74hm8SH3Nng2jRjm++abi6jydYsYylmu2/Zm08k6uEK1bVwzUO+YY3/hnZcUxahFpzOKaADjnSszsCuBt/GOAE5xz88zsdmC2c24GcDxwt5k5/C2AywOH9wbGmVkZ/jVj91R5ekAk6ezY7hh7+Xr+/ExbylxKeflRfMJ4LqY3/6mo3L17RVf+McdAr17+mXwRkRgw5xrvbfL8/Hw3e/bsRIchTY1zMHcuH93/OaP+Opjvdncr35XFdu7iRn7Hw6RmZ8LJJ8OZZ8Lxx2t0vohEhZnNcc7l76meZgIUiQbn4Isv4KWX2PriG9yw7Dc8yuU4Kq7gf8o/eSrrD3Q/7RA4+0UYMkTT6YpIwigBEKkv5/wD/NOm+WXZMmZyAr/h7yyn4qq/BUX8+YgX+c31bbCTPtd9fBFJCkoAROqirMzP2PPSS77RX7ECgE205BqeYjyXVKo+tP8anpjSiv16XBLubCIiCaMEQGRPgt37zz/vG/4qE/G/yilcyhOsolN5WW6u46GHjBEjOuixfBFJSkoARGry/fe+0Z88GRYsqLZ7A234fdoTTNl9VqXyYcPgkUdMY/pEJKkpARAJtXmzv8qfPBk++CBsFZfbmpcOu5MrvriI9ZszysvbtYPHHvMJgIhIslMCILJ7N7z1Fjz3HMyYEX5y/ubNYdgwVg+5iN9OPY6/zaj8fP7558MDD/ip+EVEGgIlANI0OecH802eDFOnwoYN1eukpMDgwTBiBO70X/LMtOZc9VvYtKmiSufOMG4cDB0av9BFRKJBCYA0LcuW+UZ/8mRYtCh8nX79/CX98OHQoQP//jdcNRg+/bRytTFj4L77ICcn9mGLiESbEgBp/H78EV580Xfxf/xx+DqdO8N55/mG/5BDAD8G8IZzYcqUylUPOACefhp++tMYxy0iEkNKAKRxKi6GN97wV/qvveZfxVdVixZw1lm+0R80qHze/S1b4J574P77YefOiuppaXDllXDrrZrAT0QaPiUA0rh8/TU89RS88AIUFlbfn5rqp+AdMQJOOw2ys8t3lZbCxIlw002wdm3lw4YNg3vv9e/rERFpDJQASMNXVOQH8j39tJ+aN5z8fH+lf845/nm9Kt59F/74R58/VD3s/vvh2GNjELeISAIpAZCGyTn47DPf6E+dCtu3V6/TpYu/0j//fP9q3TD+8x+49lp/lyBUp05w991+WIDeyCsijZESAGlYNmzwg/mefhrmz6++Pz3dv173N7/xr9itofXeuBFuuw0efxxKSirKs7Phuuvgmmsq3R0QEWl0lABI8isrg3/+0zf6r7wSfkDfIYf4Rn/EiFpn49m1Cx59FG6/vfLz/GZw4YVw553QsWMMvoOISJJRAiDJ64cfYNIkGD/eP79fVfPm/p7+JZfAkUdS21t3nIO//Q3+9CdYvLjyvkGD/H3+ww+PbvgiIslMCYAkVHExLFzoL9rbtYM0K/GP7z39NLz+ur/6r2rAAN/on3OOf5RvD774wg/wqzq1/4EHwv/+L5x+eq25g4hIo6QEQBLmlVdg1KjKXfGtrYj27kDacxXtOZf2rKU9a+mQVUT7E/rQ/twTaD+wB+3aQUZGzecG34Hw3/8Nzz7rewCCWrWCW26Byy/3QwZERJoiJQASdyUl/ln7e++tvq/QtaaQ1izg4Mo7dgCvBZaAVq2gffuKpUOHivUVK+Avf6n8cEBqKvz2t34iH720R0SaOiUAElfr1sE5vyrjvQ8qRue3ZiPNKGE9eTgif+Zu0ya/LFy457qnnurn7a/haUARkSZHCYDEzWfv7eCsM0r4YXPFffuhvM5kRpCbUkTpkJPZcPZlrD3056wtTGPNGj8jX7hl3brwwwOq6tvX9wT8/Ocx/GIiIg2QEgCJObexkCcu/JQ/vP4LdpMFgFHGrdzGzS0fJuWKy2HMGFL324/2QPsIzlla6p/lrylB2L4dTjoJLrjAd/2LiEhlSgAkdlavZvu9D3PZo314tuTc8uJcCnm+1RWcdGM/GLO8Xu/TTU31Tw20aweHHhq9kEVEmgolABJ9S5fCffexZMIHnLl7Kl/zk/Jd/dK/5eWb5tLt2gmQmZnAIEVEmjYlABI933zj36M7dSqvlZ3ECD5lM63Kd488dgmPvd6LrBZ9EhikiIgAdRhyLVKTzz7zr9bt25fSF6ZyS9mtnMpr5Y1/erNSxj1exoQPupPVQjmniEgy0P+NpX6cg3fe8a/Me/99ADbSmvN4nrcZUl5tv/0cL7+cyhFHJChOEREJSwmA1E1ZmZ9U/667YM6c8uI5HM4wXuZ7upaX/fznMGWK0bZtAuIUEZFa6RaARKakBJ55xr91b9iwSo3/BLuYY1I+rdT433gjvPUWavxFRJKUegBkzz77DC67DObOrVS8M6Mlv+/+Ok/NPwYCc+3n5Pi5908/PQFxiohIxNQD0EiVlEThJBs2+LfuHXVU5cY/J4fvf3svAw9a7xv/gD59YPZsNf4iIg2BegAamR07/Bv2pk6Fli2hS5eal44doVm4fwPKymD8eLj+eigsrCjPyoLrruMffa9h+CXNK+0691x48klo3jzmX1FERKJACUAjsnmzv/oOvvd+82b/aP4334Svn5ICnTr5ZGD//QOJga2ky8sP0GXRO3ShhJbByqedRtkDD3H3lK7cPKzi9brNmsEDD/hX65rF+huKiEi0mAt9UXojk5+f72bPnp3oMOJi3ToYMgS+/DK6582xIp8YHJLDli3wr39V7OvYEV56CY4+OrqfKSIi9Wdmc5xz+Xuqpx6ARuD772HwYFi0qKLsvvtg5Ei/b8WK8MvatXs+d5HL4dvv4dvvK5cfdxz89a/QoUNUv4qIiMSJEoAGbsEC3/gXFPjtlBR/L/7ii/12Xh7k15AH7vxiPgWX3cmKz1ezgi4VS+t+rGh5KCvWpLNjR/Xjrr7az/+Tlhab7yQiIrGnBKAB+/xzGDrUvxYXID0dpkyBM8/cw4Fbt8Ltt5P5wAMcWFLCgcHyjh3hwQfhrMPBDOf8uYM9BmvWwIABcPjhMfxSIiISF0oAGqh33/UD/rZt89v77OMn6DvhhFoOcg6mT4crr6zoMgD/bt0rr4Rbb4UWLcqLzfxEPm3bqtEXEWls4j4PgJkNMbOFZrbYzK4Ps39/M3vXzL42s/fNrHPIvgvN7LvAcmF8I08e06f7K/9g49+mDfzzn3to/Bcv9geddVblxv/YY/3IwT//uVLjLyIijVtcEwAzSwUeBU4CDgaGm9nBVar9GXjWOdcXuB24O3Bsa+BW4EhgAHCrmeXGK/ZkMX48nH027Nrltzt18iPza3zZzo4d/sq+Tx8/N29QXp6f2veDD+DQQ2Met4iIJJd49wAMABY755Y653YBU4Gq88YdDLwbWH8vZP+JwDvOuULn3I/AOxDy2rkm4H//10/MV1bmt3v2hI8/ht69azjgjTd8w3/77VBc7MvM4Le/hYUL4YIL9PC+iEgTFe8EoBOwMmS7IFAW6itgWGD9DKCFmbWJ8FjMbLSZzTaz2evXr49a4InknJ+U709/qig7/HB/5b///mEOKCjwIwFPPhmWLq0oP+IIP3Lw0Ucht8l1noiISIh4JwDhLjerzkR0DTDIzL4EBgE/ACURHotz7knnXL5zLj8vL29v40240lIYPRruvbeibNAgeO89aNcuzAFr1vi5+195paIsNxeeeAI+/bTmZwJFRKRJifdTAAXAfiHbnYFVoRWcc6uAMwHMbB9gmHNus5kVAMdXOfb9WAabaMXFcN558PLLFWWnnebn+c/KCnPArl1+gEDoIL+LLvLZQyNIhkREJHri3QMwC+hhZt3MLB04B5gRWsHM2ppZMK4bgAmB9beBwWaWGxj8NzhQ1iht3QqnnFK58b/gAr8dtvEH+OMf4aOP/HpKCsyYARMmqPEXEZFq4poAOOdKgCvwDfcC4EXn3Dwzu93MTgtUOx5YaGaLgPbAnYFjC4H/wScRs4DbA2WNzsaN/pG+mTMryq68EiZOrOHtfeB3Pvpoxfbdd8Opp8Y0ThERabj0MqAk88MPfmrf+fMryu64A268sZYB+7Nm+ef5gyP9zz7bT9SvEf4iIk2OXgbUAC1a5Bv/7wMv3jHzF/WXXVbLQWvXwhlnVDT+ffr4bn81/iIiUgslAEniyy/hxBMh+ORis2bw3HNwzjm1HLR7N/zqV77bAKBVKz8f8D77xDxeERFp2JQAJIEPP/S364uK/HZWlp/ud8iepjm6+mp/MPgr/ilToHv3mMYqIiKNQ9zfBSCVvfqqv/IPNv6tWvnBf3ts/J95Bh5+uGL7zjsjOEhERMRTD0ACffmln7CvpMRvd+gAb78Nffvu4cA5c2DMmIrtYcP8VIEiIiIRUgKQQH/+c0Xjf8AB8M47/m+t1q2rPOjvkENg0iQN+hMRkTrRLYAEWbcOXnqpYnvatAga/+Cgv5WBVyK0bOmn/NWgPxERqSMlAAkyfrxvz8FP3d+vXwQH/elP/vW94K/4X3gBevSIWYwiItJ4KQFIgNJS/26eoN/+NoKDnnsOHnywYvt//geGDo16bCIi0jQoAUiAN96AFSv8etu2cNZZezjgiy/8KwGDzjgDbrghZvGJiEjjpwQgAR57rGL94oshM7OWyhs2+AZ/506/3bu3fwQwRf/oRESk/tSKxNmSJfDWW37drPLTfNWUlMCvf13RXZCT42f6a9Ei5nGKiEjjpgQgzkLv/Q8dCt261VL5uuvgn/+s2H7+eejZM2axiYhI06EEII527PDv6QmqdfDfCy/A/fdXbN92G5xySsxiExGRpkUJQBy9+CIUFvr1bt38FMBhzZ0Ll1xSsX366XDTTTGPT0REmg4lAHH06KMV65deCqmpYSpt2AC//KXvLgA46CB49lkN+hMRkahSqxIns2b5BSAjA0aNClOppMS///dwC/oxAAAgAElEQVT77/12ixZ+0F9OTtziFBGRpkEJQJw8/njF+q9/7Z//r+aGG+Dddyu2J0+GXr1iHpuIiDQ9SgDioLAQpkyp2A47+G/qVP92oKBbb4XTTot5bCIi0jQpAYiDSZMq5vE5/HAYMKBKha++qnxP4JRT4JZb4hWeiIg0QUoAYqysrHL3/29/W+XNvRs3+pn+goP+evb0Xf8a9CciIjGkVibGZs6ExYv9esuWMHx4yM7SUjj3XFi2zG/vs48f9NeyZdzjFBGRpkUJQIyFzvt/0UWQnR2y88034R//qNh+9lk/17+IiEiMKQGIoRUr4NVXK7YvvbRKhblzK9ZHjfK3AkREROJACUAMPfmkHwMA8POf+zl9Klm5smL9sMPiFpeIiIgSgBjZtQueeqpiO+yjf6EJwH77xTwmERGRICUAMTJ9Oqxb59c7dYJTTw1TSQmAiIgkiBKAGAkd/DdmDDRrFqaSEgAREUkQJQAx8M038K9/+fVmzSq/2K/cli2webNfz8iAvLy4xSciIhJRAmBWaeoa2YPQiX/OPBP23TdMpdCr/86dq8wOJCIiEluR9gB8b2Y3m1nHmEbTCBQVwXPPVWyHHfwH6v4XEZGEijQB+CdwPbDczKab2eAYxtSgTZ4MW7f69YMPhuOOq6Fi1R4AERGROIooAXDOjQQ6AtcAPYG3zGyJmV1nZu1iGF+D4lzlwX/V5v0PVVBQsa4eABERibOIBwE65zY75/7POdcHGAR8AowFVpjZVDM7PjYhNhz/+hfMm+fXmzeH88+vpbJuAYiISALV9ymAj4FXgLlAOnAK8K6ZfW5mTXYy+9Cr//PPh5ycWiorARARkQSqUwJgZvuZ2e3ASuBFYBNwOpADDAGygGeiHWRDsGYNvPxyxfZll+3hACUAIiKSQOGmp6nGzE4FxgAnApuBicDjzrmlIdXeMbM/Aq9HPcoG4OmnoaTErw8cCH371lLZOSUAIiKSUBElAMDfgVnAJcBU51xxDfWWAM9HI7CGpKQExo2r2L788j0csGkTbNvm17OzITc3ZrGJiIiEE2kCkO+c+2JPlQI9AhftXUgNz6uvVgzqb9fOT/5Tq6pX/5oESERE4izSMQArzaxnuB1m1tPM2kb6gWY2xMwWmtliM7s+zP4uZvaemX1pZl+b2dBAeVcz22FmcwPLE5F+ZqyFDv77zW8gPX0PB6j7X0REEizSHoDHgEL8OICqrgLaAL/a00nMLBV4FPgFUADMMrMZzrn5IdVuAl50zj1uZgcDbwBdA/uWOOcOizDmuFi4EGbO9OspKTB6dAQHKQEQEZEEi7QHYCDwdg37/gEcE+F5BgCLnXNLnXO7gKn4pwhCOfxTBQAtgVURnjshngjphzj1VOjSJYKDlACIiEiCRZoA5OJH/4dThO8BiEQn/COEQQWBslBjgRFmVoC/+v9dyL5ugVsDH5jZsRF+Zsxs2wYTJ1Zs1zjvf1VKAEREJMEiTQAKgCNr2HcksDrC84Qb7eaqbA8HJjnnOgNDgefMLCXwGV2cc/2APwIvmFm1qXbMbLSZzTaz2evXr48wrPqZOrXijb4HHgg//3mEB4ZOA6z3AIiISAJEmgBMA240s5NDCwPb1+MnBYpEARB6yduZ6l38FwfP55z7FMgE2jrnip1zGwPlc/CPHFYbmOice9I5l++cy8/Ly4swrLpzDh59tGL7ssv8GICIqAdAREQSLNIm63bga2CGmf0QmPL3B2AG8A1wW4TnmQX0MLNuZpYOnBM4R6gVwAkAgWmFM4H1ZpYXGESImR0A9ACWkiCffw5ffunXMzNh5MgID3ROLwISEZGEi+gpAOfcdjMbBJyPH8HfBliMHwA42TlXEuF5SszsCvyAwlRggnNuXmB64dnOuRnA1cBTZnYV/vbASOecM7PjgNvNrAQoBS51zhXW6dtGUeijf8OHQ+vWER64YQPs3OnXc3L28MIAERGR2DDnqt6Cbzzy8/Pd7Nmzo37eDRv8rfviwHyIs2ZBfn6EB3/xBfTv79cPOQS+/Tbq8YmISNNlZnOcc3tsler7NsAmbeLEisb/iCPq0PiD7v+LiEhSiHQiIMzsROBS4CD8fflQzjnXPZqBJauyMnj88YrtiB/9C1ICICIiSSCiHoDAdLxvANlAL+A/+MF6+wFlwIexCjDZvP02LFvm13Nz4de/ruMJlACIiEgSiPQWwM34KXyHBrZvcs4dDxyCH8z3ZvRDS06hg/9GjYKsrDqeQAmAiIgkgUgTgF7Aq/irfUfg1oFzbhF+5r6bYxFcslm+HF5/vWL70kvrcRIlACIikgQiTQDKgBLnHxlYD4TOeL8KaBL3/8eN84/xA5x4op/9r86UAIiISBKINAFYSMUb+WYDV5rZvmaWh39uf3n0Q0suxcXw9NMV23Ue/AdQWgo//FCxrWmARUQkQSJ9CuB5oHdg/VZgJn5aX/CT8pwb5biSzrRp/vl/8G/8O/nk2uuHtW4dlATmTGrdGrKzoxafiIhIXUQ6E+CjIetzzOxQYAj+qYCZzrn5MYovaYQO/rv0UkhNrcdJ1P0vIiJJYo8JQGDO/suAd51z3wI45wqAp2s9sBEpLKzouU9Lg4svrueJlACIiEiS2GMC4JzbZWb3ACfGIZ6k1Lo1LFkCb74J//kPtGtXzxMpARARkSQR6RiABcABNKEJf6pKTYVTTvFLvSkBEBGRJBHpUwC3ADcH7v1LfSkBEBGRJBFpD8B1wD7Al2a2HFiNnxAoyDnnBkU5tsZHCYCIiCSJSBOAUqDRj/SPOSUAIiKSJCJ9DPD4GMfR+JWUwOrVFdudOiUuFhERafIiHQMge2vVKv8uYYD27SEjI7HxiIhIkxZRD4CZHbenOs65JvuEQETU/S8iIkkk0jEA71N50F849Zkbr+lQAiAiIkkk0gTgp2HK2gCnAIOAK6IWUWNVUFCxrpcAiYhIgkU6CPCDGnZNN7MHgFOBN6MWVWOkHgAREUki0RgE+Drwqyicp3FTAiAiIkkkGgnAQUBZFM7TuCkBEBGRJBLpUwAXhClOB/oAFwPToxlUo6QEQEREkkikgwAn1VBeDPwV+ENUommsioth7Vq/npICHTsmNh4REWnyIk0AuoUp2+mcWxvNYBqtH36oWN93X2gW6c8uIiISG5E+BfB9rANp1NT9LyIiSSaiQYBmdoqZhX3W38wuN7Oh0Q2rkVECICIiSSbSpwBuBprXsC8rsF9qogRARESSTKQJQC/gixr2zQV6RyecRkoJgIiIJJlIE4AUYJ8a9rUA0qITTiMVOg2wEgAREUkCkSYAXwHn1bDvPODr6ITTSIX2AOg9ACIikgQifR7tL8DLZvYS8BRQAHQCRgNnAGfHJrxGQrcAREQkyUT6GOArZvYH4E7gzECxAVuB3zvnNBNgTbZvh40b/XqzZtC+fWLjERERIfIeAJxzD5vZJOBo/KuANwCfOOe2xii2xiH0/n+nTpCamrhYREREAuo0JZ1zbgvwdoxiaZzU/S8iIkko0omArjOzh2vY939mdm10w2pElACIiEgSivQpgIuoeaT/3MB+CUcJgIiIJKFIE4AuwHc17FsK7B+dcBohJQAiIpKEIk0AtuMf+wunM/61wBExsyFmttDMFpvZ9WH2dzGz98zsSzP7OvQ9A2Z2Q+C4hWZ2YqSfmVBKAEREJAlFmgD8C7jWzDJCCwPbVwf275GZpQKPAicBBwPDzezgKtVuAl50zvUDzgEeCxx7cGD7EGAI8FjgfMlNCYCIiCShSJ8CGAt8Aiwys8nAD/gegRH4RwJHRnieAcBi59xSADObCpwOzA+p44CcwHpLYFVg/XRgqnOuGFhmZosD5/s0ws9ODCUAIiKShCKdCOgrM/sp8GfgOnzPQRnwETDMOfdVhJ/XCQhpESkAjqxSZyzwDzP7Hf4NhD8POfazKsfWdFsiORQV+QUgIwPatk1sPCIiIgGR3gLAOfe5c+44/Mt/OgMtnHPHA83NbEKEp7Fwp66yPRyY5JzrDAwFnjOzlAiPxcxGm9lsM5u9fv36CMOKkdBJgDp3Bgv3FUREROIv4gQgyDm3A8gGbjCzZcB7wK8iPLwACO0H70xFF3/QxcCLgc/6FMgE2kZ4LM65J51z+c65/Ly8vAjDihF1/4uISJKKOAEws5aBq+uPgIXAfwM/ApcBHSM8zSygh5l1M7N0/KC+GVXqrABOCHxmb3wCsD5Q7xwzyzCzbkAP4PNI408IJQAiIpKkah0DEOh6HwJcAJyGb4xX4UfyXw5c6Zz7MNIPc86VmNkV+OmEU4EJzrl5ZnY7MNs5NwP/VMFTZnYVvot/pHPOAfPM7EX8gMES4HLnXGndvm6cKQEQEZEkVWMCYGZ/Bs4D2gE7gVeAZ4CZ+FH6V9TnA51zbwBvVCm7JWR9PnBMDcfeiX8jYcOgBEBERJJUbT0Af8Rfgb+BvwrfGNxhZtUG30kYSgBERCRJ1TYGYAKwBTgZWGhmj5jZgPiE1UgoARARkSRVYwLgnLsE6ICf7GcOcCnwqZktwM8FoF6A2jinBEBERJJWrU8BOOd2OudecM6diH8E70agFLge/1z+PWY2wswyYx9qA/Pjj7B9u19v3hxatUpsPCIiIiHqMhHQaufcvc65PvjZ+x7DP4r3LLA6RvE1XFWv/jUJkIiIJJE6TwQE4Jyb5Zy7Av/8/1nAB1GNqjEInQVQ3f8iIpJkIn0ZUFjOud3A9MAioXT/X0REkli9egAkAqEJQOfOiYtDREQkDCUAsaIeABERSWJKAGJFCYCIiCQxJQCxogRARESSmBKAWHBOTwGIiEhSUwIQC+vXQ3GxX2/ZElq0SGw8IiIiVSgBiAV1/4uISJJTAhALSgBERCTJKQGIBSUAIiKS5JQAxIISABERSXJKAGJBTwCIiEiSUwIQC+oBEBGRJKcEIBb0HgAREUlySgCirbQUfvihYlsJgIiIJCElANG2di2UlPj1Nm0gOzux8YiIiIShBCDadP9fREQaACUA0aYEQEREGgAlANGmBEBERBoAJQDRpgRAREQaACUA0aYEQEREGgAlANGmBEBERBoAJQDRpgRAREQaACUA0bR7N6xe7dfNoFOnxMYjIiJSAyUA0bR6NTjn19u3h/T0xMYjIiJSAyUA0aR3AIiISAOhBCCadP9fREQaCCUA0aQEQEREGgglANGkBEBERBoIJQDRpARAREQaCCUA0aQEQEREGgglANGkBEBERBoIJQDRUlwM69b59ZQU2HffxMYjIiJSCyUA0VJQULHesSM0a5a4WERERPYg7gmAmQ0xs4VmttjMrg+z/wEzmxtYFpnZppB9pSH7ZsQ38j0ITQDU/S8iIkkurpepZpYKPAr8AigAZpnZDOfc/GAd59xVIfV/B/QLOcUO59xh8Yq3TnT/X0REGpB49wAMABY755Y653YBU4HTa6k/HJgSl8j2lhIAERFpQOKdAHQCQlpKCgJl1ZjZ/kA34J8hxZlmNtvMPjOzX9Zw3OhAndnr16+PVtx7pvcAiIhIAxLvBMDClLka6p4DTHPOlYaUdXHO5QPnAg+aWfdqJ3PuSedcvnMuPy8vb+8jjpR6AEREpAGJdwJQAIS2jp2BVTXUPYcq3f/OuVWBv0uB96k8PiCxlACIiEgDEu8EYBbQw8y6mVk6vpGvNprfzA4CcoFPQ8pyzSwjsN4WOAaYX/XYhFECICIiDUhcnwJwzpWY2RXA20AqMME5N8/MbgdmO+eCycBwYKpzLvT2QG9gnJmV4ROXe0KfHkio7duhsNCvp6VB+/aJjUdERGQP4j5bjXPuDeCNKmW3VNkeG+a4T4BDYxpcfYVe/Xfq5GcCFBERSWJqqaJB3f8iItLAKAGIBiUAIiLSwCgBiAYlACIi0sAoAYgGvQdAREQaGCUA0aAeABERaWCUAESDpgEWEZEGRglANKgHQEREGhglAHurqMgvAJmZ0LZtYuMRERGJgBKAvVW1+9/Cve9IREQkuSgB2Fvq/hcRkQZICcDeUgIgIiINkBKAvaUEQEREGiAlAHtLCYCIiDRAcX8bYKOjBEAagOLiYgoLC9myZQulpaWJDkdE6iA1NZUWLVrQunVrMjIyonZeJQB7S9MAS5IrLi5mxYoV5Obm0rVrV9LS0jA9rSLSIDjn2L17N0VFRaxYsYIuXbpELQnQLYC94Zx6ACTpFRYWkpubS9u2bUlPT1fjL9KAmBnp6em0bduW3NxcCgsLo3ZuJQB748cfYft2v77PPtCyZWLjEQljy5Yt5OTkJDoMEdlLOTk5bNmyJWrnUwKwNzQJkDQApaWlpKWlJToMEdlLaWlpUR3DowRgb6j7XxoIdfuLNHzR/u9YCcDeUAIgIiINlBKAvaEEQEREGiglAHtDCYCIANdffz1mxpo1a+p1/M6dOzEzLr300ihHJlIzJQB7QwmASNIws4iX5cuXJzrcpPfll1+W/16zZ89OdDgSA5oIaG8oARBJGs8991yl7X/96188+eSTjB49mmOPPbbSvry8vKh+9h133MHYsWPJzMys1/GZmZns2LGDZs2S53/J48ePJzc3t3w9Pz8/wRFJtCXPv20NTVmZZgEUSSIjRoyotF1SUsKTTz7JUUcdVW1fTZxzbN++nebNm9fps5s1a7bXjXd9k4dY2LlzJy+88ALDhw/HOccLL7zA/fffT1ZWVqJD26MtW7bQokWLRIfRIOgWQH2tXw+7dvn1Vq38REAi0mC89dZbmBlTpkzhoYceolevXmRkZPDwww8D8Mknn3DBBRfQo0cPsrOzycnJ4bjjjuO1116rdq5wYwCCZcuWLePaa6+lU6dOZGZmcvjhh/POO+9UOj7cGIDQsg8//JCBAweSnZ1NXl4el156KduDk5CFmDlzJkceeSSZmZnsu+++XHPNNeVd+ffcc0/Ev8306dP58ccfufDCCxk5ciSbN2/m5ZdfrrH+1KlTOe6442jZsiXZ2dn06tWLK6+8stIz62VlZTz22GMcccQR7LPPPrRo0YKf/OQn3HHHHbX+jkEdOnRgyJAhYX+ft956i6OPPprmzZtz9tlnA7By5UquuuoqfvKTn9CqVSuysrLo06cPf/nLXygrK6t2/p07d3LXXXfRt29fsrKyaNWqFQMGDGDcuHEA3HXXXZgZH330UbVjt23bRk5ODieffHIEv27yUA9AfenqX6RRuPfee9m8eTOjRo2iXbt2HHDAAQC89NJLLFmyhHPOOYcuXbqwfv16Jk2axKmnnsrLL7/MmWeeGdH5hw8fTlZWFn/605/YsWMHDzzwAKeddhqLFy+mU6dOezz+888/56WXXuKSSy5hxIgRvPvuu4wbN4709HT+7//+r7zeu+++y0knnUS7du248cYbadGiBVOnTuX999+v828yfvx4evXqxYABAwDo3bs3EyZMCNuTcvXVV3P//fdz6KGHcvXVV9O+fXsWL17MtGnTuOeee0hNTcU5x69//WumTZvGMcccw0033UTLli2ZP38+06ZN46abbqpzjEEff/wxL7zwAqNHj+aiiy4iNTUVgDlz5vDqq69y+umn0717d4qLi3n99de55pprWLFiBQ899FD5OXbu3MkJJ5zAJ598wkknncSFF15Ieno6X3/9NX/7298YM2YMo0aN4tZbb2X8+PEMHDiwUgwvvfQSW7Zs4eKLL67390gI51yjXfr37+9i5pVXnPNvA3Bu6NDYfY7IXpo/f374HcF/f5NxiYKJEyc6wE2cODHs/jfffNMBLi8vz23cuLHa/q1bt1Yr27Jli+vWrZvr169fpfLrrrvOAW716tXVys4880xXVlZWXv7hhx86wI0dO7a8bMeOHQ5wY8aMqVaWmprqvvjii0qf97Of/cxlZGS4nTt3lpf17dvXZWdnuxUrVpSXFRcXu/79+zvA3X333WF/h6qWLVvmzKxS/XvuuceZmVuyZEmluh988IED3IknnuiKi4sr7Qv9zs8884wD3MUXX1yp3DnnSktLy9fD/Y5B7du3dyeeeGL5dvD3AdyHH35Yrf62bduqfZZzzp199tkuLS3Nbdiwobzstttuc4C77bbbqtUPje+MM85wzZs3d0VFRZXqDBw40LVr187t2rWr2vHRVuN/zyGA2S6CNlK3AOpLAwBFGoVRo0bRunXrauWh4wC2b9/Oxo0b2blzJ4MGDWLu3LkUFxdHdP4rr7yy0gxuAwcOJD09ne+++y6i4wcNGkS/fv0qlf3sZz+juLiYlYH/D33//fd8/fXXnHXWWewX8v+j9PR0fv/730f0OUETJkzAzCpd7Z9//vmkpKQwceLESnWff/55wPeipKenV9oX+p2ff/55UlNTue+++6rNZpeSsnfN0JFHHlltkCdAdnZ2+WcFX4e9YcMGBg8ezO7du/niiy8qxdeuXTtuuOGGaucJjW/06NFs27aNqVOnlpctWrSIjz76iAsuuKDBTbmtBKC+qr4HQEQapJ49e4YtX716NaNGjSIvL4/mzZvTtm1b8vLymDRpEs45Nm/eHNH5g7cUgsyM3NxcNm7cWK/jAdq0aQNQfo5ly5YBcNBBB1WrG66sJmVlZUyaNIn8/Hx27tzJ4sWLWbx4Mdu3b2fAgAFMmjSp0v3z7777jrS0NPr06VPreb/77ju6dOkSNtHaWzX989u1axdjx47lwAMPJCsrizZt2pCXl8dvfvMbAH788UfA94IvWbKEQw45ZI8N+ODBg+natSvjx48vLwuuX3LJJdH4OnGlMQD1pR4AaeicS3QESSE7O7taWWlpKSeccALLli3jD3/4A/3796dly5akpKQwbtw4pk2bFnYgWTjBe9JVuQh//5qODz1HpOfak3/84x+sXLmSlStX0qNHjxrrBAfjRfq5zrmIrvRrm+u+pKQkbHm4f34AV1xxBU899RTnnXcet9xyC3l5eaSlpfHZZ59x8803V/vnF8k8+ykpKVx88cXcfPPNzJs3j4MOOohnn32WgQMH1inRShZKAOpLCYBIozV79mwWLFjAXXfdVa1b+JFHHklQVDXr1q0bAAsXLqy2L1xZTSZMmEDz5s2ZNGlS2P2jRo1i/Pjx5QnAQQcdxPvvv8+8efPo27dvjec96KCDmDlzJoWFhbX2AgT3FRYW0qFDh/LyoqKiiHtMgiZPnszgwYOZPHlypfJvv/220raZceCBB/Ltt9+ye/fuPfYCjBo1irFjxzJ+/HgGDRrEmjVruPvuu+sUW7LQLYD6UgIg0mgFr7qrXuF+8cUXvP7664kIqVZdu3alT58+TJs2rXxcAPhu8NAnBWqzceNG/v73vzN06FDOOuussMvJJ5/MjBkz2LBhAwDnnnsu4B/f2717d6Xzhf525513HqWlpVx//fXVftPQ7WB3/syZMyvV+ctf/hLRdwg9Z7Nmzap9VlFRUaXR/6HxrVu3jvvuuy/suUJ17NiRk08+meeee47HH3+cnJwcfvWrX9UpvmShHoD6KC2FH36o2NYYAJFGpW/fvvTs2ZM77riDTZs20aNHDxYsWMBTTz1F3759Kw0gSxb3338/J510Ev/1X//FpZdeSosWLZgyZUp51/aeurife+45du3axbBhw2qsM2zYMKZOncrkyZO58sorOe644/jDH/7AQw89RH5+PmeffTbt27dn6dKlvPjii8ybN4/MzExGjBjB9OnTeeqpp1iwYAGnnnoqOTk5LFy4kA8++KD89xw6dCjdunXjuuuuY/Xq1XTp0oUPPviAuXPn0rJly4h/CzPjzDPP5JlnnuG8887j+OOPZ82aNTz99NO0a9eu2lTQ1157La+//jo33XQTn376KSeccALp6el88803rFixgjfeeKNS/dGjRzNjxgzefvttxowZU+NtiGSnBKA+1qzxSQBA27bQAGbHEpHIpaen88Ybb3DttdcyYcIEduzYwaGHHsqUKVP46KOPkjIB+MUvflHeiN15553k5uZy7rnn8stf/pLjjjtuj7P4TZgwgYyMDIYOHVpjnZNOOomsrCwmTJjAlVdeCcCDDz5I//79eeyxx7jnnntwztGlSxdOP/308u50M2PatGk88sgjTJw4kVtvvZW0tDQOOOCASlfPaWlpvPbaa+VJRTCe999/n8MOO6xOv8cjjzxCq1atmD59Oi+//DL7778/v/vd7zj44IOrTdiTmZnJe++9x3333cfUqVN55513yM7OpmfPnmEH95100kl06dKFFStWNLxn/0NYtAaPJKP8/HwXk5dYfPYZHHWUX+/XD5LwfwYiQQsWLKB3796JDkMS5Pnnn2fEiBG88sor/PKXv0x0OI2Cc44ePXrQvHlzvvrqq7h+diT/PZvZHOfcHl/eoDEA9aH7/yKSZMrKytgVnJ48oLi4mAcffJCMjIywz8pL/bz55pssWbKEMWPGJDqUvaJbAPWhBEBEkkxRURG9e/fmvPPOo2fPnqxfv54pU6Ywb948br311vK5A6T+Zs6cyZIlS7jzzjvp2LEjI0eOTHRIe0UJQH3oPQAikmSysrIYPHgw06dPL3+ZTq9evRg3bhyjR49OcHSNw0033cScOXPo06cPjz32WIMd/BcU9wTAzIYADwGpwNPOuXuq7H8A+GlgMxto55xrFdh3IRB8a8Qdzrln4hN1FeoBEJEkk5GRwTPPJOZ/iU3FZ599lugQoiquCYCZpQKPAr8ACoBZZjbDOTc/WMc5d1VI/d8B/QLrrYFbgXz8CyDmBI79MY5fwVMCICIiDVy8BwEOABY755Y653YBU4HTa6k/HJgSWD8ReMc5Vxho9N8BhtR4ZCzpPQAiItLAxTsB6ASEtJ4UBMqqMbP9gW7AP+tyrJmNNrPZZjZ7/fr1UQm6kt27YfXq4IdBBO/zFhERSTbxTgDCTUVV00QE5wDTnHOldTnWOfekcy7fOZefl5dXzzBrsWpVxUtU2reHKq/AFBERaQjinQAUAKE3zTsDq2qoew4V3f91Pf9dIvsAABlISURBVDZ2dP9fREQagXgnALOAHmbWzczS8Y38jKqVzOwgIBf4NKT4bWCwmeWaWS4wOFAWX0oARESkEYjrUwDOuRIzuwLfcKcCE5xz88zsdmC2cy6YDAwHprqQeYqdc4Vm9j/4JALgdudcYTzjB5QAiIhIoxD3eQCcc28Ab1Qpu6XK9tgajp0ATIhZcJFQAiAiIo2A3gVQV0oARJqsgQMHcuCBB1YqGzFiBM2aRXYttXjxYsyMO+64I+qxlZSUYGZh314nEo4SgLrSNMAiSenss8/GzJg7d26NdZxzdOvWjVatWrFjx444RhcdhYWFjB07lg8//DDRoUTkj3/8I2ZGr169Eh2KhKEEoK7UAyCSlILvZZ84cWKNdd577z2WL1/OOeecQ1ZWVlQ+d+LEiWzbti0q59qTwsJCbrvttrAJQLNmzdixYwdPPPFEXGLZk927dzN58mS6d+/OwoUL+fjjjxMdklShBKAuioth3Tq/npoK++6b2HhEpNzgwYPZb7/9eP7556u9FjcomBwEk4VoSEtLIyMjI2rn2xuZmZkR346ItRkzZrB+/XrGjx9P27ZtmTAhscO3IlVaWsr27dsTHUZcKAGoi9Du/44dfRIgIkkhJSWFkSNHsnHjRmbMqPZ0MUVFRUyfPp0+ffpwxBFHlJe/8MILnHrqqXTp0oWMjAzy8vI488wz+fbbbyP63JrGAHz44YccffTRZGVl0aFDB37/+9+H7SkoKSnhjjvu4Nhjj6V9+/akp6ez//77c/nll1NYWPGg08yZM+nRowcAN998M2aGmZWPSahtDMC4cePo168fWVlZtGrVihNPPJFPPvmkWhzB4z/66COOPfZYsrOzadu2LaNHj65zL8f48ePp0aMHgwYNYvjw4bz44ots3bo1bN3Nmzdz44030qtXLzIzM2nTpg3HHnssL774YqV6q1ev5oorruCAAw4gIyPj/9u7/+goynOB49+HkB9iQggQQiRFg4IIWJWCFxOJlBjwylVQaWqKlmgEKuq5UvSWI+d4a4tateX0thSpEpAgCF4EtVAh4Qa4IgeKARSB2ETEg/xQQpBcivwwPPeP/dHd7GyyCYFNss/nnDnZfeedmefNu7vzzsz7zpCSksKIESMoLS315klLS+PWW28N2MbatWsREV5//XVv2ty5cxER1q1bxzPPPONd7/LlywFYvXo1ubm5pKenExcXR1JSEiNHjuT99993LEdFRQXjx48nLS2NmJgYLrvsMsaMGcP27dsB6N+/P+np6fgMcPNavHgxIsIbb7wRMO9CaRlNxdbCngFgTIv2wAMPMGPGDObPn8/YsWP95i1ZsoSTJ08GHP3PmjWLlJQUJk2aREpKCpWVlbzyyitkZGSwfft2rrzyykbHsWnTJnJycujUqRPTpk2jY8eOvPHGG2zcuDEg76lTp/jd737HPffcw5gxY7j00kv529/+xiuvvMIHH3zA1q1biY6OZsCAAfz2t7/liSeeYOzYsYwe7XqMSkJCQr2xTJ06lZkzZzJkyBCef/55jh8/zp///GeGDRvGypUrGTFihF/+srIyVqxYQUFBAffddx+lpaW8+uqrtG/fntmzZ4dU/gMHDlBcXMwzzzwDQH5+Pn/84x958803efDBB/3yVldXk5mZSXl5Obm5uUyePJna2lrKyspYtWoVubm5AOzdu5fMzEyOHDlCfn4+AwcO5MSJE2zevJm1a9cyfPjwkGJzMmXKFGpra5k4cSIdO3b0NrTmzZvHN998Q35+Pj169ODLL79k7ty5DB8+nA0bNpCRkeFdx5YtW8jJyaG2tpaCggL69+/P0aNHWb9+PZs3b+aGG25gwoQJTJkyhdLSUrKzs/1imDdvHklJSdx1111NLkejqWqbnX7wgx9osyoqUnXdCFg1N7d5123MBbJ7927HdM9HuSVO52P4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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#Plot the Loss Curves\n", "plt.figure(figsize=[8,6])\n", "plt.plot(history.history['loss'],'r',linewidth=3.0)\n", "plt.plot(history.history['val_loss'],'b',linewidth=3.0)\n", "plt.legend(['Training loss', 'Validation Loss'],fontsize=18)\n", "plt.xlabel('Epochs ',fontsize=16)\n", "plt.ylabel('Loss',fontsize=16)\n", "plt.title('Loss Curves',fontsize=16)\n", " \n", "#Plot the Accuracy Curves\n", "plt.figure(figsize=[8,6])\n", "plt.plot(history.history['acc'],'r',linewidth=3.0)\n", "plt.plot(history.history['val_acc'],'b',linewidth=3.0)\n", "plt.legend(['Training Accuracy', 'Validation Accuracy'],fontsize=18)\n", "plt.xlabel('Epochs ',fontsize=16)\n", "plt.ylabel('Accuracy',fontsize=16)\n", "plt.title('Accuracy Curves',fontsize=16)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "rsYJYkcX_eHA" }, "source": [ "## There is a clear sign of OverFitting. Why do you think so?\n", "\n", "Carefully see the Validation loss and Training loss curve. Validation loss decreases and then it gradually increases. This means that model is memorising the dataset, though in this case accuracy is much higher. \n", "\n", "** How to combat that?? **\n", "# Use Regularization !" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "evRF4jI6_fww" }, "outputs": [], "source": [ "from keras.layers import Dropout\n", " \n", "model_reg = Sequential()\n", "model_reg.add(Dense(512, activation='relu', input_shape=(dimData,)))\n", "model_reg.add(Dropout(0.5))\n", "model_reg.add(Dense(512, activation='relu'))\n", "model_reg.add(Dropout(0.5))\n", "model_reg.add(Dense(nClasses, activation='softmax'))" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "YbMVvqfb_jaX" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train on 60000 samples, validate on 10000 samples\n", "Epoch 1/20\n", "60000/60000 [==============================] - 1s 17us/step - loss: 0.1050 - acc: 0.9688 - val_loss: 0.0919 - val_acc: 0.9736\n", "Epoch 2/20\n", "60000/60000 [==============================] - 1s 13us/step - loss: 0.0999 - acc: 0.9699 - val_loss: 0.0972 - val_acc: 0.9729\n", "Epoch 3/20\n", "60000/60000 [==============================] - 1s 14us/step - loss: 0.1003 - acc: 0.9706 - val_loss: 0.0906 - val_acc: 0.9745\n", "Epoch 4/20\n", "60000/60000 [==============================] - 1s 13us/step - loss: 0.0946 - acc: 0.9721 - val_loss: 0.0884 - val_acc: 0.9739\n", "Epoch 5/20\n", "60000/60000 [==============================] - 1s 15us/step - loss: 0.0933 - acc: 0.9727 - val_loss: 0.0869 - val_acc: 0.9754\n", "Epoch 6/20\n", "60000/60000 [==============================] - 1s 13us/step - loss: 0.0895 - acc: 0.9729 - val_loss: 0.0877 - val_acc: 0.9743\n", "Epoch 7/20\n", "60000/60000 [==============================] - 1s 15us/step - loss: 0.0883 - acc: 0.9739 - val_loss: 0.0887 - val_acc: 0.9738\n", "Epoch 8/20\n", "60000/60000 [==============================] - 1s 15us/step - loss: 0.0863 - acc: 0.9741 - val_loss: 0.0866 - val_acc: 0.9751\n", "Epoch 9/20\n", "60000/60000 [==============================] - 1s 14us/step - loss: 0.0859 - acc: 0.9746 - val_loss: 0.0836 - val_acc: 0.9770\n", "Epoch 10/20\n", "60000/60000 [==============================] - 1s 15us/step - loss: 0.0845 - acc: 0.9749 - val_loss: 0.0857 - val_acc: 0.9759\n", "Epoch 11/20\n", "60000/60000 [==============================] - 1s 14us/step - loss: 0.0809 - acc: 0.9759 - val_loss: 0.0830 - val_acc: 0.9774\n", "Epoch 12/20\n", "60000/60000 [==============================] - 1s 14us/step - loss: 0.0810 - acc: 0.9768 - val_loss: 0.0887 - val_acc: 0.9759\n", "Epoch 13/20\n", "60000/60000 [==============================] - 1s 13us/step - loss: 0.0787 - acc: 0.9770 - val_loss: 0.0856 - val_acc: 0.9760\n", "Epoch 14/20\n", "60000/60000 [==============================] - 1s 13us/step - loss: 0.0764 - acc: 0.9776 - val_loss: 0.0827 - val_acc: 0.9768\n", "Epoch 15/20\n", "60000/60000 [==============================] - 1s 13us/step - loss: 0.0763 - acc: 0.9777 - val_loss: 0.0804 - val_acc: 0.9779\n", "Epoch 16/20\n", "60000/60000 [==============================] - 1s 14us/step - loss: 0.0742 - acc: 0.9784 - val_loss: 0.0811 - val_acc: 0.9782\n", "Epoch 17/20\n", "60000/60000 [==============================] - 1s 14us/step - loss: 0.0728 - acc: 0.9781 - val_loss: 0.0785 - val_acc: 0.9775\n", "Epoch 18/20\n", "60000/60000 [==============================] - 1s 14us/step - loss: 0.0721 - acc: 0.9786 - val_loss: 0.0819 - val_acc: 0.9774\n", "Epoch 19/20\n", "60000/60000 [==============================] - 1s 15us/step - loss: 0.0701 - acc: 0.9792 - val_loss: 0.0795 - val_acc: 0.9799\n", "Epoch 20/20\n", "60000/60000 [==============================] - 1s 15us/step - loss: 0.0722 - acc: 0.9796 - val_loss: 0.0753 - val_acc: 0.9798\n" ] }, { "data": { "text/plain": [ "Text(0.5,1,'Accuracy Curves')" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "model_reg.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])\n", "history_reg = model_reg.fit(train_data, train_labels_one_hot, batch_size=256, epochs=20, verbose=1, \n", " validation_data=(test_data, test_labels_one_hot))\n", " \n", "#Plot the Loss Curves\n", "plt.figure(figsize=[8,6])\n", "plt.plot(history_reg.history['loss'],'r',linewidth=3.0)\n", "plt.plot(history_reg.history['val_loss'],'b',linewidth=3.0)\n", "plt.legend(['Training loss', 'Validation Loss'],fontsize=18)\n", "plt.xlabel('Epochs ',fontsize=16)\n", "plt.ylabel('Loss',fontsize=16)\n", "plt.title('Loss Curves',fontsize=16)\n", " \n", "#Plot the Accuracy Curves\n", "plt.figure(figsize=[8,6])\n", "plt.plot(history_reg.history['acc'],'r',linewidth=3.0)\n", "plt.plot(history_reg.history['val_acc'],'b',linewidth=3.0)\n", "plt.legend(['Training Accuracy', 'Validation Accuracy'],fontsize=18)\n", "plt.xlabel('Epochs ',fontsize=16)\n", "plt.ylabel('Accuracy',fontsize=16)\n", "plt.title('Accuracy Curves',fontsize=16)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "OCP-IqMD_n9D" }, "source": [ "## What we note??\n", "\n", "* Validation loss is not increasing as it did before.\n", "* Difference between the validation and training accuracy is not that much\n", "\n", "This implies better generalisation and can work will on unseen data samples.\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "3tkYXx4et74o" }, "source": [ "# Comparision of Various Optimizers: Stochastic Gradient Descent, RMSprop, Adam, Adagrad" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 }, "base_uri": "https://localhost:8080/", "height": 34 }, "colab_type": "code", "executionInfo": { "elapsed": 8530, "status": "ok", "timestamp": 1531761101645, "user": { "displayName": "Rishhanth Maanav", "photoUrl": "https://lh3.googleusercontent.com/a/default-user=s128", "userId": "116055284600069515854" }, "user_tz": -330 }, "id": "J1ISUIQZm6TB", "outputId": "2a2c3e8b-ce85-49b4-ac10-234bc0208c17" }, "outputs": [], "source": [ "import time\n", "import numpy as np\n", "from matplotlib import pyplot as plt\n", "from keras.utils import np_utils\n", "import keras.callbacks as cb\n", "from keras.models import Sequential\n", "from keras.layers.core import Dense, Dropout, Activation\n", "from keras.optimizers import *\n", "from keras.datasets import mnist" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "RmdLi4CGm_eK" }, "outputs": [], "source": [ "class LossHistory(cb.Callback):\n", " def on_train_begin(self, logs={}):\n", " self.losses = []\n", "\n", " def on_batch_end(self, batch, logs={}):\n", " batch_loss = logs.get('loss')\n", " self.losses.append(batch_loss)" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "KTDro5wJnClX" }, "outputs": [], "source": [ "def load_data():\n", " print ('Loading data...')\n", " (X_train, y_train), (X_test, y_test) = mnist.load_data()\n", "\n", " X_train = X_train.astype('float32')\n", " X_test = X_test.astype('float32')\n", "\n", " X_train /= 255\n", " X_test /= 255\n", "\n", " y_train = np_utils.to_categorical(y_train, 10)\n", " y_test = np_utils.to_categorical(y_test, 10)\n", "\n", " X_train = np.reshape(X_train, (60000, 784))\n", " X_test = np.reshape(X_test, (10000, 784))\n", "\n", " print ('Data loaded.')\n", " return [X_train, X_test, y_train, y_test]\n" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "XGSzKUf6nbLX" }, "outputs": [], "source": [ "def init_model(Optimizer,lrnr):\n", " start_time = time.time()\n", " print ('Compiling Model ... ')\n", " model = Sequential()\n", " model.add(Dense(500, input_dim=784))\n", " model.add(Activation('relu'))\n", " model.add(Dropout(0.4))\n", " model.add(Dense(300))\n", " model.add(Activation('relu'))\n", " model.add(Dropout(0.4))\n", " model.add(Dense(10))\n", " model.add(Activation('softmax'))\n", " \n", " optim_dict = {}\n", " optim_dict['RMSprop'] = RMSprop(lr = lrnr)\n", " optim_dict['SGD'] = SGD(lr = lrnr)\n", " optim_dict['Adam'] = Adam(lr = lrnr)\n", " optim_dict['Adagrad'] = Adagrad(lr = lrnr)\n", " optim = optim_dict[Optimizer]\n", " model.compile(loss='categorical_crossentropy', optimizer=optim, metrics=['accuracy'])\n", " print ('Model compield in {0} seconds'.format(time.time() - start_time))\n", " return model" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "dZpfXbzYn-8z" }, "outputs": [], "source": [ "def run_network(data=None, model=None, epochs=20, batch=256, Optimizer = 'RMSprop',lrnr = 1e-2):\n", " try:\n", " start_time = time.time()\n", " if data is None:\n", " X_train, X_test, y_train, y_test = load_data()\n", " else:\n", " X_train, X_test, y_train, y_test = data\n", "\n", " if model is None:\n", " model = init_model(Optimizer,lrnr)\n", "\n", " history = LossHistory()\n", " print(\"####### Optimizer being Used: \" + Optimizer)\n", " print ('Training model...')\n", " model.fit(X_train, y_train, epochs=epochs, batch_size=batch,\n", " callbacks=[history],\n", " validation_data=(X_test, y_test), verbose=2)\n", "\n", " print (\"Training duration : {0}\".format(time.time() - start_time))\n", " score = model.evaluate(X_test, y_test, batch_size=16)\n", "\n", " print (\"Network's test score [loss, accuracy]: {0}\".format(score))\n", " return model, history.losses\n", " except KeyboardInterrupt:\n", " print (' KeyboardInterrupt')\n", " return model, history.losses" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "77npFi_boEQG" }, "outputs": [], "source": [ "def plot_losses(losses):\n", " fig = plt.figure()\n", " ax = fig.add_subplot(111)\n", " ax.plot(losses)\n", " ax.set_title('Loss per batch')\n", " fig.show()" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 }, "base_uri": "https://localhost:8080/", "height": 3471 }, "colab_type": "code", "executionInfo": { "elapsed": 140286, "status": "ok", "timestamp": 1531761247397, "user": { "displayName": "Rishhanth Maanav", "photoUrl": "https://lh3.googleusercontent.com/a/default-user=s128", "userId": "116055284600069515854" }, "user_tz": -330 }, "id": "KVfSCHDNoQS6", "outputId": "153a975f-ddf7-41b0-fdaa-5bf847494971" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Loading data...\n", "Data loaded.\n", "Compiling Model ... \n", "Model compield in 0.08845806121826172 seconds\n", "####### Optimizer being Used: SGD\n", "Training model...\n", "Train on 60000 samples, validate on 10000 samples\n", "Epoch 1/20\n", " - 1s - loss: 1.7773 - acc: 0.4428 - val_loss: 1.0247 - val_acc: 0.8108\n", "Epoch 2/20\n", " - 1s - loss: 0.9804 - acc: 0.7167 - val_loss: 0.5855 - val_acc: 0.8594\n", "Epoch 3/20\n", " - 1s - loss: 0.7236 - acc: 0.7817 - val_loss: 0.4597 - val_acc: 0.8796\n", "Epoch 4/20\n", " - 1s - loss: 0.6116 - acc: 0.8163 - val_loss: 0.4007 - val_acc: 0.8935\n", "Epoch 5/20\n", " - 1s - loss: 0.5440 - acc: 0.8373 - val_loss: 0.3659 - val_acc: 0.9000\n", "Epoch 6/20\n", " - 1s - loss: 0.4992 - acc: 0.8503 - val_loss: 0.3403 - val_acc: 0.9060\n", "Epoch 7/20\n", " - 1s - loss: 0.4716 - acc: 0.8589 - val_loss: 0.3216 - val_acc: 0.9113\n", "Epoch 8/20\n", " - 1s - loss: 0.4442 - acc: 0.8681 - val_loss: 0.3063 - val_acc: 0.9146\n", "Epoch 9/20\n", " - 1s - loss: 0.4234 - acc: 0.8746 - val_loss: 0.2935 - val_acc: 0.9179\n", "Epoch 10/20\n", " - 1s - loss: 0.4053 - acc: 0.8797 - val_loss: 0.2828 - val_acc: 0.9189\n", "Epoch 11/20\n", " - 1s - loss: 0.3892 - acc: 0.8843 - val_loss: 0.2728 - val_acc: 0.9226\n", "Epoch 12/20\n", " - 1s - loss: 0.3750 - acc: 0.8885 - val_loss: 0.2635 - val_acc: 0.9254\n", "Epoch 13/20\n", " - 1s - loss: 0.3651 - acc: 0.8904 - val_loss: 0.2560 - val_acc: 0.9266\n", "Epoch 14/20\n", " - 1s - loss: 0.3501 - acc: 0.8970 - val_loss: 0.2487 - val_acc: 0.9304\n", "Epoch 15/20\n", " - 1s - loss: 0.3421 - acc: 0.8992 - val_loss: 0.2412 - val_acc: 0.9326\n", "Epoch 16/20\n", " - 1s - loss: 0.3311 - acc: 0.9023 - val_loss: 0.2351 - val_acc: 0.9327\n", "Epoch 17/20\n", " - 1s - loss: 0.3225 - acc: 0.9056 - val_loss: 0.2292 - val_acc: 0.9346\n", "Epoch 18/20\n", " - 1s - loss: 0.3135 - acc: 0.9074 - val_loss: 0.2233 - val_acc: 0.9354\n", "Epoch 19/20\n", " - 1s - loss: 0.3072 - acc: 0.9094 - val_loss: 0.2176 - val_acc: 0.9369\n", "Epoch 20/20\n", " - 1s - loss: 0.3006 - acc: 0.9123 - val_loss: 0.2128 - val_acc: 0.9379\n", "Training duration : 13.381985187530518\n", "10000/10000 [==============================] - 0s 35us/step\n", "Network's test score [loss, accuracy]: [0.21281864611394705, 0.9379]\n", "Loading data...\n", "Data loaded.\n", "Compiling Model ... \n", "Model compield in 0.09253859519958496 seconds\n", "####### Optimizer being Used: RMSprop\n", "Training model...\n", "Train on 60000 samples, validate on 10000 samples\n", "Epoch 1/20\n", " - 1s - loss: 0.8625 - acc: 0.8409 - val_loss: 0.2801 - val_acc: 0.9166\n", "Epoch 2/20\n", " - 1s - loss: 0.3014 - acc: 0.9236 - val_loss: 0.2317 - val_acc: 0.9443\n", "Epoch 3/20\n", " - 1s - loss: 0.2773 - acc: 0.9351 - val_loss: 0.1938 - val_acc: 0.9558\n", "Epoch 4/20\n", " - 1s - loss: 0.2864 - acc: 0.9372 - val_loss: 0.1707 - val_acc: 0.9631\n", "Epoch 5/20\n", " - 1s - loss: 0.2799 - acc: 0.9416 - val_loss: 0.1910 - val_acc: 0.9601\n", "Epoch 6/20\n", " - 1s - loss: 0.2876 - acc: 0.9445 - val_loss: 0.1602 - val_acc: 0.9652\n", "Epoch 7/20\n", " - 1s - loss: 0.3024 - acc: 0.9456 - val_loss: 0.1608 - val_acc: 0.9645\n", "Epoch 8/20\n", " - 1s - loss: 0.2887 - acc: 0.9469 - val_loss: 0.1865 - val_acc: 0.9650\n", "Epoch 9/20\n", " - 1s - loss: 0.3007 - acc: 0.9468 - val_loss: 0.2039 - val_acc: 0.9579\n", "Epoch 10/20\n", " - 1s - loss: 0.3076 - acc: 0.9470 - val_loss: 0.1843 - val_acc: 0.9643\n", "Epoch 11/20\n", " - 1s - loss: 0.3095 - acc: 0.9480 - val_loss: 0.2046 - val_acc: 0.9654\n", "Epoch 12/20\n", " - 1s - loss: 0.2962 - acc: 0.9508 - val_loss: 0.1813 - val_acc: 0.9725\n", "Epoch 13/20\n", " - 1s - loss: 0.3197 - acc: 0.9508 - val_loss: 0.2212 - val_acc: 0.9671\n", "Epoch 14/20\n", " - 1s - loss: 0.3212 - acc: 0.9512 - val_loss: 0.1949 - val_acc: 0.9709\n", "Epoch 15/20\n", " - 1s - loss: 0.3231 - acc: 0.9514 - val_loss: 0.2288 - val_acc: 0.9700\n", "Epoch 16/20\n", " - 1s - loss: 0.3479 - acc: 0.9486 - val_loss: 0.2139 - val_acc: 0.9690\n", "Epoch 17/20\n", " - 1s - loss: 0.3371 - acc: 0.9518 - val_loss: 0.1936 - val_acc: 0.9668\n", "Epoch 18/20\n", " - 1s - loss: 0.3541 - acc: 0.9504 - val_loss: 0.2487 - val_acc: 0.9664\n", "Epoch 19/20\n", " - 1s - loss: 0.3515 - acc: 0.9527 - val_loss: 0.2099 - val_acc: 0.9712\n", "Epoch 20/20\n", " - 1s - loss: 0.3672 - acc: 0.9517 - val_loss: 0.2479 - val_acc: 0.9709\n", "Training duration : 15.204601287841797\n", "10000/10000 [==============================] - 0s 38us/step\n", "Network's test score [loss, accuracy]: [0.24785369726756343, 0.9709]\n", "Loading data...\n", "Data loaded.\n", "Compiling Model ... \n", "Model compield in 0.08783793449401855 seconds\n", "####### Optimizer being Used: Adam\n", "Training model...\n", "Train on 60000 samples, validate on 10000 samples\n", "Epoch 1/20\n", " - 1s - loss: 0.3655 - acc: 0.8904 - val_loss: 0.1667 - val_acc: 0.9529\n", "Epoch 2/20\n", " - 1s - loss: 0.2550 - acc: 0.9281 - val_loss: 0.1373 - val_acc: 0.9599\n", "Epoch 3/20\n", " - 1s - loss: 0.2459 - acc: 0.9331 - val_loss: 0.1261 - val_acc: 0.9656\n", "Epoch 4/20\n", " - 1s - loss: 0.2257 - acc: 0.9408 - val_loss: 0.1384 - val_acc: 0.9637\n", "Epoch 5/20\n", " - 1s - loss: 0.2182 - acc: 0.9424 - val_loss: 0.1244 - val_acc: 0.9663\n", "Epoch 6/20\n", " - 1s - loss: 0.2291 - acc: 0.9413 - val_loss: 0.1303 - val_acc: 0.9658\n", "Epoch 7/20\n", " - 1s - loss: 0.2233 - acc: 0.9447 - val_loss: 0.1279 - val_acc: 0.9667\n", "Epoch 8/20\n", " - 1s - loss: 0.2233 - acc: 0.9445 - val_loss: 0.1321 - val_acc: 0.9683\n", "Epoch 9/20\n", " - 1s - loss: 0.2304 - acc: 0.9436 - val_loss: 0.1325 - val_acc: 0.9675\n", "Epoch 10/20\n", " - 1s - loss: 0.2096 - acc: 0.9484 - val_loss: 0.1218 - val_acc: 0.9679\n", "Epoch 11/20\n", " - 1s - loss: 0.1990 - acc: 0.9495 - val_loss: 0.1336 - val_acc: 0.9689\n", "Epoch 12/20\n", " - 1s - loss: 0.2045 - acc: 0.9508 - val_loss: 0.1349 - val_acc: 0.9668\n", "Epoch 13/20\n", " - 1s - loss: 0.2046 - acc: 0.9520 - val_loss: 0.1448 - val_acc: 0.9646\n", "Epoch 14/20\n", " - 1s - loss: 0.1984 - acc: 0.9539 - val_loss: 0.1350 - val_acc: 0.9707\n", "Epoch 15/20\n", " - 1s - loss: 0.2026 - acc: 0.9536 - val_loss: 0.1379 - val_acc: 0.9689\n", "Epoch 16/20\n", " - 1s - loss: 0.2211 - acc: 0.9507 - val_loss: 0.1409 - val_acc: 0.9671\n", "Epoch 17/20\n", " - 1s - loss: 0.2139 - acc: 0.9507 - val_loss: 0.1375 - val_acc: 0.9663\n", "Epoch 18/20\n", " - 1s - loss: 0.2072 - acc: 0.9538 - val_loss: 0.1456 - val_acc: 0.9685\n", "Epoch 19/20\n", " - 1s - loss: 0.1957 - acc: 0.9551 - val_loss: 0.1284 - val_acc: 0.9727\n", "Epoch 20/20\n", " - 1s - loss: 0.1956 - acc: 0.9563 - val_loss: 0.1484 - val_acc: 0.9650\n", "Training duration : 17.11251473426819\n", "10000/10000 [==============================] - 0s 40us/step\n", "Network's test score [loss, accuracy]: [0.14839486477555325, 0.965]\n", "Loading data...\n", "Data loaded.\n", "Compiling Model ... \n", "Model compield in 0.09581565856933594 seconds\n", "####### Optimizer being Used: Adagrad\n", "Training model...\n", "Train on 60000 samples, validate on 10000 samples\n", "Epoch 1/20\n", " - 1s - loss: 0.3521 - acc: 0.8922 - val_loss: 0.1426 - val_acc: 0.9553\n", "Epoch 2/20\n", " - 1s - loss: 0.1613 - acc: 0.9527 - val_loss: 0.1168 - val_acc: 0.9636\n", "Epoch 3/20\n", " - 1s - loss: 0.1265 - acc: 0.9625 - val_loss: 0.0945 - val_acc: 0.9716\n", "Epoch 4/20\n", " - 1s - loss: 0.1059 - acc: 0.9679 - val_loss: 0.0830 - val_acc: 0.9745\n", "Epoch 5/20\n", " - 1s - loss: 0.0955 - acc: 0.9711 - val_loss: 0.0766 - val_acc: 0.9762\n", "Epoch 6/20\n", " - 1s - loss: 0.0844 - acc: 0.9741 - val_loss: 0.0719 - val_acc: 0.9779\n", "Epoch 7/20\n", " - 1s - loss: 0.0748 - acc: 0.9772 - val_loss: 0.0702 - val_acc: 0.9775\n", "Epoch 8/20\n", " - 1s - loss: 0.0686 - acc: 0.9791 - val_loss: 0.0669 - val_acc: 0.9788\n", "Epoch 9/20\n", " - 1s - loss: 0.0633 - acc: 0.9804 - val_loss: 0.0649 - val_acc: 0.9793\n", "Epoch 10/20\n", " - 1s - loss: 0.0594 - acc: 0.9821 - val_loss: 0.0659 - val_acc: 0.9792\n", "Epoch 11/20\n", " - 1s - loss: 0.0554 - acc: 0.9829 - val_loss: 0.0610 - val_acc: 0.9807\n", "Epoch 12/20\n", " - 1s - loss: 0.0521 - acc: 0.9839 - val_loss: 0.0613 - val_acc: 0.9809\n", "Epoch 13/20\n", " - 1s - loss: 0.0486 - acc: 0.9851 - val_loss: 0.0622 - val_acc: 0.9808\n", "Epoch 14/20\n", " - 1s - loss: 0.0473 - acc: 0.9851 - val_loss: 0.0601 - val_acc: 0.9818\n", "Epoch 15/20\n", " - 1s - loss: 0.0438 - acc: 0.9864 - val_loss: 0.0585 - val_acc: 0.9813\n", "Epoch 16/20\n", " - 1s - loss: 0.0416 - acc: 0.9874 - val_loss: 0.0579 - val_acc: 0.9826\n", "Epoch 17/20\n", " - 1s - loss: 0.0396 - acc: 0.9879 - val_loss: 0.0587 - val_acc: 0.9819\n", "Epoch 18/20\n", " - 1s - loss: 0.0385 - acc: 0.9880 - val_loss: 0.0576 - val_acc: 0.9823\n", "Epoch 19/20\n", " - 1s - loss: 0.0349 - acc: 0.9895 - val_loss: 0.0567 - val_acc: 0.9820\n", "Epoch 20/20\n", " - 1s - loss: 0.0349 - acc: 0.9893 - val_loss: 0.0570 - val_acc: 0.9825\n", "Training duration : 15.652199983596802\n", "10000/10000 [==============================] - 0s 39us/step\n", "Network's test score [loss, accuracy]: [0.05698278585342341, 0.9825]\n" ] } ], "source": [ "model1,losses1 = run_network(Optimizer='SGD')\n", "model2,losses2 = run_network(Optimizer='RMSprop')\n", "model3,losses3 = run_network(Optimizer='Adam')\n", "model4,losses4 = run_network(Optimizer='Adagrad')" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 }, "base_uri": "https://localhost:8080/", "height": 362 }, "colab_type": "code", "executionInfo": { "elapsed": 1112, "status": "ok", "timestamp": 1531761248543, "user": { "displayName": "Rishhanth Maanav", "photoUrl": "https://lh3.googleusercontent.com/a/default-user=s128", "userId": "116055284600069515854" }, "user_tz": -330 }, "id": "9uv-RZBHooTA", "outputId": "2509eb4a-17aa-4d91-95ba-b64c49066642" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.title(\"Comparison of Various Optimizers' Performance\")\n", "plt.plot(losses1)\n", "plt.plot(losses2)\n", "plt.plot(losses3)\n", "plt.plot(losses4)\n", "plt.legend(['SGD','RMSProp','Adam','Adagrad'])\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "B3vv0ICWEe5N" }, "source": [ "# Time to train your own neural network !!!" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "clk5SDoU_sw4" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: matplotlib in /opt/anaconda3/envs/py35/lib/python3.5/site-packages (2.2.2)\n", "Requirement already satisfied: numpy>=1.7.1 in /opt/anaconda3/envs/py35/lib/python3.5/site-packages (from matplotlib) (1.14.2)\n", "Requirement already satisfied: cycler>=0.10 in /opt/anaconda3/envs/py35/lib/python3.5/site-packages (from matplotlib) (0.10.0)\n", "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /opt/anaconda3/envs/py35/lib/python3.5/site-packages (from matplotlib) (2.2.0)\n", "Requirement already satisfied: python-dateutil>=2.1 in /opt/anaconda3/envs/py35/lib/python3.5/site-packages (from matplotlib) (2.7.2)\n", "Requirement already satisfied: pytz in /opt/anaconda3/envs/py35/lib/python3.5/site-packages (from matplotlib) (2018.3)\n", "Requirement already satisfied: six>=1.10 in /opt/anaconda3/envs/py35/lib/python3.5/site-packages (from matplotlib) (1.11.0)\n", "Requirement already satisfied: kiwisolver>=1.0.1 in /opt/anaconda3/envs/py35/lib/python3.5/site-packages (from matplotlib) (1.0.1)\n", "Requirement already satisfied: setuptools in /opt/anaconda3/envs/py35/lib/python3.5/site-packages (from kiwisolver>=1.0.1->matplotlib) (39.0.1)\n", "Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz\n", "170500096/170498071 [==============================] - 174s 1us/step\n" ] } ], "source": [ "!pip install matplotlib\n", "\n", "from keras.datasets import cifar10\n", "import numpy as np\n", "(train_images, train_labels), (test_images, test_labels) = cifar10.load_data()" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "Gmer73id_vpo" }, "outputs": [], "source": [ "from keras.utils import to_categorical\n", " \n", "print('Training data shape : ', train_images.shape, train_labels.shape)\n", " \n", "print('Testing data shape : ', test_images.shape, test_labels.shape)\n", " \n", "# Find the unique numbers from the train labels\n", "classes = np.unique(train_labels)\n", "nClasses = len(classes)\n", "print('Total number of outputs : ', nClasses)\n", "print('Output classes : ', classes)\n", " \n", "plt.figure(figsize=[5,2])\n", " \n", "# Display the first image in training data\n", "plt.subplot(121)\n", "plt.imshow(train_images[0,:,:], cmap='gray')\n", "plt.title(\"Ground Truth : {}\".format(train_labels[0]))\n", " \n", "# Display the first image in testing data\n", "plt.subplot(122)\n", "plt.imshow(test_images[0,:,:], cmap='gray')\n", "plt.title(\"Ground Truth : {}\".format(test_labels[0]))\n" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "1w-ldsNx_4b4" }, "outputs": [], "source": [ "\n", "# Change from matrix to array of dimension 28x28 to array of dimention 784\n", "dimData = np.prod(train_images.shape[1:])\n", "train_data = train_images.reshape(train_images.shape[0], dimData)\n", "test_data = test_images.reshape(test_images.shape[0], dimData)" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "iYqqvCQ8_5Qt" }, "outputs": [], "source": [ "# Change to float datatype\n", "train_data = train_data.astype('float32')\n", "test_data = test_data.astype('float32')\n", " \n", "# Scale the data to lie between 0 to 1\n", "train_data /= 255\n", "test_data /= 255" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "nNPTvC8S_7Gx" }, "outputs": [], "source": [ "# Change the labels from integer to categorical data\n", "train_labels_one_hot = to_categorical(train_labels)\n", "test_labels_one_hot = to_categorical(test_labels)\n", " \n", "# Display the change for category label using one-hot encoding\n", "print('Original label 0 : ', train_labels[0])\n", "print('After conversion to categorical ( one-hot ) : ', train_labels_one_hot[0])" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "fpVcf7kSADBU" }, "outputs": [], "source": [ "from keras.models import Sequential\n", "from keras.layers import Dense\n", " \n", "model = Sequential()\n", "\n", "model.add(Dense(720, activation='sigmoid', input_shape=(dimData,)))\n", "model.add(Dense(720, activation='relu', input_shape=(dimData,)))\n", "model.add(Dense(720, activation='sigmoid', input_shape=(dimData,)))\n", "model.add(Dense(720, activation='relu', input_shape=(dimData,)))\n", "model.add(Dense(720, activation='sigmoid', input_shape=(dimData,)))\n", "model.add(Dense(720, activation='relu', input_shape=(dimData,)))\n", "model.add(Dense(720, activation='sigmoid', input_shape=(dimData,)))\n", "model.add(Dense(720, activation='relu', input_shape=(dimData,)))\n", "model.add(Dense(720, activation='sigmoid', input_shape=(dimData,)))\n", "model.add(Dense(720, activation='relu', input_shape=(dimData,)))\n", "model.add(Dense(720, activation='relu'))\n", "model.add(Dense(nClasses, activation='softmax'))" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "1SglB_EnAFSQ" }, "outputs": [], "source": [ "model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "jEqD8W6KAGHa" }, "outputs": [], "source": [ "history = model.fit(train_data, train_labels_one_hot, batch_size=256, epochs=20, verbose=1, \n", " validation_data=(test_data, test_labels_one_hot))" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "GqRpjKusAKUA" }, "outputs": [], "source": [ "[test_loss, test_acc] = model.evaluate(test_data, test_labels_one_hot)\n", "print(\"Evaluation result on Test Data : Loss = {}, accuracy = {}\".format(test_loss, test_acc))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "mKJ78Hi4AOjq" }, "source": [ "## Try to maximize the test accuracy !!! Take it as a challenge. (Tuning the parameters is basically an ART :p)" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "autoexec": { "startup": false, "wait_interval": 0 } }, "colab_type": "code", "id": "OMtvA5tzwCxo" }, "outputs": [], "source": [] } ], "metadata": { "accelerator": "GPU", "celltoolbar": "Slideshow", "colab": { "collapsed_sections": [], "default_view": {}, "name": "Session2.ipynb", "provenance": [], "toc_visible": true, "version": "0.3.2", "views": {} }, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.5" } }, "nbformat": 4, "nbformat_minor": 1 }