Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
{
"cells": [
{
"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",
"<img src=\"./images/neuralnets/Colored_neural_network.svg\"/>\n",
"source: https://en.wikipedia.org/wiki/Artificial_neural_network\n",
"\n"
]
},
{
"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"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Building blocks\n",
"### Perceptron\n",
"\n",
"Smallest unit of a neural network is a **perceptron** like node.\n",
"\n",
"**What is a Perceptron?**\n",
"\n",
"It is a simple function which has multiple inputs and a single output.\n",
"\n",
"Step 1: Weighted sum of the inputs is calculated\n",
"\n",
"\\begin{equation*}\n",
"weighted\\_sum = \\sum_{k=1}^{num\\_inputs} w_{i} x_{i}\n",
"\\end{equation*}\n",
"\n",
"Step 2: The following activation function is applied\n",
"\n",
"$$\n",
"f(weighted\\_sum) = \\left\\{\n",
" \\begin{array}{ll}\n",
" 0 & \\quad weighted\\_sum < threshold \\\\\n",
" 1 & \\quad weighted\\_sum \\geq threshold\n",
"\n",
"You can see that this is also a linear classifier as we introduced in script 02."
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"%config InlineBackend.figure_format = 'retina'\n",
"import matplotlib as mpl\n",
"mpl.rcParams['lines.linewidth'] = 3"
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"def perceptron(X, w, threshold=1):\n",
" # This function computes sum(w_i*x_i) and \n",
" # applies a perceptron activation\n",
" linear_sum = np.dot(X,w)\n",
" output=0\n",
" if linear_sum >= threshold:\n",
" output = 1\n",
" # print(\"The perceptron has peaked\")\n",
" return output\n",
"X = [1,0]\n",
"w = [1,1]\n",
"perceptron(X,w)"
]
},
{
"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",
"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"
]
}
],
"source": [
"# Calculating Boolean AND using a perceptron\n",
"import matplotlib.pyplot as plt\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))"
{
"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",
"image/png": "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5ZVXFBERoTVr1jiUCgAA/0ZBABC03n33Xc2cOVP58+f3OHfgwAH93//9nzp37qxjx445lA4AAP9EQQAQtEJCQvT4448rLi5O9957b7rzr7/+ulwul95//30H0gEA4J8oCACCXvHixbV8+XItWrRIhQsX9jj722+/6YEHHlDr1q11+PBhhxICAOA/KAgAsgRjjB5++GG53W61bds23fl3331X5cuX14IFC8TtoAEAWQkFAUCWcsMNN+itt97SihUrVKxYMY+zx44dU4cOHXTPPffop59+cighAAC+RUEAkCXde++9iouLU7du3dKd/eSTTxQeHq7p06crKSnJgXQAAPgOBQFAllWgQAG99tprWr9+vUqXLu1x9p9//lGvXr3UoUMHh9IBAOAbFAQAWd4dd9yhPXv2qH///goJ8fxjsWPHjs6EAgDARygIACApd+7cGj9+vLZs2aLIyMhUZzp37qxGjRo5nAwAAGdREADgX6pWrart27dr1KhRypYt24X1N910kyZMmODDZAAAOIOCAACXyJ49u4YPH66dO3eqevXqkqRXX31VBQsW9HEyAAC8L8zXAQDAX4WHh+vzzz/XRx99pGbNmmVon1OnTikhIUH58uXzcjoAALyDKwgA4EFoaGiGy4EkDR8+XBEREfr000+9mAoAAO+hIABAJvnyyy81ceJE/fTTT7rrrrvUsWNH/fnnn76OBQDAFaEgAEAmOHv2rDp37nzRg9TeeOMNuVwuvffeez5MBgDAlaEgAEAmePHFFxUbG3vZ+sOHD6tVq1Zq2bKlDh065INkAABcGQoCAFyjX3/9Vc8//7zHmaVLl8rlcmnevHmy1jqUDACAK0dBAIBrVKxYMX3wwQcqXry4x7m//vpLjz32mJo0aaIDBw44Ew4AgCtEQQCATHDPPfcoLi5OPXr0SHd29erVioiI0JQpU5SYmOhAOgAAMo6CAACZJH/+/JoxY4Y+++wz3XbbbR5nT5w4od69e6tevXrat2+fQwkBAEgfBQEAMlm9evW0e/duDRw4UCEhnn/Mbt68WVFRURozZozOnTvnUEIAANJGQQAAL8iVK5fGjRunrVu3qkKFCh5nz549q2HDhqlq1aqKiYlxKCEAAKmjIACAF1WpUkXbt2/X888/r+zZs3uc3b17t6pVq6ZBgwbp1KlTDiUEAOBiFAQA8LJs2bJp6NCh2rVrl2rWrOlxNjExUePGjVNUVJS2b9/uUEIAAP4/CgIAOKR8+fLatGmTXnnlFeXOndvj7IEDB9KdAQDAGygIAOCg0NBQPfXUU9q7d68aN26c5tyzzz4rl8vlYDIAAJJREADAB2699VatWrVKr7/+ugoWLHjRtgoVKmjgwIE+SgYAyOooCADgI8YYderUSW63W/fff78kKSQkRHPnzk33A80AAHhLmK8DAEBWd9NNN2np0qV67733tH//flWpUsXXkQAAWRgFAQD8RMuWLa9ovkuXLqpRo4Y6d+4sY4yXUgEAshreYgQAAWjp0qWaO3euunbtqsaNG+v777/3dSQAQJCgIABAgDl27Jh69ux54et169YpMjJSkydPVmJiog+TAQCCAQUBAAJMv3799Ntvv1207uTJk+rTp49q166tuLg4HyUDAAQDCgIABJDVq1dr3rx5aW7funWrKlWqpOeee05nz551MBkAIFhQEAAggBQpUkRRUVEeZ86dO6fhw4erSpUq+vLLLx1KBgAIFhQEAAggFStW1LZt2zR27FjlyJHD42xsbKxq1KihAQMG6OTJkw4lBAAEOgoCAASYbNmyafDgwdq1a5dq167tcTYpKUkTJkxQxYoVtWHDBmcCAgACGgUBAAJUuXLltHHjRk2dOlV58uTxOPvtt9+qQYMG6t69u+Lj4x1KCAAIRBQEAAhgISEh6tWrl+Li4tSkSZN052fOnKnw8HCtXLnSgXQAgEBEQQCAIHDLLbfo448/1htvvKHrrrvO4+yvv/6qe++9V+3atdORI0ccSggACBQUBAAIEsYYtW/fXvv27VOrVq3SnV+0aJFcLpf++9//ylrrQEIAQCCgIABAkClatKjeffddLV26VDfeeKPH2T/++EM9e/bUX3/95VA6AIC/oyAAQJC6//775Xa79dhjj3mcmzx5crpvSwIAZB0UBAAIYtddd53mzp2r1atXq2TJkpdtv+uuu/TII484HwwA4LcoCACQBTRu3FixsbHq3bu3jDGSpLx582rmzJkXvgYAQKIgAECWkTdvXk2ePFmff/65ypcvr3HjxqlEiRK+jgUA8DNhvg4AAHBWzZo1tXPnTmXLli1D84mJiZo9e7Y6deqkHDlyeDkdAMDXuIIAAFlQjhw5FBKSsf8LmDJlinr06KHKlStr69atXk4GAPA1CgIAIE3ff/+9hg4dKkmKi4tTzZo11bdvX504ccLHyQAA3kJBAACkylqrrl276tSpUxetmzRpkipUqKB169b5MB0AwFsoCACAVL3++utploDvv/9ejRo1UteuXXnIGgAEGQoCACBVGblCMGfOHIWHh2v58uUOJAIAOIGCAABI1cKFC7Vw4UJdf/31HucOHjyo++67Tw899JB+//13h9IBALyFggAASJUxRu3atZPb7dZDDz2U7vzbb78tl8ult956S9ZaBxICALzBLwqCMaaVMWaqMWaTMeZvY4w1xiy8ymMVN8a8bow5aIw5Y4w5YIyZbIy5LrNzA3DGsmVSy5ZS48bJy2XLfJ0oaylSpIgWL16sZcuW6eabb/Y4e/ToUT3yyCO699579fPPPzuUEN7CuQdkTX5RECQNk9RLUpSkX6/2IMaY0pJ2SOokaZukSZK+l9Rb0hfGGM/XyQH4lfHjpYIFpRYtpKVLpbVrk5ctWiSvHz/e1wmzlubNmysuLk5du3ZNd/ajjz5SeHi4Xn31VSUlJTmQDpmJcw/I2vylIPSRdLuk/JJ6XMNxZkgqIukpa20La+0ga21DJReFspLGXHNSAI7o2FEaOFCKj099e3x88vZOnRyNleUVLFhQs2bN0tq1a1WqVCmPs8ePH9cTTzyhBg0aaP/+/Q4lxLXi3APgFwXBWrveWrvfXsObVo0xpSTdKemApOmXbB4h6YSkR40xea46KABHjB8vvfFGxmbnz+evmb7QsGFD7dmzR3379k33icwbN25UhQoV9NJLLykhIcGhhLganHsAJD8pCJmkYcpylbX2ouvZ1trjkj6XlFtSDaeDAbgyY67wWt+VziNz5MmTRy+//LI2b96s8PBwj7OnT5/WM888o0ceecShdLganHsApOAqCGVTlt+ksf389e3bHcgC4CotW5b2WxvSEh/Phyd9qXr16oqJidGIESOULVs2j7M9elzLu0jhTZx7AM4LpoJQIGWZ1o+38+sLZuRgxpgdqb0klbvWoADStmCBs/shc2TPnl0jR47Ujh07VLVq1VRnunfvrvr16zucDBnFuQfgvGAqCOkxKUtuzg34sSv9C+a17ofMFRkZqS+++EITJkxQrly5LqwvXry4xo0b58NkSA/nHoDzgqkgnP8RVSCN7fkvmfPIWls5tZekr641KIC0FUjrDPbSfsh8oaGh6tevn/bs2aM77rhDkvTaa68pf/78nneET3HuATgvmArC1ynLtD5jcFvKMq3PKADwA+3bO7sfvKdMmTJau3at1qxZo6ZNm2ZonxMnTujYsWNeTobUcO4BOC+YCsL6lOWdxpiL/l3GmHySaks6JWmL08EAZNx99135XyQLFEjeD/4nJCREjRo1yvD8sGHD5HK59P7773sxFVLDuQfgvIArCMaYbMaYcilPTb7AWvudpFWSSkrqecluoyTlkbTAWnvCkaAArtrQod6dh3/64osv9Morr+i3337TAw88oNatW+vw4cO+jpWlcO4BkPykIBhjWhhj5htj5ksalLK65vl1xpgJ/xovJmmfpLWpHOoJSb9LmmKM+cAY84IxZp2Sn9T8jSR+lAEBYMAAqUOHjM127Jg8j8B25swZde7cWf9+Xua7776r8uXLa8GCBbqG52jiCnDuAZD8pCBIipLUIeXVJGVdqX+ta5WRg6RcRagiab6k6pL6SSotaYqkmtbao5maGoDXzJ8vvfRS2m95KFAgefu8eY7GgpeMGTNG+/btu2z9sWPH1KFDB91999368ccffZAs6+HcA2D4q8yVMcbsiI6Ojt6xY4evowBZxrJlyfdaj49P/uWkfXve9xxMDh48qJIlS+rcuXMe5/LmzasXX3xRPXr0UEiIv/x9K7hx7gG+VblyZcXExMSk3EnTMRSEK0RBAIDMt2HDBnXp0kXfffddurN16tTRnDlzVLZsWQeSAYDv+Kog8CcYAIDP3XHHHdqzZ4/69++f7tWB//3vf6pYsaJefPHFdK86AACuHAUBAOAXcufOrfHjx2vLli2KjIz0OHvmzBkNHjxY1atX186dOx1KCABZAwUBAOBXqlatqu3bt2v06NHKli2bx9mdO3eqatWqGjJkiE6fPu1QQgAIbhQEAIDfyZ49u5599lnt3LlT1atX9zibmJioF154QVFRUfr8888dSggAwYuCAADwW+Hh4fr88881adIk5c6d2+Ps119/rbp16+rJJ5/U8ePHHUoIAMGHggAA8GuhoaF6+umnFRsbq0aNGnmctdZq2rRpioiI0ObNmx1KCADBhYIAAAgIpUqV0urVqzVnzhwVSOspXikOHz6s66+/3qFkABBcKAgAgIBhjFHnzp3ldrt1n4cndo0cOZLnJADAVaIgAAACzs0336z3339f77zzjooUKXLRtujoaPXv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AEBAyJkzp55//nlt375dlSpV8jh77tw5jRw5UpUrV9aXX37pUEIgOFAQAABAQImKitK2bdv04osvKkeOHB5n9+7dqxo1aqh///46efKkQwmBwEZBAAAAAScsLEzPPPOMdu/erTp16nicTUpK0ssvv6yHHnrIoXRAYKMgAACAgFW2bFl99tlnmj59uvLmzZvmXEhIiIYOHepgMiBwURAAAEBACwkJ0RNPPKG4uDjdddddqc48/fTTql69usPJgMBEQQAAAEGhRIkS+uijj7RgwQIVKlTowvpSpUpp9OjRPkwGBBYKAgAACBrGGD366KNyu91q3bq1JGn27NnKkyePj5MBgYOCAAAAgk7RokX19ttvKyYmRg0bNszQPvHx8frll1+8nAzwfxQEAAAQtNJ7XsK/DRw4UC6XSzNnzlRSUpIXUwH+jYIAAACyvPXr12vWrFk6fvy4unfvrkaNGunbb7/1dSzAJygIAAAgSzt58qS6du160boNGzYoMjJSEyZMUEJCgo+SAb5BQQAAAFnaiBEj9N133122/vTp0xowYIBq1qypPXv2+CAZ4BsUBAAAkGUdPnxY06ZN8zizfft2Va5cWSNGjNCZM2ccSgb4DgUBAABkWUWLFtXWrVtVpUoVj3MJCQkaPXq0oqOjtWXLFofSAb5BQQAAAFlahQoV9MUXX2j8+PHKmTOnx1m3261atWqpb9++OnHihEMJAWdREAAAQJYXFham/v37KzY2VvXr1/c4a63VpEmTFBkZqbVr1zqUEHAOBQEAACBFmTJltG7dOr322mvKly+fx9kffvhBjRs3VpcuXfTXX385lBDwPgoCAADAv4SEhKhbt25yu91q2rRpuvNz586Vy+XSsmXLHEgHeB8FAQAAIBXFixfXihUr9NZbb+n666/3OHvo0CG1aNFCbdq00eHDhx1KCHgHBQEAACANxhi1bdtW+/bt00MPPZTu/DvvvCOXy6U1a9Y4kA7wDgoCAABAOm644QYtXrxYy5Yt08033+xx9syZMypTpoxDyYDMR0EAAADIoObNm8vtdqtr165pzowdO1YlS5Z0LhSQySgIAAAAV6BAgQKaNWuW1q5dq1KlSl20rWbNmurZs6ePkgGZg4IAAABwFRo2bKjY2Fj169dPISEhyp49u+bMmaPQ0FBfRwOuSZivAwAAAASq3Llza8KECWrdurVi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\n",
"image/png": {
"height": 252,
"width": 388
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Plotting the decision boundary\n",
"plt.xlim(-1,2)\n",
"plt.ylim(-1,2)\n",
"for i in X:\n",
" plt.plot(i,\"o\",color=\"b\");\n",
"# Plotting the decision boundary\n",
"# that is a line given by w_1*x_1+w_2*x_2-threshold=0\n",
"x1 = np.arange(-3,4)\n",
"x2 = threshold - np.arange(-3,4)\n",
"plt.plot(x1, x2 , \"--\" ,color=\"black\");"
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Exercise :Can you compute a Boolean \"OR\" using a perceptron?**\n",
"\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",
"metadata": {},
"outputs": [],
"source": [
"# Calculating Boolean OR using a perceptron\n",
"# Edit the code below"
]
},
{
"cell_type": "code",
"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"
"image/png": "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\n",
"image/png": {
"height": 252,
"width": 388
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Solution\n",
"# Calculating Boolean OR using a perceptron\n",
"import matplotlib.pyplot as plt\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",
"# Plotting the decision boundary\n",
"plt.xlim(-1,2)\n",
"plt.ylim(-1,2)\n",
"for i in X:\n",
" plt.plot(i,\"o\",color=\"b\");\n",
"# Plotting the decision boundary\n",
"# that is a line given by w_1*x_1+w_2*x_2-threshold=0\n",
"x1 = np.arange(-3,4)\n",
"x2 = threshold - np.arange(-3,4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Optional exercise: Create a NAND gate using a perceptron**\n",
"\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 |"
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
"metadata": {},
"outputs": [],
"source": [
"# Calculating Boolean NAND using a perceptron\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In fact a single perceptron can compute \"AND\", \"OR\" and \"NOT\" boolean functions.\n",
"However, it cannot compute some other boolean functions such as \"XOR\"\n",
"\n",
"WHAT CAN WE DO?\n",
"Hint: What is the significance of the NAND gate we created above\n",
"\n",
"We said a single perceptron can't compute these functions. We didn't say that about **multiple Perceptrons**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**XOR function**\n",
"\n",
"**TO DO: INSERT IMAGE HERE!!!!!!!!!!!!!!**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
"### Google Playground\n",
"\n",
"UWE: move up before discussing gradient stuff etc\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",
"However, we can 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",
"As in the case of other machine learning algorithms we need to define a so-called \"Loss function\". In simple 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 trained model. Fortunately, for classification and regression (which comprise of a large range of probelms) these loss functions are well known. Generally **crossentropy** and **mean squared error** loss functions are chosen for classification and regression problems, respectively.\n",
"\n",
"### Gradient based learning\n",
"Once we have a loss function we want to solve an **optimization problem** which minimizes this loss by updating the weights of the network and this is how the learning actually happens.\n",
"\n",
"One of the most popular optimization method used in machine learning is **Gradient-descent**\n",
"\n",
"INSERT MORE EXPLAINATIONS HERE\n",
"\n",
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
"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."
"image/png": "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\n",
"image/png": {
"height": 250,
"width": 597
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"plt.plot(pts, 1/(1+np.exp(-pts))) ;\n",
"\n",
"plt.subplot(1, 3, 2)\n",
"plt.plot(pts, np.tanh(pts*np.pi)) ;\n",
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Suggestion Uwe:\n",
"\n",
"1. more layers might improve power of single perctptron.\n",
"\n",
"2. regrettably math show that just \"stacking\" perceptrons only adds little improvements\n",
"\n",
"3. way around: look at nature how neuron works and introduce non linear activation functions.\n",
"\n",
"4. theoretical background: universal approximation theorem.\n",
"\n",
"\n",
"\n",
"### Multi-layer preceptron neural network\n",
"Universal function theorem\n",
"\n",
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Introduction to Keras"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"What is **Keras**?\n",
"\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"
"name": "stdout",
"output_type": "stream",
"text": [
"_________________________________________________________________\n",
"Layer (type) Output Shape Param # \n",
"=================================================================\n",
"dense_9 (Dense) (None, 4) 36 \n",
"_________________________________________________________________\n",
"activation_7 (Activation) (None, 4) 0 \n",
"_________________________________________________________________\n",
"dense_10 (Dense) (None, 4) 20 \n",
"_________________________________________________________________\n",
"dense_11 (Dense) (None, 1) 5 \n",
"_________________________________________________________________\n",
"activation_8 (Activation) (None, 1) 0 \n",
"=================================================================\n",
"Total params: 61\n",
"Trainable params: 61\n",
"Non-trainable params: 0\n",
"_________________________________________________________________\n"
]
}
],
"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",
"# 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",
"# 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",
"# The output layer\n",
"model.add(Dense(units=1))\n",
"model.add(Activation(\"sigmoid\"))\n",
"\n",
"model.summary()"
]
},
{
"cell_type": "code",
"# Fitting the model "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**TO DO: Move the MNIST example after the previous dataset examples**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"MNIST datasets is a very common dataset used in machine learning. It is widely used to train and validate models.\n",
"\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",
"\n",
"The problem we want to solve using this dataset is: multi-class classification\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",
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
"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",
"\n",
"# Loading the train and test data\n",
"\n",
"(X_train, y_train), (X_test, y_test) = mnist.load_data()"
]
},
{
"cell_type": "code",
"execution_count": 185,
"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",
"execution_count": 186,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"This digit is: 8\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAfoAAAH0CAYAAADVH+85AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAG2VJREFUeJzt3X2sbWddJ/DvT6pQGltsoxLjKC9a2qDAULRQMnBviQxoxCLthD/ExoBRhwwWYaJR8J6rToLJZJCXGTDC2AjJVFMixrECEzj3tryosQQ7xPJmWztkwFIqLdCCFp75Y6+r1zPn3Jez9z3rnN/5fJKd5+y11rPX76y7cr/n2Xvt9dQYIwBAT98wdwEAwJkj6AGgMUEPAI0JegBoTNADQGOCHgAaE/QA0JigB4DGBD0ANCboAaAxQQ8AjQl6AGhM0ANAY4IeABoT9ADQmKAHgMbOmruAM6Gqbk9ybpI7Zi4FALbrUUnuG2M8epkXaRn0Sc49++yzz7/44ovPn7sQANiOW2+9NQ888MDSrzNr0FfVdyb5tSTPSXJBks8keWeSw2OMv1/ipe+4+OKLz7/55ptXUCUA7LxLLrkkH/7wh+9Y9nVmC/qqemySDyb5tiR/lORjSX4wyc8neU5VPX2M8fm56gOADua8GO+/ZRHyLxtjXDHG+KUxxuVJXpvkcUn+04y1AUALswR9VT0mybOzuFjuv25YfSjJl5O8qKrO2eHSAKCVuUb0l0/te8YYXz9+xRjji0k+kOThSZ6604UBQCdzfUb/uKn9xBbrP5nFiP/CJO/d6kWqaqur7S7afmkA0MdcI/rzpvbeLdYfW/6IHagFANrard+jr6kdJ9pojHHJpp0XI/0nr7ooANhr5hrRHxuxn7fF+nM3bAcAbMNcQf/xqb1wi/XfO7VbfYYPAJyCuYJ+fWqfXVX/ooaq+uYkT0/yQJI/2+nCAKCTWYJ+jPE3Sd6TxQ37X7ph9eEk5yT5vTHGl3e4NABoZc6L8f59FrfAfX1VPSvJrUkuTXIwi7fsf2XG2gCghdlugTuN6p+S5NosAv4VSR6b5PVJnuY+9wCwvFm/XjfG+D9JfmrOGgCgszkntQEAzjBBDwCNCXoAaEzQA0Bjgh4AGhP0ANCYoAeAxgQ9ADQm6AGgMUEPAI0JegBoTNADQGOCHgAaE/QA0JigB4DGBD0ANCboAaAxQQ8AjQl6AGhM0ANAY4IeABoT9ADQmKAHgMYEPQA0JugBoDFBDwCNCXoAaEzQA0Bjgh4AGhP0ANCYoAeAxgQ9ADQm6AGgMUEPAI0JegBoTNADQGOCHgAaE/QA0JigB4DGBD0ANCboAaAxQQ8AjQl6AGhM0ANAY4IeABoT9ADQmKAHgMYEPQA0JugBoDFBDwCNCXoAaEzQA0Bjgh4AGhP0ANCYoAeAxgQ9ADQm6AGgMUEPAI0JegBoTNADQGOCHgAaE/QA0NhZcxcAq1BVS/U/cODAtvuur68vte9lHDlyZLb+hw8fXmrfe9mhQ4dm2/cy5+oyfdm7ZhvRV9UdVTW2eHx2rroAoJO5R/T3JvmtTZZ/aacLAYCO5g76L4wx1mauAQDacjEeADQ294j+oVX1E0m+K8mXk9yS5MYxxtfmLQsAepg76B+Z5G0blt1eVT81xjh6ss5VdfMWqy5aujIAaGDOt+5/N8mzsgj7c5J8f5LfTvKoJH9aVU+crzQA6GG2Ef0YY+OXcD+a5Ger6ktJXpFkLcnzT/Ial2y2fBrpP3kFZQLAnrYbL8Z789Q+Y9YqAKCB3Rj0d03tObNWAQAN7Magf9rU3jZrFQDQwCxBX1WPr6rzN1n+3UneOD19+85WBQD9zHUx3lVJfqmq1pPcnuSLSR6b5EeSPCzJDUn+80y1AUAbcwX9epLHJfnXWbxVf06SLyR5fxbfq3/bGGPMVBsAtDFL0E83wznpDXHgVC07beic03eura1tu+9+nip2TnMe92X2vex5PueUzGzfbrwYDwBYEUEPAI0JegBoTNADQGOCHgAaE/QA0JigB4DGBD0ANCboAaAxQQ8AjQl6AGhM0ANAY4IeABoT9ADQmKAHgMZmmY8eVm2ZOd2XdfDgwaX6HzlyZDWF7LBDhw7Nuv85/83ntMzvffTo0dUVwp5hRA8AjQl6AGhM0ANAY4IeABoT9ADQmKAHgMYEPQA0JugBoDFBDwCNCXoAaEzQA0Bjgh4AGhP0ANCYoAeAxkxTC1lu6s85p5lddqrY/TrV67KWOW6HDx9eat9jjKX6s/8Y0QNAY4IeABoT9ADQmKAHgMYEPQA0JugBoDFBDwCNCXoAaEzQA0Bjgh4AGhP0ANCYoAeAxgQ9ADQm6AGgMUEPAI2Zjx72MPPJb8+RI0eW6r/snPKwk4zoAaAxQQ8AjQl6AGhM0ANAY4IeABoT9ADQmKAHgMYEPQA0JugBoDFBDwCNCXoAaEzQA0Bjgh4AGhP0ANCYaWphD1t2utUDBw6spI45LPO7Hzx4cHWFnKa9fMzZm1Yyoq+qK6vqDVV1U1XdV1Wjqt5+kj6XVdUNVXVPVd1fVbdU1TVV9ZBV1AQArG5E/6okT0zypSSfTnLRiTauqh9L8o4kX0ny+0nuSfKjSV6b5OlJrlpRXQCwr63qM/qXJ7kwyblJfu5EG1bVuUl+J8nXkhwYY7x4jPEfkzwpyYeSXFlVL1xRXQCwr60k6McY62OMT44xxilsfmWSb01y3RjjL497ja9k8c5AcpI/FgCAUzPHVfeXT+27Nll3Y5L7k1xWVQ/duZIAoKc5gv5xU/uJjSvGGA8muT2Lawces5NFAUBHc3y97rypvXeL9ceWP+JkL1RVN2+x6oQXAwLAfrEbb5hTU3sqn/cDACcwx4j+2Ij9vC3Wn7thuy2NMS7ZbPk00n/y6ZcGAL3MMaL/+NReuHFFVZ2V5NFJHkxy204WBQAdzRH075va52yy7hlJHp7kg2OMr+5cSQDQ0xxBf32Su5O8sKqecmxhVT0syW9MT980Q10A0M5KPqOvqiuSXDE9feTUPq2qrp1+vnuM8cokGWPcV1U/nUXgH6mq67K4Be7zsvjq3fVZ3BYXAFjSqi7Ge1KSqzcse0z++bvwf5vklcdWjDHeWVXPTPIrSV6Q5GFJPpXkF5K8/hTvsAcAnMRKgn6MsZZk7TT7fCDJD69i/wDA5sxHD3vY4cOHZ9v3svOqLzOffLJ355RfX19fXSFwCnbjDXMAgBUR9ADQmKAHgMYEPQA0JugBoDFBDwCNCXoAaEzQA0Bjgh4AGhP0ANCYoAeAxgQ9ADQm6AGgMUEPAI2ZphaSrK2tbbvvstO1LjPd6rJTvS7T/9ChQ0vt++jRo0v1n9OyvzvsJCN6AGhM0ANAY4IeABoT9ADQmKAHgMYEPQA0JugBoDFBDwCNCXoAaEzQA0Bjgh4AGhP0ANCYoAeAxgQ9ADQm6AGgMfPRw5KWnY9+fX19232Xmct+WYcPH55t38ta5pgny/+bw04yogeAxgQ9ADQm6AGgMUEPAI0JegBoTNADQGOCHgAaE/QA0JigB4DGBD0ANCboAaAxQQ8AjQl6AGhM0ANAY6aphZktM+XpoUOHltr3Xp5qdhmmmWU/MaIHgMYEPQA0JugBoDFBDwCNCXoAaEzQA0Bjgh4AGhP0ANCYoAeAxgQ9ADQm6AGgMUEPAI0JegBoTNADQGOCHgAaMx897GFHjx6dbd/Lzul+5MiRldSxHQcPHlyq//r6+ooqgTNvJSP6qrqyqt5QVTdV1X1VNarq7Vts+6hp/VaP61ZREwCwuhH9q5I8McmXknw6yUWn0Oevkrxzk+UfXVFNALDvrSroX55FwH8qyTOTnMr7Wh8ZY6ytaP8AwCZWEvRjjH8K9qpaxUsCACsw58V431FVP5PkgiSfT/KhMcYtM9YDAO3MGfQ/ND3+SVUdSXL1GOPOU3mBqrp5i1Wnco0AALQ3x/fo70/y60kuSfIt0+PY5/oHkry3qs6ZoS4AaGfHR/RjjLuS/OqGxTdW1bOTvD/JpUlekuR1p/Bal2y2fBrpP3nJUgFgz9s1d8YbYzyY5C3T02fMWQsAdLFrgn7yuan11j0ArMBuC/qnTu1ts1YBAE3seNBX1aVV9U2bLL88ixvvJMmmt88FAE7PSi7Gq6orklwxPX3k1D6tqq6dfr57jPHK6effTPL46at0n56WPSHJ5dPPrx5jfHAVdQHAfreqq+6flOTqDcseMz2S5G+THAv6tyV5fpIfSPLcJN+Y5O+S/EGSN44xblpRTQCw763qFrhrSdZOcdu3JnnrKvYLAJyY+ehhZmtra9vuu+yc7svMq77sfPTL/N5Jcvjw4W33Xfa4LdN/2eMGp2u3XXUPAKyQoAeAxgQ9ADQm6AGgMUEPAI0JegBoTNADQGOCHgAaE/QA0JigB4DGBD0ANCboAaAxQQ8AjQl6AGjMNLWwpGWnPF1mutVlpzydc8rUZaepPXr06Lb7mqaW/cSIHgAaE/QA0JigB4DGBD0ANCboAaAxQQ8AjQl6AGhM0ANAY4IeABoT9ADQmKAHgMYEPQA0JugBoDFBDwCNCXoAaMx89LCkZeaTX9Yzn/nM2fY9t/X19W33raql9n306NGl+sNOMqIHgMYEPQA0JugBoDFBDwCNCXoAaEzQA0Bjgh4AGhP0ANCYoAeAxgQ9ADQm6AGgMUEPAI0JegBoTNADQGOmqYUka2tr2+575MiRldVxupapm+2b898cTpcRPQA0JugBoDFBDwCNCXoAaEzQA0Bjgh4AGhP0ANCYoAeAxgQ9ADQm6AGgMUEPAI0JegBoTNADQGOCHgAaE/QA0Jj56GFm6+vrc5ewJ805J/yhQ4dm2zecrqVH9FV1QVW9pKr+sKo+VVUPVNW9VfX+qnpxVW26j6q6rKpuqKp7qur+qrqlqq6pqocsWxMAsLCKEf1VSd6U5DNJ1pPcmeTbk/x4krckeW5VXTXGGMc6VNWPJXlHkq8k+f0k9yT50SSvTfL06TUBgCWtIug/keR5Sf5kjPH1Ywur6peT/EWSF2QR+u+Ylp+b5HeSfC3JgTHGX07LX53kfUmurKoXjjGuW0FtALCvLf3W/RjjfWOMPz4+5Kfln03y5unpgeNWXZnkW5Ncdyzkp+2/kuRV09OfW7YuAODMX3X/j1P74HHLLp/ad22y/Y1J7k9yWVU99EwWBgD7wRm76r6qzkryk9PT40P9cVP7iY19xhgPVtXtSR6f5DFJbj3JPm7eYtVFp1ctAPR0Jkf0r0nyfUluGGO8+7jl503tvVv0O7b8EWeqMADYL87IiL6qXpbkFUk+luRFp9t9ascJt0oyxrhki/3fnOTJp7lfAGhn5SP6qnppktcl+eskB8cY92zY5NiI/bxs7twN2wEA27TSoK+qa5K8MclHswj5z26y2cen9sJN+p+V5NFZXLx32yprA4D9aGVBX1W/mMUNbz6SRcjftcWm75va52yy7hlJHp7kg2OMr66qNgDYr1YS9NPNbl6T5OYkzxpj3H2Cza9PcneSF1bVU457jYcl+Y3p6ZtWURcA7HdLX4xXVVcn+bUs7nR3U5KXVdXGze4YY1ybJGOM+6rqp7MI/CNVdV0Wt8B9XhZfvbs+i9viAgBLWsVV94+e2ockuWaLbY4mufbYkzHGO6vqmUl+JYtb5D4syaeS/EKS1x9/X3wAYPuWDvoxxlqStW30+0CSH152/7AKhw8fnm3fBw4cmG3fe9mc/2awl5zpW+ACADMS9ADQmKAHgMYEPQA0JugBoDFBDwCNCXoAaEzQA0Bjgh4AGhP0ANCYoAeAxgQ9ADQm6AGgMUEPAI0JegBobOn56GG/O3To0NwlzGJtbW2p/kePHl2q/5EjR7bd98CBA0vte9nfHXaSET0ANCboAaAxQQ8AjQl6AGhM0ANAY4IeABoT9ADQmKAHgMYEPQA0JugBoDFBDwCNCXoAaEzQA0Bjgh4AGjNNLSzp8OHD+3Lfc1tmqtn19fXVFQK7nBE9ADQm6AGgMUEPAI0JegBoTNADQGOCHgAaE/QA0JigB4DGBD0ANCboAaAxQQ8AjQl6AGhM0ANAY4IeABoT9ADQmPnoIcvNT37kyJGl9j3nnPKHDh2abd/LzCe/iv6wXxjRA0Bjgh4AGhP0ANCYoAeAxgQ9ADQm6AGgMUEPAI0JegBoTNADQGOCHgAaE/QA0JigB4DGBD0ANCboAaAx09RClpvydNnpUtfW1pbqD3AiS4/oq+qCqnpJVf1hVX2qqh6oqnur6v1V9eKq+oYN2z+qqsYJHtctWxMAsLCKEf1VSd6U5DNJ1pPcmeTbk/x4krckeW5VXTXGGBv6/VWSd27yeh9dQU0AQFYT9J9I8rwkfzLG+PqxhVX1y0n+IskLsgj9d2zo95ExxtoK9g8AbGHpt+7HGO8bY/zx8SE/Lf9skjdPTw8sux8A4PSd6Yvx/nFqH9xk3XdU1c8kuSDJ55N8aIxxyxmuBwD2lTMW9FV1VpKfnJ6+a5NNfmh6HN/nSJKrxxh3nqm6AGA/OZMj+tck+b4kN4wx3n3c8vuT/HoWF+LdNi17QpK1JAeTvLeqnjTG+PLJdlBVN2+x6qLtFg0AnZyRG+ZU1cuSvCLJx5K86Ph1Y4y7xhi/Osb48BjjC9PjxiTPTvLnSb4nyUvORF0AsN+sfERfVS9N8rokf53kWWOMe06l3xjjwap6S5JLkzxjeo2T9blkixpuTvLkUy4aAJpa6Yi+qq5J8sYsvgt/cLry/nR8bmrPWWVdALBfrSzoq+oXk7w2yUeyCPm7tvEyT53a2064FQBwSlYS9FX16iwuvrs5i7fr7z7BtpdW1TdtsvzyJC+fnr59FXUBwH639Gf0VXV1kl9L8rUkNyV5WVVt3OyOMca108+/meTx01fpPj0te0KSy6efXz3G+OCydQEAq7kY79FT+5Ak12yxzdEk104/vy3J85P8QJLnJvnGJH+X5A+SvHGMcdMKagIAsoKgn+5Xv3Ya2781yVuX3S8AcHJn5Hv0AMDuIOgBoDFBDwCNCXoAaEzQA0Bjgh4AGhP0ANCYoAeAxgQ9ADQm6AGgMUEPAI0JegBoTNADQGOCHgAaE/QA0JigB4DGBD0ANCboAaAxQQ8AjQl6AGhM0ANAY4IeABoT9ADQmKAHgMYEPQA0JugBoDFBDwCNCXoAaEzQA0Bjgh4AGqsxxtw1rFxVff7ss88+/+KLL567FADYlltvvTUPPPDAPWOMC5Z5na5Bf3uSc5PcscUmF03tx3akoB4cs+1x3LbHcTt9jtn27Obj9qgk940xHr3Mi7QM+pOpqpuTZIxxydy17BWO2fY4btvjuJ0+x2x79sNx8xk9ADQm6AGgMUEPAI0JegBoTNADQGP78qp7ANgvjOgBoDFBDwCNCXoAaEzQA0Bjgh4AGhP0ANCYoAeAxvZV0FfVd1bVf6+q/1tVX62qO6rqt6rqW+aubbeajtHY4vHZueubS1VdWVVvqKqbquq+6Xi8/SR9LquqG6rqnqq6v6puqaprquohO1X33E7nuFXVo05w7o2qum6n659DVV1QVS+pqj+sqk9V1QNVdW9Vvb+qXlxVm/4/vt/Pt9M9bp3Pt7PmLmCnVNVjk3wwybcl+aMs5h7+wSQ/n+Q5VfX0McbnZyxxN7s3yW9tsvxLO13ILvKqJE/M4hh8Ov88p/WmqurHkrwjyVeS/H6Se5L8aJLXJnl6kqvOZLG7yGkdt8lfJXnnJss/usK6drOrkrwpyWeSrCe5M8m3J/nxJG9J8tyqumocd/cz51uSbRy3Sb/zbYyxLx5J3p1kJPkPG5b/l2n5m+eucTc+ktyR5I6569htjyQHk3xvkkpyYDqH3r7FtucmuSvJV5M85bjlD8vij8+R5IVz/0678Lg9alp/7dx1z3zMLs8ipL9hw/JHZhFeI8kLjlvufNvecWt7vu2Lt+6r6jFJnp1FaP3XDasPJflykhdV1Tk7XBp71BhjfYzxyTH9D3ESVyb51iTXjTH+8rjX+EoWI9wk+bkzUOauc5rHjSRjjPeNMf54jPH1Dcs/m+TN09MDx61yvmVbx62t/fLW/eVT+55N/tG/WFUfyOIPgacmee9OF7cHPLSqfiLJd2XxR9EtSW4cY3xt3rL2jGPn37s2WXdjkvuTXFZVDx1jfHXnytozvqOqfibJBUk+n+RDY4xbZq5pt/jHqX3wuGXOt5Pb7Lgd0+582y9B/7ip/cQW6z+ZRdBfGEG/mUcmeduGZbdX1U+NMY7OUdAes+X5N8Z4sKpuT/L4JI9JcutOFrZH/ND0+CdVdSTJ1WOMO2epaBeoqrOS/OT09PhQd76dwAmO2zHtzrd98dZ9kvOm9t4t1h9b/ogdqGWv+d0kz8oi7M9J8v1JfjuLz7P+tKqeOF9pe4bzb3vuT/LrSS5J8i3T45lZXFh1IMl79/nHba9J8n1JbhhjvPu45c63E9vquLU93/ZL0J9MTa3PDTcYYxyePuv6uzHG/WOMj44xfjaLixjPTrI2b4UtOP82Mca4a4zxq2OMD48xvjA9bszi3bc/T/I9SV4yb5XzqKqXJXlFFt8eetHpdp/afXe+nei4dT7f9kvQH/sL9rwt1p+7YTtO7tjFLM+YtYq9wfm3QmOMB7P4elSyD8+/qnppktcl+eskB8cY92zYxPm2iVM4bpvqcL7tl6D/+NReuMX6753arT7D5/9319TuybeydtiW59/0eeGjs7go6LadLGqP+9zU7qvzr6quSfLGLL7TfXC6gnwj59sGp3jcTmRPn2/7JejXp/bZm9wN6ZuzuIHEA0n+bKcL28OeNrX75j+LJbxvap+zybpnJHl4kg/u4yugt+OpU7tvzr+q+sUsbnjzkSzC6q4tNnW+Hec0jtuJ7OnzbV8E/Rjjb5K8J4sLyF66YfXhLP5K+70xxpd3uLRdraoeX1Xnb7L8u7P46zhJTnjbV5Ik1ye5O8kLq+opxxZW1cOS/Mb09E1zFLabVdWlVfVNmyy/PMnLp6f74vyrqldncRHZzUmeNca4+wSbO98mp3PcOp9vtV/uW7HJLXBvTXJpFnfq+kSSy4Zb4P4LVbWW5JeyeEfk9iRfTPLYJD+SxV22bkjy/DHGP8xV41yq6ookV0xPH5nk32bx1/5N07K7xxiv3LD99VnckvS6LG5J+rwsvgp1fZJ/tx9uInM6x236StPjkxzJ4na5SfKE/PP3xF89xjgWXG1V1dVJrk3ytSRvyOafrd8xxrj2uD77/nw73ePW+nyb+9Z8O/lI8q+y+LrYZ5L8Q5K/zeLijPPnrm03PrL4asn/yOIK1S9kcZOJzyX5X1l8D7XmrnHGY7OWxVXLWz3u2KTP07P44+jvs/io6H9nMVJ4yNy/z248bklenOR/ZnFHyy9lcUvXO7O4d/u/mft32UXHbCQ54nxb7rh1Pt/2zYgeAPajffEZPQDsV4IeABoT9ADQmKAHgMYEPQA0JugBoDFBDwCNCXoAaEzQA0Bjgh4AGhP0ANCYoAeAxgQ9ADQm6AGgMUEPAI0JegBoTNADQGP/D0f+ocg2prjgAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fe8e68579e8>"
]
},
"metadata": {
"image/png": {
"height": 250,
"width": 253
},
"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",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
]
}
],
"source": [
"# Look at the data values for a couple of images\n",
{
"cell_type": "markdown",
"metadata": {},
"source": [
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
"The data consists of values between 0-255 representing the **grayscale level**"
]
},
{
"cell_type": "code",
"execution_count": 188,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(60000,)\n"
]
}
],
"source": [
"# The labels are the digit on the image\n",
"print(y_train.shape)"
]
},
{
"cell_type": "code",
"execution_count": 190,
"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",
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
"# 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",
"metadata": {},
"source": [
"**IMPORTANT: One-Hot encoding**\n",
"\n",
"**TODO: Better frame the explaination**\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",
"\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",
"\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",
"\n",
"Fortunately, we don't have to code this ourselves because Keras has a built-in function for this."
]
},
{
"cell_type": "code",
"execution_count": 191,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(60000, 10)\n"
]
}
],
"source": [
"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",
"execution_count": 194,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/20\n",
"60000/60000 [==============================] - 2s 34us/step - loss: 0.5888 - acc: 0.8434\n",
"Epoch 2/20\n",
"60000/60000 [==============================] - 1s 20us/step - loss: 0.2569 - acc: 0.9267\n",
"Epoch 3/20\n",
"60000/60000 [==============================] - 1s 16us/step - loss: 0.2024 - acc: 0.9416\n",
"Epoch 4/20\n",
"60000/60000 [==============================] - 1s 17us/step - loss: 0.1706 - acc: 0.9497\n",
"Epoch 5/20\n",
"60000/60000 [==============================] - 1s 23us/step - loss: 0.1475 - acc: 0.9563\n",
"Epoch 6/20\n",
"60000/60000 [==============================] - 1s 20us/step - loss: 0.1290 - acc: 0.9627\n",
"Epoch 7/20\n",
"60000/60000 [==============================] - 1s 23us/step - loss: 0.1162 - acc: 0.9651\n",
"Epoch 8/20\n",
"60000/60000 [==============================] - 1s 19us/step - loss: 0.1035 - acc: 0.9691\n",
"Epoch 9/20\n",
"60000/60000 [==============================] - 2s 28us/step - loss: 0.0939 - acc: 0.9716\n",
"Epoch 10/20\n",
"60000/60000 [==============================] - 1s 22us/step - loss: 0.0848 - acc: 0.9743\n",
"Epoch 11/20\n",
"60000/60000 [==============================] - 1s 25us/step - loss: 0.0777 - acc: 0.9763\n",
"Epoch 12/20\n",
"60000/60000 [==============================] - 1s 20us/step - loss: 0.0720 - acc: 0.9780\n",
"Epoch 13/20\n",
"60000/60000 [==============================] - 1s 22us/step - loss: 0.0655 - acc: 0.9808\n",
"Epoch 14/20\n",
"60000/60000 [==============================] - 2s 30us/step - loss: 0.0610 - acc: 0.9817\n",
"Epoch 15/20\n",
"60000/60000 [==============================] - 1s 16us/step - loss: 0.0563 - acc: 0.9832\n",
"Epoch 16/20\n",
"60000/60000 [==============================] - 1s 20us/step - loss: 0.0527 - acc: 0.9842\n",
"Epoch 17/20\n",
"60000/60000 [==============================] - 1s 21us/step - loss: 0.0478 - acc: 0.9854\n",
"Epoch 18/20\n",
"60000/60000 [==============================] - 1s 15us/step - loss: 0.0453 - acc: 0.9864\n",
"Epoch 19/20\n",
"60000/60000 [==============================] - 1s 18us/step - loss: 0.0419 - acc: 0.9874\n",
"Epoch 20/20\n",
"60000/60000 [==============================] - 1s 20us/step - loss: 0.0387 - acc: 0.9885\n"
]
},
{
"data": {
"text/plain": [
"<keras.callbacks.History at 0x7fe8e7465438>"
]
},
"execution_count": 194,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Building the keras model\n",
"from keras.models import Sequential\n",
"from keras.layers import Dense\n",
"\n",
"model = Sequential()\n",
"\n",
"model.add(Dense(64,input_shape=(28*28,), activation=\"relu\"))\n",
"\n",
"model.add(Dense(64, activation = \"relu\"))\n",
"\n",
"model.add(Dense(10, activation = \"softmax\"))\n",
"\n",
"model.compile(loss=\"categorical_crossentropy\", optimizer=\"rmsprop\", metrics=[\"accuracy\"])\n",
"\n",
"model_history = model.fit(X_train_prep, y_train_cat, epochs=20, batch_size=512);"
]
},
{
"cell_type": "code",
"execution_count": 196,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"10000/10000 [==============================] - 1s 85us/step\n",
"The [loss, accuracy] are: [0.08737125840586377, 0.974]\n"
]
}
],
"source": [
"# Evaluating the model on test dataset\n",
"print(\"The [loss, accuracy] on test dataset are: \" , model.evaluate(X_test_prep, y_test_onehot))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Work in Progress\n",
"\n",
"## Network results on dataset used in previous notebooks"
"metadata": {},
"outputs": [],
"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"
]
},
{
"cell_type": "code",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
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
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Creating a network to solve the XOR problem\n",
"# Loading and plotting the data\n",
"xor = pd.read_csv(\"xor.csv\")\n",
"xv = xor[\"x\"]\n",
"yv = xor[\"y\"]\n",
"\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",
"plt.scatter(xv, yv, color=colors, marker=\"o\");"
]
},
{
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": [
"# 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",
"\n",
"# Building a Keras model\n",
"\n",
"def a_simple_NN():\n",
" \n",
" model = Sequential()\n",
" model.add(Dense(4, input_shape = (2,), activation = \"relu\"))\n",
" model.compile(loss=\"binary_crossentropy\", optimizer=\"rmsprop\", metrics=[\"accuracy\"])\n",
" \n",
" return model\n",
"name": "stdout",
"output_type": "stream",
"text": [
"Train on 350 samples, validate on 150 samples\n",
"Epoch 1/100\n",
"350/350 [==============================] - 1s 2ms/step - loss: 0.8305 - acc: 0.3571 - val_loss: 0.8120 - val_acc: 0.3667\n",
"350/350 [==============================] - 0s 88us/step - loss: 0.8170 - acc: 0.3629 - val_loss: 0.8010 - val_acc: 0.3667\n",
"350/350 [==============================] - 0s 121us/step - loss: 0.8060 - acc: 0.3657 - val_loss: 0.7904 - val_acc: 0.3733\n",
"350/350 [==============================] - 0s 133us/step - loss: 0.7960 - acc: 0.3743 - val_loss: 0.7807 - val_acc: 0.3867\n",
"350/350 [==============================] - 0s 121us/step - loss: 0.7866 - acc: 0.3800 - val_loss: 0.7716 - val_acc: 0.3867\n",
"350/350 [==============================] - 0s 91us/step - loss: 0.7773 - acc: 0.3886 - val_loss: 0.7625 - val_acc: 0.3867\n",
"350/350 [==============================] - 0s 97us/step - loss: 0.7682 - acc: 0.3914 - val_loss: 0.7536 - val_acc: 0.3867\n",
"350/350 [==============================] - 0s 86us/step - loss: 0.7594 - acc: 0.4086 - val_loss: 0.7450 - val_acc: 0.4067\n",
"350/350 [==============================] - 0s 81us/step - loss: 0.7507 - acc: 0.4143 - val_loss: 0.7367 - val_acc: 0.4200\n",
"350/350 [==============================] - 0s 88us/step - loss: 0.7420 - acc: 0.4200 - val_loss: 0.7283 - val_acc: 0.4333\n",
"350/350 [==============================] - 0s 130us/step - loss: 0.7335 - acc: 0.4343 - val_loss: 0.7200 - val_acc: 0.4533\n",
"350/350 [==============================] - 0s 87us/step - loss: 0.7252 - acc: 0.4429 - val_loss: 0.7123 - val_acc: 0.4600\n",
"350/350 [==============================] - 0s 138us/step - loss: 0.7172 - acc: 0.4514 - val_loss: 0.7043 - val_acc: 0.4733\n",
"350/350 [==============================] - 0s 103us/step - loss: 0.7091 - acc: 0.4600 - val_loss: 0.6967 - val_acc: 0.4733\n",
"350/350 [==============================] - 0s 144us/step - loss: 0.7014 - acc: 0.4800 - val_loss: 0.6894 - val_acc: 0.4933\n",