Skip to content
Snippets Groups Projects
08_neural_networks.ipynb 437 KiB
Newer Older
chadhat's avatar
chadhat committed
{
 "cells": [
chadhat's avatar
chadhat committed
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": null,
chadhat's avatar
chadhat committed
   "metadata": {},
   "outputs": [],
   "source": [
    "# IGNORE THIS CELL WHICH CUSTOMIZES LAYOUT AND STYLING OF THE NOTEBOOK !\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "%config InlineBackend.figure_format = 'retina'\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore', category=FutureWarning)\n",
    "#from IPython.core.display import HTML; HTML(open(\"custom.html\", \"r\").read())"
   ]
  },
chadhat's avatar
chadhat committed
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Introduction to Neural Networks\n",
    "\n",
    "## TO DO: Almost all the figues and schematics will be replaced or improved slowly\n",
    "\n",
    "<center>\n",
    "<figure>\n",
    "<img src=\"./images/neuralnets/neural_net_ex.svg\" width=\"700\"/>\n",
    "<figcaption>A 3 layer Neural Network (By convention the input layer is not counted).</figcaption>\n",
    "</figure>\n",
    "</center>"
chadhat's avatar
chadhat committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## History of Neural networks\n",
    "\n",
    "**TODO: Make it more complete and format properly**\n",
    "\n",
    "1943 - Threshold Logic\n",
    "\n",
    "1940s - Hebbian Learning\n",
    "\n",
    "1958 - Perceptron\n",
    "\n",
    "1975 - Backpropagation\n",
    "\n",
    "1980s - Neocognitron\n",
    "\n",
    "1982: Hopfield Network\n",
    "\n",
    "1986: Convolutional Neural Networks\n",
    "\n",
    "1997: Long-short term memory (LSTM) model\n",
    "\n",
    "2014: Gated Recurrent Units, Generative Adversarial Networks(Check)?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Why the boom now?\n",
    "* Data\n",
    "* Data\n",
    "* Data\n",
    "* Availability of GPUs\n",
    "* Algorithmic developments which allow for efficient training and training for deeper networks\n",
    "* Much easier access than a decade ago"
chadhat's avatar
chadhat committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Building blocks\n",
    "### Perceptron\n",
    "\n",
    "The smallest unit of a neural network is a **perceptron** like node.\n",
chadhat's avatar
chadhat committed
    "\n",
    "**What is a Perceptron?**\n",
    "\n",
    "It is a simple function which can have multiple inputs and has a single output.\n",
chadhat's avatar
chadhat committed
    "\n",
    "<center>\n",
    "<figure>\n",
    "<img src=\"./images/neuralnets/perceptron_ex.svg\" width=\"400\"/>\n",
    "<figcaption>A simple perceptron with 3 inputs and 1 output.</figcaption>\n",
    "</figure>\n",
    "</center>\n",
    "\n",
    "\n",
    "It works as follows: \n",
    "\n",
    "Step 1: A **weighted sum** of the inputs is calculated\n",
chadhat's avatar
chadhat committed
    "\n",
    "\\begin{equation*}\n",
    "weighted\\_sum = \\sum_{k=1}^{num\\_inputs} w_{i} x_{i}\n",
    "\\end{equation*}\n",
    "\n",
    "Step 2: A **step** activation function is applied\n",
chadhat's avatar
chadhat committed
    "\n",
    "$$\n",
    "f(weighted\\_sum) = \\left\\{\n",
    "        \\begin{array}{ll}\n",
    "            0 & \\quad weighted\\_sum < threshold \\\\\n",
    "            1 & \\quad weighted\\_sum \\geq threshold\n",
chadhat's avatar
chadhat committed
    "        \\end{array}\n",
    "    \\right.\n",
    "$$\n",
    "\n",
    "You can see that this is also a linear classifier as we introduced in script 02."
chadhat's avatar
chadhat committed
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 1,
chadhat's avatar
chadhat committed
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "%config IPCompleter.greedy=True\n",
chadhat's avatar
chadhat committed
    "import matplotlib as mpl\n",
    "mpl.rcParams['lines.linewidth'] = 3\n",
    "#mpl.rcParams['font.size'] = 16"
chadhat's avatar
chadhat committed
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 2,
chadhat's avatar
chadhat committed
   "metadata": {},
chadhat's avatar
chadhat committed
   "outputs": [],
chadhat's avatar
chadhat committed
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "\n",
chadhat's avatar
chadhat committed
    "def perceptron(X, w, threshold=1):\n",
    "    # This function computes sum(w_i*x_i) and\n",
chadhat's avatar
chadhat committed
    "    # applies a perceptron activation\n",
    "    linear_sum = np.dot(X, w)\n",
    "    output = 0\n",
chadhat's avatar
chadhat committed
    "    if linear_sum >= threshold:\n",
    "        output = 1\n",
chadhat's avatar
chadhat committed
    "    return output"
chadhat's avatar
chadhat committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Boolean AND\n",
    "\n",
    "| x$_1$ | x$_2$ | output |\n",
    "| --- | --- | --- |\n",
    "| 0 | 0 | 0 |\n",
    "| 1 | 0 | 0 |\n",
    "| 0 | 1 | 0 |\n",
    "| 1 | 1 | 1 |"
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Perceptron output for x1, x2 =  [0, 0]  is  0\n",
      "Perceptron output for x1, x2 =  [1, 0]  is  0\n",
      "Perceptron output for x1, x2 =  [0, 1]  is  0\n",
      "Perceptron output for x1, x2 =  [1, 1]  is  1\n"
     ]
    }
   ],
chadhat's avatar
chadhat committed
   "source": [
    "# Calculating Boolean AND using a perceptron\n",
    "threshold = 1.5\n",
    "w = [1, 1]\n",
    "X = [[0, 0], [1, 0], [0, 1], [1, 1]]\n",
chadhat's avatar
chadhat committed
    "for i in X:\n",
    "    print(\"Perceptron output for x1, x2 = \", i,\n",
    "          \" is \", perceptron(i, w, threshold))"
chadhat's avatar
chadhat committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this simple case we can rewrite our equation to $x_2 = ...... $ which describes a line in 2D:"
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
chadhat's avatar
chadhat committed
    "def perceptron_DB(X, w, threshold):\n",
    "    # Plotting the decision boundary\n",
    "    for i in X:\n",
    "        plt.plot(i, \"o\", color=\"b\")\n",
    "    plt.xlim(-1, 2)\n",
    "    plt.ylim(-1, 2)\n",
    "    # The decision boundary is a line given by\n",
    "    # w_1*x_1+w_2*x_2-threshold=0\n",
    "    x1 = np.arange(-3, 4)\n",
    "    x2 = (threshold - x1*w[0])/w[1]\n",
    "    plt.plot(x1, x2, \"--\", color=\"black\")\n",
    "    plt.xlabel(\"x$_1$\", fontsize=16)\n",
    "    plt.ylabel(\"x$_2$\", fontsize=16)"
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe7148256d8>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
chadhat's avatar
chadhat committed
   "source": [
chadhat's avatar
chadhat committed
    "perceptron_DB(X, w, threshold)"
chadhat's avatar
chadhat committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Exercise 1 : Compute a Boolean \"OR\" using a perceptron?**\n",
chadhat's avatar
chadhat committed
    "\n",
    "Hint: copy the code from the \"AND\" example and edit the weights and/or threshold"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Boolean OR\n",
    "\n",
    "| x$_1$ | x$_2$ | output |\n",
    "| --- | --- | --- |\n",
    "| 0 | 0 | 0 |\n",
    "| 1 | 0 | 1 |\n",
    "| 0 | 1 | 1 |\n",
    "| 1 | 1 | 1 |"
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 9,
chadhat's avatar
chadhat committed
   "metadata": {},
   "outputs": [],
   "source": [
    "# Calculating Boolean OR using a perceptron\n",
    "# Edit the code below"
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Perceptron output for x1, x2 =  [0, 0]  is  0\n",
      "Perceptron output for x1, x2 =  [1, 0]  is  1\n",
      "Perceptron output for x1, x2 =  [0, 1]  is  1\n",
      "Perceptron output for x1, x2 =  [1, 1]  is  1\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe7145e6c50>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
chadhat's avatar
chadhat committed
   "source": [
    "# Solution\n",
    "# Calculating Boolean OR using a perceptron\n",
    "threshold=0.6\n",
    "w=[1,1]\n",
    "X=[[0,0],[1,0],[0,1],[1,1]]\n",
    "for i in X:\n",
    "    print(\"Perceptron output for x1, x2 = \" , i , \" is \" , perceptron(i,w,threshold))\n",
chadhat's avatar
chadhat committed
    "# Plotting the decision boundary\n",
chadhat's avatar
chadhat committed
    "perceptron_DB(X,w,threshold)"
chadhat's avatar
chadhat committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Exercise 2 : Create a NAND gate using a perceptron**\n",
chadhat's avatar
chadhat committed
    "\n",
    "#### Boolean NAND\n",
    "\n",
    "| x$_1$ | x$_2$ | output |\n",
    "| --- | --- | --- |\n",
    "| 0 | 0 | 1 |\n",
    "| 1 | 0 | 1 |\n",
    "| 0 | 1 | 1 |\n",
    "| 1 | 1 | 0 |"
chadhat's avatar
chadhat committed
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": null,
chadhat's avatar
chadhat committed
   "metadata": {},
   "outputs": [],
   "source": [
    "# Calculating Boolean NAND using a perceptron"
chadhat's avatar
chadhat committed
   ]
  },
chadhat's avatar
chadhat committed
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": null,
   "metadata": {},
   "outputs": [],
chadhat's avatar
chadhat committed
   "source": [
    "# Solution\n",
    "# Calculating Boolean OR using a perceptron\n",
    "import matplotlib.pyplot as plt\n",
    "threshold=-1.5\n",
    "w=[-1,-1]\n",
    "X=[[0,0],[1,0],[0,1],[1,1]]\n",
    "for i in X:\n",
    "    print(\"Perceptron output for x1, x2 = \" , i , \" is \" , perceptron(i,w,threshold))\n",
    "# Plotting the decision boundary\n",
    "perceptron_DB(X,w)"
   ]
  },
chadhat's avatar
chadhat committed
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In fact, a single perceptron can compute \"AND\", \"OR\" and \"NOT\" boolean functions.\n",
chadhat's avatar
chadhat committed
    "However, it cannot compute some other boolean functions such as \"XOR\"\n",
    "\n",
    "**WHAT CAN WE DO?**\n",
    "\n",
    "\n",
    "Hint: Think about what is the significance of the NAND gate we created above?\n",
chadhat's avatar
chadhat committed
    "\n",
    "We said a single perceptron can't compute these functions. We didn't say that about **multiple Perceptrons**."
chadhat's avatar
chadhat committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**XOR function using multiple perceptrons**\n",
    "\n",
    "<center>\n",
    "<figure>\n",
    "<img src=\"./images/neuralnets/perceptron_XOR.svg\" width=\"400\"/>\n",
    "<figcaption>Multiple perceptrons put together to output a XOR function.</figcaption>\n",
    "</figure>\n",
    "</center>"
chadhat's avatar
chadhat committed
   ]
  },
chadhat's avatar
chadhat committed
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "### Multi-layer perceptrons\n"
   ]
  },
chadhat's avatar
chadhat committed
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Google Playground\n",
    "\n",
    "https://playground.tensorflow.org/\n",
    "\n",
    "<img src=\"./images/neuralnets/google_playground.png\"/>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Learning\n",
    "\n",
    "Now we know that we can compute complex functions if we stack together a number of perceptrons.\n",
    "\n",
chadhat's avatar
chadhat committed
    "However, we definitely **DO NOT** want to set the weights and thresholds by hand as we did in the examples above.\n",
    "\n",
    "We want some algorithm to do this for us!\n",
    "\n",
    "In order to achieve this we first need to choose a loss function for the problem at hand\n",
    "\n",
    "\n",
    "### Loss function\n",
chadhat's avatar
chadhat committed
    "In order to learn using an algorithm for learning we need to define a quantity which allows us to measure how far are the predictions of our network/setup are from the reality. This is done by choosing a so-called \"Loss function\" (as in the case for other machine learning algorithms). In other words this function measures how close are the predictions of our network to the supplied labels. Once we have this function we need an algorithm to update the weights of the network such that this loss decreases. As one can already imagine the choice of an appropriate loss function is very important to the success of the model. Fortunately, for classification and regression (which cover a large variety of probelms) these loss functions are well known. \n",
    "\n",
    "Generally **crossentropy** and **mean squared error** loss functions are used for classification and regression problems, respectively.\n",
    "\n",
    "### Gradient based learning\n",
chadhat's avatar
chadhat committed
    "As mentioned above, once we have decided upon a loss function, we want to solve an **optimization problem** which minimizes this loss by updating the weights of the network. This is how learning happens in a NN.\n",
chadhat's avatar
chadhat committed
    "\n",
chadhat's avatar
chadhat committed
    "The most popular optimization methods used in Neural Network training are some **Gradient-descent (GD)** type methods, such as gradient-descent, RMSprop and Adam. \n",
chadhat's avatar
chadhat committed
    "**Gradient-descent** uses partial derivatives of the loss function with respect to the network weights and a learning rate to updates the weights such that the loss function decreases and hopefully after some iterations reaches its (Global) minimum.\n",
    "\n",
chadhat's avatar
chadhat committed
    "First, the loss function and its derivative are computed at the output node, and this signal is propagated backwards, using the chain rule, in the network to compute the partial derivatives. Hence, this method is called **Backpropagation**.\n",
chadhat's avatar
chadhat committed
    "\n",
chadhat's avatar
chadhat committed
    "One way to perform a single GD pass is to compute the partial derivatives using all the samples in our data, computing average derivatives and using them to update the weights. This is called **Batch gradient descent**. However, in deep learning we mostly work with very big datasets and using batch gradient descent can make the training very slow!\n",
chadhat's avatar
chadhat committed
    "The other extreme is to randomly shuffle the dataset and advance a pass of GD with the gradients computed using only **one** sample at a time. This is called **Stochastic gradient descent**.\n",
    "\n",
    "In practice, an approach in-between these two is used. The entire dataset is divided into **m** batches and these are used one by one to compute the derivatives and apply GD. This technique is called **Mini-batch gradient descent**. \n",
    "\n",
    "One pass through the entire training dataset is called **1 epoch** of training.\n",
    "\n",
    "\n",
chadhat's avatar
chadhat committed
    "### Activation Functions\n",
    "\n",
    "In order to train the network we need to change Perceptron's **step** activation function as it does not allow training using the back-propagation algorithm among other drawbacks.\n",
    "\n",
    "Non-Linear functions such as:\n",
    "\n",
    "* ReLU (Rectified linear unit)\n",
    "\n",
    "\\begin{equation*}\n",
    "f(z) = \\mathrm{max}(0,z)\n",
    "\\end{equation*}\n",
    "\n",
    "* Sigmoid\n",
    "\n",
    "\\begin{equation*}\n",
    "f(z) = \\frac{1}{1+e^{-z}}\n",
    "\\end{equation*}\n",
    "\n",
    "* tanh\n",
    "\n",
    "\\begin{equation*}\n",
    "f(z) = \\frac{e^{z} - e^{-z}}{e^{z} + e^{-z}}\n",
    "\\end{equation*}\n",
    "\n",
    "\n",
    "are some of the most popular choices used as activation functions.\n",
    "\n",
    "Linear activations are **NOT** used because it can be mathematically shown that if linear activations are used then output is just a linear function of the input. So adding any number of hidden layers does not help to learn interesting functions.\n",
    "\n",
    "Non-linear activation functions allow the network to learn more complex representations."
