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 IPCompleter.greedy=True\n",
"%config InlineBackend.figure_format = 'retina'"
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
112
113
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
"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))"
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"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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6JFHHtHChQsVEhKi119/XWlpabZjAQAAZEJBAPLJypUrtXnzZknSqVOn9Nhjj6lhw4basWOH5WQAAAD/h4IA5JNmzZpp9erVqlSpkmu2evVqVa1aVRMmTFBycrLFdAAAAOkoCEA+qlOnjqKjozVy5EjX3Y0SExM1fPhwhYeHKzo62nJCAADg6ygIQD4rUKCAnn/+eW3cuFE1atRwzaOjo1WrVi0NHz5cCQkJFhMCAABfRkEALKlatarWrVunSZMmqWDBgpKk1NRUTZo0iesSAACANRQEwKKAgAANGTJEW7duVcOGDSVJQ4cOVdWqVS0nAwAAvopHvAJu4I477tDy5cs1Z84cderUKcv6AwcO6MYbb7SQDAAA+BrOIABuws/PTw8//LDr40Zn7du3TxUqVFC3bt30zz//WEoHAAB8BQUBcGOO46hv3746ceKEZs2apUqVKumzzz6zHQsAAHgxCgLgxhITE1WsWDHX60OHDun+++9Xhw4ddODAAYvJAACAt6IgAG6sYMGC+uijj7RgwQL95z//cc0///xzBQcH6/3335fjOBYTAgAAb0NBADzAvffeq9jYWPXq1cs1O3bsmB555BFFRERo9+7dFtMBAABvQkEAPESJEiX09ttva9myZSpbtqxrvnTpUlWuXFkzZ860Fw4AAHgNCgLgYZo2bapt27bpySeflJ9f+iF8+vRplSpVynIyAADgDSgIgAcqXLiwXn75Za1Zs0YhISHq0qWL7rnnHtuxAACAF+BBaYAHCw8PV1RUlBISErKsW7lypYoWLaoaNWpYSAYAADwVZxAADxcUFKSrrroq0+z48ePq0qWLwsPD9fTTT+vMmTOW0gEAAE9DQQC80LPPPqs//vhDqampmjRpkqpWraoffvjBdiwAAOABKAiAF3r88cfVpEkT1+udO3eqUaNG6tevn44fP24xGQAAcHcUBMALlStXTsuWLdPbb7+d6eNHb775pipXrqxFixZZTAcAANwZBQHwUsYY9erVS3FxcWrTpo1rvm/fPrVq1Updu3bV4cOHLSYEAADuiIIAeLnSpUtrwYIF+uijj3Tttde65nPmzFGdOnWUkpJiMR0AAHA3FATABxhj9MADD2j79u166KGHXPMhQ4YoIIC7HQMAgP9DQQB8yLXXXqs5c+bo66+/1kMPPaSePXvajgQAANwMBQHwQa1atdKc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mJgYNW3aVH369FHjxo1txwIAjxFgOwAAAHmhbNmyWrp06XkvVP76669ljFGrVq0sJAMA98YZBACA1zLGqECBAplmR44cUWRkpFq3bq0uXbro8OHDltIBgHuiIAAAfMqoUaN06NAhSdL//vc/VapUSXPnzpXjOJaTAYB7oCAAAHzKmDFj9NBDD7leHz58WJ07d1bbtm31559/WkwGAO6BggAA8CnXXnut5syZo6+//lo33XSTa/7ll18qODhY77zzDmcTAPg0CgIAwCe1atVKsbGx6tu3r2t2/Phx9e7dW82aNdOvv/5qMR0A2ENBAACYiqozAAAgAElEQVT4rKuuukrTp0/XihUrdMcdd7jmy5cvV5MmTZScnGwxHQDYQUEAAPi8Ro0aacuWLRo6dKj8/NL/apwwYYICAwMtJwOA/EdBAABAUqFChfTiiy/qp59+0pNPPqkHH3wwyzZpaWkWkgFA/qIgAADwLzVr1tTLL78sY0ym+erVq1W9enWtX7/eUjIAyB8UBAAALiIhIUGRkZHaunWr6tSpo8GDB+v06dO2YwFAnqAgAABwEVFRUdq3b5+k9I8ZvfzyywoNDdXy5cstJwOA3EdBAADgIurWrauYmBjdddddrtlvv/2mpk2bqk+fPoqPj7eYDgByFwUBAIAcuO2227R48WLNmDFDJUqUcM3ffvttBQcH66uvvrKYDgByDwUBAIAcMsaoR48eiouLU7t27Vzz/fv3695771Xnzp31999/W0wIAFeOggAAwCW68cYbNW/ePH366acqVaqUaz5//nz9888/FpMBwJWjIAAAcBmMMerYsaO2b9+ubt26SZJGjx6tChUqWE4GAFeGggAAwBUoWbKkZs6cqRUrVuipp57Ksn7Lli08YA2AR6EgAACQCxo1aqTAwMBMs507d6p27dpq2rSpdu7caSkZAFwaCgIAAHkgLS1NvXr1UkJCglauXKkqVapo8uTJSklJsR0NAC6IggAAQB5ITU1V3bp15e/vLyn9acxDhw5VnTp1tHXrVsvpACB7FAQAAPJAYGCgxo8fr/Xr16tatWqu+caNG1WjRg2NGjVKiYmJFhMCwPlREAAAyENhYWFav369xo8frwIFCkiSUlJSNHbsWFWvXl1r1661nBAAMqMgAACQxwIDA/XMM89o8+bNqlu3rmu+fft21atXT5MnT7aYDgAy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mq9bt07NmzdXUlKSxXQALpdb3ebUcZx9knrkcNss91VzHGebpO65HAsAAFzAnXfeqU2bNmnixIl64YUXlJycrJdeeklBQUG2owG4DG5zBgEAAHiuoKAgjRo1StHR0Ro+fLg6deqUZZvzPVMBgPuhIAAAgFwTEhKicePGZXmA2sqVKxUcHKyVK1daSgYgpygIAAAgT505c0Y9e/bUzp071bhxY/Xt21fHjx+3HQtANigIAAAgT23btk1///236/Vbb72lkJAQLVy40GIqANmhIAAAgDx15513KjY2Vvfee69r9scff6h169bq0qWLDh/m+aWAO6EgAACAPFe6dGl98cUX+vjjj3Xddde55v/73/9UqVIlzZ07V47jWEwI4CwKAgAAyBfGGHXq1Enbt29Xly5dXPPDhw+rc+fOatu2rfbv328xIQCJggAAAPLZNddco9mzZ2vhwoW66aabXPPFixfr9OnTFpMBkCgIAADAknvuuUexsbHq27evJGns2LG6/fbbLacCQEEAAADWXHXVVZo+fbrWrVunQYMGZVm/fv16paamWkgG+C4KAgAAsC48PFwBAQGZZj///LMaNmyoOnXqKCYmxlIywPdQEAAAgNtJS0tTZGSkEhMTtWHDBoWFhWn06NFKSkqyHQ3wehQEAADgdtLS0nTPPfcoKChIkpScnKwxY8YoLCxM69evt5wO8G4UBAAA4HYCAgI0YsQIbd68WXXq1HHNY2NjVadOHT311FPc8QjIIxQEAADgtipVqqRVq1Zp6tSpKly4sKT0swuvvPKKQkNDtXz5cssJAe9DQQAAAG7N399fAwcOVExMjO666y7X/LffflPTpk31wgsvWEwHeB8KAgAA8Ai33XabFi9erBkzZqhEiRKS0p/O3LRpU8vJAO8ScPFNAAAA3IMxRj169FCLFi3Uv39/3Xzzzapbt67tWIBXoSAAAACPc+ONN+rzzz9XSkpKlnWffvqpkpKS9OCDD8oYYyEd4Nn4iBEAAPBY5z5c7eDBg3r00UfVpUsXtWnTRvv27bOUDPBcFAQAAOA1xo4dq3/++UeStHDhQoWEhOitt95SWlqa5WSA56AgAAAArzFhwgQNGDDA9frEiRPq27evmjZtqp07d1pMBngOCgIAAPAaxYoV07Rp07Rq1SpVqFDBNV+5cqWqVKmiyZMnn/e6BQD/h4IAAAC8Tv369bV582Y988wz8vf3lyQlJCRo6NChqlOnjrZu3Wo5IeC+KAgAAMArFSxYUOPHj9eGDRtUrVo113zjxo1q1aqVkpKSLKYD3BcFAQAAeLXq1atr/fr1Gj9+vAoUKCBJmjJlioKCgiwnA9wTz0EAAABeLzAwUM8884zatWunuXPnqkOHDlm2SU5OVmBgoIV0gHvhDAIAAPAZFStW1OjRo7M8QG358uWqWLGili5daikZ4D4oCAAAwKedPn1avXr10m+//aa7775bkZGROnbsmO1YgDUUBAAA4NNiY2NdD1eTpBkzZig4OFhffPGFxVSAPRQEAADg02rVqqXt27erY8eOrtmBAwfUrl07derUSQcPHrSYDsh/FAQAAODzrr/+en366aeaN2+ebrjhBtf8008/VaVKlTRr1iw5jmMxIZB/KAgAAAAZ2rdvr7i4OPXo0cM1O3r0qLp166Z77rlH+/bts5gOyB8UBAAAgH+5+uqrNWPGDC1evFhlypRxzVeuXMnD1eATKAgAAADncffdd2vbtm16/PHHZYzRCy+8oHLlytmOBeQ5CgIAAEA2ihYtqldffVUbN27U448/nmX9mjVrlJycbCEZkHcoCAAAABcRFhYmf3//TLO4uDg1adJE4eHhio6OtpQMyH0UBAAAgEuUmpqqyMhIJSUlKTo6WrVq1dKIESOUkJBgOxpwxSgIAAAAl6Fdu3YqWLCgpPTCMH78eFWrVk2rV6+2nAy4MhQEAACAS+Tv76+hQ4dqy5YtatCggWu+Y8cONWjQQAMHDtTJkyctJgQuHwUBAADgMpUvX14rVqzQ9OnTVbRoUUmS4ziaNm2aQkJC9N1331lOCFw6CgIAAMAV8PPzU9++fRUbG6uWLVu65nv37lWLFi00ZswYi+mAS0dBAAAAyAW33HKLFi5cqNmzZ6tkyZKSJGOMmjdvbjkZcGkCbAcAAADwFsYYdenSRRERERo4cKBuvPFG1a5d23Ys4JJQEAAAAHJZqVKlNHfuXKWmpmZZN3fuXJ05c0bdu3eXMcZCOuDC+IgRAABAHjn34Wp//fWX+vXrp0ceeUTNmzfXnj177AQDLoCCAAAAkE/GjRuno0ePSpKWLFmiypUra9q0aUpLS7OcDPg/FAQAAIB8MnHiRD355JPy80v/FezUqVMaOHCgGjRooO3bt1tOB6SjIAAAAOSTIkWK6OWXX9aaNWsUHBzsmq9Zs0bVqlXT+PHjlZycbDEhQEEAAADId+Hh4YqKitJzzz2ngID0e8YkJSVpxIgRqlWrlqKioiwnhC+jIAAAAFhQoEABjR49WlFRUapZs6ZrvmXLFt13331KSkqymA6+jIIAAABgUWhoqNauXauXXnpJBQsWlCRNnTpVQUFBlpPBV1EQAAAALAsICNBTTz2lbdu2aezYsWrfvn2WbRITEy0kgy+iIAAAALiJ22+/Xc8++2yW+bJly1S+fHl98803FlLB11AQAAAA3NipU6fUu3dv7d27V/fcc48efvhhHTlyxHYseDEKAgAAgBv7+eefdfz4cdfr2bNnq1KlSvrkk0/kOI7FZPBWFAQAAAA3VqNGDW3fvl0PPviga/b333/r//2//6f27dtr//79FtPBG7lNQTDG3GSMmWGM2W+MSTTG7DHGvGqMufoS91My4317MvazP2O/N+VVdgB5a8ECqUMH6a670pcLFthOBPgGjj33ce211+p///ufvvrqK5UuXdo1/+KLLxQcHKz33nuPswnINW5REIwx5SRtktRD0npJUyT9JulxSWuNMdfkcD/XSFqb8b5fM/azPmO/m4wxZXM/PYC8MnmyVKKE1Lat9Pnn0rJl6cu2bdPnkyfbTgh4J44999W6dWvFxsaqT58+rll8fLx69uypu+++W7///rvFdPAWblEQJE2XVErSQMdx2jqOM8xxnKZK/wW/gqRxOdzPeEnlJU1xHKdZxn7aKr0wlMr4PgA8QPfu0tChUnz8+dfHx6ev79EjX2MBXo9jz/0VL15cb731lpYvX65y5cq55mvXrlVaWprFZPAW1gtCxr/qR0jaI+mNc1Y/J+mUpK7GmCIX2U8RSV0ztn/unNWvZ+y/OWcRAPc3ebL0wQc523bmTP41E8gtHHuepXHjxtq6dasGDx4sPz8/jR8/XrfddpvtWPAC1guCpKYZy8WO42SqvY7jnJC0WlJhSbUvsp86kgpJWp3xvn/vJ03S4oyXTa44MYA8NS6n5wwvc3sA58ex53kKFy6syZMnKzo6WgMGDMiy/ocfflBSUpKFZPBk7lAQKmQsf8lm/c6MZfl82g8AixYsyP6jDdmJj+fiSeBKcex5tipVqsjf3z/TLDY2VnfddZdq1qypDRs2WEoGT+QOBaF4xjK7H0tn5yXyaT+SJGPMpvN9SaqYk/cDuDyzZuXv+wCk49jzLqmpqYqMjFRycrK2bdum2rVra8iQITp9+rTtaPAA7lAQLsZkLK/03l25tR8AeehS/wXzSt8HIB3Hnvd54IEHVLhwYUlSWlqaXnrpJVWtWlUrVqywGwxuzx0KwtkfLcWzWX/VOdvl9X4kSY7j1Djfl6Sfc/J+AJeneHZHcB69D0A6jj3v4u/vr0GDBmnbtm1q1qyZa75r1y41adJEjz76qOJpd8iGOxSEHRnL7K4NuCNjmd21Bbm9HwAWPfxw/r4PQDqOPe9UtmxZLVmyRO+++66K/6vN/fe//1VISIgWLlxoMR3clTsUhOUZywhjTKY8xphikupJOiNp3UX2sy5ju3oZ7/v3fvyUfivVf38/AG7ovvsu/V8kixdPfx+Ay8ex572MMYqMjFRcXJzu+9f/YX/++adat26tkSNHWkwHd2S9IDiO86vSb0FaRlL/c1aPkVRE0izHcU6dHRpjKhpjMl0s7DjOSUmzM7Yffc5+BmTs/zvHcX7LxfgA8sCIEXm7PYDz49jzbv/5z380f/58ffzxx7ruuuskSX5+fmrTpo3lZHA3xnHsX7NrjCknaY3Sn3a8QNJ2SeFKf2bBL5LqOo5z5F/bO5LkOI45Zz/XZOynvKTvJa2XVEnSfZIOZezn1yvMuiksLCxs06ZNV7IbABfRvXvOHtjUvbv0/vt5nQbwHRx7vuHIkSMaNGiQrr/+er300ku24yAbNWrUUFRUVFTGdbD5xvoZBMl1FqGmpJlKLwZPSSon6TVJdf5dDi6ynyNKf2Daa5Juz9hPuKT3JdW40nIAIP/MnClNmpT9Rx6KF09fzy8oQO7i2PMN11xzjWbPnq1JkyZlWffhhx/q7bffVlpa2nneCV/gFmcQPAlnEID8t2BB+r3W4+PTfzl5+GE+9wzkB44933PgwAEFBwfr2LFjaty4sd555x3dfvvttmP5LFtnEALy85sBwOW47z5+KQFs4NjzPRMmTNCxY8ckSStWrFCVKlU0duxYDRo0KMuTmuG93OIjRgAAALDvxRdf1LBhw1xl4MyZMxo8eLDq1KmjmJgYy+mQXygIAAAAkCQVKlRIEyZM0E8//aSqVau65hs2bFBYWJhGjx6tpKQkiwmRHygIAAAAyKRGjRrasGGDxo0bp6CgIElScnKyxowZo7CwMK1fv95yQuQlCgIAAACyCAwM1PDhw7V582bVqVPHNY+NjVWHDh04k+DFKAgAAADIVqVKlbRq1Sq99tprKlKkiCRp2rRprjML8D4UBAAAAFyQv7+/HnvsMcXExGjChAlq27Ztlm0SEhIsJENeoCAAAAAgR8qUKaNhw4ZlmS9ZskTlypXTggULLKRCbqMgAAAA4LKdPHlSvXv31v79+9W2bVs98MADOnTokO1YuAIUBAAAAFy2nTt36syZM67XH3/8sSpVqqQ5c+bIcRyLyXC5KAgAAAC4bNWrV1dcXJy6d+/umv3zzz/q2rWrWrdurX379tkLh8tCQQAAAMAVKVmypN5//3199913uvXWW13zRYsWKSQkRG+++abS0tIsJsSloCAAAAAgV0RERCgmJkaPPfaYjDGSpBMnTqhfv35q0qSJdu/ebTkhcoKCAAAAgFxTtGhRvfbaa1q1apUqVKjgmm/atMlVGuDeKAgAAADIdfXq1dPmzZs1fPhw+fv7a8KECSpTpoztWMgBCgIAAADyRMGCBTVu3Dht3bpV/fr1y7L++++/V2JiooVkuBAKAgAAAPJUcHCw/P39M822bt2q5s2bq3r16lq7dq2lZDgfCgIAAADyVUpKiiIjI5WSkqLt27erXr16GjRokE6ePGk7GkRBAAAAQD7z8/NTjx49VLRoUUmS4ziaOnWqQkNDtWTJEsvpQEEAAABAvvLz81O/fv0UExOjFi1auOZ79uxRRESEIiMjdfToUYsJfRsFAQAAAFbceuutWrRokWbNmqWSJUu65jNmzFBwcLDmz59vMZ3voiAAAADAGmOMunbtqri4ON1///2u+V9//aX27dvrmWeesZjON1EQAAAAYN3111+vTz75RJ9//rluuOEGSekfRWrfvr3lZL4nwHYAAAAA4Kx27dqpcePGGjx4sK655hrVqlXLdiSfQ0EAAACAW7n66qv13nvvyXGcLOtmz56t+Ph49evXT35+fBgmL/C/KgAAANySMSbT6/379+uxxx7TY489poYNG2rHjh2Wknk3CgIAAAA8wosvvqj4+HhJ0urVq1W1alVNmDBBycnJlpN5FwoCAAAAPMKkSZM0cuRIBQSkf0o+MTFRw4cPV3h4uKKjoy2n8x4UBAAAAHiEAgUK6Pnnn9emTZtUo0YN1zw6Olq1atXS8OHDlZCQYDGhd6AgAAAAwKNUqVJF69at06RJk1SwYEFJUmpqqiZMmKBq1app9erVlhN6NgoCAAAAPE5AQICGDBmirVu3qmHDhq75jh079MADDygxMdFiOs9GQQAAAIDHuuOOO7R8+XK9+eabKlasmCRp+vTpKlCggOVknouCAAAAAI/m5+enRx99VLGxsXrppZfUpk2bLNucPn3aQjLPREEAAACAV7j55pv11FNPZZl/9913Klu2rD777DMLqTwPBQEAAABe68SJE+rdu7cOHjyo+++/X+3bt9eBAwdsx3JrFAQAAAB4rV9//VUpKSmu1/Pnz1dwcLDef/99OY5jMZn7oiAAAADAa1WrVk2xsbHq1auXa3bs2DE98sgjioiI0O7duy2mc08UBAAAAHi1EiVK6O2339ayZctUtmxZ13zp0qWqXLmyXnvtNaWmplpM6F4oCAAAAPAJTZs21bZt2/Tkk0/Kzy/91+DTp0/r8ccfV4MGDbRr1y7LCd0DBQEAAAA+o3Dhwnr55Ze1Zs0ahYSEuObbtm1TYGCgxWTug4IAAAAAnxMeHq6oqCiNHj1agYGBmjhxom699VbbsdwCBQEAAAA+KSgoSM8995xiYmLUt2/fLOsXL16sM2fOWEhmFwUBAAAAPq18+fKuaxLO2vL/27v7YDvK+oDj358XQxJKEjG0SFARR0gjJphEG5NKgEwVjIAKtHcYeZHAgFITinRgFAffWjqOvNpOYACJLUgygy0UJqDMhAiIyqsIJEBAg1BAiUESDEkI/PrH7l0ul3vNfdlzzn35fmZ29p5n9zznt/ucPef+zu7z7AMPMH/+fKZNm8Ztt93WoshawwRBkiRJ6mTbtm0sWLCAbdu2sWbNGubOncsXvvAFNmzY0OrQmsIEQZIkSeqkra2Nk08+mXHjxlVlixcvZt9992X58uUtjKw5TBAkSZKkTiKCk046iVWrVnHooYdW5U899RTz58/nmGOOYd26dS2MsLFMECRJkqRuTJo0ieuvv55rrrmGiRMnVuVXXXUVU6ZMYdmyZWRmCyNsDBMESZIkqQcRQXt7O6tXr+boo4+uyp9//nna29s588wzWxhdY5ggSJIkSdsxceJErr76am644QYmTZoEFH0V2tvbWxxZ/XZodQCSJEnSUPHJT36SVatWceaZZzJhwgSmT5/e6pBqZ4IgSZIk9cG4ceNYvHhxt/0PlixZwgsvvMDChQtpa2trQXQD5yVGkiRJUj9ExBseP/300yxatIjTTz+dOXPm8PDDD7cosoExQZAkSZJq8J3vfKe6mdovfvELPvjBD/KNb3yDrVu3tjiyvjFBkCRJkmrw7W9/m29+85uMGjUKgFdeeYVzzjmHGTNmcPfdd7c4ut4zQZAkSZJqMGrUKM4++2zuv/9+Zs2aVZU/9NBDzJo1izPOOINNmza1MMLeMUGQJEmSajRlyhTuuOMOLrzwQsaOHQvAa6+9xnnnncfUqVNZuXJlawPcDhMESZIkqWZtbW0sWrSIBx98kHnz5lXlTzzxBMceeyxbtmxpYXR/ngmCJEmS1CB77bUXt9xyC1dccQXjx48HYPHixey4444tjqxngyZBiIjZEbE8ItZHxKaI+FVEnBYRfRpANiLyz0w/b1T8kiRJUncighNOOIFVq1Zx0UUXMX/+/Dets3HjxhZE1r1BcaO0iDgc+Fv2PcgAAA/4SURBVCGwGVgGrAcOBS4A5gBH9bHKJ4El3ZQ/3f8oJUmSpP7bfffdWbhw4ZvKly9fznHHHcfFF19Me3v7m+6v0GwtTxAiYhxwGfAqcEBm3lOWfxVYARwZEe2ZubQP1a7NzK/VHqwkSZJUow0bNnDKKaewbt06jj76aH7wgx+wePFi9thjj5bFNBguMToS2BVY2pEcAGTmZuDs8uHnWxGYJEmS1Ehr1659w+Mbb7yRKVOmcOmll7YmIAZHgnBQOb+5m2W3AZuA2RHRl54cEyLihIj4ckScGhGztv8USZIkqbmmTp3Kww8/zKmnnlqVbdy4kVNOOYXHHnusJTFFZrbkhasAIu4GZgIzM/PebpY/BLwfmJKZq3tRX08b9ABwTGY+2Mu43hRLafL06dPH3ntvT4slSZKkvrv99ttZsGABa9as6Vx8X2bOaGYcg+EMwvhy/mIPyzvKJ/SyvvMpOjbvCuwMfAi4FpgGrIiISf2MU5IkSWqYj370ozzwwAOcddZZtLX1aSDPWtWSIETE2u0ML9p1uqov1ZfzXp3qyMwvZeadmbkuM1/KzHsy8yiKUZImAmf0sp4Z3U3AI32IXZIkSeq1MWPGcO6553LXXXcxZsyYlsRQ1yhGT1AMUdpbz3T6u+MMwfjuVgTGdVmvvy4BjgD2H2A9kiRJUkNNnz6dyZMnc//99zf9tWtJEDJz3vbX6tGjFH0Q9gbecGF/ROwAvAfYBvx6AK8B8Hw532mA9UiSJEkN16r7IQyGPggryvnB3SzbHxgL3JmZWwb4Oh0jGQ000ZAkSZKGrcGQIFwLrAPaI2JmR2FEjAa+VT5c3PkJETE2IiZHxLu6lE+PiDedIYiIqcC/lA/70v9BkiRJGlFafiflzNwQESdRJAorI2IpsB44DNinLF/W5WkfBm4FfgIc0Kl8IfCZiFgBPAVsASZTnJ1oo7hj8zUN2xhJkiRpiGt5ggCQmddFxFzgKxQdiUcDjwOnAxdn72/WcB1Fp+apFDdgGw38AbgJuCwz/7fu2CVJkqThZFAkCACZ+VPgE71cdyWvD3/aufw6iiRBkiRJUj8Mhj4IkiRJkgYJEwRJkiRJFRMESZIkSRUTBEmSJEkVEwRJkiRJFRMESZIkSRUTBEmSJEkVEwRJkiRJFRMESZIkSRUTBEmSJEkVEwRJkiRJFRMESZIkSRUTBEmSJEkVEwRJkiRJFRMESZIkSRUTBEmSJEkVEwRJkiRJFRMESZIkSRUTBEmSJEkVEwRJkiRJFRMESZIkSRUTBEmSJEkVEwRJkiRJFRMESZIkSRUTBEmSJEkVEwRJkiRJFRMESZIkSRUTBEmSJEkVEwRJkiRJFRMESZIkSRUTBEmSJEkVEwRJkiRJFRMESZIkSRUTBEmSJEkVEwRJkiRJFRMESZIkSRUTBEmSJEkVEwRJkiRJFRMESZIkSRUTBEmSJEkVEwRJkiRJFRMESZIkSRUTBEmSJEkVEwRJkiRJFRMESZIkSRUTBEmSJEkVEwRJkiRJFRMESZIkSRUTBEmSJEkVEwRJkiRJFRMESZIkSRUTBEmSJEkVEwRJkiRJFRMESZIkSRUTBEmSJEkVEwRJkiRJFRMESZIkSZWWJwgR8daIWBQRV0bELyNia0RkRJw4gDpnR8TyiFgfEZsi4lcRcVpEtNUZuyRJkjTc7NDqAICdgAvLv38HPAe8s7+VRcThwA+BzcAyYD1wKHABMAc4aiDBSpIkScNZy88gAJuATwC7Z+ZuwPf6W1FEjAMuA14FDsjMBZn5z8B+wM+AIyOivYaYJUmSpGGp5QlCZm7NzJsy89kaqjsS2BVYmpn3dHqNzcDZ5cPP1/A6kiRJ0rDU8gShZgeV85u7WXYbxdmK2RGxY/NCkiRJkoaO4ZYg7FPOH+u6IDO3Ab+h6HexVzODkiRJkoaKwdBJuU7jy/mLPSzvKJ+wvYoi4t4eFk1bvXo1M2bM6GtskiRJUq+tXr0aYM9mv24tCUJErAXe3YenXJ2Zn63jtfsoynkOoI63vPzyy6/ed999D9QRkJpucjl/pKVRqD9su6HN9hu6bLuhzfYb2qYBf9HsF63rDMITFMOK9tYzNb1uVx1nCMb3sHxcl/V6lJndniLoOLPQ03INbrbf0GXbDW2239Bl2w1ttt/Q9meuaGmoWhKEzJxXRz01eBSYCewNvGGHRsQOwHuAbcCvmx+aJEmSNPgNt07KK8r5wd0s2x8YC9yZmVuaF5IkSZI0dAzJBCEixkfE5Ih4R5dF1wLrgPaImNlp/dHAt8qHi5sUpiRJkjTkDIpRjCLiLF7vRLNfOf9cRPxt+fcdmXl5p6d8GrgS+D5wfEdhZm6IiJMoEoWVEbEUWA8cRjEE6rXAskZthyRJkjTUDYoEgeKSoLldymaXU4fL6YXMvC4i5gJfAY4ARgOPA6cDF2fmQEYwkiRJkoa18P9lSZIkSR2GZB8ESZIkSY1hgiBJkiSpYoIgSZIkqWKCIEmSJKligiBJkiSpYoIgSZIkqWKCIEmSJKligtCDiHhrRCyKiCsj4pcRsTUiMiJOHECdsyNieUSsj4hNEfGriDgtItrqjF2FuvZ32e49TT9vVPwjQUTsERHfi4hnImJLRKyNiAsj4m19rGeX8nlry3qeKevdo1Gxj3R1tF1ErNzO8TW6kdswUkXEkRHx3Yi4PSI2lPv6qn7WVcsxrN6pq+3KdurpuHuuEbGPdBHx9og4MSL+JyIej4iXI+LFiLgjIhZERJ/+J2/0sTdY7qQ8GO0EXFj+/TvgOeCd/a0sIg4HfghsBpYB64FDgQuAOcBRAwlWb9SA/f0ksKSb8qf7H+XIFhHvBe4E/hK4HngE+DCwCDg4IuZk5h96Uc/by3r2BlYAS4HJwOeA+RHxkcz8dWO2YmSqq+06+XoP5dsGFKh6cjYwDXiJ4jNscn8qacD7QNtXS9uVXuT1/3M6e2kAdapnRwGLgWeBW4HfAn8FfAa4HDgkIo7KXtzBuCnHXmY6dTMBo4BDgHeUj78GJHBiP+oaB/we2ALM7FQ+umzgBNpbvc3DZap7f5frr2z1dg23CfhRuW+/2KX8/LL8kl7Wc2m5/vldyheW5Te3eluH21Rj260svoZav00jaQIOBN4HBHBA2WZXtep94NSStlsLrG319oykCTiI4ofKt3Qp340iWUjgiF7W1fBjz0uMepCZWzPzpsx8tobqjgR2BZZm5j2dXmMzxa8BAJ+v4XVUcH8PchGxF/Axii+p/+iy+BzgT8AxEbHTdurZCTimXP+cLov/vaz/4+XrqQZ1tZ1aJzNvzcw1Wf5H0R++D1qjjrZTa2Tmisy8ITNf61L+HHBJ+fCA7dXTrGPPBKE5DirnN3ez7DZgEzA7InZsXkjDWiP294SIOCEivhwRp0bErAFHObJ1tNGPu/mw3Aj8FBgLbG8/fwQYA/y0fF7nel4Dflw+PHDAEatDXW1XiYh/iIizIuL0iDjEz8Ihofb3gZpux4j4bPm9tigiDrRPZMu8Us57c1llU449E4Tm2KecP9Z1QWZuA35D0R/EXznr0Yj9PQ24AvgXil+mfxZF5/UPDDDWkarHNiqtKed7N6ke9V4j9vlS4FzgPGA58NuIOLJ/4alJPPaGvt2A/6L4XruQog/XmoiY29KoRpiI2AE4tnzY3Q+bXTXl2DNBaI7x5fzFHpZ3lE9oQiwjQd37+3yKjs27AjsDHwKupUgaVkTEpH7GOZLV1UYeW81X5z6/nuKa3D0ozgRNpkgUJgDLIuKQAcSpxvLYG9quBOZRJAk7AR+g6M+1J3BTRExrXWgjzr8B+wLLM/NHvVi/KcfesE4QtjOMV3dTv4Z5qyPUcu41haUGt12f9ndmfikz78zMdZn5Umbek5lHUYySNBE4o4+bp+2r65jw2Gq+Xu/zzLwgM2/MzP/LzM2Z+Whmfhn4EsX30782MlA1lMfeIJaZXy+vif9dZm7KzIcy8xSKH8TGUAzMogaLiIUUn3ePUPSnq6Xacj6gY2+4D3P6BMUwl731TIPi6MjmxvewfFyX9TSwtmvW/r4EOALYf4D1jER1tZHHVvM1Y59fTjEk8X4RsXPX/iUaFDz2hqdLKP5h9XutwSLiVOAiYBUwLzPX9/KpTTn2hnWCkJnzWh1D6VFgJsX1YPd2XlBee/Yeio4pjtVeGmDbNWt/P1/OHaWj7x4t5z1dI/m+ct7TNZZ116Pea/g+z8zNEbEReBvF8WWCMPh47A1Pvy/nfq81UEScRvEjyEMUycHvt/OUzppy7A3rS4wGkRXl/OBulu1P0dv8zszc0ryQhrVm7e+OEQJM7Pru1nL+sa53j4yInSn6fLwMbO9O1T8v15tTPq9zPW+hGAqu8+tp4Opqux5FxD4UycFGYF1/61FDNfx9oJb4SDn3e61BIuJMiuTgl8CBfUwOoEnHnglCjSJifERMjoh3dFl0LcWXXHtEzOy0/mjgW+XDxU0KcyTo8/6OiLFl272rS/n07sYSjoipFCM/ALSq78qQlZlPUAxBuidwapfFX6f49eo/M/NPHYVl+7zhrqGZ+RLFKBw78eZrZv+xrP9H6Z2Ua1NX20XEXt118I+IiRQdKKG4l4l3U26hiHhr2X7v7Vzen/eBmquntouI90fELt2s/26KUfrA77WGiIivUnRKvpfizEGPP4C0+tgL77XRs4g4i9dvY74fxag1d/L6EFJ3ZOblndY/nuKL7fuZeXyXuj5F8Y/rZooh/dYDh1EMV3Ut8Pfe+KQ+fd3fEXEARVb+k8w8oFP5EorboK8AnqK4O/NkirMTbcBlwMm2Xd91c6v41cDfUNyz4DFgdna6VXxEFLe1zowu9by9rGdvina6C/hr4HCK0+Wzyw9U1aSOtis/Ly8HfkLR52g98C7gExTX1t4D/F1m/rHxWzSylJ+Pnyof7gZ8nOIX49vLsnWZeUa57p4UQ0M/mZl7dqmnT+8DDVwdbRcRXwPOovjO+w3Fmbr3AvOB0RRDDX86M7c2dGNGmIg4DlgCvAp8l+77CKzNzCXl+nvSymNvoLdiHs4TsJKiF3hP05Iu6x/fXXmn5XMoDrwXKE7/PAj8E9DW6m0djlNf9jev37J+ZZfyTwH/DTwObAC2As8CNwCHtXobh/oEvJMiqX623LdPUnTa2qWbdbP4yOq2nl3K5z3ZqY2+B+zR6m0crtNA245iWMUl5XH5B4obBa2n+Efni8CoVm/jcJ0ozrb9ue+2tZ3W3bNrWX/fB06Do+2AucA1FCPn/LE89p4HbqEYjz9avZ3DcepF273hf5BWH3ueQZAkSZJUsQ+CJEmSpIoJgiRJkqSKCYIkSZKkigmCJEmSpIoJgiRJkqSKCYIkSZKkigmCJEmSpIoJgiRJkqSKCYIkSZKkigmCJEmSpIoJgiRJkqSKCYIkSZKkigmCJEmSpIoJgiRJkqSKCYIkSZKkigmCJEmSpIoJgiRJkqTK/wN0uJhIpSMqMQAAAABJRU5ErkJggg==\n",
"<matplotlib.figure.Figure at 0x7fe999f134e0>"
Loading
Loading full blame...