chadhat's avatar
chadhat committed
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe71452e0b8>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
chadhat's avatar
chadhat committed
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "plt.figure(figsize=(10, 4))\n",
chadhat's avatar
chadhat committed
    "\n",
    "pts=np.arange(-20,20, 0.1)\n",
    "\n",
    "plt.subplot(1, 3, 1)\n",
chadhat's avatar
chadhat committed
    "# Sigmoid\n",
    "plt.plot(pts, 1/(1+np.exp(-pts))) ;\n",
    "\n",
    "plt.subplot(1, 3, 2)\n",
chadhat's avatar
chadhat committed
    "# tanh\n",
    "plt.plot(pts, np.tanh(pts*np.pi)) ;\n",
chadhat's avatar
chadhat committed
    "\n",
    "# Rectified linear unit (ReLu)\n",
    "plt.subplot(1, 3, 3)\n",
chadhat's avatar
chadhat committed
    "pts_relu=[max(0,i) for i in pts];\n",
    "plt.plot(pts, pts_relu) ;"
chadhat's avatar
chadhat committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Introduction to Keras"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### What is Keras?\n",
chadhat's avatar
chadhat committed
    "\n",
    "* It is a high level API to create and work with neural networks\n",
    "* Supports multiple backends such as TensorFlow from Google, Theano (Although Theano is dead now) and CNTK (Microsoft Cognitive Toolkit)\n",
    "* Very good for creating neural nets very quickly and hides away a lot of tedious work\n",
    "* Has been incorporated into official TensorFlow (which obviously only works with tensforflow) and as of TensorFlow 2.0 this will the main api to use TensorFlow (check reference)\n"
chadhat's avatar
chadhat committed
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_1 (Dense)              (None, 4)                 36        \n",
      "_________________________________________________________________\n",
      "activation_1 (Activation)    (None, 4)                 0         \n",
      "_________________________________________________________________\n",
      "dense_2 (Dense)              (None, 4)                 20        \n",
      "_________________________________________________________________\n",
      "dense_3 (Dense)              (None, 1)                 5         \n",
      "_________________________________________________________________\n",
      "activation_2 (Activation)    (None, 1)                 0         \n",
      "=================================================================\n",
      "Total params: 61\n",
      "Trainable params: 61\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
chadhat's avatar
chadhat committed
   "source": [
    "# Say hello to keras\n",
    "\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense, Activation\n",
    "\n",
    "# Creating a model\n",
    "model = Sequential()\n",
    "\n",
    "# Adding layers to this model\n",
    "# 1st Hidden layer\n",
    "# A Dense/fully-connected layer which takes as input a \n",
    "# feature array of shape (samples, num_features)\n",
    "# Here input_shape = (8,) means that the layer expects an input with num_features = 8 \n",
    "# and the sample size could be anything\n",
    "# Then we specify an activation function\n",
    "model.add(Dense(units=4, input_shape=(8,)))\n",
chadhat's avatar
chadhat committed
    "model.add(Activation(\"relu\"))\n",
    "\n",
    "# 2nd Hidden layer\n",
    "# This is also a fully-connected layer and we do not need to specify the\n",
    "# shape of the input anymore (We need to do that only for the first layer)\n",
chadhat's avatar
chadhat committed
    "# NOTE: Now we didn't add the activation seperately. Instead we just added it\n",
    "# while calling Dense(). This and the way used for the first layer are Equivalent!\n",
    "model.add(Dense(units=4, activation=\"relu\"))\n",
    "\n",
    "          \n",
chadhat's avatar
chadhat committed
    "# The output layer\n",
    "model.add(Dense(units=1))\n",
    "model.add(Activation(\"sigmoid\"))\n",
    "\n",
    "model.summary()"
   ]
  },
chadhat's avatar
chadhat committed
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### XOR using neural networks"
   ]
  },
chadhat's avatar
chadhat committed
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 14,
chadhat's avatar
chadhat committed
   "metadata": {},
   "outputs": [],
chadhat's avatar
chadhat committed
   "source": [
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.model_selection import train_test_split\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense\n",
    "import numpy as np"
chadhat's avatar
chadhat committed
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe736cb4160>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
chadhat's avatar
chadhat committed
   "source": [
    "# Creating a network to solve the XOR problem\n",
chadhat's avatar
chadhat committed
    "\n",
    "# Loading and plotting the data\n",
    "xor = pd.read_csv(\"xor.csv\")\n",
chadhat's avatar
chadhat committed
    "\n",
    "# Using x and y coordinates as featues\n",
    "features = xor.iloc[:, :-1]\n",
    "# Convert boolean to integer values (True->1 and False->0)\n",
    "labels = xor.iloc[:, -1].astype(int)\n",
chadhat's avatar
chadhat committed
    "\n",
    "colors = [[\"steelblue\", \"chocolate\"][i] for i in xor[\"label\"]]\n",
    "plt.figure(figsize=(5, 5))\n",
    "plt.xlim([-2, 2])\n",
    "plt.ylim([-2, 2])\n",
    "plt.title(\"Blue points are False\")\n",
    "\n",
    "\n",
chadhat's avatar
chadhat committed
    "plt.scatter(features[\"x\"], features[\"y\"], color=colors, marker=\"o\") ;"
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Building a Keras model\n",
    "def a_simple_NN():\n",
    "    \n",
    "    model = Sequential()\n",
    "    model.add(Dense(4, input_shape = (2,), activation = \"relu\"))\n",
    "\n",
    "    model.add(Dense(4, activation = \"relu\"))\n",
    "\n",
    "    model.add(Dense(1, activation = \"sigmoid\"))\n",
    "\n",
    "    model.compile(loss=\"binary_crossentropy\", optimizer=\"rmsprop\", metrics=[\"accuracy\"])\n",
    "    \n",
    "    return model"
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 350 samples, validate on 150 samples\n",
      "Epoch 1/300\n",
      "350/350 [==============================] - 0s 1ms/step - loss: 0.8080 - acc: 0.4886 - val_loss: 0.8082 - val_acc: 0.4600\n",
      "Epoch 2/300\n",
      "350/350 [==============================] - 0s 92us/step - loss: 0.7893 - acc: 0.4800 - val_loss: 0.7937 - val_acc: 0.4533\n",
      "Epoch 3/300\n",
      "350/350 [==============================] - 0s 104us/step - loss: 0.7744 - acc: 0.4771 - val_loss: 0.7807 - val_acc: 0.4400\n",
      "Epoch 4/300\n",
      "350/350 [==============================] - 0s 71us/step - loss: 0.7610 - acc: 0.4686 - val_loss: 0.7687 - val_acc: 0.4133\n",
      "Epoch 5/300\n",
      "350/350 [==============================] - 0s 60us/step - loss: 0.7487 - acc: 0.4457 - val_loss: 0.7580 - val_acc: 0.4067\n",
      "Epoch 6/300\n",
      "350/350 [==============================] - 0s 61us/step - loss: 0.7369 - acc: 0.4343 - val_loss: 0.7469 - val_acc: 0.4133\n",
      "Epoch 7/300\n",
      "350/350 [==============================] - 0s 62us/step - loss: 0.7254 - acc: 0.4314 - val_loss: 0.7366 - val_acc: 0.4067\n",
      "Epoch 8/300\n",
      "350/350 [==============================] - 0s 58us/step - loss: 0.7143 - acc: 0.4286 - val_loss: 0.7269 - val_acc: 0.4000\n",
      "Epoch 9/300\n",
      "350/350 [==============================] - 0s 61us/step - loss: 0.7035 - acc: 0.4314 - val_loss: 0.7171 - val_acc: 0.4067\n",
      "Epoch 10/300\n",
      "350/350 [==============================] - 0s 94us/step - loss: 0.6932 - acc: 0.4743 - val_loss: 0.7080 - val_acc: 0.4400\n",
      "Epoch 11/300\n",
      "350/350 [==============================] - 0s 64us/step - loss: 0.6828 - acc: 0.5086 - val_loss: 0.6983 - val_acc: 0.4933\n",
      "Epoch 12/300\n",
      "350/350 [==============================] - 0s 74us/step - loss: 0.6725 - acc: 0.5600 - val_loss: 0.6885 - val_acc: 0.5333\n",
      "Epoch 13/300\n",
      "350/350 [==============================] - 0s 223us/step - loss: 0.6623 - acc: 0.6200 - val_loss: 0.6793 - val_acc: 0.5533\n",
      "Epoch 14/300\n",
      "350/350 [==============================] - 0s 257us/step - loss: 0.6528 - acc: 0.6543 - val_loss: 0.6709 - val_acc: 0.5667\n",
      "Epoch 15/300\n",
      "350/350 [==============================] - 0s 125us/step - loss: 0.6435 - acc: 0.6714 - val_loss: 0.6628 - val_acc: 0.5800\n",
      "Epoch 16/300\n",
      "350/350 [==============================] - 0s 158us/step - loss: 0.6344 - acc: 0.6886 - val_loss: 0.6545 - val_acc: 0.6067\n",
      "Epoch 17/300\n",
      "350/350 [==============================] - 0s 161us/step - loss: 0.6252 - acc: 0.6971 - val_loss: 0.6463 - val_acc: 0.6400\n",
      "Epoch 18/300\n",
      "350/350 [==============================] - 0s 215us/step - loss: 0.6167 - acc: 0.7314 - val_loss: 0.6391 - val_acc: 0.6667\n",
      "Epoch 19/300\n",
      "350/350 [==============================] - 0s 105us/step - loss: 0.6083 - acc: 0.7400 - val_loss: 0.6317 - val_acc: 0.6867\n",
      "Epoch 20/300\n",
      "350/350 [==============================] - 0s 183us/step - loss: 0.5999 - acc: 0.7657 - val_loss: 0.6240 - val_acc: 0.7267\n",
      "Epoch 21/300\n",
      "350/350 [==============================] - 0s 74us/step - loss: 0.5920 - acc: 0.7886 - val_loss: 0.6170 - val_acc: 0.7267\n",
      "Epoch 22/300\n",
      "350/350 [==============================] - 0s 164us/step - loss: 0.5842 - acc: 0.8114 - val_loss: 0.6103 - val_acc: 0.7667\n",
      "Epoch 23/300\n",
      "350/350 [==============================] - 0s 85us/step - loss: 0.5768 - acc: 0.8229 - val_loss: 0.6039 - val_acc: 0.8067\n",
      "Epoch 24/300\n",
      "350/350 [==============================] - 0s 80us/step - loss: 0.5691 - acc: 0.8314 - val_loss: 0.5972 - val_acc: 0.8200\n",
      "Epoch 25/300\n",
      "350/350 [==============================] - 0s 208us/step - loss: 0.5614 - acc: 0.8343 - val_loss: 0.5904 - val_acc: 0.8133\n",
      "Epoch 26/300\n",
      "350/350 [==============================] - 0s 191us/step - loss: 0.5538 - acc: 0.8343 - val_loss: 0.5837 - val_acc: 0.8133\n",
      "Epoch 27/300\n",
      "350/350 [==============================] - 0s 330us/step - loss: 0.5460 - acc: 0.8400 - val_loss: 0.5770 - val_acc: 0.8133\n",
      "Epoch 28/300\n",
      "350/350 [==============================] - 0s 93us/step - loss: 0.5384 - acc: 0.8457 - val_loss: 0.5706 - val_acc: 0.8200\n",
      "Epoch 29/300\n",
      "350/350 [==============================] - 0s 140us/step - loss: 0.5309 - acc: 0.8514 - val_loss: 0.5641 - val_acc: 0.8267\n",
      "Epoch 30/300\n",
      "350/350 [==============================] - 0s 79us/step - loss: 0.5234 - acc: 0.8600 - val_loss: 0.5575 - val_acc: 0.8267\n",
      "Epoch 31/300\n",
      "350/350 [==============================] - 0s 72us/step - loss: 0.5160 - acc: 0.8571 - val_loss: 0.5509 - val_acc: 0.8333\n",
      "Epoch 32/300\n",
      "350/350 [==============================] - 0s 67us/step - loss: 0.5084 - acc: 0.8600 - val_loss: 0.5439 - val_acc: 0.8333\n",
      "Epoch 33/300\n",
      "350/350 [==============================] - 0s 76us/step - loss: 0.5009 - acc: 0.8657 - val_loss: 0.5373 - val_acc: 0.8333\n",
      "Epoch 34/300\n",
      "350/350 [==============================] - 0s 68us/step - loss: 0.4933 - acc: 0.8629 - val_loss: 0.5306 - val_acc: 0.8333\n",
      "Epoch 35/300\n",
      "350/350 [==============================] - 0s 78us/step - loss: 0.4858 - acc: 0.8657 - val_loss: 0.5238 - val_acc: 0.8400\n",
      "Epoch 36/300\n",
      "350/350 [==============================] - 0s 76us/step - loss: 0.4780 - acc: 0.8657 - val_loss: 0.5167 - val_acc: 0.8400\n",
      "Epoch 37/300\n",
      "350/350 [==============================] - 0s 82us/step - loss: 0.4702 - acc: 0.8714 - val_loss: 0.5096 - val_acc: 0.8400\n",
      "Epoch 38/300\n",
      "350/350 [==============================] - 0s 72us/step - loss: 0.4620 - acc: 0.8714 - val_loss: 0.5022 - val_acc: 0.8400\n",
      "Epoch 39/300\n",
      "350/350 [==============================] - 0s 84us/step - loss: 0.4538 - acc: 0.8743 - val_loss: 0.4949 - val_acc: 0.8400\n",
      "Epoch 40/300\n",
      "350/350 [==============================] - 0s 270us/step - loss: 0.4455 - acc: 0.8800 - val_loss: 0.4874 - val_acc: 0.8400\n",
      "Epoch 41/300\n",
      "350/350 [==============================] - 0s 76us/step - loss: 0.4378 - acc: 0.8829 - val_loss: 0.4800 - val_acc: 0.8467\n",
      "Epoch 42/300\n",
      "350/350 [==============================] - 0s 195us/step - loss: 0.4297 - acc: 0.8914 - val_loss: 0.4723 - val_acc: 0.8467\n",
      "Epoch 43/300\n",
      "350/350 [==============================] - 0s 255us/step - loss: 0.4219 - acc: 0.8914 - val_loss: 0.4651 - val_acc: 0.8467\n",
      "Epoch 44/300\n",
      "350/350 [==============================] - 0s 115us/step - loss: 0.4142 - acc: 0.8914 - val_loss: 0.4577 - val_acc: 0.8533\n",
      "Epoch 45/300\n",
      "350/350 [==============================] - 0s 138us/step - loss: 0.4067 - acc: 0.9000 - val_loss: 0.4506 - val_acc: 0.8600\n",
      "Epoch 46/300\n",
      "350/350 [==============================] - 0s 232us/step - loss: 0.3998 - acc: 0.8971 - val_loss: 0.4441 - val_acc: 0.8600\n",
      "Epoch 47/300\n",
      "350/350 [==============================] - 0s 211us/step - loss: 0.3922 - acc: 0.9000 - val_loss: 0.4371 - val_acc: 0.8667\n",
      "Epoch 48/300\n",
      "350/350 [==============================] - 0s 201us/step - loss: 0.3847 - acc: 0.9114 - val_loss: 0.4300 - val_acc: 0.8667\n",
      "Epoch 49/300\n",
      "350/350 [==============================] - 0s 236us/step - loss: 0.3774 - acc: 0.9057 - val_loss: 0.4231 - val_acc: 0.8667\n",
      "Epoch 50/300\n",
      "350/350 [==============================] - 0s 155us/step - loss: 0.3700 - acc: 0.9114 - val_loss: 0.4160 - val_acc: 0.8667\n",
      "Epoch 51/300\n",
      "350/350 [==============================] - 0s 325us/step - loss: 0.3626 - acc: 0.9171 - val_loss: 0.4100 - val_acc: 0.8667\n",
      "Epoch 52/300\n",
      "350/350 [==============================] - 0s 130us/step - loss: 0.3555 - acc: 0.9114 - val_loss: 0.4031 - val_acc: 0.8667\n",
      "Epoch 53/300\n",
      "350/350 [==============================] - 0s 124us/step - loss: 0.3489 - acc: 0.9229 - val_loss: 0.3968 - val_acc: 0.8667\n",
      "Epoch 54/300\n",
      "350/350 [==============================] - 0s 109us/step - loss: 0.3422 - acc: 0.9257 - val_loss: 0.3905 - val_acc: 0.8733\n",
      "Epoch 55/300\n",
      "350/350 [==============================] - 0s 100us/step - loss: 0.3356 - acc: 0.9257 - val_loss: 0.3842 - val_acc: 0.8733\n",
      "Epoch 56/300\n",
      "350/350 [==============================] - 0s 61us/step - loss: 0.3291 - acc: 0.9257 - val_loss: 0.3781 - val_acc: 0.8733\n",
      "Epoch 57/300\n",
      "350/350 [==============================] - 0s 75us/step - loss: 0.3225 - acc: 0.9257 - val_loss: 0.3719 - val_acc: 0.8800\n",
      "Epoch 58/300\n",
      "350/350 [==============================] - 0s 90us/step - loss: 0.3160 - acc: 0.9257 - val_loss: 0.3655 - val_acc: 0.8800\n",
      "Epoch 59/300\n",
      "350/350 [==============================] - 0s 73us/step - loss: 0.3096 - acc: 0.9314 - val_loss: 0.3596 - val_acc: 0.8800\n",
      "Epoch 60/300\n",
      "350/350 [==============================] - 0s 76us/step - loss: 0.3036 - acc: 0.9314 - val_loss: 0.3541 - val_acc: 0.8800\n",
      "Epoch 61/300\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "350/350 [==============================] - 0s 90us/step - loss: 0.2978 - acc: 0.9371 - val_loss: 0.3487 - val_acc: 0.8800\n",
      "Epoch 62/300\n",
      "350/350 [==============================] - 0s 116us/step - loss: 0.2921 - acc: 0.9343 - val_loss: 0.3434 - val_acc: 0.8800\n",
      "Epoch 63/300\n",
      "350/350 [==============================] - 0s 93us/step - loss: 0.2866 - acc: 0.9343 - val_loss: 0.3380 - val_acc: 0.8800\n",
      "Epoch 64/300\n",
      "350/350 [==============================] - 0s 113us/step - loss: 0.2808 - acc: 0.9343 - val_loss: 0.3329 - val_acc: 0.8800\n",
      "Epoch 65/300\n",
      "350/350 [==============================] - 0s 99us/step - loss: 0.2757 - acc: 0.9371 - val_loss: 0.3276 - val_acc: 0.8800\n",
      "Epoch 66/300\n",
      "350/350 [==============================] - 0s 87us/step - loss: 0.2704 - acc: 0.9371 - val_loss: 0.3226 - val_acc: 0.8800\n",
      "Epoch 67/300\n",
      "350/350 [==============================] - 0s 77us/step - loss: 0.2657 - acc: 0.9371 - val_loss: 0.3179 - val_acc: 0.8800\n",
      "Epoch 68/300\n",
      "350/350 [==============================] - 0s 73us/step - loss: 0.2604 - acc: 0.9429 - val_loss: 0.3135 - val_acc: 0.8733\n",
      "Epoch 69/300\n",
      "350/350 [==============================] - 0s 78us/step - loss: 0.2563 - acc: 0.9457 - val_loss: 0.3096 - val_acc: 0.8733\n",
      "Epoch 70/300\n",
      "350/350 [==============================] - 0s 75us/step - loss: 0.2515 - acc: 0.9514 - val_loss: 0.3050 - val_acc: 0.8733\n",
      "Epoch 71/300\n",
      "350/350 [==============================] - 0s 65us/step - loss: 0.2469 - acc: 0.9457 - val_loss: 0.3003 - val_acc: 0.8733\n",
      "Epoch 72/300\n",
      "350/350 [==============================] - 0s 89us/step - loss: 0.2424 - acc: 0.9514 - val_loss: 0.2961 - val_acc: 0.8733\n",
      "Epoch 73/300\n",
      "350/350 [==============================] - 0s 63us/step - loss: 0.2384 - acc: 0.9514 - val_loss: 0.2919 - val_acc: 0.8733\n",
      "Epoch 74/300\n",
      "350/350 [==============================] - 0s 89us/step - loss: 0.2337 - acc: 0.9514 - val_loss: 0.2877 - val_acc: 0.8733\n",
      "Epoch 75/300\n",
      "350/350 [==============================] - 0s 132us/step - loss: 0.2297 - acc: 0.9514 - val_loss: 0.2835 - val_acc: 0.8733\n",
      "Epoch 76/300\n",
      "350/350 [==============================] - 0s 130us/step - loss: 0.2256 - acc: 0.9514 - val_loss: 0.2798 - val_acc: 0.8733\n",
      "Epoch 77/300\n",
      "350/350 [==============================] - 0s 99us/step - loss: 0.2217 - acc: 0.9514 - val_loss: 0.2759 - val_acc: 0.8733\n",
      "Epoch 78/300\n",
      "350/350 [==============================] - 0s 156us/step - loss: 0.2178 - acc: 0.9514 - val_loss: 0.2723 - val_acc: 0.8667\n",
      "Epoch 79/300\n",
      "350/350 [==============================] - 0s 161us/step - loss: 0.2141 - acc: 0.9543 - val_loss: 0.2687 - val_acc: 0.8733\n",
      "Epoch 80/300\n",
      "350/350 [==============================] - 0s 87us/step - loss: 0.2100 - acc: 0.9543 - val_loss: 0.2647 - val_acc: 0.8733\n",
      "Epoch 81/300\n",
      "350/350 [==============================] - 0s 118us/step - loss: 0.2062 - acc: 0.9543 - val_loss: 0.2604 - val_acc: 0.8733\n",
      "Epoch 82/300\n",
      "350/350 [==============================] - 0s 90us/step - loss: 0.2026 - acc: 0.9571 - val_loss: 0.2569 - val_acc: 0.8733\n",
      "Epoch 83/300\n",
      "350/350 [==============================] - 0s 79us/step - loss: 0.1989 - acc: 0.9571 - val_loss: 0.2534 - val_acc: 0.8733\n",
      "Epoch 84/300\n",
      "350/350 [==============================] - 0s 96us/step - loss: 0.1952 - acc: 0.9571 - val_loss: 0.2497 - val_acc: 0.8733\n",
      "Epoch 85/300\n",
      "350/350 [==============================] - 0s 154us/step - loss: 0.1920 - acc: 0.9571 - val_loss: 0.2462 - val_acc: 0.8733\n",
      "Epoch 86/300\n",
      "350/350 [==============================] - 0s 99us/step - loss: 0.1889 - acc: 0.9571 - val_loss: 0.2437 - val_acc: 0.8733\n",
      "Epoch 87/300\n",
      "350/350 [==============================] - 0s 231us/step - loss: 0.1861 - acc: 0.9571 - val_loss: 0.2405 - val_acc: 0.8733\n",
      "Epoch 88/300\n",
      "350/350 [==============================] - 0s 188us/step - loss: 0.1829 - acc: 0.9571 - val_loss: 0.2372 - val_acc: 0.8733\n",
      "Epoch 89/300\n",
      "350/350 [==============================] - 0s 80us/step - loss: 0.1798 - acc: 0.9571 - val_loss: 0.2335 - val_acc: 0.8733\n",
      "Epoch 90/300\n",
      "350/350 [==============================] - 0s 118us/step - loss: 0.1771 - acc: 0.9571 - val_loss: 0.2305 - val_acc: 0.8800\n",
      "Epoch 91/300\n",
      "350/350 [==============================] - 0s 126us/step - loss: 0.1742 - acc: 0.9571 - val_loss: 0.2272 - val_acc: 0.8800\n",
      "Epoch 92/300\n",
      "350/350 [==============================] - 0s 67us/step - loss: 0.1714 - acc: 0.9571 - val_loss: 0.2247 - val_acc: 0.8800\n",
      "Epoch 93/300\n",
      "350/350 [==============================] - 0s 50us/step - loss: 0.1690 - acc: 0.9543 - val_loss: 0.2217 - val_acc: 0.8867\n",
      "Epoch 94/300\n",
      "350/350 [==============================] - 0s 64us/step - loss: 0.1661 - acc: 0.9571 - val_loss: 0.2190 - val_acc: 0.8867\n",
      "Epoch 95/300\n",
      "350/350 [==============================] - 0s 50us/step - loss: 0.1637 - acc: 0.9600 - val_loss: 0.2165 - val_acc: 0.8800\n",
      "Epoch 96/300\n",
      "350/350 [==============================] - 0s 62us/step - loss: 0.1613 - acc: 0.9571 - val_loss: 0.2131 - val_acc: 0.8867\n",
      "Epoch 97/300\n",
      "350/350 [==============================] - 0s 59us/step - loss: 0.1589 - acc: 0.9600 - val_loss: 0.2101 - val_acc: 0.8867\n",
      "Epoch 98/300\n",
      "350/350 [==============================] - 0s 83us/step - loss: 0.1565 - acc: 0.9600 - val_loss: 0.2073 - val_acc: 0.8867\n",
      "Epoch 99/300\n",
      "350/350 [==============================] - 0s 53us/step - loss: 0.1543 - acc: 0.9600 - val_loss: 0.2050 - val_acc: 0.8867\n",
      "Epoch 100/300\n",
      "350/350 [==============================] - 0s 55us/step - loss: 0.1521 - acc: 0.9600 - val_loss: 0.2026 - val_acc: 0.8867\n",
      "Epoch 101/300\n",
      "350/350 [==============================] - 0s 88us/step - loss: 0.1501 - acc: 0.9629 - val_loss: 0.2011 - val_acc: 0.8867\n",
      "Epoch 102/300\n",
      "350/350 [==============================] - 0s 74us/step - loss: 0.1479 - acc: 0.9600 - val_loss: 0.1982 - val_acc: 0.8867\n",
      "Epoch 103/300\n",
      "350/350 [==============================] - 0s 53us/step - loss: 0.1460 - acc: 0.9629 - val_loss: 0.1960 - val_acc: 0.8867\n",
      "Epoch 104/300\n",
      "350/350 [==============================] - 0s 84us/step - loss: 0.1439 - acc: 0.9629 - val_loss: 0.1939 - val_acc: 0.8933\n",
      "Epoch 105/300\n",
      "350/350 [==============================] - 0s 85us/step - loss: 0.1420 - acc: 0.9629 - val_loss: 0.1920 - val_acc: 0.9000\n",
      "Epoch 106/300\n",
      "350/350 [==============================] - 0s 90us/step - loss: 0.1400 - acc: 0.9629 - val_loss: 0.1889 - val_acc: 0.9000\n",
      "Epoch 107/300\n",
      "350/350 [==============================] - 0s 83us/step - loss: 0.1387 - acc: 0.9629 - val_loss: 0.1876 - val_acc: 0.9000\n",
      "Epoch 108/300\n",
      "350/350 [==============================] - 0s 140us/step - loss: 0.1364 - acc: 0.9629 - val_loss: 0.1857 - val_acc: 0.9067\n",
      "Epoch 109/300\n",
      "350/350 [==============================] - 0s 121us/step - loss: 0.1347 - acc: 0.9657 - val_loss: 0.1831 - val_acc: 0.9067\n",
      "Epoch 110/300\n",
      "350/350 [==============================] - 0s 116us/step - loss: 0.1329 - acc: 0.9657 - val_loss: 0.1815 - val_acc: 0.9067\n",
      "Epoch 111/300\n",
      "350/350 [==============================] - 0s 86us/step - loss: 0.1313 - acc: 0.9657 - val_loss: 0.1798 - val_acc: 0.9133\n",
      "Epoch 112/300\n",
      "350/350 [==============================] - 0s 132us/step - loss: 0.1295 - acc: 0.9657 - val_loss: 0.1783 - val_acc: 0.9067\n",
      "Epoch 113/300\n",
      "350/350 [==============================] - 0s 204us/step - loss: 0.1276 - acc: 0.9714 - val_loss: 0.1762 - val_acc: 0.9067\n",
      "Epoch 114/300\n",
      "350/350 [==============================] - 0s 164us/step - loss: 0.1262 - acc: 0.9714 - val_loss: 0.1748 - val_acc: 0.9000\n",
      "Epoch 115/300\n",
      "350/350 [==============================] - 0s 235us/step - loss: 0.1244 - acc: 0.9771 - val_loss: 0.1735 - val_acc: 0.9133\n",
      "Epoch 116/300\n",
      "350/350 [==============================] - 0s 123us/step - loss: 0.1233 - acc: 0.9714 - val_loss: 0.1716 - val_acc: 0.9267\n",
      "Epoch 117/300\n",
      "350/350 [==============================] - 0s 232us/step - loss: 0.1221 - acc: 0.9743 - val_loss: 0.1699 - val_acc: 0.9267\n",
      "Epoch 118/300\n",
      "350/350 [==============================] - 0s 83us/step - loss: 0.1204 - acc: 0.9743 - val_loss: 0.1680 - val_acc: 0.9267\n",
      "Epoch 119/300\n",
      "350/350 [==============================] - 0s 80us/step - loss: 0.1192 - acc: 0.9743 - val_loss: 0.1663 - val_acc: 0.9267\n",
      "Epoch 120/300\n",
      "350/350 [==============================] - 0s 87us/step - loss: 0.1179 - acc: 0.9771 - val_loss: 0.1654 - val_acc: 0.9267\n",
      "Epoch 121/300\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "350/350 [==============================] - 0s 125us/step - loss: 0.1169 - acc: 0.9771 - val_loss: 0.1647 - val_acc: 0.9267\n",
      "Epoch 122/300\n",
      "350/350 [==============================] - 0s 137us/step - loss: 0.1157 - acc: 0.9743 - val_loss: 0.1633 - val_acc: 0.9267\n",
      "Epoch 123/300\n",
      "350/350 [==============================] - 0s 126us/step - loss: 0.1144 - acc: 0.9771 - val_loss: 0.1615 - val_acc: 0.9267\n",
      "Epoch 124/300\n",
      "350/350 [==============================] - 0s 100us/step - loss: 0.1131 - acc: 0.9743 - val_loss: 0.1599 - val_acc: 0.9267\n",
      "Epoch 125/300\n",
      "350/350 [==============================] - 0s 66us/step - loss: 0.1125 - acc: 0.9771 - val_loss: 0.1592 - val_acc: 0.9267\n",
      "Epoch 126/300\n",
      "350/350 [==============================] - 0s 73us/step - loss: 0.1110 - acc: 0.9771 - val_loss: 0.1586 - val_acc: 0.9267\n",
      "Epoch 127/300\n",
      "350/350 [==============================] - 0s 89us/step - loss: 0.1100 - acc: 0.9771 - val_loss: 0.1564 - val_acc: 0.9267\n",
      "Epoch 128/300\n",
      "350/350 [==============================] - 0s 126us/step - loss: 0.1088 - acc: 0.9771 - val_loss: 0.1547 - val_acc: 0.9267\n",
      "Epoch 129/300\n",
      "350/350 [==============================] - 0s 65us/step - loss: 0.1082 - acc: 0.9771 - val_loss: 0.1538 - val_acc: 0.9267\n",
      "Epoch 130/300\n",
      "350/350 [==============================] - 0s 81us/step - loss: 0.1068 - acc: 0.9771 - val_loss: 0.1529 - val_acc: 0.9267\n",
      "Epoch 131/300\n",
      "350/350 [==============================] - 0s 82us/step - loss: 0.1063 - acc: 0.9771 - val_loss: 0.1517 - val_acc: 0.9267\n",
      "Epoch 132/300\n",
      "350/350 [==============================] - 0s 71us/step - loss: 0.1048 - acc: 0.9771 - val_loss: 0.1519 - val_acc: 0.9200\n",
      "Epoch 133/300\n",
      "350/350 [==============================] - 0s 92us/step - loss: 0.1045 - acc: 0.9771 - val_loss: 0.1507 - val_acc: 0.9200\n",
      "Epoch 134/300\n",
      "350/350 [==============================] - 0s 73us/step - loss: 0.1033 - acc: 0.9771 - val_loss: 0.1490 - val_acc: 0.9200\n",
      "Epoch 135/300\n",
      "350/350 [==============================] - 0s 74us/step - loss: 0.1028 - acc: 0.9771 - val_loss: 0.1488 - val_acc: 0.9200\n",
      "Epoch 136/300\n",
      "350/350 [==============================] - 0s 90us/step - loss: 0.1017 - acc: 0.9771 - val_loss: 0.1476 - val_acc: 0.9267\n",
      "Epoch 137/300\n",
      "350/350 [==============================] - 0s 73us/step - loss: 0.1011 - acc: 0.9771 - val_loss: 0.1463 - val_acc: 0.9267\n",
      "Epoch 138/300\n",
      "350/350 [==============================] - 0s 53us/step - loss: 0.1003 - acc: 0.9771 - val_loss: 0.1450 - val_acc: 0.9333\n",
      "Epoch 139/300\n",
      "350/350 [==============================] - 0s 95us/step - loss: 0.0995 - acc: 0.9743 - val_loss: 0.1454 - val_acc: 0.9267\n",
      "Epoch 140/300\n",
      "350/350 [==============================] - 0s 88us/step - loss: 0.0987 - acc: 0.9771 - val_loss: 0.1441 - val_acc: 0.9333\n",
      "Epoch 141/300\n",
      "350/350 [==============================] - 0s 82us/step - loss: 0.0982 - acc: 0.9771 - val_loss: 0.1431 - val_acc: 0.9333\n",
      "Epoch 142/300\n",
      "350/350 [==============================] - 0s 83us/step - loss: 0.0971 - acc: 0.9771 - val_loss: 0.1433 - val_acc: 0.9333\n",
      "Epoch 143/300\n",
      "350/350 [==============================] - 0s 65us/step - loss: 0.0965 - acc: 0.9743 - val_loss: 0.1435 - val_acc: 0.9267\n",
      "Epoch 144/300\n",
      "350/350 [==============================] - 0s 75us/step - loss: 0.0960 - acc: 0.9771 - val_loss: 0.1415 - val_acc: 0.9333\n",
      "Epoch 145/300\n",
      "350/350 [==============================] - 0s 79us/step - loss: 0.0955 - acc: 0.9771 - val_loss: 0.1407 - val_acc: 0.9333\n",
      "Epoch 146/300\n",
      "350/350 [==============================] - 0s 80us/step - loss: 0.0947 - acc: 0.9771 - val_loss: 0.1405 - val_acc: 0.9333\n",
      "Epoch 147/300\n",
      "350/350 [==============================] - 0s 64us/step - loss: 0.0938 - acc: 0.9800 - val_loss: 0.1381 - val_acc: 0.9333\n",
      "Epoch 148/300\n",
      "350/350 [==============================] - 0s 85us/step - loss: 0.0935 - acc: 0.9771 - val_loss: 0.1376 - val_acc: 0.9333\n",
      "Epoch 149/300\n",
      "350/350 [==============================] - 0s 80us/step - loss: 0.0928 - acc: 0.9771 - val_loss: 0.1367 - val_acc: 0.9333\n",
      "Epoch 150/300\n",
      "350/350 [==============================] - 0s 80us/step - loss: 0.0920 - acc: 0.9771 - val_loss: 0.1365 - val_acc: 0.9333\n",
      "Epoch 151/300\n",
      "350/350 [==============================] - 0s 82us/step - loss: 0.0913 - acc: 0.9800 - val_loss: 0.1357 - val_acc: 0.9467\n",
      "Epoch 152/300\n",
      "350/350 [==============================] - 0s 120us/step - loss: 0.0909 - acc: 0.9800 - val_loss: 0.1348 - val_acc: 0.9467\n",
      "Epoch 153/300\n",
      "350/350 [==============================] - 0s 82us/step - loss: 0.0901 - acc: 0.9800 - val_loss: 0.1332 - val_acc: 0.9533\n",
      "Epoch 154/300\n",
      "350/350 [==============================] - 0s 113us/step - loss: 0.0901 - acc: 0.9771 - val_loss: 0.1334 - val_acc: 0.9467\n",
      "Epoch 155/300\n",
      "350/350 [==============================] - 0s 75us/step - loss: 0.0892 - acc: 0.9771 - val_loss: 0.1346 - val_acc: 0.9467\n",
      "Epoch 156/300\n",
      "350/350 [==============================] - 0s 78us/step - loss: 0.0889 - acc: 0.9800 - val_loss: 0.1333 - val_acc: 0.9467\n",
      "Epoch 157/300\n",
      "350/350 [==============================] - 0s 86us/step - loss: 0.0883 - acc: 0.9800 - val_loss: 0.1326 - val_acc: 0.9467\n",
      "Epoch 158/300\n",
      "350/350 [==============================] - 0s 148us/step - loss: 0.0877 - acc: 0.9800 - val_loss: 0.1332 - val_acc: 0.9467\n",
      "Epoch 159/300\n",
      "350/350 [==============================] - 0s 87us/step - loss: 0.0876 - acc: 0.9800 - val_loss: 0.1323 - val_acc: 0.9467\n",
      "Epoch 160/300\n",
      "350/350 [==============================] - 0s 64us/step - loss: 0.0871 - acc: 0.9800 - val_loss: 0.1307 - val_acc: 0.9467\n",
      "Epoch 161/300\n",
      "350/350 [==============================] - 0s 73us/step - loss: 0.0868 - acc: 0.9800 - val_loss: 0.1303 - val_acc: 0.9467\n",
      "Epoch 162/300\n",
      "350/350 [==============================] - 0s 122us/step - loss: 0.0858 - acc: 0.9800 - val_loss: 0.1292 - val_acc: 0.9533\n",
      "Epoch 163/300\n",
      "350/350 [==============================] - 0s 84us/step - loss: 0.0858 - acc: 0.9743 - val_loss: 0.1301 - val_acc: 0.9467\n",
      "Epoch 164/300\n",
      "350/350 [==============================] - 0s 89us/step - loss: 0.0851 - acc: 0.9771 - val_loss: 0.1296 - val_acc: 0.9467\n",
      "Epoch 165/300\n",
      "350/350 [==============================] - 0s 105us/step - loss: 0.0851 - acc: 0.9800 - val_loss: 0.1288 - val_acc: 0.9467\n",
      "Epoch 166/300\n",
      "350/350 [==============================] - 0s 109us/step - loss: 0.0844 - acc: 0.9800 - val_loss: 0.1283 - val_acc: 0.9467\n",
      "Epoch 167/300\n",
      "350/350 [==============================] - 0s 96us/step - loss: 0.0843 - acc: 0.9800 - val_loss: 0.1287 - val_acc: 0.9467\n",
      "Epoch 168/300\n",
      "350/350 [==============================] - 0s 148us/step - loss: 0.0837 - acc: 0.9800 - val_loss: 0.1272 - val_acc: 0.9467\n",
      "Epoch 169/300\n",
      "350/350 [==============================] - 0s 107us/step - loss: 0.0833 - acc: 0.9771 - val_loss: 0.1268 - val_acc: 0.9533\n",
      "Epoch 170/300\n",
      "350/350 [==============================] - 0s 132us/step - loss: 0.0830 - acc: 0.9771 - val_loss: 0.1269 - val_acc: 0.9467\n",
      "Epoch 171/300\n",
      "350/350 [==============================] - 0s 125us/step - loss: 0.0825 - acc: 0.9771 - val_loss: 0.1269 - val_acc: 0.9467\n",
      "Epoch 172/300\n",
      "350/350 [==============================] - 0s 178us/step - loss: 0.0824 - acc: 0.9800 - val_loss: 0.1262 - val_acc: 0.9533\n",
      "Epoch 173/300\n",
      "350/350 [==============================] - 0s 115us/step - loss: 0.0821 - acc: 0.9771 - val_loss: 0.1261 - val_acc: 0.9467\n",
      "Epoch 174/300\n",
      "350/350 [==============================] - 0s 132us/step - loss: 0.0815 - acc: 0.9829 - val_loss: 0.1255 - val_acc: 0.9533\n",
      "Epoch 175/300\n",
      "350/350 [==============================] - 0s 141us/step - loss: 0.0813 - acc: 0.9800 - val_loss: 0.1252 - val_acc: 0.9533\n",
      "Epoch 176/300\n",
      "350/350 [==============================] - 0s 127us/step - loss: 0.0810 - acc: 0.9771 - val_loss: 0.1251 - val_acc: 0.9533\n",
      "Epoch 177/300\n",
      "350/350 [==============================] - 0s 126us/step - loss: 0.0810 - acc: 0.9771 - val_loss: 0.1251 - val_acc: 0.9533\n",
      "Epoch 178/300\n",
      "350/350 [==============================] - 0s 109us/step - loss: 0.0804 - acc: 0.9800 - val_loss: 0.1239 - val_acc: 0.9533\n",
      "Epoch 179/300\n",
      "350/350 [==============================] - 0s 152us/step - loss: 0.0799 - acc: 0.9800 - val_loss: 0.1238 - val_acc: 0.9533\n",
      "Epoch 180/300\n",
      "350/350 [==============================] - 0s 127us/step - loss: 0.0798 - acc: 0.9771 - val_loss: 0.1236 - val_acc: 0.9533\n",
      "Epoch 181/300\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "350/350 [==============================] - 0s 143us/step - loss: 0.0795 - acc: 0.9771 - val_loss: 0.1236 - val_acc: 0.9533\n",
      "Epoch 182/300\n",
      "350/350 [==============================] - 0s 146us/step - loss: 0.0790 - acc: 0.9800 - val_loss: 0.1233 - val_acc: 0.9533\n",
      "Epoch 183/300\n",
      "350/350 [==============================] - 0s 132us/step - loss: 0.0791 - acc: 0.9829 - val_loss: 0.1217 - val_acc: 0.9533\n",
      "Epoch 184/300\n",
      "350/350 [==============================] - 0s 126us/step - loss: 0.0786 - acc: 0.9800 - val_loss: 0.1219 - val_acc: 0.9533\n",
      "Epoch 185/300\n",
      "350/350 [==============================] - 0s 102us/step - loss: 0.0786 - acc: 0.9771 - val_loss: 0.1221 - val_acc: 0.9533\n",
      "Epoch 186/300\n",
      "350/350 [==============================] - 0s 95us/step - loss: 0.0779 - acc: 0.9800 - val_loss: 0.1218 - val_acc: 0.9533\n",
      "Epoch 187/300\n",
      "350/350 [==============================] - 0s 106us/step - loss: 0.0780 - acc: 0.9800 - val_loss: 0.1215 - val_acc: 0.9533\n",
      "Epoch 188/300\n",
      "350/350 [==============================] - 0s 136us/step - loss: 0.0777 - acc: 0.9800 - val_loss: 0.1209 - val_acc: 0.9533\n",
      "Epoch 189/300\n",
      "350/350 [==============================] - 0s 88us/step - loss: 0.0778 - acc: 0.9800 - val_loss: 0.1206 - val_acc: 0.9533\n",
      "Epoch 190/300\n",
      "350/350 [==============================] - 0s 90us/step - loss: 0.0769 - acc: 0.9829 - val_loss: 0.1199 - val_acc: 0.9533\n",
      "Epoch 191/300\n",
      "350/350 [==============================] - 0s 124us/step - loss: 0.0769 - acc: 0.9771 - val_loss: 0.1210 - val_acc: 0.9533\n",
      "Epoch 192/300\n",
      "350/350 [==============================] - 0s 95us/step - loss: 0.0764 - acc: 0.9829 - val_loss: 0.1192 - val_acc: 0.9533\n",
      "Epoch 193/300\n",
      "350/350 [==============================] - 0s 88us/step - loss: 0.0766 - acc: 0.9800 - val_loss: 0.1189 - val_acc: 0.9533\n",
      "Epoch 194/300\n",
      "350/350 [==============================] - 0s 94us/step - loss: 0.0766 - acc: 0.9800 - val_loss: 0.1191 - val_acc: 0.9533\n",
      "Epoch 195/300\n",
      "350/350 [==============================] - 0s 84us/step - loss: 0.0760 - acc: 0.9771 - val_loss: 0.1191 - val_acc: 0.9533\n",
      "Epoch 196/300\n",
      "350/350 [==============================] - 0s 111us/step - loss: 0.0758 - acc: 0.9800 - val_loss: 0.1190 - val_acc: 0.9533\n",
      "Epoch 197/300\n",
      "350/350 [==============================] - 0s 187us/step - loss: 0.0754 - acc: 0.9771 - val_loss: 0.1190 - val_acc: 0.9533\n",
      "Epoch 198/300\n",
      "350/350 [==============================] - 0s 114us/step - loss: 0.0753 - acc: 0.9800 - val_loss: 0.1184 - val_acc: 0.9533\n",
      "Epoch 199/300\n",
      "350/350 [==============================] - 0s 147us/step - loss: 0.0755 - acc: 0.9829 - val_loss: 0.1182 - val_acc: 0.9533\n",
      "Epoch 200/300\n",
      "350/350 [==============================] - 0s 96us/step - loss: 0.0748 - acc: 0.9800 - val_loss: 0.1192 - val_acc: 0.9533\n",
      "Epoch 201/300\n",
      "350/350 [==============================] - 0s 176us/step - loss: 0.0751 - acc: 0.9800 - val_loss: 0.1181 - val_acc: 0.9533\n",
      "Epoch 202/300\n",
      "350/350 [==============================] - 0s 124us/step - loss: 0.0742 - acc: 0.9800 - val_loss: 0.1173 - val_acc: 0.9533\n",
      "Epoch 203/300\n",
      "350/350 [==============================] - 0s 114us/step - loss: 0.0743 - acc: 0.9771 - val_loss: 0.1169 - val_acc: 0.9533\n",
      "Epoch 204/300\n",
      "350/350 [==============================] - 0s 92us/step - loss: 0.0742 - acc: 0.9829 - val_loss: 0.1155 - val_acc: 0.9600\n",
      "Epoch 205/300\n",
      "350/350 [==============================] - 0s 101us/step - loss: 0.0738 - acc: 0.9800 - val_loss: 0.1158 - val_acc: 0.9600\n",
      "Epoch 206/300\n",
      "350/350 [==============================] - 0s 101us/step - loss: 0.0737 - acc: 0.9800 - val_loss: 0.1163 - val_acc: 0.9600\n",
      "Epoch 207/300\n",
      "350/350 [==============================] - 0s 99us/step - loss: 0.0735 - acc: 0.9771 - val_loss: 0.1166 - val_acc: 0.9533\n",
      "Epoch 208/300\n",
      "350/350 [==============================] - 0s 92us/step - loss: 0.0734 - acc: 0.9771 - val_loss: 0.1168 - val_acc: 0.9533\n",
      "Epoch 209/300\n",
      "350/350 [==============================] - 0s 78us/step - loss: 0.0733 - acc: 0.9800 - val_loss: 0.1157 - val_acc: 0.9600\n",
      "Epoch 210/300\n",
      "350/350 [==============================] - 0s 69us/step - loss: 0.0731 - acc: 0.9800 - val_loss: 0.1152 - val_acc: 0.9600\n",
      "Epoch 211/300\n",
      "350/350 [==============================] - 0s 77us/step - loss: 0.0727 - acc: 0.9829 - val_loss: 0.1147 - val_acc: 0.9600\n",
      "Epoch 212/300\n",
      "350/350 [==============================] - 0s 88us/step - loss: 0.0726 - acc: 0.9829 - val_loss: 0.1141 - val_acc: 0.9600\n",
      "Epoch 213/300\n",
      "350/350 [==============================] - 0s 64us/step - loss: 0.0724 - acc: 0.9800 - val_loss: 0.1149 - val_acc: 0.9600\n",
      "Epoch 214/300\n",
      "350/350 [==============================] - 0s 75us/step - loss: 0.0723 - acc: 0.9771 - val_loss: 0.1153 - val_acc: 0.9600\n",
      "Epoch 215/300\n",
      "350/350 [==============================] - 0s 148us/step - loss: 0.0720 - acc: 0.9800 - val_loss: 0.1159 - val_acc: 0.9533\n",
      "Epoch 216/300\n",
      "350/350 [==============================] - 0s 116us/step - loss: 0.0721 - acc: 0.9771 - val_loss: 0.1155 - val_acc: 0.9533\n",
      "Epoch 217/300\n",
      "350/350 [==============================] - 0s 72us/step - loss: 0.0714 - acc: 0.9800 - val_loss: 0.1157 - val_acc: 0.9533\n",
      "Epoch 218/300\n",
      "350/350 [==============================] - 0s 102us/step - loss: 0.0716 - acc: 0.9771 - val_loss: 0.1151 - val_acc: 0.9600\n",
      "Epoch 219/300\n",
      "350/350 [==============================] - 0s 74us/step - loss: 0.0718 - acc: 0.9771 - val_loss: 0.1141 - val_acc: 0.9600\n",
      "Epoch 220/300\n",
      "350/350 [==============================] - 0s 177us/step - loss: 0.0713 - acc: 0.9771 - val_loss: 0.1138 - val_acc: 0.9600\n",
      "Epoch 221/300\n",
      "350/350 [==============================] - 0s 122us/step - loss: 0.0714 - acc: 0.9800 - val_loss: 0.1143 - val_acc: 0.9600\n",
      "Epoch 222/300\n",
      "350/350 [==============================] - 0s 113us/step - loss: 0.0709 - acc: 0.9771 - val_loss: 0.1137 - val_acc: 0.9600\n",
      "Epoch 223/300\n",
      "350/350 [==============================] - 0s 79us/step - loss: 0.0710 - acc: 0.9800 - val_loss: 0.1141 - val_acc: 0.9600\n",
      "Epoch 224/300\n",
      "350/350 [==============================] - 0s 94us/step - loss: 0.0707 - acc: 0.9771 - val_loss: 0.1149 - val_acc: 0.9533\n",
      "Epoch 225/300\n",
      "350/350 [==============================] - 0s 60us/step - loss: 0.0707 - acc: 0.9800 - val_loss: 0.1135 - val_acc: 0.9600\n",
      "Epoch 226/300\n",
      "350/350 [==============================] - 0s 68us/step - loss: 0.0706 - acc: 0.9771 - val_loss: 0.1126 - val_acc: 0.9600\n",
      "Epoch 227/300\n",
      "350/350 [==============================] - 0s 65us/step - loss: 0.0703 - acc: 0.9800 - val_loss: 0.1136 - val_acc: 0.9600\n",
      "Epoch 228/300\n",
      "350/350 [==============================] - 0s 78us/step - loss: 0.0700 - acc: 0.9800 - val_loss: 0.1128 - val_acc: 0.9600\n",
      "Epoch 229/300\n",
      "350/350 [==============================] - 0s 92us/step - loss: 0.0701 - acc: 0.9829 - val_loss: 0.1132 - val_acc: 0.9600\n",
      "Epoch 230/300\n",
      "350/350 [==============================] - 0s 106us/step - loss: 0.0698 - acc: 0.9800 - val_loss: 0.1143 - val_acc: 0.9600\n",
      "Epoch 231/300\n",
      "350/350 [==============================] - 0s 155us/step - loss: 0.0702 - acc: 0.9800 - val_loss: 0.1132 - val_acc: 0.9600\n",
      "Epoch 232/300\n",
      "350/350 [==============================] - 0s 175us/step - loss: 0.0695 - acc: 0.9771 - val_loss: 0.1139 - val_acc: 0.9600\n",
      "Epoch 233/300\n",
      "350/350 [==============================] - 0s 115us/step - loss: 0.0694 - acc: 0.9771 - val_loss: 0.1136 - val_acc: 0.9600\n",
      "Epoch 234/300\n",
      "350/350 [==============================] - 0s 95us/step - loss: 0.0694 - acc: 0.9800 - val_loss: 0.1130 - val_acc: 0.9600\n",
      "Epoch 235/300\n",
      "350/350 [==============================] - 0s 133us/step - loss: 0.0694 - acc: 0.9800 - val_loss: 0.1125 - val_acc: 0.9600\n",
      "Epoch 236/300\n",
      "350/350 [==============================] - 0s 145us/step - loss: 0.0691 - acc: 0.9800 - val_loss: 0.1125 - val_acc: 0.9600\n",
      "Epoch 237/300\n",
      "350/350 [==============================] - 0s 177us/step - loss: 0.0689 - acc: 0.9800 - val_loss: 0.1128 - val_acc: 0.9600\n",
      "Epoch 238/300\n",
      "350/350 [==============================] - 0s 107us/step - loss: 0.0692 - acc: 0.9771 - val_loss: 0.1131 - val_acc: 0.9600\n",
      "Epoch 239/300\n",
      "350/350 [==============================] - 0s 123us/step - loss: 0.0689 - acc: 0.9800 - val_loss: 0.1134 - val_acc: 0.9600\n",
      "Epoch 240/300\n",
      "350/350 [==============================] - 0s 108us/step - loss: 0.0688 - acc: 0.9800 - val_loss: 0.1121 - val_acc: 0.9600\n",
      "Epoch 241/300\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "350/350 [==============================] - 0s 102us/step - loss: 0.0685 - acc: 0.9800 - val_loss: 0.1114 - val_acc: 0.9600\n",
      "Epoch 242/300\n",
      "350/350 [==============================] - 0s 89us/step - loss: 0.0682 - acc: 0.9771 - val_loss: 0.1122 - val_acc: 0.9533\n",
      "Epoch 243/300\n",
      "350/350 [==============================] - 0s 88us/step - loss: 0.0689 - acc: 0.9800 - val_loss: 0.1117 - val_acc: 0.9600\n",
      "Epoch 244/300\n",
      "350/350 [==============================] - 0s 106us/step - loss: 0.0682 - acc: 0.9800 - val_loss: 0.1113 - val_acc: 0.9600\n",
      "Epoch 245/300\n",
      "350/350 [==============================] - 0s 82us/step - loss: 0.0681 - acc: 0.9800 - val_loss: 0.1116 - val_acc: 0.9600\n",
      "Epoch 246/300\n",
      "350/350 [==============================] - 0s 152us/step - loss: 0.0682 - acc: 0.9771 - val_loss: 0.1125 - val_acc: 0.9533\n",
      "Epoch 247/300\n",
      "350/350 [==============================] - 0s 90us/step - loss: 0.0679 - acc: 0.9800 - val_loss: 0.1113 - val_acc: 0.9600\n",
      "Epoch 248/300\n",
      "350/350 [==============================] - 0s 86us/step - loss: 0.0678 - acc: 0.9800 - val_loss: 0.1111 - val_acc: 0.9600\n",
      "Epoch 249/300\n",
      "350/350 [==============================] - 0s 84us/step - loss: 0.0677 - acc: 0.9800 - val_loss: 0.1125 - val_acc: 0.9533\n",
      "Epoch 250/300\n",
      "350/350 [==============================] - 0s 100us/step - loss: 0.0678 - acc: 0.9800 - val_loss: 0.1112 - val_acc: 0.9600\n",
      "Epoch 251/300\n",
      "350/350 [==============================] - 0s 148us/step - loss: 0.0675 - acc: 0.9771 - val_loss: 0.1111 - val_acc: 0.9600\n",
      "Epoch 252/300\n",
      "350/350 [==============================] - 0s 90us/step - loss: 0.0673 - acc: 0.9771 - val_loss: 0.1116 - val_acc: 0.9600\n",
      "Epoch 253/300\n",
      "350/350 [==============================] - 0s 103us/step - loss: 0.0672 - acc: 0.9800 - val_loss: 0.1105 - val_acc: 0.9600\n",
      "Epoch 254/300\n",
      "350/350 [==============================] - 0s 73us/step - loss: 0.0674 - acc: 0.9771 - val_loss: 0.1107 - val_acc: 0.9600\n",
      "Epoch 255/300\n",
      "350/350 [==============================] - 0s 151us/step - loss: 0.0672 - acc: 0.9771 - val_loss: 0.1115 - val_acc: 0.9600\n",
      "Epoch 256/300\n",
      "350/350 [==============================] - 0s 113us/step - loss: 0.0671 - acc: 0.9800 - val_loss: 0.1106 - val_acc: 0.9600\n",
      "Epoch 257/300\n",
      "350/350 [==============================] - 0s 72us/step - loss: 0.0671 - acc: 0.9771 - val_loss: 0.1109 - val_acc: 0.9600\n",
      "Epoch 258/300\n",
      "350/350 [==============================] - 0s 111us/step - loss: 0.0667 - acc: 0.9800 - val_loss: 0.1099 - val_acc: 0.9600\n",
      "Epoch 259/300\n",
      "350/350 [==============================] - 0s 145us/step - loss: 0.0669 - acc: 0.9771 - val_loss: 0.1106 - val_acc: 0.9600\n",
      "Epoch 260/300\n",
      "350/350 [==============================] - 0s 127us/step - loss: 0.0664 - acc: 0.9800 - val_loss: 0.1094 - val_acc: 0.9600\n",
      "Epoch 261/300\n",
      "350/350 [==============================] - 0s 69us/step - loss: 0.0668 - acc: 0.9771 - val_loss: 0.1090 - val_acc: 0.9600\n",
      "Epoch 262/300\n",
      "350/350 [==============================] - 0s 112us/step - loss: 0.0665 - acc: 0.9743 - val_loss: 0.1101 - val_acc: 0.9600\n",
      "Epoch 263/300\n",
      "350/350 [==============================] - 0s 98us/step - loss: 0.0664 - acc: 0.9771 - val_loss: 0.1111 - val_acc: 0.9600\n",
      "Epoch 264/300\n",
      "350/350 [==============================] - 0s 86us/step - loss: 0.0662 - acc: 0.9743 - val_loss: 0.1102 - val_acc: 0.9600\n",
      "Epoch 265/300\n",
      "350/350 [==============================] - 0s 110us/step - loss: 0.0662 - acc: 0.9800 - val_loss: 0.1099 - val_acc: 0.9600\n",
      "Epoch 266/300\n",
      "350/350 [==============================] - 0s 96us/step - loss: 0.0661 - acc: 0.9800 - val_loss: 0.1098 - val_acc: 0.9600\n",
      "Epoch 267/300\n",
      "350/350 [==============================] - 0s 109us/step - loss: 0.0662 - acc: 0.9771 - val_loss: 0.1093 - val_acc: 0.9600\n",
      "Epoch 268/300\n",
      "350/350 [==============================] - 0s 122us/step - loss: 0.0658 - acc: 0.9800 - val_loss: 0.1095 - val_acc: 0.9600\n",
      "Epoch 269/300\n",
      "350/350 [==============================] - 0s 98us/step - loss: 0.0661 - acc: 0.9743 - val_loss: 0.1098 - val_acc: 0.9600\n",
      "Epoch 270/300\n",
      "350/350 [==============================] - 0s 192us/step - loss: 0.0664 - acc: 0.9743 - val_loss: 0.1104 - val_acc: 0.9600\n",
      "Epoch 271/300\n",
      "350/350 [==============================] - 0s 138us/step - loss: 0.0657 - acc: 0.9829 - val_loss: 0.1103 - val_acc: 0.9600\n",
      "Epoch 272/300\n",
      "350/350 [==============================] - 0s 94us/step - loss: 0.0654 - acc: 0.9743 - val_loss: 0.1100 - val_acc: 0.9600\n",
      "Epoch 273/300\n",
      "350/350 [==============================] - 0s 92us/step - loss: 0.0657 - acc: 0.9800 - val_loss: 0.1104 - val_acc: 0.9600\n",
      "Epoch 274/300\n",
      "350/350 [==============================] - 0s 85us/step - loss: 0.0655 - acc: 0.9771 - val_loss: 0.1097 - val_acc: 0.9600\n",
      "Epoch 275/300\n",
      "350/350 [==============================] - 0s 96us/step - loss: 0.0649 - acc: 0.9743 - val_loss: 0.1103 - val_acc: 0.9600\n",
      "Epoch 276/300\n",
      "350/350 [==============================] - 0s 171us/step - loss: 0.0656 - acc: 0.9800 - val_loss: 0.1098 - val_acc: 0.9600\n",
      "Epoch 277/300\n",
      "350/350 [==============================] - 0s 90us/step - loss: 0.0651 - acc: 0.9800 - val_loss: 0.1085 - val_acc: 0.9600\n",
      "Epoch 278/300\n",
      "350/350 [==============================] - 0s 191us/step - loss: 0.0652 - acc: 0.9771 - val_loss: 0.1081 - val_acc: 0.9600\n",
      "Epoch 279/300\n",
      "350/350 [==============================] - 0s 166us/step - loss: 0.0650 - acc: 0.9771 - val_loss: 0.1082 - val_acc: 0.9600\n",
      "Epoch 280/300\n",
      "350/350 [==============================] - 0s 219us/step - loss: 0.0652 - acc: 0.9743 - val_loss: 0.1083 - val_acc: 0.9600\n",
      "Epoch 281/300\n",
      "350/350 [==============================] - 0s 227us/step - loss: 0.0652 - acc: 0.9771 - val_loss: 0.1081 - val_acc: 0.9600\n",
      "Epoch 282/300\n",
      "350/350 [==============================] - 0s 101us/step - loss: 0.0651 - acc: 0.9743 - val_loss: 0.1087 - val_acc: 0.9600\n",
      "Epoch 283/300\n",
      "350/350 [==============================] - 0s 129us/step - loss: 0.0648 - acc: 0.9771 - val_loss: 0.1081 - val_acc: 0.9600\n",
      "Epoch 284/300\n",
      "350/350 [==============================] - 0s 170us/step - loss: 0.0649 - acc: 0.9771 - val_loss: 0.1080 - val_acc: 0.9600\n",
      "Epoch 285/300\n",
      "350/350 [==============================] - 0s 101us/step - loss: 0.0646 - acc: 0.9743 - val_loss: 0.1080 - val_acc: 0.9600\n",
      "Epoch 286/300\n",
      "350/350 [==============================] - 0s 88us/step - loss: 0.0648 - acc: 0.9800 - val_loss: 0.1075 - val_acc: 0.9600\n",
      "Epoch 287/300\n",
      "350/350 [==============================] - 0s 124us/step - loss: 0.0647 - acc: 0.9771 - val_loss: 0.1084 - val_acc: 0.9600\n",
      "Epoch 288/300\n",
      "350/350 [==============================] - 0s 90us/step - loss: 0.0645 - acc: 0.9800 - val_loss: 0.1084 - val_acc: 0.9600\n",
      "Epoch 289/300\n",
      "350/350 [==============================] - 0s 109us/step - loss: 0.0643 - acc: 0.9743 - val_loss: 0.1081 - val_acc: 0.9600\n",
      "Epoch 290/300\n",
      "350/350 [==============================] - 0s 84us/step - loss: 0.0643 - acc: 0.9771 - val_loss: 0.1074 - val_acc: 0.9600\n",
      "Epoch 291/300\n",
      "350/350 [==============================] - 0s 84us/step - loss: 0.0643 - acc: 0.9743 - val_loss: 0.1079 - val_acc: 0.9600\n",
      "Epoch 292/300\n",
      "350/350 [==============================] - 0s 104us/step - loss: 0.0643 - acc: 0.9771 - val_loss: 0.1074 - val_acc: 0.9600\n",
      "Epoch 293/300\n",
      "350/350 [==============================] - 0s 80us/step - loss: 0.0638 - acc: 0.9771 - val_loss: 0.1074 - val_acc: 0.9600\n",
      "Epoch 294/300\n",
      "350/350 [==============================] - 0s 80us/step - loss: 0.0640 - acc: 0.9800 - val_loss: 0.1080 - val_acc: 0.9600\n",
      "Epoch 295/300\n",
      "350/350 [==============================] - 0s 95us/step - loss: 0.0641 - acc: 0.9743 - val_loss: 0.1079 - val_acc: 0.9600\n",
      "Epoch 296/300\n",
      "350/350 [==============================] - 0s 94us/step - loss: 0.0640 - acc: 0.9800 - val_loss: 0.1068 - val_acc: 0.9600\n",
      "Epoch 297/300\n",
      "350/350 [==============================] - 0s 123us/step - loss: 0.0638 - acc: 0.9743 - val_loss: 0.1076 - val_acc: 0.9600\n",
      "Epoch 298/300\n",
      "350/350 [==============================] - 0s 67us/step - loss: 0.0641 - acc: 0.9771 - val_loss: 0.1079 - val_acc: 0.9600\n",
      "Epoch 299/300\n",
      "350/350 [==============================] - 0s 84us/step - loss: 0.0637 - acc: 0.9771 - val_loss: 0.1082 - val_acc: 0.9600\n",
      "Epoch 300/300\n",
      "350/350 [==============================] - 0s 131us/step - loss: 0.0636 - acc: 0.9800 - val_loss: 0.1076 - val_acc: 0.9600\n"
     ]
    }
   ],
   "source": [
chadhat's avatar
chadhat committed
    "# Instantiating the model\n",
    "model = a_simple_NN()\n",
    "\n",
chadhat's avatar
chadhat committed
    "# Splitting the dataset into training (70%) and validation sets (30%)\n",
    "X_train, X_test, y_train, y_test = train_test_split(\n",
    "    features, labels, test_size=0.3)\n",
    "\n",
chadhat's avatar
chadhat committed
    "# Setting the number of passes through the entire training set\n",
    "num_epochs = 300\n",
    "\n",
    "# We can pass validation data while training\n",
    "model_run = model.fit(X_train, y_train, epochs=num_epochs,\n",
    "                      validation_data=(X_test, y_test))"
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The history has the following data:  dict_keys(['val_loss', 'val_acc', 'loss', 'acc'])\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe6d85f0080>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
chadhat's avatar
chadhat committed
    "# Looking at the loss and accuracy on the training and validation sets during the training\n",
    "# This can be done by using Keras callback \"history\" which is applied by default\n",
    "history_model = model_run.history\n",
    "\n",
chadhat's avatar
chadhat committed
    "print(\"The history has the following data: \", history_model.keys())\n",
    "\n",
    "# Plotting the training and validation accuracy during the training\n",
    "plt.plot(np.arange(1, num_epochs+1), history_model[\"acc\"], \"blue\") ;\n",
chadhat's avatar
chadhat committed
    "plt.plot(np.arange(1, num_epochs+1), history_model[\"val_acc\"], \"red\") ;"
   "cell_type": "markdown",
   "metadata": {},
   "source": [
chadhat's avatar
chadhat committed
    "**Here we dont't really see a big difference between the training and validation data because the function we are trying to fit is quiet simple and there is not too much noise. We will come back to these curves in a later example**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the example above we splitted our dataset into a 70-30 train-validation set. We know from previous chapters that to more robustly calculate accuracy we can use **K-fold crossvalidation**.\n",
    "This is even more important when we have small datasets and cannot afford to reserve a validation set!\n",
    "\n",
chadhat's avatar
chadhat committed
    "One way to do the cross validation here would be to write our own function to do this. However, we also know that **SciKit learn** provides several handy functions to evaluate and tune the models. So the question is:\n",
chadhat's avatar
chadhat committed
    "Can we somehow use these **Scikit learn** functions or ones we wrote ourselves for **Scikit learn** models to evaluate and tune our Keras models?\n",
    "\n",
    "The Answer is **YES !**\n",
    "\n",
    "We show how to do this in the following section."
chadhat's avatar
chadhat committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Using SciKit learn functions on Keras models\n",
    "\n",
chadhat's avatar
chadhat committed
    "Keras offers 2 wrappers which allow its Sequential models to be used with SciKit learn. \n",
chadhat's avatar
chadhat committed
    "There are: **KerasClassifier** and **KerasRegressor**.\n",
    "\n",
    "For more information:\n",
    "https://keras.io/scikit-learn-api/\n",
    "\n",
    "**Now lets see how this works!**"
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 19,
   "metadata": {},
chadhat's avatar
chadhat committed
   "outputs": [],
   "source": [
    "# We wrap the Keras model we created above with KerasClassifier\n",
chadhat's avatar
chadhat committed
    "from keras.wrappers.scikit_learn import KerasClassifier\n",
    "from sklearn.model_selection import cross_val_score\n",
chadhat's avatar
chadhat committed
    "# Wrapping Keras model\n",
    "# NOTE: We pass verbose=0 to suppress the model output\n",
    "num_epochs = 400\n",
    "model_scikit = KerasClassifier(\n",
    "    build_fn=a_simple_NN, **{\"epochs\": num_epochs, \"verbose\": 0})"
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
chadhat's avatar
chadhat committed
    "# Let's reuse the function to visualize the decision boundary which we saw in chapter 2 with minimal change\n",
    "\n",
    "def list_flatten(list_of_list):\n",
    "    flattened_list = [i for j in list_of_list for i in j]\n",
    "    return flattened_list\n",
chadhat's avatar
chadhat committed
    "def plot_points(plt=plt, marker='o'):\n",
    "    colors = [[\"steelblue\", \"chocolate\"][i] for i in labels]\n",
    "    plt.scatter(features.iloc[:, 0], features.iloc[:, 1], color=colors, marker=marker);\n",
    "\n",
    "def train_and_plot_decision_surface(\n",
    "    name, classifier, features_2d, labels, preproc=None, plt=plt, marker='o', N=400\n",
    "):\n",
    "    features_2d = np.array(features_2d)\n",
    "    xmin, ymin = features_2d.min(axis=0)\n",
    "    xmax, ymax = features_2d.max(axis=0)\n",
    "    x = np.linspace(xmin, xmax, N)\n",
    "    y = np.linspace(ymin, ymax, N)\n",
    "    points = np.array(np.meshgrid(x, y)).T.reshape(-1, 2)\n",
    "    if preproc is not None:\n",
    "        points_for_classifier = preproc.fit_transform(points)\n",
    "        features_2d = preproc.fit_transform(features_2d)\n",
    "    else:\n",
    "        points_for_classifier = points\n",
    "\n",
    "    classifier.fit(features_2d, labels, verbose=0)\n",
    "    predicted = classifier.predict(features_2d)\n",
    "    \n",
    "    if name == \"Neural Net\":\n",
    "        predicted = list_flatten(predicted)\n",
    "    \n",
    "    \n",
    "    if preproc is not None:\n",
    "        name += \" (w/ preprocessing)\"\n",
    "    print(name + \":\\t\", sum(predicted == labels), \"/\", len(labels), \"correct\")\n",
    "    \n",
    "    if name == \"Neural Net\":\n",
    "        classes = np.array(list_flatten(classifier.predict(points_for_classifier)), dtype=bool)\n",
    "    else:\n",
    "        classes = np.array(classifier.predict(points_for_classifier), dtype=bool)\n",
    "    plt.plot(\n",
    "        points[~classes][:, 0],\n",
    "        points[~classes][:, 1],\n",
    "        \"o\",\n",
    "        color=\"steelblue\",\n",
    "        markersize=1,\n",
    "        alpha=0.01,\n",
    "    )\n",
    "    plt.plot(\n",
    "        points[classes][:, 0],\n",
    "        points[classes][:, 1],\n",
    "        \"o\",\n",
    "        color=\"chocolate\",\n",
    "        markersize=1,\n",
    "        alpha=0.04,\n",
    "    )"
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Neural Net:\t 486 / 500 correct\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe7143e61d0>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "_, ax = plt.subplots(figsize=(6, 6))\n",
    "train_and_plot_decision_surface(\"Neural Net\", model_scikit, features, labels, plt=ax)\n",
    "plot_points(plt=ax)"
chadhat's avatar
chadhat committed
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The acuracy on the  5  validation folds: [ 0.96  0.96  0.94  0.97  0.96]\n",
      "The Average acuracy on the  5  validation folds: 0.958\n"
     ]
    }
   ],
chadhat's avatar
chadhat committed
   "source": [
    "# Applying K-fold cross-validation\n",
    "# Here we pass the whole dataset, i.e. features and labels, instead of splitting it.\n",
    "num_folds = 5\n",
    "cross_validation = cross_val_score(\n",
    "    model_scikit, features, labels, cv=num_folds, verbose=0)\n",
    "\n",
    "print(\"The acuracy on the \", num_folds, \" validation folds:\", cross_validation)\n",
    "print(\"The Average acuracy on the \", num_folds, \" validation folds:\", np.mean(cross_validation))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### NOTE: The above code took quiet long even though we used only 5  CV folds and the neural network and data size are very small!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Hyperparameter optimization"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We know from chapter 6 that there are 2 types of parameters which need to be tuned for a machine learning model.\n",
chadhat's avatar
chadhat committed
    "* Internal model parameters (weights) which can be learned for e.g. by gradient-descent\n",
chadhat's avatar
chadhat committed
    "* Hyperparameters\n",
    "\n",
    "In the model which we created above we made some arbitrary choices like which optimizer we use, what is its learning rate, number of hidden units and so on ...\n",
    "\n",
    "Now that we have the keras model wrapped as a scikit model we can use the grid search functions we have seen in chapter 6."
   ]
  },
chadhat's avatar
chadhat committed
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": null,
chadhat's avatar
chadhat committed
   "metadata": {},
   "outputs": [],
   "source": [
chadhat's avatar
chadhat committed
    "from sklearn.model_selection import GridSearchCV\n",
    "# Just to remember\n",
    "model_scikit = KerasClassifier(\n",
    "    build_fn=a_simple_NN, **{\"epochs\": num_epochs, \"verbose\": 0})"
chadhat's avatar
chadhat committed
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": null,
   "metadata": {},
   "outputs": [],
chadhat's avatar
chadhat committed
   "source": [
chadhat's avatar
chadhat committed
    "HP_grid = {'epochs' : [300, 500, 1000]}\n",
chadhat's avatar
chadhat committed
    "search = GridSearchCV(estimator=model_scikit, param_grid=HP_grid)\n",
    "search.fit(features, labels)\n",
    "print(search.best_score_, search.best_params_)"
   ]
  },
chadhat's avatar
chadhat committed
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": null,
   "metadata": {},
   "outputs": [],
chadhat's avatar
chadhat committed
   "source": [
    "HP_grid = {'epochs' : [10, 15, 30], \n",
    "           'batch_size' : [10, 20, 30] }\n",
    "search = GridSearchCV(estimator=model_scikit, param_grid=HP_grid)\n",
    "search.fit(features, labels)\n",
    "print(search.best_score_, search.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# A more general model for further Hyperparameter optimization\n",
    "from keras import optimizers\n",
    "\n",
    "def a_simple_NN(activation='relu', num_hidden_neurons=[4, 4], learning_rate=0.01):\n",
    "\n",
    "    model = Sequential()\n",
    "\n",
    "    model.add(Dense(num_hidden_neurons[0],\n",
    "                    input_shape=(2,), activation=activation))\n",
    "\n",
    "    model.add(Dense(num_hidden_neurons[1], activation=activation))\n",
    "\n",
    "    model.add(Dense(1, activation=\"sigmoid\"))\n",
    "\n",
    "    model.compile(loss=\"binary_crossentropy\", optimizer=optimizers.rmsprop(\n",
    "        lr=learning_rate), metrics=[\"accuracy\"])\n",
    "\n",
    "    return model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
chadhat's avatar
chadhat committed
    "### Exercise: \n",
    "* Look at the model above and choose a couple of hyperparameters to optimize. \n",
chadhat's avatar
chadhat committed
    "* **(OPTIONAL:)** What function from SciKit learn other than GridSearchCV can we use for hyperparameter optimization? Use it."
chadhat's avatar
chadhat committed
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Code here"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Exercise: Create a neural network to classify the 2d points example from chapter 2 learned \n",
    "(Optional: As you create the model read a bit on the different keras commands we have used)"
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe7177f6a58>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "circle = pd.read_csv(\"2d_points.csv\")\n",
    "# Using x and y coordinates as featues\n",
    "features = circle.iloc[:, :-1]\n",
    "# Convert boolean to integer values (True->1 and False->0)\n",
    "labels = circle.iloc[:, -1].astype(int)\n",
    "colors = [[\"steelblue\", \"chocolate\"][i] for i in circle[\"label\"]]\n",
    "plt.figure(figsize=(5, 5))\n",
    "plt.xlim([-2, 2])\n",
    "plt.ylim([-2, 2])\n",
    "\n",
    "plt.scatter(features[\"x\"], features[\"y\"], color=colors, marker=\"o\");\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Insert Code here"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
chadhat's avatar
chadhat committed
    "### The examples above are not the ideal use problems one should use neural networks for. They are too simple and can be easily solved by classical machine learning algorithms. Below we show examples which are the more common applications of Neural Networks."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Handwritten Digits Classification\n",
    "### MNIST Dataset\n",
    "MNIST datasets is a very common dataset used in machine learning. It is widely used to train and validate models.\n",
    ">The MNIST database of handwritten digits, available from this page, has a training set of 60,000 examples, and a >test set of 10,000 examples. It is a subset of a larger set available from NIST. The digits have been size->normalized and centered in a fixed-size image.\n",
    ">It is a good database for people who want to try learning techniques and pattern recognition methods on real-world >data while spending minimal efforts on preprocessing and formatting.\n",
    ">source: http://yann.lecun.com/exdb/mnist/\n",
chadhat's avatar
chadhat committed
    "The problem we want to solve using this dataset is: multi-class classification (FIRST TIME)\n",
    "This dataset consists of images of handwritten digits between 0-9 and their corresponsing labels. We want to train a neural network which is able to predict the correct digit on the image. "
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Loading the dataset in keras\n",
    "# Later you can explore and play with other datasets with come with Keras\n",
    "from keras.datasets import mnist\n",
    "# Loading the train and test data\n",
    "(X_train, y_train), (X_test, y_test) = mnist.load_data()"
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(60000, 28, 28)\n"
     ]
    }
   ],
   "source": [
    "# Looking at the dataset\n",
    "print(X_train.shape)"
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "This digit is:  9\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe66b039c50>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# We can see that the training set consists of 60,000 images of size 28x28 pixels\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "i=np.random.randint(0,X_train.shape[0])\n",
    "plt.imshow(X_train[i], cmap=\"gray_r\") ;\n",
    "print(\"This digit is: \" , y_train[i])"
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 255\n"
     ]
    }
   ],
chadhat's avatar
chadhat committed
   "source": [
    "# Look at the data values for a couple of images\n",
    "print(X_train[0].min(), X_train[1].max())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The data consists of values between 0-255 representing the **grayscale level**"
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(60000,)\n"
     ]
    }
   ],
chadhat's avatar
chadhat committed
   "source": [
    "# The labels are the digit on the image\n",
    "print(y_train.shape)"
chadhat's avatar
chadhat committed
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 29,
chadhat's avatar
chadhat committed
   "metadata": {},
   "outputs": [],
   "source": [
    "# Scaling the data\n",
    "# It is important to normalize the input data to (0-1) before providing it to a neural net\n",
    "# We could use the previously introduced function from SciKit learn. However, here it is sufficient to\n",
    "# just divide the input data by 255\n",
    "X_train_norm = X_train/255.\n",
    "X_test_norm = X_test/255.\n",
    "\n",
    "# Also we need to reshape the input data such that each sample is a vector and not a 2D matrix\n",
    "X_train_prep = X_train_norm.reshape(X_train_norm.shape[0],28*28)\n",
    "X_test_prep = X_test_norm.reshape(X_test_norm.shape[0],28*28)"
   "cell_type": "markdown",
chadhat's avatar
chadhat committed
   "metadata": {},
   "source": [
    "**IMPORTANT: One-Hot encoding**\n",
chadhat's avatar
chadhat committed
    "\n",
    "**TODO: Better frame the explaination**\n",
chadhat's avatar
chadhat committed
    "\n",
    "In such problems the labels are provided as something called **One-hot encodings**. What this does is to convert a categorical label to a vector.\n",
chadhat's avatar
chadhat committed
    "\n",
    "For the MNIST problem where we have **10 categories** one-hot encoding will create a vector of length 10 for each of the labels. All the entries of this vector will be zero **except** for the index which is equal to the integer value of the label.\n",
chadhat's avatar
chadhat committed
    "\n",
    "For example:\n",
    "if label is 4. The one-hot vector will look like **[0 0 0 0 1 0 0 0 0 0]**\n",
chadhat's avatar
chadhat committed
    "\n",
    "Fortunately, we don't have to code this ourselves because Keras has a built-in function for this."
chadhat's avatar
chadhat committed
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(60000, 10)\n"
     ]
    }
   ],
chadhat's avatar
chadhat committed
   "source": [
    "from keras.utils.np_utils import to_categorical\n",
chadhat's avatar
chadhat committed
    "\n",
    "y_train_onehot = to_categorical(y_train, num_classes=10)\n",
    "y_test_onehot = to_categorical(y_test, num_classes=10)\n",
chadhat's avatar
chadhat committed
    "\n",
    "print(y_train_onehot.shape)"
chadhat's avatar
chadhat committed
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/20\n",
      "60000/60000 [==============================] - 2s 25us/step - loss: 0.5722 - acc: 0.8494\n",
      "Epoch 2/20\n",
      "60000/60000 [==============================] - 1s 18us/step - loss: 0.2583 - acc: 0.9256\n",
      "Epoch 3/20\n",
      "60000/60000 [==============================] - 1s 17us/step - loss: 0.2006 - acc: 0.9418\n",
      "Epoch 4/20\n",
      "60000/60000 [==============================] - 1s 17us/step - loss: 0.1650 - acc: 0.9516\n",
      "Epoch 5/20\n",
      "60000/60000 [==============================] - 1s 16us/step - loss: 0.1422 - acc: 0.9584\n",
      "Epoch 6/20\n",
      "60000/60000 [==============================] - 2s 29us/step - loss: 0.1235 - acc: 0.9638\n",
      "Epoch 7/20\n",
      "60000/60000 [==============================] - 1s 22us/step - loss: 0.1093 - acc: 0.9666\n",
      "Epoch 8/20\n",
      "60000/60000 [==============================] - 1s 17us/step - loss: 0.0975 - acc: 0.9706\n",
      "Epoch 9/20\n",
      "60000/60000 [==============================] - 1s 18us/step - loss: 0.0891 - acc: 0.9732\n",
      "Epoch 10/20\n",
      "60000/60000 [==============================] - 1s 16us/step - loss: 0.0810 - acc: 0.9757\n",
      "Epoch 11/20\n",
      "60000/60000 [==============================] - 1s 16us/step - loss: 0.0745 - acc: 0.9776\n",
      "Epoch 12/20\n",
      "60000/60000 [==============================] - 1s 24us/step - loss: 0.0677 - acc: 0.9797\n",
      "Epoch 13/20\n",
      "60000/60000 [==============================] - 1s 17us/step - loss: 0.0623 - acc: 0.9813\n",
      "Epoch 14/20\n",
      "60000/60000 [==============================] - 1s 15us/step - loss: 0.0574 - acc: 0.9829\n",
      "Epoch 15/20\n",
      "60000/60000 [==============================] - 1s 22us/step - loss: 0.0537 - acc: 0.9841\n",
      "Epoch 16/20\n",
      "60000/60000 [==============================] - 1s 21us/step - loss: 0.0506 - acc: 0.9845\n",
      "Epoch 17/20\n",
      "60000/60000 [==============================] - 1s 22us/step - loss: 0.0466 - acc: 0.9860\n",
      "Epoch 18/20\n",
      "60000/60000 [==============================] - 1s 20us/step - loss: 0.0439 - acc: 0.9868\n",
      "Epoch 19/20\n",
      "60000/60000 [==============================] - 1s 17us/step - loss: 0.0410 - acc: 0.9877\n",
      "Epoch 20/20\n",
      "60000/60000 [==============================] - 1s 23us/step - loss: 0.0374 - acc: 0.9884\n"
     ]
    }
   ],
   "source": [
    "# Building the keras model\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense\n",
chadhat's avatar
chadhat committed
    "\n",
chadhat's avatar
chadhat committed
    "def mnist_model():\n",
    "    model = Sequential()\n",
chadhat's avatar
chadhat committed
    "\n",
chadhat's avatar
chadhat committed
    "    model.add(Dense(64, input_shape=(28*28,), activation=\"relu\"))\n",
chadhat's avatar
chadhat committed
    "\n",
chadhat's avatar
chadhat committed
    "    model.add(Dense(64, activation=\"relu\"))\n",
chadhat's avatar
chadhat committed
    "\n",
chadhat's avatar
chadhat committed
    "    model.add(Dense(10, activation=\"softmax\"))\n",
chadhat's avatar
chadhat committed
    "\n",
chadhat's avatar
chadhat committed
    "    model.compile(loss=\"categorical_crossentropy\",\n",
    "                  optimizer=\"rmsprop\", metrics=[\"accuracy\"])\n",
    "    return model\n",
chadhat's avatar
chadhat committed
    "model = mnist_model()\n",
    "\n",
    "model_run = model.fit(X_train_prep, y_train_onehot, epochs=20,\n",
    "                      batch_size=512)"
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10000/10000 [==============================] - 1s 63us/step\n",
      "The [loss, accuracy] on test dataset are:  [0.15624154731309972, 0.95640000000000003]\n"
     ]
    }
   ],
chadhat's avatar
chadhat committed
   "source": [
chadhat's avatar
chadhat committed
    "print(\"The [loss, accuracy] on test dataset are: \" , model.evaluate(X_test_prep, y_test_onehot))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Optional exercise: Run the model again with validation dataset, plot the accuracy as a function of epochs, play with number of epochs and observe what is happening."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Code here"
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 60000 samples, validate on 10000 samples\n",
      "Epoch 1/20\n",
      "60000/60000 [==============================] - 1s 22us/step - loss: 0.0092 - acc: 0.9976 - val_loss: 0.1240 - val_acc: 0.9700\n",
      "Epoch 2/20\n",
      "60000/60000 [==============================] - 1s 18us/step - loss: 0.0088 - acc: 0.9979 - val_loss: 0.1109 - val_acc: 0.9744\n",
      "Epoch 3/20\n",
      "60000/60000 [==============================] - 1s 19us/step - loss: 0.0079 - acc: 0.9981 - val_loss: 0.1234 - val_acc: 0.9727\n",
      "Epoch 4/20\n",
      "60000/60000 [==============================] - 1s 19us/step - loss: 0.0074 - acc: 0.9983 - val_loss: 0.1047 - val_acc: 0.9764\n",
      "Epoch 5/20\n",
      "60000/60000 [==============================] - 1s 20us/step - loss: 0.0074 - acc: 0.9981 - val_loss: 0.1147 - val_acc: 0.9748\n",
      "Epoch 6/20\n",
      "60000/60000 [==============================] - 1s 20us/step - loss: 0.0067 - acc: 0.9983 - val_loss: 0.1150 - val_acc: 0.9765\n",
      "Epoch 7/20\n",
      "60000/60000 [==============================] - 1s 18us/step - loss: 0.0060 - acc: 0.9986 - val_loss: 0.1161 - val_acc: 0.9753\n",
      "Epoch 8/20\n",
      "60000/60000 [==============================] - 1s 16us/step - loss: 0.0062 - acc: 0.9985 - val_loss: 0.1457 - val_acc: 0.9682\n",
      "Epoch 9/20\n",
      "60000/60000 [==============================] - 1s 16us/step - loss: 0.0056 - acc: 0.9986 - val_loss: 0.1162 - val_acc: 0.9758\n",
      "Epoch 10/20\n",
      "60000/60000 [==============================] - 1s 25us/step - loss: 0.0050 - acc: 0.9989 - val_loss: 0.1097 - val_acc: 0.9768\n",
      "Epoch 11/20\n",
      "60000/60000 [==============================] - 2s 25us/step - loss: 0.0054 - acc: 0.9986 - val_loss: 0.1148 - val_acc: 0.9757\n",
      "Epoch 12/20\n",
      "60000/60000 [==============================] - 1s 18us/step - loss: 0.0044 - acc: 0.9990 - val_loss: 0.1148 - val_acc: 0.9772\n",
      "Epoch 13/20\n",
      "60000/60000 [==============================] - 1s 20us/step - loss: 0.0046 - acc: 0.9990 - val_loss: 0.1199 - val_acc: 0.9746\n",
      "Epoch 14/20\n",
      "60000/60000 [==============================] - 1s 23us/step - loss: 0.0042 - acc: 0.9990 - val_loss: 0.1156 - val_acc: 0.9770\n",
      "Epoch 15/20\n",
      "60000/60000 [==============================] - 1s 22us/step - loss: 0.0035 - acc: 0.9992 - val_loss: 0.1206 - val_acc: 0.9757\n",
      "Epoch 16/20\n",
      "60000/60000 [==============================] - 1s 22us/step - loss: 0.0040 - acc: 0.9990 - val_loss: 0.1252 - val_acc: 0.9757\n",
      "Epoch 17/20\n",
      "60000/60000 [==============================] - 1s 24us/step - loss: 0.0038 - acc: 0.9993 - val_loss: 0.1305 - val_acc: 0.9741\n",
      "Epoch 18/20\n",
      "60000/60000 [==============================] - 1s 23us/step - loss: 0.0032 - acc: 0.9994 - val_loss: 0.1391 - val_acc: 0.9723\n",
      "Epoch 19/20\n",
      "60000/60000 [==============================] - 1s 20us/step - loss: 0.0033 - acc: 0.9993 - val_loss: 0.1244 - val_acc: 0.9759\n",
      "Epoch 20/20\n",
      "60000/60000 [==============================] - 1s 18us/step - loss: 0.0031 - acc: 0.9993 - val_loss: 0.1263 - val_acc: 0.9770\n",
      "The history has the following data:  dict_keys(['val_loss', 'val_acc', 'loss', 'acc'])\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7fe6681f74e0>]"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe66b03b0f0>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
chadhat's avatar
chadhat committed
   "source": [
    "# Solution:\n",
    "num_epochs = 20\n",
    "model_run = model.fit(X_train_prep, y_train_onehot, epochs=num_epochs,\n",
    "                      batch_size=512, validation_data=(X_test_prep, y_test_onehot))\n",
    "# Evaluating the model on test dataset\n",
chadhat's avatar
chadhat committed
    "#print(\"The [loss, accuracy] on test dataset are: \" , model.evaluate(X_test_prep, y_test_onehot))\n",
    "history_model = model_run.history\n",
    "print(\"The history has the following data: \", history_model.keys())\n",
    "\n",
    "# Plotting the training and validation accuracy during the training\n",
    "plt.plot(np.arange(1, num_epochs+1), history_model[\"acc\"], \"blue\")\n",
    "\n",
    "plt.plot(np.arange(1, num_epochs+1), history_model[\"val_acc\"], \"red\")"
   ]
  },
chadhat's avatar
chadhat committed
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Adding regularization"
   ]
  },
chadhat's avatar
chadhat committed
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": null,
   "metadata": {},
   "outputs": [],
chadhat's avatar
chadhat committed
   "source": [
chadhat's avatar
chadhat committed
    "# Adding l2 regularization\n",
chadhat's avatar
chadhat committed
    "# Building the keras model\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense\n",
    "from keras.regularizers import l2\n",
    "\n",
    "def mnist_model():\n",
    "    \n",
    "    model = Sequential()\n",
    "\n",
    "    model.add(Dense(64, input_shape=(28*28,), activation=\"relu\", \n",
    "                   kernel_regularizer=l2(0.01)))\n",
    "\n",
    "    model.add(Dense(64, activation=\"relu\", \n",
    "                   kernel_regularizer=l2(0.01)))\n",
    "\n",
    "    model.add(Dense(10, activation=\"softmax\"))\n",
    "\n",
    "    model.compile(loss=\"categorical_crossentropy\",\n",
    "                  optimizer=\"rmsprop\", metrics=[\"accuracy\"])\n",
    "    return model\n",
    "\n",
chadhat's avatar
chadhat committed
    "model = mnist_model()\n",
    "\n",
chadhat's avatar
chadhat committed
    "num_epochs = 50\n",
    "model_run = model.fit(X_train_prep, y_train_onehot, epochs=num_epochs,\n",
    "                      batch_size=512)"
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": null,
   "metadata": {},
   "outputs": [],
chadhat's avatar
chadhat committed
   "source": [
    "print(\"The [loss, accuracy] on test dataset are: \" , model.evaluate(X_test_prep, y_test_onehot))"
chadhat's avatar
chadhat committed
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Another way to add regularization and to make the network more robust we can add something called \"Dropout\". When we add dropout to a layer a specified percentage of units in that layer are switched off. \n",
chadhat's avatar
chadhat committed
    "(MAKING MODEL SIMPLER)\n",
chadhat's avatar
chadhat committed
    "\n",
    "### Exercise: Add dropout instead of l2 regularization in the network above"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Adding dropout is easy in keras\n",
    "# We import a layer called Dropout and add as follows\n",
    "# model.add(Dropout(0.5)) to randomly drop 50% of the hidden units\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": null,
   "metadata": {},
   "outputs": [],
chadhat's avatar
chadhat committed
   "source": [
    "# Solution\n",
    "# Adding Dropout\n",
    "# Building the keras model\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense, Dropout\n",
    "\n",
    "def mnist_model():\n",
    "    \n",
    "    model = Sequential()\n",
    "\n",
    "    model.add(Dense(64, input_shape=(28*28,), activation=\"relu\"))\n",
    "              \n",
chadhat's avatar
chadhat committed
    "    model.add(Dropout(0.4))\n",
    "\n",
    "    model.add(Dense(64, activation=\"relu\"))\n",
    "\n",
    "    model.add(Dense(10, activation=\"softmax\"))\n",
    "\n",
    "    model.compile(loss=\"categorical_crossentropy\",\n",
    "                  optimizer=\"rmsprop\", metrics=[\"accuracy\"])\n",
    "              \n",
    "    return model\n",
    "\n",
    "model = mnist_model()\n",
    "\n",
    "num_epochs = 50\n",
    "model_run = model.fit(X_train_prep, y_train_onehot, epochs=num_epochs,\n",
    "                      batch_size=512)"
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": null,
   "metadata": {},
   "outputs": [],
chadhat's avatar
chadhat committed
   "source": [
    "print(\"The [loss, accuracy] on test dataset are: \" , model.evaluate(X_test_prep, y_test_onehot))"
   ]
  },
chadhat's avatar
chadhat committed
  {
   "cell_type": "markdown",
chadhat's avatar
chadhat committed
   "metadata": {},
   "source": [
chadhat's avatar
chadhat committed
    "## Network Architecture\n",
    "\n",
    "The neural networks which we have seen till now are the simplest kind of neural networks.\n",
    "There exist more sophisticated network architectures especially designed for specific applications.\n",
    "Some of them are as follows:\n",
    "\n",
    "###  Convolution Neural Networks (CNNs)\n",
    "\n",
chadhat's avatar
chadhat committed
    "These networks are used mostly for computer vision (EXAMPLES) like tasks. \n",
chadhat's avatar
chadhat committed
    "One of the old CNN networks is shown below.\n",
    "\n",
    "<center>\n",
    "<figure>\n",
    "<img src=\"./images/neuralnets/CNN_lecun.png\" width=\"800\"/>\n",
    "<figcaption>source: LeCun et al., Gradient-based learning applied to document recognition (1998).</figcaption>\n",
    "</figure>\n",
    "</center>\n",
    "\n",
    "CNNs consist of new type of layers like convolution layer and pooling layers.\n",
    "\n",
    "###  Recurrent Neural Networks (RNNs)\n",
    "\n",
    "These are used for time-series data, speech recognition, translation etc.\n",
chadhat's avatar
chadhat committed
    "\n",
chadhat's avatar
chadhat committed
    "IMAGE HERE\n",
    "\n",
    "### Generative adversarial networks (GANs)\n",
    "\n",
    "GANs consist of 2 parts, a generative network and a discriminative network. The generative network produces data which is then fed to the discriminative network which judges if the new data belongs to a specified dataset. Then via feedback loops the generative network becomes better and better at creating images similar to the dataset the discriminative network is judging against. At the same time the discriminative network get better and better at identifyig **fake** instances which are not from the reference dataset. \n",
    "\n",
    "IMAGE HERE"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
chadhat's avatar
chadhat committed
    "## CNN example"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
chadhat's avatar
chadhat committed
    "For this example we will work with a dataset called fashion-MNIST which is quite similar to the MNIST data above.\n",
    "> Fashion-MNIST is a dataset of Zalando's article images—consisting of a training set of 60,000 examples and a test set of 10,000 examples. Each example is a 28x28 grayscale image, associated with a label from 10 classes. We intend Fashion-MNIST to serve as a direct drop-in replacement for the original MNIST dataset for benchmarking machine learning algorithms. It shares the same image size and structure of training and testing splits.\n",
    "source: https://github.com/zalandoresearch/fashion-mnist\n",
chadhat's avatar
chadhat committed
    "The 10 classes of this dataset are:\n",
chadhat's avatar
chadhat committed
    "| Label| Item |\n",
    "| --- | --- |\n",
    "| 0 |\tT-shirt/top |\n",
    "| 1\t| Trouser |\n",
    "|2|\tPullover|\n",
    "|3|\tDress|\n",
    "|4|\tCoat|\n",
    "|5|\tSandal|\n",
    "|6|\tShirt|\n",
    "|7|\tSneaker|\n",
    "|8|\tBag|\n",
    "|9|\tAnkle boot|"
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
chadhat's avatar
chadhat committed
    "# Loading the dataset in keras\n",
    "# Later you can explore and play with other datasets with come with Keras\n",
    "from keras.datasets import fashion_mnist\n",
chadhat's avatar
chadhat committed
    "# Loading the train and test data\n",
chadhat's avatar
chadhat committed
    "(X_train, y_train), (X_test, y_test) = fashion_mnist.load_data()\n",
chadhat's avatar
chadhat committed
    "items =['T-shirt/top', 'Trouser', \n",
    "        'Pullover', 'Dress', \n",
    "        'Coat', 'Sandal', \n",
    "        'Shirt', 'Sneaker',\n",
    "        'Bag', 'Ankle boot']"
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "This item is a:  T-shirt/top\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe64931db38>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
chadhat's avatar
chadhat committed
   "source": [
    "# We can see that the training set consists of 60,000 images of size 28x28 pixels\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "i=np.random.randint(0,X_train.shape[0])\n",
    "plt.imshow(X_train[i], cmap=\"gray_r\") ; \n",
    "print(\"This item is a: \" , items[y_train[i]])"
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(60000, 10)\n"
     ]
    }
   ],
chadhat's avatar
chadhat committed
   "source": [
    "# Also we need to reshape the input data such that each sample is a 4D matrix of dimension\n",
    "# (num_samples, width, height, channels). Even though these images are grayscale we need to add\n",
    "# channel dimension as this is expected by the Conv function\n",
    "X_train_prep = X_train.reshape(X_train.shape[0],28,28,1)/255.\n",
    "X_test_prep = X_test.reshape(X_test.shape[0],28,28,1)/255.\n",
    "\n",
    "from keras.utils.np_utils import to_categorical\n",
    "\n",
    "y_train_onehot = to_categorical(y_train, num_classes=10)\n",
    "y_test_onehot = to_categorical(y_test, num_classes=10)\n",
    "\n",
    "print(y_train_onehot.shape)"
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
chadhat's avatar
chadhat committed
    "# Creating a CNN similar to the one shown in the figure from LeCun paper\n",
    "# In the original implementation Average pooling was used. However, we will use maxpooling as this \n",
    "# is what us used in the more recent architectures and is found to be a better choice\n",
    "# Convolution -> Pooling -> Convolution -> Pooling -> Flatten -> Dense -> Dense -> Output layer\n",
    "from keras.models import Sequential\n",
chadhat's avatar
chadhat committed
    "from keras.layers import Dense, Conv2D, MaxPool2D, Flatten, Dropout, BatchNormalization\n",
chadhat's avatar
chadhat committed
    "def simple_CNN():\n",
    "    \n",
    "    model = Sequential()\n",
    "    \n",
    "    model.add(Conv2D(6, (3,3), input_shape=(28,28,1), activation='relu'))\n",
    "    \n",
    "    model.add(MaxPool2D((2,2)))\n",
    "    \n",
    "    model.add(Conv2D(16, (3,3), activation='relu'))\n",
    "    \n",
    "    model.add(MaxPool2D((2,2)))\n",
    "    \n",
    "    model.add(Flatten())\n",
    "    \n",
    "    model.add(Dense(120, activation='relu'))\n",
    "    \n",
    "    model.add(Dense(84, activation='relu'))\n",
    "    \n",
    "    model.add(Dense(10, activation='softmax'))\n",
    "    \n",
    "    model.compile(loss=\"categorical_crossentropy\", optimizer=\"rmsprop\", metrics=[\"accuracy\"])\n",
    "    \n",
    "    return model\n",
chadhat's avatar
chadhat committed
    "model = simple_CNN()\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
chadhat's avatar
chadhat committed
    "num_epochs = 10\n",
    "model_run = model.fit(X_train_prep, y_train_onehot, epochs=num_epochs, \n",
    "                      batch_size=64, validation_data=(X_test_prep, y_test_onehot))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
chadhat's avatar
chadhat committed
    "### Exercise: Use the above model or improve it (change number of filters, add more layers etc. on the MNIST example and see if you can get a better accuracy than what we achieved with a vanilla neural network)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
chadhat's avatar
chadhat committed
    "### Exercise: Load and play with the CIFAR10 dataset also included with Keras and build+train a simple CNN using it"
   ]
  },
  {
   "cell_type": "code",
chadhat's avatar
chadhat committed
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#REMOVEBEGIN\n",
    "# THE LINES BELOW ARE JUST FOR STYLING THE CONTENT ABOVE !\n",
    "\n",
    "from IPython import utils\n",
    "from IPython.core.display import HTML\n",
    "import os\n",
    "def css_styling():\n",
    "    \"\"\"Load default custom.css file from ipython profile\"\"\"\n",
    "    base = utils.path.get_ipython_dir()\n",
    "    styles = \"\"\"<style>\n",
    "    \n",
    "    @import url('http://fonts.googleapis.com/css?family=Source+Code+Pro');\n",
    "    \n",
    "    @import url('http://fonts.googleapis.com/css?family=Kameron');\n",
    "    @import url('http://fonts.googleapis.com/css?family=Crimson+Text');\n",
    "    \n",
    "    @import url('http://fonts.googleapis.com/css?family=Lato');\n",
    "    @import url('http://fonts.googleapis.com/css?family=Source+Sans+Pro');\n",
    "    \n",
    "    @import url('http://fonts.googleapis.com/css?family=Lora'); \n",
    "\n",
    "    \n",
    "    body {\n",
    "        font-family: 'Lora', Consolas, sans-serif;\n",
    "       \n",
    "        -webkit-print-color-adjust: exact important !;\n",
    "        \n",
    "      \n",
    "       \n",
    "    }\n",
    "    \n",
    "    .alert-block {\n",
    "        width: 95%;\n",
    "        margin: auto;\n",
    "    }\n",
    "    \n",
    "    .rendered_html code\n",
    "    {\n",
    "        color: black;\n",
    "        background: #eaf0ff;\n",
    "        background: #f5f5f5; \n",
    "        padding: 1pt;\n",
    "        font-family:  'Source Code Pro', Consolas, monocco, monospace;\n",
    "    }\n",
    "    \n",
    "    p {\n",
    "      line-height: 140%;\n",
    "    }\n",
    "    \n",
    "    strong code {\n",
    "        background: red;\n",
    "    }\n",
    "    \n",
    "    .rendered_html strong code\n",
    "    {\n",
    "        background: #f5f5f5;\n",
    "    }\n",
    "    \n",
    "    .CodeMirror pre {\n",
    "    font-family: 'Source Code Pro', monocco, Consolas, monocco, monospace;\n",
    "    }\n",
    "    \n",
    "    .cm-s-ipython span.cm-keyword {\n",
    "        font-weight: normal;\n",
    "     }\n",
    "     \n",
    "     strong {\n",
    "         background: #f5f5f5;\n",
    "         margin-top: 4pt;\n",
    "         margin-bottom: 4pt;\n",
    "         padding: 2pt;\n",
    "         border: 0.5px solid #a0a0a0;\n",
    "         font-weight: bold;\n",
    "         color: darkred;\n",
    "     }\n",
    "     \n",
    "    \n",
    "    div #notebook {\n",
    "        # font-size: 10pt; \n",
    "        line-height: 145%;\n",
    "        }\n",
    "        \n",
    "    li {\n",
    "        line-height: 145%;\n",
    "    }\n",
    "\n",
    "    div.output_area pre {\n",
    "        background: #fff9d8 !important;\n",
    "        padding: 5pt;\n",
    "       \n",
    "       -webkit-print-color-adjust: exact; \n",
    "        \n",
    "    }\n",
    " \n",
    "    \n",
    " \n",
    "    h1, h2, h3, h4 {\n",
    "        font-family: Kameron, arial;\n",
    "    }\n",
    "    \n",
    "    div#maintoolbar {display: none !important;}\n",
    "    </style>\"\"\"\n",
    "    return HTML(styles)\n",
    "css_styling()\n",
    "#REMOVEEND"
   ]
chadhat's avatar
chadhat committed
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "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",
chadhat's avatar
chadhat committed
   "version": "3.6.0"
  },
  "latex_envs": {
   "LaTeX_envs_menu_present": true,
   "autoclose": false,
   "autocomplete": true,
   "bibliofile": "biblio.bib",
   "cite_by": "apalike",
   "current_citInitial": 1,
   "eqLabelWithNumbers": true,
   "eqNumInitial": 1,
   "hotkeys": {
    "equation": "Ctrl-E",
    "itemize": "Ctrl-I"
   },
   "labels_anchors": false,
   "latex_user_defs": false,
   "report_style_numbering": false,
   "user_envs_cfg": false
chadhat's avatar
chadhat committed
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}