{"id":3182,"date":"2020-08-25T12:57:09","date_gmt":"2020-08-25T12:57:09","guid":{"rendered":"https:\/\/cloudxlab.com\/blog\/?p=3182"},"modified":"2021-07-05T04:27:55","modified_gmt":"2021-07-05T04:27:55","slug":"backpropagation-from-scratch","status":"publish","type":"post","link":"https:\/\/cloudxlab.com\/blog\/backpropagation-from-scratch\/","title":{"rendered":"Coding Backpropagation and Gradient Descent From Scratch without using any libraries"},"content":{"rendered":"\n<p>Backpropagation is considered one of the core algorithms in Machine Learning. It is mainly used in training the neural network. And backpropagation is basically gradient descent. What if we tell you that understanding and implementing it is not that hard?\u00a0 Anyone who knows basic Mathematics and has knowledge of the basics of Python Language can learn this in 2 hours. Let\u2019s get started.<\/p>\n\n\n\n<p>Though there are many high-level overviews of the backpropagation and gradient descent algorithms what I found is that unless one implements these from scratch, one is not able to understand many ideas behind neural networks.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube\"><div class=\"wp-block-embed__wrapper\">\n<div style=\"max-width: 1778px;\"><div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;\"><iframe title=\"Backpropagation From Scratch | Neural Networks | Deep Learning | ML\/AI | CloudxLab\" src=\"https:\/\/www.youtube.com\/embed\/sVjBqjDWoQA?rel=0\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen scrolling=\"no\" allow=\"encrypted-media; accelerometer; clipboard-write; gyroscope; picture-in-picture\"><\/iframe><\/div><\/div><script type=\"text\/javascript\">window.addEventListener(\"message\",function(e){\n                window.parent.postMessage(e.data,\"*\");\n            },false);<\/script>\n<\/div><\/figure>\n\n\n\n<!--more-->\n\n\n\n<p><strong>Getting Started:<\/strong><\/p>\n\n\n\n<ol><li>Clone this repository in your home directory<br>git clone <a href=\"https:\/\/github.com\/cloudxlab\/iitr-deep-learning-spl-tf2\">https:\/\/github.com\/cloudxlab\/iitr-deep-learning-spl-tf2<\/a><\/li><li>Open &#8216;backprop_from_scratch.ipynb&#8217; notebook in the folder<\/li><\/ol>\n\n\n\n<h2>Writing Functions &#8211; Python<\/h2>\n\n\n\n<p>A function is basically a sequence of operations. It may take inputs via arguments. And it may give the result by returning a value.<\/p>\n\n\n\n<p>Let us define a function square which basically gives a square of whatever we pass as an argument.<\/p>\n\n\n\n<p>You can visualize a function like this. There is input and there is output.<\/p>\n\n\n\n<h2>Definition<\/h2>\n\n\n\n<p>In&nbsp;[2]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>def<\/strong> sq(x):\n    <strong>return<\/strong> x*x\n<\/pre>\n\n\n\n<p>In&nbsp;[3]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sq(4)\n<\/pre>\n\n\n\n<p>Out[3]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">16<\/pre>\n\n\n\n<p>In&nbsp;[4]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sq(10)\n<\/pre>\n\n\n\n<p>Out[4]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">100<\/pre>\n\n\n\n<p>A function could also take multiple arguments<\/p>\n\n\n\n<p>In&nbsp;[5]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># function could also take multiple arguments<\/em>\n<em># Here a and b are the two arguments and function is returning a single value.<\/em>\n<strong>def<\/strong> add(a, b):\n    <strong>return<\/strong> a+b\n\nadd(10, 20)\n<\/pre>\n\n\n\n<p>Out[5]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">30<\/pre>\n\n\n\n<p>In&nbsp;[8]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">add(10.5, 120)\n<\/pre>\n\n\n\n<p>Out[8]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">130.5<\/pre>\n\n\n\n<h2>Variable arguments to a function<\/h2>\n\n\n\n<p>In&nbsp;[9]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># We can define functions with variable arguments<\/em>\n<strong>def<\/strong> sum(*args):\n    s = 0\n    <strong>for<\/strong> i <strong>in<\/strong> args:\n        s += i\n    <strong>return<\/strong> s\n<\/pre>\n\n\n\n<p>In&nbsp;[10]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sum(1)\n<\/pre>\n\n\n\n<p>Out[10]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">1<\/pre>\n\n\n\n<p>In&nbsp;[11]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sum(2, 3)\n<\/pre>\n\n\n\n<p>Out[11]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">5<\/pre>\n\n\n\n<p>In&nbsp;[12]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sum(2, 3, 4)\n<\/pre>\n\n\n\n<p>Out[12]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">9<\/pre>\n\n\n\n<h2>Calling a function with variable arguments<\/h2>\n\n\n\n<p>In&nbsp;[14]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># If we have a usual function such as the following:<\/em>\n\n<strong>def<\/strong> add(a, b, c):\n    <strong>return<\/strong> a+b+c\n\n<em># we can call it using variable argument by putting an asterix<\/em>\narr = range(3)\nadd(*arr)\n<\/pre>\n\n\n\n<p>Out[14]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">3<\/pre>\n\n\n\n<h2>Passing a function as argument<\/h2>\n\n\n\n<p>In python, you can pass a function in another function just like another variable.In&nbsp;[15]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>def<\/strong> double_it(x):\n    <strong>return<\/strong> 2*x\n\n<strong>def<\/strong> apply_transformation(f, arr):\n    result = []\n    <strong>for<\/strong> a <strong>in<\/strong> arr:\n        v = f(a)\n        result.append(v)\n    <strong>return<\/strong> result\napply_transformation(double_it, [1,2,3])\n<\/pre>\n\n\n\n<p>Out[15]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[2, 4, 6]<\/pre>\n\n\n\n<p>In&nbsp;[14]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># Similarly we can us another function - the one that we defined above.<\/em>\napply_transformation(sq, [1,2,3])\n<\/pre>\n\n\n\n<p>Out[14]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[1, 4, 9]<\/pre>\n\n\n\n<h2>Differentiation<\/h2>\n\n\n\n<p>Differentiation is basically about finding the rate of change.<\/p>\n\n\n\n<p>Rate of change of distance is velocity. Rate of change of velocity is acceleration.<\/p>\n\n\n\n<p>If you plot rate of change of y with respect to x for a straight line y = mx +c , you will get a constant horizontal line.<\/p>\n\n\n\n<p>If you plot, rate of change of y with respect to x for a parabola, it gives a straight line.<\/p>\n\n\n\n<h2>Numeric Differentiation<\/h2>\n\n\n\n<p>In&nbsp;[16]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># Slightly increase x and compute the result. <\/em>\n<em># Then compute the ratio of change in result with change in x<\/em>\n\n<strong>def<\/strong> diff(fn, x):\n    delta = 0.000000000001\n    y = fn(x)\n    x1 = x + delta\n    y1 = fn(x1)\n    <strong>return<\/strong> (y1 - y)\/(x1 - x)\n<\/pre>\n\n\n\n<p>In&nbsp;[17]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">diff(sq, 2)\n<\/pre>\n\n\n\n<p>Out[17]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">4.0<\/pre>\n\n\n\n<p>In&nbsp;[17]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">x = 2\n2*x\n<\/pre>\n\n\n\n<p>Out[17]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">4<\/pre>\n\n\n\n<p>In&nbsp;[18]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>def<\/strong> cb(x):\n    <strong>return<\/strong> x*x*x\ncb(10)\n<\/pre>\n\n\n\n<p>Out[18]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">1000<\/pre>\n\n\n\n<p>In&nbsp;[19]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">diff(cb, 2)\n<\/pre>\n\n\n\n<p>Out[19]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">12.0<\/pre>\n\n\n\n<p>In&nbsp;[20]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># If you know symbolic \/ algebric differentiation, <\/em>\n<em># you would be knowing that the differentiation of an algebric function x^3 is 3*x^2.<\/em>\n<em># The result that we computed above is same as the algebric differentiation<\/em>\nx = 2\n3*x**2\n<\/pre>\n\n\n\n<p>Out[20]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">12<\/pre>\n\n\n\n<h2>Partial Derivative<\/h2>\n\n\n\n<p>If there is function which is taking multiple inputs, the rate of change of output could be computed with respect of any of the inputs.In&nbsp;[21]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># Here is a very simple function<\/em>\n<strong>def<\/strong> fn(x1, x2):\n    <strong>return<\/strong> x1*5 + x2*x2\n\n<em># Lets calculate the rate of change of output of this function wrt x1<\/em>\nx1 = 10\nx2 = 20\ndelta_x = 0.000000000001\n\ndelta_y = fn(x1+delta_x, x2) - fn(x1, x2)\ndf_dx1 = delta_y \/ delta_x\n\nprint(df_dx1)\n<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">5.002220859751105\n<\/pre>\n\n\n\n<p>In&nbsp;[22]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># Now, lets calculate the rate of change of output of this function wrt x2<\/em>\n\ndelta_y = fn(x1, x2+delta_x) - fn(x1, x2)\ndf_dx2 = delta_y \/ delta_x\nprint(df_dx2)\n<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">39.960923459148034\n<\/pre>\n\n\n\n<p>In&nbsp;[23]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>### Now, let us generalize it a bit<\/em>\n\n<strong>import<\/strong> <strong>numpy<\/strong> <strong>as<\/strong> <strong>np<\/strong>\n\n<em># The first argument is the function, <\/em>\n<em># second argument is the idx of the input with respect to which we are differentiating.<\/em>\n<em># Third arguments is a variable arguments - there can be many values. The function is called with these values.<\/em>\n\n<strong>def<\/strong> diffp(fn, idx, *args):\n    delta = 0.000000000001\n    \n    <em># Call the underlying function with args as such<\/em>\n    y = fn(*args)\n    \n    <em># Now, increase only one input - at idx.<\/em>\n    args = list(args)\n    args[idx] += delta\n    \n    <em># Now, calulate the output after changing one of the inputs a little bit.<\/em>\n    y1 = fn(*args)\n    <strong>return<\/strong> (y1 - y)\/delta\n<\/pre>\n\n\n\n<p>In&nbsp;[24]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># Let us test it using a very simple function.<\/em>\n<em># This function can be differentiated with respect to m, c or x.<\/em>\n<strong>def<\/strong> line_y(m, c, x):\n    <strong>return<\/strong> m*x + c\n\n<em># Notice how we are passing the function as the first argument.<\/em>\n<em># The second argument is the index of the value with respect to which we are differentiating<\/em>\n<em># Remaining values are the values of the arguments to be passed while calling line_y<\/em>\ndiffp(line_y, 0, 1, 2, 3) <em># differentiate wrt m<\/em>\n<\/pre>\n\n\n\n<p>Out[24]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">3.000266701747023<\/pre>\n\n\n\n<p>In&nbsp;[25]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">diffp(line_y, 1, 1, 2, 3) <em># differentiate wrt c<\/em>\n<\/pre>\n\n\n\n<p>Out[25]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">1.000088900582341<\/pre>\n\n\n\n<p>In&nbsp;[26]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">diffp(line_y, 2, 1, 2, 3) <em># differentiate wrt x<\/em>\n<\/pre>\n\n\n\n<p>Out[26]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">1.000088900582341<\/pre>\n\n\n\n<h2>Chain Rule<\/h2>\n\n\n\n<p>In&nbsp;[76]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># If we have a sequence of functions as mentioned above, we can represent it using another function:<\/em>\n<strong>def<\/strong> sq(x):\n    <strong>return<\/strong> x*x\n\n<strong>def<\/strong> cb(t):\n    <strong>return<\/strong> t*t*t\n\n<strong>def<\/strong> sqcb(x):\n    t = sq(x)\n    y = cb(t)\n    <strong>return<\/strong> y\n<\/pre>\n\n\n\n<p>In&nbsp;[77]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># Differentiating it will be really straightforward<\/em>\ndiffp(sqcb, 0, 2)\n<\/pre>\n\n\n\n<p>Out[77]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">192.01706891180947<\/pre>\n\n\n\n<p>Third method:<\/p>\n\n\n\n<p>In&nbsp;[28]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">x = 2\ndt_dx = diffp(sq, 0, x)\n<\/pre>\n\n\n\n<p>In&nbsp;[29]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">t = sq(2)\ndy_dt = diffp(cb, 0, t)\n<\/pre>\n\n\n\n<p>In&nbsp;[30]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">dt_dx * dy_dt\n<\/pre>\n\n\n\n<p>Out[30]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">192.03413934105515<\/pre>\n\n\n\n<h2>Gradient descent<\/h2>\n\n\n\n<p>When we have a function and we want to find out at what point this function would attain a minima or maxima. See more here:&nbsp;<a href=\"https:\/\/youtu.be\/4Cu9fizAtAo\">https:\/\/youtu.be\/4Cu9fizAtAo<\/a>In&nbsp;[38]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># Let us first generate some data<\/em>\n\n<strong>import<\/strong> <strong>numpy<\/strong> <strong>as<\/strong> <strong>np<\/strong>\n\n<em># Generate 100 random numbers<\/em>\nX = 2*np.random.random((100, 1))\n<\/pre>\n\n\n\n<p>In&nbsp;[39]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># Now, let us generate the values of y corresponding to a line with slope 3 and intercept 4<\/em>\n<em># plus some noise<\/em>\ny = 4 + 3 * X + .3*np.random.randn(100, 1)\n<\/pre>\n\n\n\n<p>In&nbsp;[40]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># Let us take a look at first three records<\/em>\ny[0:3]\n<\/pre>\n\n\n\n<p>Out[40]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">array([[7.46275157],\n       [5.42272672],\n       [5.26000136]])<\/pre>\n\n\n\n<p>In&nbsp;[41]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">X[0:3]\n<\/pre>\n\n\n\n<p>Out[41]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">array([[1.13629739],\n       [0.52740146],\n       [0.61857458]])<\/pre>\n\n\n\n<p>In&nbsp;[42]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">4+3*X[0:3]\n<\/pre>\n\n\n\n<p>Out[42]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">array([[7.40889218],\n       [5.58220439],\n       [5.85572374]])<\/pre>\n\n\n\n<p>In&nbsp;[43]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># Let us plot it using matplotlib<\/em>\n\n<strong>from<\/strong> <strong>matplotlib<\/strong> <strong>import<\/strong> pyplot <strong>as<\/strong> plt\n\nplt.figure(figsize=(11,4))\nplt.scatter(X, y)\nplt.show()\n\n<em># horizontal axis is x and vertical axis is y<\/em>\n<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAo0AAAD4CAYAAACJ3dwWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+\/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAfbUlEQVR4nO3de5BcZ3nn8d9jeUxGhGQEEgkeEBZVlJKAFgt3UU4mYbG8QYQNtiJIYSoXSEhUuUNCVDVOqvDCJtEk3grZrVQuCrDLJsTY+DIxKPGlGBOqlNibEWNjG1tgHOS4TeIBe5yApvBIPPtHd9ut1jl9Tp\/75fupcnnm9OnTbx+3Wo\/f532e19xdAAAAwDjnlD0AAAAAVB9BIwAAACIRNAIAACASQSMAAAAiETQCAAAg0rlFvtjWrVv9ggsuKPIlAQAAEODYsWNfdfdtcc8vNGi84IILtLy8XORLAgAAIICZnZjkfNLTAAAAiETQCAAAgEgEjQAAAIhE0AgAAIBIBI0AAACIRNAIAACASIW23AEAAEDP4kpXV996XI+trev8mWkd3LtT+3bPlj2sUASNAAAABVtc6erKG+\/V+sZpSVJ3bV1X3nivJFU2cCQ9DQAAULCrbz3+TMA4sL5xWlfferykEUUjaAQAACjYY2vrEx2vAoJGAACAgp0\/Mz3R8SogaAQAACjYwb07NT216Yxj01ObdHDvzpJGFI1CGAAAgAKMVku\/+aJZ3fHgKtXTAAAA6Amqlr7hWFeH9u+qdKA4jPQ0AABAzupYLT2KoBEAACBndayWHhUZNJrZh83scTO7b+jY883sdjP7Yv\/fW\/IdJgAAQH3VsVp6VJyZxv8j6Q0jx+YlfcrdXy7pU\/3fAQAAEKCO1dKjIoNGd\/+MpCdGDl8u6SP9nz8iaV\/G4wIAAGiMfbtndWj\/Ls3OTMskzc5M16oIRpLM3aNPMrtA0ifd\/ZX939fcfWbo8SfdPTBFbWYHJB2QpO3bt1904sSJDIYNAABQX6Ptd8pot2Nmx9y9E\/f83FvuuPthSYclqdPpREeoAAAAE0gSgJUZtAW137nyxnslqdIzj0mrp\/\/NzF4kSf1\/P57dkAAAAOIZBGDdtXW5ng3AFle6mT4nS3Vtv5M0aLxZ0tv7P79d0t9kMxwAAID4kgRgUc9ZXOlqbmFJO+aPaG5hKbNgcnDdbk3b70Smp83sGkmvk7TVzB6VdJWkBUnXmdk7JT0i6cfzHCQAAECQJP0Pxz0nr9Tx6HWDVL39TmTQ6O5vC3no0ozHAgAAMJHzZ6YDZ+7GBWDjnhM2C\/me6+6RlDxwDLrusDq032FHGAAAUFtJ+h+Oe07YLORp91TrHsfNfNal\/Q5BIwAAqK0k\/Q\/HPWfcDGWaYpWw687OTOvo\/J7KB4xSAS13AAAA8rRv9+zEQVfYcw7u3Tl27WHSYpWg69YhJT2MoBEAAFRW0f0UB9d+z3X36HTABihJi1UG1y27oXcaBI0AAKCSymqCPbh21jODSWZEq4Q1jQAAoJLKbILdhL2is8ZMIwAAqKQkPRizVPeZwawx0wgAACopbP1g1ZtgNxVBIwAAqKQkPRiRH9LTAADUTNEVxWVpQsVxkxA0AgBQI2VVFBepLUFx3ZCeBgCgRsqsKC7CICjurq3L9WxQnHT7PmSHoBEAgBopu6I4b00PiuuMoBEAgBppekVx04PiOiNoBACgRppeUVyFoHhxpau5hSXtmD+iuYUlUuN9BI0AANRInXcqiROMlR0Us6YyHNXTAADUTB13Kolb9V12m51xayrrds+zRtAIAAByN0kwVmZQzJrKcKSnAQBA7uoSjFVhTWVVMdMIAAByd\/7MtLoBAWIRwVicZuGDc7pr6zJJPvRYkwqN0iBoBAAAuTu4d+cZaxqlYoKxOGspR89x6ZnAcXYoyGz7TjWp0tNm9i4zu8\/M7jezd2c1KAAA0CxlVX3HaRYedM4gYDw6v+eZgLHtVdWJZxrN7JWSfl7SayQ9LekWMzvi7l\/ManAAAKA5iixwGU43BxleSxlnvSVV1enS098r6U53PylJZvb3kn5M0h9kMTAAAFB9VUzZjqabgwyvpYyz3rIuhTx5SpOevk\/Sa83sBWa2WdIbJb1k9CQzO2Bmy2a2vLq6muLlAABAlVQ1ZRs0KzhsdC1lnIbiVFWnCBrd\/QFJvy\/pdkm3SLpH0qmA8w67e8fdO9u2bUs8UAAAUC1x1guWYdzsX9BayjjrLcveqaYKUlVPu\/uHJH1Ikszs9yQ9msWgAABA9VU1ZRuWbh4UtgSJWm9Z9k41VZAqaDSzF7r742a2XdJ+Sd+fzbAAAEDVldl7cZy82vvUcfvGLKXdEeYGM\/u8pE9I+mV3fzKDMQEAgBqoasq2rPY+TZc2Pf1DWQ0EAIA2qmL1cVxVTtm2fVYwD+wIAwBASeLsVlJ1BGftQdAIAEBJsmwYXecZS9QDQSMAAAmlDdSyqj5uwowlqi9tIQwAAK2URWPrrBpGV7VfIpqFoBEAgASyCNSiqo8XV7qaW1jSjvkjmltYCg1Iq9ovEc1CehoAgASyCNTGVR9PknKuar9ENAtBIwAAAaLWK2YVqIVVH09SJJNXM2tgGEEjACCxplbsRs3yLa509Y1vnjrreVkGapPMZFa5XyKag6ARAJBIkyt2o9Yrjs7qSdKWzVO66k2vyOy9TzqTSb9E5I1CGABAIk2u2B03yxf0viVp83nnZhq0VXWLPrQXM40AgESqVrEblCqXkqVsx83yFfW+STmjaggaAQCJVKliNyhVfvD6eySXNr7lzxyLmz4fV1hy9a3HC3vfpJxRJaSnAQCJVCl9GpQy3jjtzwSMA3HT5\/t2z+rQ\/l2anZmWSZqdmdah\/bu0b\/dspd43UCRmGgEAiVQpfTpJajjuuWGzfFV630CRCBoBAIlVJX0alioPOzetqrxvoEikpwEAtReUMp7aZJo6x844RhoZSI6ZRgBA7YWljIOOMUMIJGPuHn1WRjqdji8vLxf2egAAAAhmZsfcvRP3fGYaAQCV0NQtCYGmIGgEAJyl6AAuyy0JCT6BfFAIAwA4wyCA666ty\/VsALe40s3tNbPakrCMsQNtkSpoNLNfN7P7zew+M7vGzL4tq4EBAMpRxp7SWW3N1+T9sIGyJQ4azWxW0q9J6rj7KyVtknRFVgMDAJSjjD2lw3onTtpTsYixL650NbewpB3zRzS3sMQsJlojbXr6XEnTZnaupM2SHks\/JABAmbIK4CaR1dZ8eY+d9DfaLHHQ6O5dSf9D0iOSviLpKXe\/bfQ8MztgZstmtry6upp8pACAQpSxt\/K4vZ4nkffYSX+jzRL3aTSzLZJukPRWSWuSPi7penf\/q7Dn0KcRAOqhzhXIWY599FphWxWapH9e+K8pRg0Ub9I+jWmCxh+X9AZ3f2f\/95+WdLG7\/1LYcwgaAaBe6hw8pjXaBkjqBYdBf2vOzkzr6PyewsYGZKHI5t6PSLrYzDZLWpd0qSQiQgBoiCx7J9ZRUCradXbgyH7WaIs0axrvknS9pM9Kurd\/rcMZjQsAULKi1+9VrSo5rOLapdRrL4E6SrUjjLtfJemqjMYCAKiQIlvvBM1q\/vq1d2v5xBP6nX27Mn+9OMLWMJKKRluxIwwAIFCRrXfCUsEfvfOR0mYcy6giB6qMoBEAEKjIoGlcKrisdjZZtQECmiJVehoA0FyD4CjP6ulBdfa4Ph557kQTZd\/uWYJEoI+gEQBaKG4rnTyDpqCWNkHy3IkGQHykpwGgZYK2wnv3tXfrwvfdVuj6waB1jKNYQwhUBzONANAyYcHa2vqGDn78Hr3vE\/dr7eRG7s28x6WdTWpdM3Gg6ggaAaDmBqnm7tq6NpnptLtmxwRc44K1jW+5njy5ISn\/Zt60tAHqhfQ0ANTYcKpZkk73t4YdBHzD6eZB8+xJNo\/Ns5k3LW2AeiFoBIAaG7cucDjgGw0uJ5FX9TItbYB6IT0NADUWFdANHo9TdBImz+plWtoA9cFMIwDUWFRAN3g8quhEkmampzS1yc54jHQxgAGCRgCosaB1gQPDAd+44NLVSw3ffdXrdfVbXkW6GEAg0tMAUGPDu7aMq54+uHfn2Ebag5lI0sUAwhA0AkDNxQn0Bo+\/57p7nqmwHsauKwCiEDQCQAON2yZwdMaxSesW426PCGByBI0A0DCjezoHNeluYmAV530DSI6gEQBiynsWK6vrB7XXGfRsHKSymxhERb1vAOkQNAJADHnPYmV5\/bD2Onk16a6Ktr5voCi03AGAGMbNYlXt+mFFLU0vdmnr+waKQtAIoFUG+y\/vmD+iuYWlM\/ZmHifvWawsr9\/WPZ3b+r6BopCeBtAaaVLA589MB+7bnNUsVpbXb3Kxyzhtfd9AUcwD+nXFeqLZTknXDh16maT3uvsfhT2n0+n48vJyotcDgLTmFpYCA7PZmWkdnd8z9rmjAafUm8XKaseUvK8PAKPM7Ji7d+Ken3im0d2PS7qw\/6KbJHUl3ZT0egCQtzQp4LxnscKuL\/WCXWbOAJQtq\/T0pZK+5O4nMroeAGQuaQp4tBXOB956YarALay1zmgrHPoOAqiSrAphrpB0TdADZnbAzJbNbHl1dTWjlwOAyV3yPdtkI8eiCiUGgVt3bV2uZwO3uAU0aa6Xd8U2AEwiddBoZudJukzSx4Med\/fD7t5x9862bdvSvhwAJLK40tUNx7oaXsVtkt580fhG11kHbpNcj76DAKoki\/T0j0j6rLv\/WwbXAoBcBAVrLumOB8dnQJIGbmEp6Emul3fF9ij2bQYwThZB49sUkpoGgCTyCF7iBGtBr5skcBu3FnFm85SePLlx1nNmNk+ddezg3p2BFdV59B1k\/SSAKKnS02a2WdIPS7oxm+EAaLus1xAORO0WEva6l3zPtokbRo9LQYd1OQs6vm\/3rA7t36XZmWmZeq2B8mrBw\/pJAFFSzTS6+0lJL8hoLAAwNnhJEyxFzdqFve4dD67q0P5dE818JklpP7V+9uyjpLMqqvPC+kkAUdgRBkCl5BW8RPVZHPe6kwZuUSntItcpxlX0+kkA9UPQCKBS8gxexgV\/Wb5u1KxmUesUJ1Hk+kkA9ZRVn0YAyMTBvTsnXkNYtdcdtxaxyHWKWY0ZAKQUe08nwd7TAKTo6uik1dNpq65pOQOgTSbde5qgEUChRlu7SL0ZvbSzWnldN+h1CCwBNMGkQSPpaQCFyqu1SxEtY\/JqBwQAdUDQCKBQeVVHF9Eyhl6GANqMoBFAoaKabFftusPoZQigzQgaARQqqEp56hzTyadPacf8Ec0tLCVK9xZRdV1EYAoAVUXQCKBQo61dZqanJJOePLmRap1gES1jymoHBABVQPU0gFLNLSwFNtWenZnW0fk9JYxoPKqnATTFpNXT7AgDlIgApH7rBIvaCxoAqob0NFAS2rf0sE4QAOqBoBEoSd3btyyudDW3sJSqeEVinSAA1AXpaaAkcdOyVUxhj+6+MpgllTTx2AbnV+09AgDORNAIlOT8menAApDhtGyWwVmWxs2SJhkX6wQBoPpITwMliZOWrWoKu27FKwCA9JhpBEoSJy2bZ3CWJu0dZ5YUANAsBI1AiaLSsnkFZ2nT3gf37jzj+RLFKwDQdKSngQrLq7I4bdq7iN1XAADVwkwjUGHjUthp0stBs5fSZGlvilcAoF1SBY1mNiPpg5JeKckl\/ay7\/2MWAwPQExScpUkvL650Zer9gR3FmkQAQJi0M43\/U9It7v4WMztP0uYMxgQgQpqWN1ffejwwYDQpVtq7in0jAQD5Sxw0mtl3SHqtpHdIkrs\/LenpbIYFYJw0VdVh57jizVJWsW8kACB\/aQphXiZpVdL\/NrMVM\/ugmT139CQzO2Bmy2a2vLq6muLlgPrIaou9MGn2aw47ZzbGc6vaNzJvef\/3BIA6SBM0nivp1ZL+1N13S\/qGpPnRk9z9sLt33L2zbdu2FC8H1MNgNq67ti7Xs7NxSQONoIBlXFV1VICTpiK7jU29s\/7vCQB1lSZofFTSo+5+V\/\/369ULIoFWy3I2LixgkRTY8kZSZICTpl1OmhnOumrr7CoAjEq8ptHd\/9XM\/sXMdrr7cUmXSvp8dkMD6inL2bhxAcvR+T1nBXpzC0uxCmSStstpY1PvNs6uAkCQtNXTvyrpo\/3K6Ycl\/Uz6IQH1luUuLpMGLHkHOHG2PhxoSpU1WyYCQE+qoNHd75bUyWgsQCPEnY2LE1RNGrAUEeDEmaVsUpV1G2dXASAI2wgCGYuzZjBuccWkRSt5bTs4qSatA2TLRADoYRtBIAdhs3GD2cWg2cCwtYdSvHRwkvPz0rR1gGyZCAAEjUBhRlO2QYKCqkkDlioEOKwDBIDmIT0NFCQoZTuqTkHVuH6QVUmTAwCyw0wjUJCo1GydgqqoQpeqpMkBANkhaAQKEpaylXrFFXUKqsYVugzeQxXS5ACA7JCeBgoSlrL9o7deGNiou8qaVugCAIhG0AgUpEmtW9q4nSAAtB3paaBATUnZ0vAaANqHoBETa8r2cHG17f3GQaELALQPQSNiW1zp6r\/dfL\/W1jeeOVbn7eHiaNJ2eFlryqwpACAe1jQilkHwNBwwDtR1e7g4mrQdHgAAaRA0IpaoxtRNrZqlShgAgB7S04glKkiatGq2LusE2Q4PAIAeZhoRy7ggadKq2UGqu7u2Ltez6wSHt6GriqK3wxu3NR8AAGUiaEQsQcGTJG3ZPDVxr8E6rRMssrdinYJpAED7kJ5usUlSxFm2WKnbOsGiqoTjbM0HAEBZCBpbKkkrmayCJ9YJBqtbMA0AaBfS0y1VZoq46HWCdcHWfACAKiNobKkyZ7WatAdzlgimAQBVRnq6pcpOEbObyNnYmg8AUGWpgkYz+7Kk\/5B0WtIpd+9kMSjk7+DenWesaZTqM6tVlx6PSRBMAwCqKouZxkvc\/asZXAcFquusVlgBz\/KJJ3THg6u1ei8AANQJ6ekWq+OsVlgBz0fvfETe\/z1OJTgAAJhM2kIYl3SbmR0zswNBJ5jZATNbNrPl1dXVlC+Htgsr1PGR36vaLBwAgLpKO9M45+6PmdkLJd1uZg+6+2eGT3D3w5IOS1Kn0xn9u721mrwuL09hBTxB6G8IAEB2Us00uvtj\/X8\/LukmSa\/JYlBNx3ZxyQW1pbGQc+lvCABAdhIHjWb2XDN73uBnSa+XdF9WA2uyohtrL650NbewpB3zRzS3sFR4cJrl6wf1ePyJi7fT3xAAgJylSU9\/l6SbzGxwnb9291syGVXDFdlYO8l2gVV\/\/aACns5Ln0+6HwCAHCUOGt39YUmvynAsrVFkY+1xs5pFBFVFvX4dK8EBAKgTthEsQZHbxZW5XWAVXh8AAGSDoLEERe69HDZ7WVSRSNmvDwAAskFz74IEtdg5Or8n99cte7vAsl8fAABkg6CxAGUWo5S9XWDZrw8AALJh7sX12+50Or68vFzY61XFhe+7TWvrG2cdn52ZLmS2EQAAYJSZHXP3TtzzWdOYs8WVbmDAKFEMAgAA6oOgMWfjGnZTDAIAAOqCoDFn42YTKQYBAAB1QdCYs7DZxC2bpygGAQAAtUHQmLOwRt5XvekVJY0IAABgcrTcCRDUUzHNPskSLWcAAEC9ETSOyKOnYtP2Rc4yqAYAAPVAenrE1bceP2P3Ekla3zg9tgq6TQZBdXdtXa5ng+rFlW7ZQwMAADkiaBwRVu1MT8UegmoAANqJoHFEWLUzPRV7CKoBAGgngsYRYdXO9FTsIagGAKCdGhs0Lq50NbewpB3zRzS3sBS65m70PEk6tH+XZmemZertD31o\/y4KPfoIqgEAaKdGVk\/HrYAOO+\/Q\/l06Or9n4tfMqqK4ytXJtBACAKCdzN0Le7FOp+PLy8u5v87cwpK6AWvsZmemzwgG454XZTT4lHqzb0lmKLO8FgAAQBgzO+bunbjnNzI9HbdYY5KijnHp7iwriqlOBgAAVdTIoDFusUbc84J6E7772ru1+\/23aXGlm2lFMdXJAACgilIHjWa2ycxWzOyTWQwoC3GLNeKeFzT7J0lPntzQlTfeq5nNU4HjSFJRTHUyAACooixmGt8l6YEMrpOZfbtnY1VAxz1v3Czf+sZpuSuzimKqkwEAQBWlKoQxsxdL+oik35X0G+7+o+POL6oQJomgimWpN8sYVCwzzCR94K0XtqJ6GgAANMOkhTBpg8brJR2S9DxJvxkUNJrZAUkHJGn79u0XnThxIvHr5SWoYnnqHJNM2jgdfX8mrbYGAAAoW2HV02b2o5Ied\/dj485z98Pu3nH3zrZt25K+XK6C1ixufMtjBYykjgEAQBukWdM4J+kyM\/uypI9J2mNmf5XJqAo2aWUyu8UAAIC2SbwjjLtfKelKSTKz16mXnv7JjMZVqPNnpiPXLQ6QigYAAG3UyD6No6L2oQ6qWJ46xzS1yc44RioaAAC0VSZ7T7v7pyV9OotrZS3OPtRh+ykHHSMVDQAA2qiRe08Py2p\/aQAAgCZh7+kRbMsHAACQXuODRrblAwAASK\/xQSPb8gEAAKSXSSFMlYUVuVDQAgAAEF\/jg0apFzgSJAIAACTX+PQ0AAAA0iNoBAAAQCSCRgAAAEQiaAQAAEAkgkYAAABEKnQbQTNblXQi48tulfTVjK\/ZRNynaNyjaNyjeLhP0bhH0bhH8XCfooXdo5e6+7a4Fyk0aMyDmS1Psm9iW3GfonGPonGP4uE+ReMeReMexcN9ipbVPSI9DQAAgEgEjQAAAIjUhKDxcNkDqAnuUzTuUTTuUTzcp2jco2jco3i4T9EyuUe1X9MIAACA\/DVhphEAAAA5I2gEAABApEoHjWb2BjM7bmYPmdl8wOPPMbNr+4\/fZWYXDD12Zf\/4cTPbW+S4ixTjHv2GmX3ezD5nZp8ys5cOPXbazO7u\/3NzsSMvTox79A4zWx26Fz839NjbzeyL\/X\/eXuzIixXjPn1g6B59wczWhh5ry2fpw2b2uJndF\/K4mdn\/6t\/Dz5nZq4cea8VnKcY9+on+vfmcmf2Dmb1q6LEvm9m9\/c\/RcnGjLlaMe\/Q6M3tq6M\/Ue4ceG\/vntEli3KeDQ\/fovv730PP7j7Xls\/QSM7vDzB4ws\/vN7F0B52T3veTulfxH0iZJX5L0MknnSbpH0veNnPNLkv6s\/\/MVkq7t\/\/x9\/fOfI2lH\/zqbyn5PJd2jSyRt7v\/8i4N71P\/962W\/h4rco3dI+uOA5z5f0sP9f2\/p\/7yl7PdU1n0aOf9XJX24TZ+l\/vt8raRXS7ov5PE3Svo7SSbpYkl3tfCzFHWPfmDw3iX9yOAe9X\/\/sqStZb+HCtyj10n6ZMDxif6c1v2fqPs0cu6bJC0N\/d6Wz9KLJL26\/\/PzJH0h4O+4zL6XqjzT+BpJD7n7w+7+tKSPSbp85JzLJX2k\/\/P1ki41M+sf\/5i7f9Pd\/1nSQ\/3rNU3kPXL3O9z9ZP\/XOyW9uOAxli3O5yjMXkm3u\/sT7v6kpNslvSGncZZt0vv0NknXFDKyCnH3z0h6Yswpl0v6v95zp6QZM3uRWvRZirpH7v4P\/XsgtfM7Kc7nKEya77PamfA+tfU76Svu\/tn+z\/8h6QFJsyOnZfa9VOWgcVbSvwz9\/qjOvhHPnOPupyQ9JekFMZ\/bBJO+z3eq938bA99mZstmdqeZ7ctjgBUQ9x69uT9tf72ZvWTC5zZB7PfaX+KwQ9LS0OE2fJbiCLuPbfosTWL0O8kl3WZmx8zsQEljqorvN7N7zOzvzOwV\/WN8jgKY2Wb1gp0bhg637rNkvSV6uyXdNfJQZt9L56YdZI4s4Nhof6Cwc+I8twliv08z+0lJHUn\/eejwdnd\/zMxeJmnJzO519y\/lMM4yxblHn5B0jbt\/08x+Qb3Z6z0xn9sUk7zXKyRd7+6nh4614bMUR9u\/k2Izs0vUCxp\/cOjwXP9z9EJJt5vZg\/3Zprb5rHp7An\/dzN4oaVHSy8XnKMybJB119+FZyVZ9lszs29ULmt\/t7v8++nDAUxJ9L1V5pvFRSS8Z+v3Fkh4LO8fMzpX0nepNZcd5bhPEep9m9l8k\/baky9z9m4Pj7v5Y\/98PS\/q0ev+H0jSR98jdvzZ0X\/5C0kVxn9sgk7zXKzSSBmrJZymOsPvYps9SJDP7T5I+KOlyd\/\/a4PjQ5+hxSTepmcuKIrn7v7v71\/s\/\/62kKTPbKj5HYcZ9JzX+s2RmU+oFjB919xsDTsnse6nKQeM\/SXq5me0ws\/PU+1CMVmXeLGlQ7fMW9RbBev\/4Fdarrt6h3v+h\/b+Cxl2kyHtkZrsl\/bl6AePjQ8e3mNlz+j9vlTQn6fOFjbw4ce7Ri4Z+vUy9NSGSdKuk1\/fv1RZJr+8fa6I4f95kZjvVWzD9j0PH2vJZiuNmST\/dr1a8WNJT7v4VteuzNJaZbZd0o6SfcvcvDB1\/rpk9b\/CzevcosGq26czsu\/vr82Vmr1Hv7+qvKeaf0zYxs+9UL4P2N0PHWvNZ6n9OPiTpAXf\/w5DTMvteqmx62t1PmdmvqPcGNqlXqXm\/mb1f0rK736zejfpLM3tIvRnGK\/rPvd\/MrlPvL65Tkn55JJXWCDHv0dWSvl3Sx\/vfQY+4+2WSvlfSn5vZt9T7Qlpw98b9RR\/zHv2amV2m3mflCfWqqeXuT5jZf1fvi1qS3j+S\/miMmPdJ6i02\/1j\/f84GWvFZkiQzu0a9ytatZvaopKskTUmSu\/+ZpL9Vr1LxIUknJf1M\/7HWfJZi3KP3qrf2\/E\/630mn3L0j6bsk3dQ\/dq6kv3b3Wwp\/AwWIcY\/eIukXzeyUpHVJV\/T\/zAX+OS3hLRQixn2SpB+TdJu7f2Poqa35LKn3P+k\/JeleM7u7f+y3JG2Xsv9eYhtBAAAARKpyehoAAAAVQdAIAACASASNAAAAiETQCAAAgEgEjQAAAIhE0AgAAIBIBI0AAACI9P8BTNA2FtPweOoAAAAASUVORK5CYII=%0A\" alt=\"\"\/><\/figure>\n\n\n\n<p>In&nbsp;[45]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>def<\/strong> error(m, c, X, y):\n    ypred = m*X + c\n    err = ypred-y\n    <strong>return<\/strong> np.sum(err*err)\n<\/pre>\n\n\n\n<p>In&nbsp;[46]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">error(3, 4, np.array([1,2,3]), np.array([1,2,3]))\n<\/pre>\n\n\n\n<p>Out[46]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">200<\/pre>\n\n\n\n<p>In&nbsp;[47]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">error(3, 4, X, y)\n<\/pre>\n\n\n\n<p>Out[47]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">11.370852782527962<\/pre>\n\n\n\n<p>In&nbsp;[52]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">error(3.04, 4, X, y)\n<\/pre>\n\n\n\n<p>Out[52]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">11.164979946174462<\/pre>\n\n\n\n<p>In&nbsp;[83]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>def<\/strong> grad_fit(X, y):\n    m = np.random.random()\n    c = np.random.random()\n    learning_rate = 0.001\n    <strong>for<\/strong> i <strong>in<\/strong> range(100):\n        print(\"i: \", i, \" Error: \", error(m, c, X, y))\n        dE_dm = diffp(error, 0, m, c, X, y)\n        dE_dc = diffp(error, 1, m, c, X, y)\n        \n        m = m - learning_rate * dE_dm\n        c = c - learning_rate * dE_dc\n    <strong>return<\/strong> (m, c)\n<\/pre>\n\n\n\n<p>In&nbsp;[84]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">m, c = grad_fit(X, y)\n<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">i:  0  Error:  4083.7285975679897\ni:  1  Error:  1357.6252100867644\ni:  2  Error:  459.3592139100733\ni:  3  Error:  163.29051705436652\ni:  4  Error:  65.5610011647214\ni:  5  Error:  33.1328146842778\ni:  6  Error:  22.218172770940345\ni:  7  Error:  18.399259306669478\ni:  8  Error:  16.927083201555945\ni:  9  Error:  16.240253000396848\ni:  10  Error:  15.823423526524639\ni:  11  Error:  15.506227542324433\ni:  12  Error:  15.232001423349436\ni:  13  Error:  14.981432087611957\ni:  14  Error:  14.747680617493739\ni:  15  Error:  14.52798983150515\ni:  16  Error:  14.321092393591112\ni:  17  Error:  14.125943647997243\ni:  18  Error:  13.941884312505449\ni:  19  Error:  13.76823354607412\ni:  20  Error:  13.604392639484571\ni:  21  Error:  13.449850857643208\ni:  22  Error:  13.304041069116783\ni:  23  Error:  13.1664926916126\ni:  24  Error:  13.036677643076112\ni:  25  Error:  12.914182340103585\ni:  26  Error:  12.798551326229774\ni:  27  Error:  12.689583643386808\ni:  28  Error:  12.58679533656726\ni:  29  Error:  12.48975407746471\ni:  30  Error:  12.398176189973645\ni:  31  Error:  12.311842550845657\ni:  32  Error:  12.230368725423476\ni:  33  Error:  12.15349017582421\ni:  34  Error:  12.080929504768589\ni:  35  Error:  12.01246968129011\ni:  36  Error:  11.947881746213836\ni:  37  Error:  11.886969741939057\ni:  38  Error:  11.829508805337317\ni:  39  Error:  11.775232938950976\ni:  40  Error:  11.7240189978844\ni:  41  Error:  11.675756159108447\ni:  42  Error:  11.630169982103672\ni:  43  Error:  11.58715098844346\ni:  44  Error:  11.546590599235017\ni:  45  Error:  11.508352340820826\ni:  46  Error:  11.472259383091766\ni:  47  Error:  11.438172320591587\ni:  48  Error:  11.406064361894988\ni:  49  Error:  11.375765097590975\ni:  50  Error:  11.347175072319152\ni:  51  Error:  11.320198663860097\ni:  52  Error:  11.294768656072876\ni:  53  Error:  11.27073288512202\ni:  54  Error:  11.248069676645077\ni:  55  Error:  11.22667985210804\ni:  56  Error:  11.206523779032805\ni:  57  Error:  11.187457348111439\ni:  58  Error:  11.169498175945936\ni:  59  Error:  11.15254221747177\ni:  60  Error:  11.13654887644347\ni:  61  Error:  11.12145424762985\ni:  62  Error:  11.10723362998187\ni:  63  Error:  11.093814960235605\ni:  64  Error:  11.081145535104787\ni:  65  Error:  11.069214843723582\ni:  66  Error:  11.057944186806685\ni:  67  Error:  11.04730077050891\ni:  68  Error:  11.037282428082056\ni:  69  Error:  11.027789502107026\ni:  70  Error:  11.018836113798875\ni:  71  Error:  11.010404557679433\ni:  72  Error:  11.00246237284482\ni:  73  Error:  10.994951898575751\ni:  74  Error:  10.987863959791374\ni:  75  Error:  10.981173260576831\ni:  76  Error:  10.97487583850806\ni:  77  Error:  10.968924851820436\ni:  78  Error:  10.963317694512957\ni:  79  Error:  10.95803070674304\ni:  80  Error:  10.953029845889434\ni:  81  Error:  10.948319335119882\ni:  82  Error:  10.943855597092096\ni:  83  Error:  10.939657430608891\ni:  84  Error:  10.935700404741592\ni:  85  Error:  10.93196932790682\ni:  86  Error:  10.928446914760144\ni:  87  Error:  10.925122307189463\ni:  88  Error:  10.921987557948412\ni:  89  Error:  10.919030199853355\ni:  90  Error:  10.916238322489436\ni:  91  Error:  10.913601802488085\ni:  92  Error:  10.911115528431818\ni:  93  Error:  10.908765814951405\ni:  94  Error:  10.906556316793806\ni:  95  Error:  10.904466955489564\ni:  96  Error:  10.902504471647127\ni:  97  Error:  10.900643630382485\ni:  98  Error:  10.898883927123046\ni:  99  Error:  10.897232145447704\n<\/pre>\n\n\n\n<p>In&nbsp;[85]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">m, c\n<\/pre>\n\n\n\n<p>Out[85]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">(3.153937346115943, 3.856832667230562)<\/pre>\n\n\n\n<p>In&nbsp;[86]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>from<\/strong> <strong>matplotlib<\/strong> <strong>import<\/strong> pyplot <strong>as<\/strong> plt\n\nx1 = 0\nx2 = 2\n\ny1 = m*x1 + c\ny2 = m*x2 + c\n\nycap = m*X + c\nplt.figure(figsize=(11,4))\nplt.subplot()\n\n<em># plt.scatter(X, ycap, color='r')<\/em>\nplt.plot([x1, x2], [y1, y2], color = 'r')\nplt.subplot()\nplt.scatter(X, y, color='b')\nplt.show()\n<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\/usr\/local\/anaconda\/lib\/python3.6\/site-packages\/ipykernel_launcher.py:15: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance.  In a future version, a new instance will always be created and returned.  Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n  from ipykernel import kernelapp as app\n<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAocAAAD4CAYAAACe\/0zfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+\/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3deXiU1f3+8fdJANkVgaAICW4VcdeIKIogiuzIMhUbKq60atVWq1X5Vv0puLZabUvdqiKNohNWFRBREIsrbogCipSwExaVfUlyfn+cmSRMZpKZzJKZyf26Lq4kT57MPPM4xJtzzudzjLUWERERERGAjNq+ABERERFJHgqHIiIiIlJG4VBEREREyigcioiIiEgZhUMRERERKVMvkU\/WqlUr26FDh0Q+pYiIiIgE8dlnn2221rYOPJ7QcNihQwcWLlyYyKcUERERkSCMMYXBjmtaWURERETKKByKiIiISBmFQxEREREpo3AoIiIiImUUDkVERESkjMKhiIiIiJRROBQRERGRMgqHIiIiIlJG4VBERESkGvn50KEDZGS4j\/n5tX1F8ZPQHVJEREREUk1+PowaBbt2ua8LC93XAHl5tXdd8aKRQxEREZEqjB5dHgz9du1yx9ORwqGIiIhIFVatiux4qlM4FBEREalCdnZkx1OdwqGIiIhIFcaOhcaNDzzWuLE7no4UDkVERESC8Fco\/\/rX0KgRtGwJxkBODjzzTHoWo4CqlUVEREQqCaxQ3rLFjRZOmBCnULh6NTRsCK1bx+HBI6ORQxEREZEACalQXrUKHnsMzj7bLWB89tkYPnjNaeRQREREJEDcKpRXroSCAvfn44\/dsVNPdQsYhw+P8sFjo9pwaIx5HugPFFlrT\/QdOxR4FegArAR+aa39MX6XKSIiIpI42dmu2XWw4xH73\/9cGPR64dNP3bHTT4cHH4Rhw+CYY6K61lgLZ1r5RaB3wLE7gHestccC7\/i+FhEREUkLUVcor1gBDz8Mublw1FFw++1gLTz0ECxfDp99BnfckXTBEMIYObTWzjfGdAg4PAjo7vt8PDAP+FMMr0tERESk1viLTkaPdlPJ2dkuGFZZjLJ8uRsd9Hrhiy\/csTPPhEcecSOERx4Z9+uOhZquOWxjrV0PYK1db4zJCnWiMWYUMAogO127RYqIiEjaCQyI\/mKUAwLid9+VTxl\/+aU7dtZZ8Je\/uECYk5PQa46FuFcrW2ufsdbmWmtzWydBebaIiIgkB38fwYwM9zE\/P7bnx+L6Ro1yaw+tdR9HjYLpjy6DMWPglFPguONcamzUyFUeFxbCRx\/BrbemZDCEmo8cbjTGHO4bNTwcKIrlRYmIiEh6C+wj6A9eEHzqNtLzY6FiO5uOLMGDF88uLyfdvtgdPOccePxxGDoU2rePz0XUgpqOHE4HRvo+HwlMi83liIiISF0QaR\/Bqs6Px4hifj40KfyGe7iXxZzAEjpxL\/fyE4dwM0\/AmjWwYAH8\/vdpFQwBjLW26hOMeQVXfNIK2AjcA0wFXgOygVWAx1q7tbony83NtQsXLozykkVERCTVZWS4qdpAxkBpafjng6sirhgcGzeu4fZ21sLixSy6p4D6U70cb5dQiuF9zsOLh8kMYT1tyclx7QpTnTHmM2ttbuDxcKqVLwvxrZ5RX5WIiIjUSZH2EQx1fmZm8BHFkb75zWoDorXw9dflVcbLlnECGcynG\/\/gBiYzhA0cXnZ6RO1sUpS2zxMREZGEi7SPYKjzS0qCn19S4tYkBp1ittZVFo8eDR07usKSBx6Atm1h3DiOYB0XMJdx3HBAMIQajkimGIVDERERSbi8PBe0cnLcVHJOTtXBK9T5VRUEH7CG0Vr4\/HO46y74xS\/gtNNcQ+r27eGpp2D9enj3XbjuOhrmtAn6eDk56R8MIYw1h7GkNYciIiISS4FVzAey5PIZn\/7J14dwxQo3D33BBa4H4eDBEKTNXrDHrPE6xiQWas2hRg5FREQk5hLVk9A\/opiZ6T9iyeVTHuZ2fuBoPuVM15D6mGPg2WdhwwaYPdulvxD9lyMd1Uw3GjkUERGRmEr4yJu1zLrvE5aN8TKouIAOFLKfeszNuJBmV3s4+8FB0LJlHJ44tYUaOVQ4FBERkZjq0CF4ZXFMW8CUlsLHH7ut6woKYNUqSjLr816Di5iw28Nn7Qbxp4da1JnRvpqocSsbERERkUisWhXZ8bCVlrqt6bxeFwjXrIEGDaBXL7jvPjIHDuSCFi24IMqnqesUDkVERCSmIu1hWKXSUvjgAxcIJ02CtWtdILz4Ytd+ZuBAOPjgqK9ZyikcioiISEyNHRt8zWHYzaNLStzWdP5AuH49HHQQ9O4NDz8M\/fsrEMaRqpVFRERqQaKqeWtDjap9S0rgvffgd7+Ddu3g\/PPhueegSxd3c4qKYOpU9yAKhnGlkUMREZEEC6zmLSx0X0PqtkvJz3cNp1etctPHY8eGUXxSUgLz57sRwsmTYeNGaNQI+vZ1fQj79YNmzRJx+VKBqpVFREQSLCHVvAkUUeua4mI3Quj1wpQpbkSwUSMXBD0eFwybNk3o9ddVamUjIiKSJDIy3G5ugYxx9RepptqwW1wM8+aVB8JNm1x67N\/fBcI+faBJk8RetKiVjYiISLKIaTVvEgjWoqYe+zmucC5c6wuEW7a4ADhggJsy7tPHBURJOipIERERSbCxYyvnooiqeZOMP9TWYz8XM4vnuJoNHMZbXAwTJ7o+hJMnuxHDV16BoUNjGgzTubinNigcioiIJFiq7d1bZfjat48XPDN4KfNKNtKGWfTBg5e3M\/vw3h+mujWFL78Mgwe7tYVxuLZRo9xIrLXlxT0KiDWnNYciIiISUrBik0Ma7WXy9XPosdkL06bBTz+xr1FzXs8YxPidHpZlX8TdDzRMSNhNt+KeRFJBioiIiETMH74asJdezMaDl4FM5xB+dv0GBw1yRSUXXeQaVSdYuhX3JFKocKhpZREREQluzx5OLZzGBEZQRBavM5ABvM4UBtOPN92U8fjxruo4xsEwnHWE+fnu+8GkanFPMlA4FBERkXK7d7vq4rw8yMpiKpfQlxkUMIzezKQNG7mKF\/gmp6\/b4zgOwllH6D+npKTyz\/uLe1SoUjOaVhYREanrdu2CWbNcH8I33oAdO+DQQ2HwYN5t6WHw3y9g2+76ZaeHbHAdI+GsIwx1TmamG8yECBpz11FxWXNojLkZuBYwwLPW2r9Vdb7CoYiISJLYtQtmzHCB8M03YedOaNXKVRV7PNC9O9R3gTDY1njxCFj+5wkW+uDAdYTVrTVUoUr1Yt4E2xhzIi4Ydgb2AbOMMW9aa7+v+WWKiIhI3Ozc6YJgQYH7uGsXtG4NI0a4QHj++VCvcjTIy4v\/aFuwquhAFdcRVtdIPFhj7qqOS7lo1hweD3xkrd1lrS0G3gMGx+ayREREJCZ27IBXX3W7krRuDZde6vY2HjmSOXe9y9GN1pHxzFN0uLon+a\/W3sZpo0dXHQwDm4RX10g8VEGKClWqF004XAx0M8a0NMY0BvoC7QNPMsaMMsYsNMYs3LRpUxRPJyIiImHZvt3tRDJkiAuEw4fDf\/8LV14Jc+fCunXkdx3HoL\/1YMWqeknRPLqqEb1gTcKraySebrvQJFK0aw6vBm4AdgDfAruttX8Idb7WHIqIiMTJtm3w+utuDeGsWbB3Lxx+uNuqzuOBrl1dtYZPsq3Ji8f1JGqtZKqKexNsY8wDwBpr7bhQ5ygcioiIxNDPP8P06W4N4VtvuUDYtq2bQvZ44JxzQjYCTLbm0cHWHKq6OL5iXpDie9Asa22RMSYbGAKcHc3jiYiISDV++skFQq8XZs+GffugXTu47joXCs8+O3Rn6AqqK+hINH8A1Ehf7Yu2CfYkY8y3wOvADdbaH2NwTSIiIikl7s2Wf\/wRXnwR+vWDrCwYORK++gpuuAE++MClvMcfd1PHYQRDSM41eXl5bgq5tNR9VDCsHVGNHFprz4vVhYiIiKSiwOlQf2EHRBlutm6FqVPdlPGcObB\/v1uAd9NNbsq4c2c3B1xDGqmTULRDioiISBRiWUjhfWoLC0dPocfWAnryDvUpdk\/g8bgp4zPPjCoQilQUas2h9lYWEZE6L5pp4aibLW\/eDM8+y\/qTejH4ujY8vPVafsF3PMYtnHvQp+TfvwIeeSTqkUKRcNVet0sREZEkEO20cI0KO4qKYMoUV1Qybx6UlLC33tE8ym148fAFpwEG9sKa\/4O8ERG+KJEoaFpZRETqtGinhatqwQLla\/pOP2Ij4y6cTOdVBS4QlpbCsce6KWOPh4zTTsFSeWSwtlrLSPqLSysbERGRVBfttHCowg6AP1+7gb67J+PBS7c188l8sZSfDz+Og++6y60hPPnksqni7Jzkai0jdZfWHIqISFqrbj1hLPbgPaAFy4fryfvxHxxz9fks392WcdzAYWxgLKM5iUWcUn8J3H8\/nHLKAWsIk7G1jNRNCociInKAuPfsSyD\/lG9hIUH3D87Phx07Kv9cxKFs7Vp48kk47zw44gi48Uaa7t3MfdzNCSymE0u4h\/tYzEmsWh28qKS6vYJFEkVrDkVEpEy6bWFW1XrCsWMrv1aAli3hiSfCeL1r1rgehAUFsGCBO3biiWVtZzr07ZRUexeLBIr73srhUDgUEUlusezZlwyq2j84VJVxla919WoXBr1e+PBDd+ykk8qKSujYsezUdAvakn7U51BERKoVdc++GAqc3r7++sinu6taTxj2ay0shL\/+Fbp0cT94yy0u8Y0ZA0uXwqJF8Oc\/HxAMQdPEkro0cigiImWSZeQw2KhboHBG4aoavRs9uorXOm9l+QjhJ5+4b5x2WvlOJcceW6PXJZJMNHIoIiLVSpaK2dGjqw6G4L4\/enTV51Q1ehf4Wo9kBaPrP8JnGWfCkUfCbbdBSQk89BB8\/z18\/jnceaeCoaQ9jRyKiMgB8vMr9+xL9FRoqLWCgaJtED3tsR9Yer+XC3\/ycgafu4O5ueUjhEcdVfMHF0lyKkgREZGUEWp6O1CNpru\/\/95NF3u98OWX7ljnzuWBsEOHCB9QJDVphxQREUkZodrMVBTRdPeyZeVrCL\/6yh3r0sUVmgwd6lKmiAAKhyIikoSCbUnXty\/MmBHBdPfSpeUjhF9\/7Y6dcw489pgLhNqXTiQohUMREYmLaNcu5uXVYK3jt9+WB8JvvnHHunaFv\/3NBcJ27SJ8QJG6R+FQRERiLrCFjH\/bOohxcYu1LgT6A+GSJa5K5dxz3XZ2Q4a47exEJGxqZSMiUkckcs\/kYK1owmk9EyjoNVvrGk\/ffTd06uR2KLn\/fsjKgr\/\/3W1rN38+3HijgqFIDWjkUESkDkjYSJ5PLHZaOfCaLQcXLmLNFV62\/dFL8w3fucTYrZsLgUOGwGGHxeLSReq8qFrZGGP+AFwDWOBr4Epr7Z5Q56uVjYhI7Uj0ziexeL4OOZYWq77Eg5dhFPALvqeEDD5q2J2uj3tg8GBo0yaWly1Sp8R8hxRjzBHATUCutfZEIBMYXvNLFBGReEn0nsk13mnFWvjsM7jzTuasOpYvOJ3beYRCchjF0xzGBs7b+w789rdRB8NETrOLpJJop5XrAY2MMfuBxsC66C9JRERiLTs7+EhevLq5BGtFE7Ja2R8IvV7Xi3DFCsjMZF3Dnjy8509MYTBbaFV2ek4MrjnR0+wiqSTaaeWbgbHAbmC2tbbSXyljzChgFEB2dvYZheG0vBcRkZgKDEPgRvL8+wwnnLXw6aflgXDlSqhXD3r2dDuVXHIJ+bNaxu2aEz3NLpKM4jGt3AIYBBwJtAWaGGNGBJ5nrX3GWptrrc1t3bp1TZ9ORESikJfnQlVOjuv0kpNTC8HQWvjoI7j1VpfOzjrL9R88\/nh4\/nnYuBFmzYKrr4aWLWN6zYFTyKHGKeI1zS6SSmo8cmiM8QC9rbVX+76+HOhirb0+1M+oIEVEpPZF25w6IqWlLhAWFLg\/q1dD\/frQq5fbx3jQIGjRIk5P7gQbNTXGZdVAGjmUuiQeeyuvAroYYxrjppV7Akp+IiJJLCFr7UpL4cMPWXq\/l+ZzJtG2ZA17acCm0y6m3ZgxMHAgHHJIjJ6sesF6LlpbOSBGtFezSBqr8bSytfZjoAD4HNfGJgN4JkbXJSIicRCr5tSVlJbC++\/DTTdB+\/Zw7rl0eOspPi05nRFMIIsijls2nfzMyxMaDCH0VLG1tTzNLpKkoipIiZSmlUVEaldGRvDpVGNcvotISQn8979uunjSJFi\/Hg46CPr04ab\/enhxc3+20\/yAH2nZEjZvrvn114SKT0SCi3lBioiIpJ5QrWvCbmlTUgLz5sENN0C7dtC9Ozz3HJx9Nrz8MmzaBFOm8I8tv6oUDAG2bEl8P8Ea91wUqaMUDkVE6pAaBaXiYnj3XbjuOmjbFnr0gBdegK5dYeJEFwgnTYLLLoNmzYCqw2bUU9gRSopKbZEUonAoIpJGqtv1I+ygVFwMc+bAb37jAmHPnvDSS3D++fDaay4QFhTApZdC06aVnr+qlra10S4mL89NIZeWuo8KhiKhRbtDioiIJIlwK5Hz8kKEo\/373ZSx1wtTprjFgU2aQP\/+ru1Mnz7u6zCfP5R47coiIrGhcCgikiZCVSKPHAkLFsCMGUF6G+7f76aMvV6YOtUtCmzaFAYMcIGwd+\/K89ARPH8grfUTSX6aVhYRSXLVTRX7hZquLSmBf\/3LjSRaC+sK91Fw9Ux+OP8qaNPGBcDXXoOLL3YjhkVFrrhkyJCwg2FVzw9a6yeSSjRyKCKSpPLz4eab3WCeX1VNq7OzQ6\/1q88+LuJtPHgZxDRa7P2Jbe83h7yBbi\/jXr2gYcOorjfU86tljEhq0cihiEgS8q\/fqxgM\/QKbVlcsAjGm\/HgD9tKPN3iRkRSRxZv0ZzBTeJ0BDGA6WbYIJkxwO5ZEGQxBLWNE0oVGDkVEklB16\/f8U7iBRSAN7B56MRsPXgYynYPZxo8cwlQuwYuHOVzIPg4C3IheLPlHMhO2b7OIxIXCoYhIEqqu3Yu\/4nf0aCjZtYdBzGIYBQxkOs3ZzlZaMImhePHwDj3ZT4MDfj5eI3ohK6FFJGUoHIqIJKGq1g82bgwP3bMbJs\/kgcICBvA6zdjBFg7lNX6JFw\/vcgHF1AfcCGHfviGqlUVEAigciogkobFjK\/cMbMQuftl0Jvee6KXDjW\/Azp30zmjJxNLhePEwlx5lgdDPGBWDiEhkFA5FRJKQf1RvzJ07OWn1DC5v7KV3yZvU27ELlrdyJ3g8zFrXnd9fVy\/k+kQ1nBaRSKlaWUQk2ezYAa++St5UD0s2t+Y1fkn\/pu9R78rLmXPnOxzdeD0Zzz5Nh2suxGbW45lnoGXLyg+jSmERqQmFQxGRZLB9O0ycCEOHQlYWDB8O778PV1zhdjBZt478c\/\/FoCcuYMWqelh7YM\/DzZvhP\/8JY8\/kFBJu828RiS2FQxGRCuIVSII+7vbtbieSwYNdILzsMvjgA7jqKrfH8dq1MG4c9OgBmZkht8fz9zzMy3PrC0tL3cdUD4ajRpXv6uIPwgqIIvFnrLUJe7Lc3Fy7cOHChD2fiEgkAnsGgpuajXYEruLjNudnBvA6l2YW0DdjFpn790Lbtm7E0OOBc86BzMygj5OR4YJSIGNcIEwn\/qbegbTbikjsGGM+s9bmVjqucCgi4sQrkJyc\/ROnrp7OMAq4mLc4iH2s4QhmNxvGVTOGuUCYUf1ETl0KTHUpCIvUllDhUNPKIpJ2ajo1HKrxdHUNqYP66ScYPx7692fh6ixeYiSn8QXjuJ5zWEA2q7hmx9\/g3HPDCoZQt7anC1VlreprkfhTKxsRSSuBU8MVizaqmxoO1Xg67ECydStMmwZeL8yZA\/v3Q3Y245vdyL+3e\/iEztgK\/ybPiTDo1KXt6YL1eUzXICySbGo8cmiMOc4Y82WFP9uMMb+P5cWJiESquqKNqtRoZG7LFvj3v6FPH2jTxhWTfPst3HwzfPwxrFxJ43\/9la8bdzkgGNY06KRT0UlV8vLcWs90qr4WSRUxWXNojMkE1gJnWWtDbPikNYciEn\/RrlXLzw9jZG7zZpg61Y0QvvsuFBfDkUe6gpJhwyA31z1hNY8LdWMUUESSU7zXHPYEfqgqGIqIJEJN16r51yn++tfu6wkTAkbmNm1yQ1cXXQSHHQbXXgvLl8Ott8LChfDDD\/Dww+R\/dyYdjjSV1jsGjviBWrWISHKK1cjh88Dn1tp\/BPneKGAUQHZ29hmFoXaSFxGJgeuvh6eeOnD0sLp2NKFa2Ix\/tIhhGZPdCOG8eS7ZHXOMGyH0eODUUw8YIYykFU5dqjwWkeQUt1Y2xpgGwDrgBGvtxqrO1bSyiMRTsHBmDPz2t66XdCgVg1obNjCEyQyjgPN5j0xK4Re\/KJ8yPuWUSlPGwR6nomCBT61aRKS2xXNauQ9u1LDKYCgiEm\/BilGshRkzqv65fYXruZ5\/MpfurKMt47iBtqzjQe6Cr76CpUthzJgDRgqDtcsJ1fImkgroeLRq0TZ0IhKJWITDy4BXYvA4IlLHxDq0hNOn0P+cR5h13HPo3ynq2I01HME\/+R1ZFHE\/f+ZEvuZ4lvBczv1w8slBi0uCrRc89NDgz29M5deWqJ6F2oZORCIV1bSyMaYxsBo4ylr7c3Xna1pZRPzisVVdddO6k59cw4d\/nMTA\/QV0ZQEZWL41J7DiDA\/3LPbw+Z5OYV1LqOdp2dK1Ogz2azXY1HJYldFR0tpGEQlF2+eJSFKJR2gJFjiPbbial4dNIneFFz74AIBFnIQXDwUMYynHk5Pjglm4Qa2q9YKhfqXW1lpCrW0UkVAUDkUkqcQrtOTnwz\/\/tIqz1xaQ18DL6fs+ct84+WT+vMjDa3j4juOies6qgi0k10idRg5FJBTtrSwiSSXmBRkrV8Jf\/kLek2fxwdoc\/sqtnN5pjxsCXLYMvvqKCTn\/VykY1uQ5q1ovmGz7Hyfb9YhI8lM4FJFaEU1o8ReVHGX+xwMtHmXz0Z3dDiW33eZ2K3nwQfj+e\/jiC7jrLteKJsrnrKiqrd2Sbdu3ZLseEUl+mlYWkbiqquiiJgUZ0x77gYV3FDBov5dcPgPgs4xcMjzDOG3sMDj66Bpfj4hIXaI1hyKScDGrSF6+3O1S4vW60UDgE84sKypZyZExW0On8CgidYXCoYgkXFTFEN99Vx4Iv\/rKHTvrLP74sQcvw1hFzgGnx6L6Nh7tdUREkpXCoYgkXMQVyUuXQkGBC4SLFrljZ5\/ttq4bOhSys+NafavKXhGpS0KFw3q1cTEiUjdkZ4exddySJeUjhIsXu2PnnAOPP+4CYfv2B\/zs2LHBR\/diUX0bzg4rIiLpTtXKIhI3waqDjYEmhd\/wt0Pu5ad2J0CnTnDvvXDIIfDEE7BmDSxYAL\/\/faVgCPGtvk3kfsciIslKI4ciEjf+wDb6LkuzVYtd+Yj10okllP5sWLD9PBpe\/nfOfHAItG0b0ePGYw1gPEclRURShUYORRLM36MvI8N9zM+v7SuKE2vhq6\/IW\/pnVjY6nq85mdGMYSNtuIF\/cARr6Vb6Hp73fhdRMIwn9QQUEVFBikhCpX01rC8Qlq0h\/P57l4LPP5\/r53qYxBCKaHPAj2iPXxGR2qFqZZEkkJbVsNa63oNer6s0Xr7cBcIePVyV8eDBkJWVnq9dRCSFaW9lkSQQSTVssk0\/H3A9OZaZ9y+EO+6AY46BM86ARx91W9g9\/TRs2ABz5sBvfgNZWYD2+BURSRUqSBFJoLBau1B5+rmw0H0NtTP9nJ8Po661dNq9kOvxMmxVAUfd\/T9KMzLJuLAn3HknXHIJtGoV8jHKilO0+4iISFLTtLJIAoW75jBppmCthU8+4ZleXnptK6ADheynHnO4EC8ePm83iC9Xt0zgBYmISKxoWlkkCYRbDRuPZsxhT1OXlsKHH8Itt7gL7NKFK7Y9yTecwBW8QBZF9GUmL3AVi9YqGIqIpBtNK4skWDg9+sKdfg5XtdPU\/kBYUOD+rFkDDRpAr15w\/\/3k\/t9Avl7TImbXIyIiyUsjhyJJKNbFG6NHHziVDbB7VylTbv0v3HyzS3nnngvjxsFpp8FLL0FREbz+OowcyZ8eaqFiEhGROkIjhyJJKNbFG\/5RyAxK6MoCPHgZyiTablwPTx8EvXvDww9D\/\/5w8MFxvx4REUleURWkGGMOAZ4DTgQscJW19sNQ56sgRSQ6+fmRB7SXJ5Tw7OXvM5QChjKJw9nAbhoykz7Ma+XhyR\/6QfPmiXkBIiKSNOJVkPIEMMta2xE4BVgS5eOJSAj+dYOFha6I2L9uMGhhSXExzJ0L11\/PRVccwVx6cBXPs4CuDOcVsihimJnMWX+7rMpgmGy9FkVEJP5qPHJojGkOfAUcZcN8EI0citRcte1tiovhvffcTiWTJ8OmTdCoEd7d\/fDiYQZ92UnTA362qr+5ab\/Vn4hIHRePkcOjgE3AC8aYL4wxzxljmkTxeCIpL54jbcHa2GRSzC8K33Yp7vDD4cILYcIEt3Wd1wubNnFbjhcvv6wUDHNyqn6+YEUsu3a54+lGI6QiIuWiCYf1gNOBf1lrTwN2AncEnmSMGWWMWWiMWbhp06Yonk4kuUU07RvGYwWGFX\/bmHrs5yJm8wzXsoHDmE0v9r\/0MtN3XcgwCujYchP5A1+FYcOgSZMaVz7Ho9diMorlfzcRkXQQzbTyYcBH1toOvq\/PA+6w1vYL9TOaVpZ0FqtdTYJN5zZvtJ+xF7xDs1le+pdMpSVb2U5TZmYO4McLPdw1vzdbdzcqOz9w+rcmhSxJs0tLnNWV1ykiEijUtHK01crvA9dYa5cZY+4Fmlhrbwt1vsKhpLOMjOBr+IxxPabD5Q8r9dnHhczBg5dBTONQfmR\/w2a8kTmQ8Ts9LGnfi7sfbMTo0fEJN3VlzWGs\/ruJiKSaeFUr3wjkG2MWAacCD0T5eCIpK9RuIRHtIrJ3LycVvsGLjKSILGbQjyFM5g36M5Dp1P+xiME7\/sNUO4hlqxqRlxe\/6d9wt\/qD1F6zF5P\/biIiaSSqcGit\/dJam2utPdlae4m19sdYXZhIqgl3bV9gkHrlhT1uJ5LLL4c2bXidAQxiGtMYRMzUr\/kAABQDSURBVH9eJ4siRvISi3IGQMOGlZ43nuEmL8+NPpaWuo+hgmEqr9mL9W40IiKpTtvnicRIOCNt\/iC1oXAPA+w0xhSOoN9VWTBwoAuIgwcz949v0qFREVcwnjfpzz4OqjKs1Ha4SfWq5khGSEVE6oKo1hxGSmsOpa7Kz4f77txNp9WzGEYBA3id5mxnKy2YwmDmZ3kYv\/oCaNCg7PxICkhqUnASK1qzJyKSmuJSkBIphUOpc3btYv5ds9j4Dy+9S96gGTvYwqFMYTBePLzLBRRTP6WDlKp9RURSU7wKUkQk0M6dUFAAl14KWVl0e2Io3Uvm8AqXcRGzOYwNXMtzzOZiiqkPpEbxQ6iik9qe1hYRkdiqV9sXIJIWdu6EN990u5LMmOEW3bVuDSNGcOHTHuZxPiUh\/rqlQpAKbGvjLzqB8unr2prWFhGR2NK0skhN7dgBb7zhRglnzIDduyErC4YOBY8HzjsP6tULOe0Kbuo1FYKUpo5FRNJPqGlljRyKRGL7dhcIvV6YORP27IE2beDKK8sDYWbmAT8ydmzqN5OuK1vpiYiIwqFI9bZtc21mvF6YNQv27oXDD4drrnGBsGvXSoGwonSYds3ODj5ymAprJUVEJDIqSJEaS+VdMar1888wYQIMGuSmikeMgE8\/hd\/8Bt5\/H9asgb\/\/Hbp1qzIY+oXTTDqZqehERKTu0Mih1Eg4BQop56efYNo0t4Zw9mzYt4+dh7ZjYoPreGHvMNbWO5sxnTPIO7e2LzTx0mH0U0REwqOCFIlYfj6MHAklJZW\/l3IFCj\/+6AKh1wtvvw3790P79jBsGG819zD0kbPYubt8gD3V1gqKiIiEoibYEhOBI4aBUqKZ89atMHWqC4Rz5kBxsUu1w4a5NYSdO4MxqtAVEZG0pmpliYlg++hWlLQFClu2wJQpbsr4nXdcIOzQAf7wBxcKzzzTJdsKVKErIiJ1kQpSJCJVBaNICxTiXtCyeTM8+yz06uXazVx7LXz3HdxyiysuWbECHnmkbKQwUKigG+sAnNaFPSIiknI0cigRCdXSJDMzsrV4cStoKSpyI4ReL8yb5xZGHn003HabmzI+7bSgQTCYUP0JY1mhm5aFPSIiktK05lAiEmzNYU2KNGK6nm\/jRpg82QXC995zix6PPdaFQY8HTjkl7EAYKD8\/vhW6WtcoIiK1RQUpUqVIQlAsAlNGBgR764Vd0LJhA0ya5NYQzp\/vfui441wYHDYMTj65xoEwkaK+DyIiIjWkghQJKdKpzby86EfParTjxvr1LhB6va4RtbXQsaNLqh4PnHhiSgTCirTziIiIJBsVpEjQCuRdu9zxeAl7x421a+HJJ92exUccATfe6ApN7r4bFi+GJUvgvvvgpJNSLhiCdh4REZHko5FDqZWWLVXuuLFmjZsuLiiABQvciSeeCPfe66aMO3WK34UlmHYeERGRZKM1h5IcRRGrVpVPGX\/4oTt20knlRSUdO5adGu8iERERkbog1JrDqKaVjTErjTFfG2O+NMYo9aWoWpvaLCyEv\/4VunRxSfSWW9x89pgxsHQpLFoEf\/5zpWA4apT7UWvL10def716BYqIiMRCVCOHxpiVQK61dnM452vkMHklbDTuf\/9z08Ver2tEDa73oL\/K+Nhjq\/zxUKOcxhxY9as9kEVERKoWl1Y2CocSlhUrygOh\/7\/\/GWe4QDh0KBxzTNgPFar1SzDqFSgiIhJavFrZWGC2McYCT1trnwnyxKOAUQDZ6s9Rd\/zwgwuDXi98\/rk7lpsLDz\/sRgiPOqpGDxuq9Usw2gNZREQkctG2sulqrT0d6APcYIzpFniCtfYZa22utTa3devWUT5d+kqL\/XW\/\/x4eeMBNEx9zDNx5J9SrB48+6qaTP\/0Ubr+9xsEQgq+PDNXBRv8WERERiVxUI4fW2nW+j0XGmClAZ2B+LC6sLknp\/XWXLSsfIVy0yB3r0sUVmgwd6uZ2YyhY65e+fWH8+PjugSwiIlJX1Hjk0BjTxBjTzP850AtYHKsLq0sS2YQ6JiOUS5bA\/fe7Leo6dnQVxU2bwuOPu8T24Yeu8rhCMIzlyGhenltLWFrqPo4b54pPcnLcKGJOjopRREREaqrGBSnGmKOAKb4v6wEvW2urHKtRQUpwidpfN3CEEiKo6v322\/IRwm++cce6di0vKmnXLj7PKyIiInERl2rlSCkcBpeoJtQRPY+1LgT6A+GSJS6tnnuuC4RDhrjt7GL9vCIiIpIQ8apWlhgYOzb4yFqs18xVu02etfD11+VtZ5YudYGwWzfXZXrIEGjbNvbPKyIiIklD4bCWBDadHjkSZsyIbxPq4G1gLBcftgj+zzdC+N13bp67Wze48UYXCA87LA7Pq2piERGRZKRwWAuCVSePHx\/\/NXjlI5SWU\/kSD15+abwcs345PJgB3bvDH\/4AgwdDmzZxeN7yY6omFhERSU5ac1gLamUNnrXw+ed8c6+XJrMK6FD8A8VksunEHhx+o8cFwjj2oUzY9nwiIiISFhWkJJFEVSdjrduurqDA\/VmxAjIzoWdPt0vJ4MHQqlUMn1BERERShQpSksihh8KWLcGPR81atxOJ1+sC4cqVbpeSnj3hrrvgkkugZcsYPJGIiIikI4XDdGAtfPxxeSBctcoFwosugrvvhkGDYpQ8RUREJN0pHNaCrVsjOx5UaSl89JELhJMmwerVUL8+9OoF\/+\/\/uUDYokVMrldERETqDoXDWlDj1i6lpfDBB+VrCNeuhQYN4OKLYcwYGDgQDjkkLtcsIiIidUON91aui2K1P\/DYsa6VS0UhW7uUlsL778NNN0H79nDeefDUU3DGGTBhAhQVwfTpcPnlCoYiIiISNYXDMPl7ExYWuiV+hYXu65oExLw819MwJ8dVKOfkBPQ4LCmB996D3\/3O7VncrZs7oXNn94RFRTBtGowYAQcfHNPXGYlYhWURERFJHmplE6a49yYsKXEjhF4vTJ4MGzZAw4bQt69rO9O\/PzRrFoMnio3ARt7gRj\/j3chbREREYkN9DqMUl96ExcUwf355ICwqgkaNXCD0eKBfP2jaNKrrjpdaaeQtIiIiMaM+h1GK2f7AxcUwb54LhFOmwKZNbsitXz8XCPv2hSZNYnHJcbVqVWTHRUREJDUoHIYpqv2B9++HuXPLA+GWLS4A9u\/vpoz79EmJQFhRzMKyiIiIJJU6V5ASbhFF4HlQTRFJgJfH7+fyNm\/xb3MNPzY8zLWbmTjR9SGcNMlNIU+c6MJhigVDiLDiWkRERFJGnQqH4VYchzoP3Hq60lL3sVIw3LcPZs7kh\/OvovcVbXipqDceXmNGaW8ubTCFiU8Wwcsvw5AhlZNVFdecjBXB1VZci4iISEqqUwUp4RZRRFRssW8fvP22mzKeNg1++oltpjnT7EC8eJhNL\/bSMPTPV0EVwSIiIhIvqlYm\/Irjas\/buxdmz2bFIwW0WjCN5vZntpnmbO46iKNu99BwYC\/2clC1z1MdVQSLiIhIvKhamfCLKIKddxB7GNFqNvza63Yk2baNFhzCZC7Bi4c59kL2\/fcgWi6Bpi1h75bqn6c6qggWERGRRIt6zaExJtMY84Ux5o1YXFA8hVtE4T+vIbsZxFT+Qx5FZPHcpkHw5pswdChXZM2gDRu5kheZQT\/2+UYKt2yBbdvclsfVPU91QoVJVQSLiIhIvMSiIOVmYEkMHifuwiqi2L2bvEaT+eaUX7HJZDGVwfTNmEXR+b+EWbNg40Z4\/nle2tSH\/TQI+jz797vNTKIt1lBFsIiIiCRaVNPKxph2QD9gLHBLTK4ozvLygoS0Xbtg5kxXVPLGG7BzJx1atoSrh\/NOSw+\/eaUHK+bXJ3ul61E9Y0bwNYkVbd0KmzdHf60Ao0e7qeTsbBcMVYwiIiIi8RJVQYoxpgB4EGgG\/NFa2z\/IOaOAUQDZ2dlnFAZb9Fcbdu50Kc\/rdVPFu3ZBq1auzYzHA927k\/9qvUrVwuFS0YiIiIgks5gXpBhj+gNF1trPjDHdQ51nrX0GeAZctXJNny8mduxwQdDrdcFw927IyoLLL3eBsFs3qFd+S0aPrlkw1NSviIiIpKpoppW7AgONMX2BhkBzY8x\/rLUjYnNpMbJ9u5sqLihwgXDPHmjTBq680u1O0q0bZGYG\/dFIqoJzcjT1KyIiIqmvxgUp1to7rbXtrLUdgOHAu0kTDPfscTuRDB7sRgZ\/9Sv44AO4+mqYNw\/WroV\/\/pP8dT3ocHRmyN1Hwq0K9k8hh9w5RURERCRFpGefw3374KqroGVLuPZaN2V8zjkHjBAG7j5ScYs8f7gbO7byDiWBNIUsIiIi6SR9d0j59lvo2NFtdxJEuLuP5OcfWC3sr1bWFLKIiIikMm2fFyDcrfRERERE0lGocBiLJtgpSbuPiIiIiFRWZ8Ohdh8RERERqazOhsOwttITERERqWPSs1o5TEG30hMRERGpw+rsyKGIiIiIVKZwKCIiIiJlFA5FREREpIzCoYiIiIiUUTgUERERkTIKhyIiIiJSRuFQRERERMooHIqIiIhIGWOtTdyTGbMJKEzYE0IrYHMCny8V6J4Ep\/sSnO5LcLovlemeBKf7EpzuS3CJvi851trWgQcTGg4TzRiz0FqbW9vXkUx0T4LTfQlO9yU43ZfKdE+C030JTvcluGS5L5pWFhEREZEyCociIiIiUibdw+EztX0BSUj3JDjdl+B0X4LTfalM9yQ43ZfgdF+CS4r7ktZrDkVEREQkMuk+cigiIiIiEVA4FBEREZEyKRkOjTG9jTHLjDHLjTF3BPn+QcaYV33f\/9gY06HC9+70HV9mjLk4kdcdb2Hcl1uMMd8aYxYZY94xxuRU+F6JMeZL35\/pib3y+ArjvlxhjNlU4fVfU+F7I40x3\/v+jEzslcdPGPfk8Qr34ztjzE8VvpfO75XnjTFFxpjFIb5vjDFP+u7bImPM6RW+l67vleruSZ7vXiwyxnxgjDmlwvdWGmO+9r1XFibuquMvjPvS3Rjzc4W\/K3dX+F6Vf\/9SWRj35bYK92Sx7\/fJob7vpeX7xRjT3hgz1xizxBjzjTHm5iDnJNfvFmttSv0BMoEfgKOABsBXQKeAc64HnvJ9Phx41fd5J9\/5BwFH+h4ns7ZfUwLvSw+gse\/z6\/z3xff1jtp+DbV4X64A\/hHkZw8FVvg+tvB93qK2X1Mi7knA+TcCz6f7e8X32roBpwOLQ3y\/LzATMEAX4ON0fq+EeU\/O8b9WoI\/\/nvi+Xgm0qu3XUEv3pTvwRpDjEf39S7U\/1d2XgHMHAO+m+\/sFOBw43fd5M+C7IP8fSqrfLak4ctgZWG6tXWGt3QdMBAYFnDMIGO\/7vADoaYwxvuMTrbV7rbX\/A5b7Hi8dVHtfrLVzrbW7fF9+BLRL8DXWhnDeL6FcDLxtrd1qrf0ReBvoHafrTKRI78llwCsJubJaZq2dD2yt4pRBwEvW+Qg4xBhzOOn7Xqn2nlhrP\/C9Zqg7v1fCea+EEs3vpKQX4X2pE79brLXrrbWf+z7fDiwBjgg4Lal+t6RiODwCWF3h6zVUvsll51hri4GfgZZh\/myqivS1XY37V4pfQ2PMQmPMR8aYS+JxgbUk3Psy1DeUX2CMaR\/hz6aasF+Xb+nBkcC7FQ6n63slHKHuXbq+VyIV+HvFArONMZ8ZY0bV0jXVprONMV8ZY2YaY07wHdN7BTDGNMaFnEkVDqf9+8W4ZW6nAR8HfCupfrfUi\/cTxIEJciywH0+oc8L52VQV9mszxowAcoHzKxzOttauM8YcBbxrjPnaWvtDHK4z0cK5L68Dr1hr9xpjfosbdb4gzJ9NRZG8ruFAgbW2pMKxdH2vhKMu\/m4JizGmBy4cnlvhcFffeyULeNsYs9Q3slQXfI7bt3aHMaYvMBU4Fr1X\/AYAC6y1FUcZ0\/r9YoxpigvDv7fWbgv8dpAfqbXfLak4crgGaF\/h63bAulDnGGPqAQfjhrnD+dlUFdZrM8ZcCIwGBlpr9\/qPW2vX+T6uAObh\/mWTDqq9L9baLRXuxbPAGeH+bIqK5HUNJ2DaJ43fK+EIde\/S9b0SFmPMycBzwCBr7Rb\/8QrvlSJgCumzjKda1tpt1todvs9nAPWNMa2o4++VCqr63ZJ27xdjTH1cMMy31k4OckpS\/W5JxXD4KXCsMeZIY0wD3BsssGJyOuCv6BmGW\/BqfceHG1fNfCTuX3GfJOi6463a+2KMOQ14GhcMiyocb2GMOcj3eSugK\/Btwq48vsK5L4dX+HIgbj0IwFtAL9\/9aQH08h1LdeH8HcIYcxxuAfSHFY6l83slHNOBy32VhV2An62160nf90q1jDHZwGTg19ba7yocb2KMaeb\/HHdPglawpiNjzGG+te4YYzrj\/n+7hTD\/\/qUzY8zBuJmraRWOpe37xfc++DewxFr7WIjTkup3S8pNK1tri40xv8PdnExcFeU3xpj7gIXW2um4\/wgTjDHLcSOGw30\/+40x5jXc\/8yKgRsCpstSVpj35VGgKeD1\/c5aZa0dCBwPPG2MKcX9AnvIWpsW\/8MP877cZIwZiHtPbMVVL2Ot3WqMuR\/3yxzgvoApkJQU5j0Bt1h8ou8fVn5p+14BMMa8gqsybWWMWQPcA9QHsNY+BczAVRUuB3YBV\/q+l5bvFQjrntyNW9M9zvd7pdhamwu0Aab4jtUDXrbWzkr4C4iTMO7LMOA6Y0wxsBsY7vu7FPTvXy28hLgI474ADAZmW2t3VvjRdH6\/dAV+DXxtjPnSd+wuIBuS83eLts8TERERkTKpOK0sIiIiInGicCgiIiIiZRQORURERKSMwqGIiIiIlFE4FBEREZEyCociIiIiUkbhUERERETK\/H+KV7T\/WJPUywAAAABJRU5ErkJggg==%0A\" alt=\"\"\/><\/figure>\n\n\n\n<h2>Backpropagation<\/h2>\n\n\n\n<p>Learn more about neural networks and backpropagation here:&nbsp;<a href=\"https:\/\/youtu.be\/4Cu9fizAtAo?t=1652\">https:\/\/youtu.be\/4Cu9fizAtAo?t=1652<\/a><\/p>\n\n\n\n<p>In&nbsp;[88]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>## Generate Data<\/em>\n<strong>import<\/strong> <strong>numpy<\/strong> <strong>as<\/strong> <strong>np<\/strong>\n\nX = np.random.random((100, 1))\ny = 4 + 3 * X + .3*np.random.randn(100, 1)\n<\/pre>\n\n\n\n<p>In&nbsp;[89]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>def<\/strong> neuron(w11, w12, x):\n    <em># We will talk about Activation function later.<\/em>\n    r = w11*x + w12\n    <strong>return<\/strong> r\n\n<strong>def<\/strong> forward_nn(w11, w12, w21, w22, x):\n    h1 = neuron(w11, w12, x)\n    o1 = neuron(w21, w22, h1)\n    <strong>return<\/strong> o1\n\n<strong>def<\/strong> sq_error(o1, yy):\n    e = o1 - yy\n    <strong>return<\/strong> e*e\n\n<strong>def<\/strong> error_nn(w11, w12, w21, w22, x, yy):\n    o1 = forward_nn(w11, w12, w21, w22, x)\n    e = o1 - yy\n    <strong>return<\/strong> e*e\n<\/pre>\n\n\n\n<p>In&nbsp;[90]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">w11 = 0.5\nw12 = 0.5\nw21 = 0.5\nw22 = 0.5\n\nlearning_rate = 0.001\n\n<strong>for<\/strong> epoch <strong>in<\/strong> range(100):\n    <strong>for<\/strong> i <strong>in<\/strong> range(len(X)):\n        x = X[i]\n        yy = y[i]\n        \n        dE_dw11 = diffp(error_nn, 0, w11, w12, w21, w22, x, yy)\n        dE_dw12 = diffp(error_nn, 1, w11, w12, w21, w22, x, yy)\n        dE_dw21 = diffp(error_nn, 2, w11, w12, w21, w22, x, yy)\n        dE_dw22 = diffp(error_nn, 3, w11, w12, w21, w22, x, yy)\n        \n        w11 = w11 - learning_rate * dE_dw11\n        w12 = w12 - learning_rate * dE_dw12\n        \n        w21 = w21 - learning_rate * dE_dw21\n        w22 = w22 - learning_rate * dE_dw22\n<\/pre>\n\n\n\n<p>In&nbsp;[91]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">ycap = forward_nn(w11, w12, w21, w22, X)\n<\/pre>\n\n\n\n<p>In&nbsp;[&nbsp;]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><\/pre>\n\n\n\n<p>In&nbsp;[92]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>from<\/strong> <strong>matplotlib<\/strong> <strong>import<\/strong> pyplot <strong>as<\/strong> plt\n\nplt.figure(figsize=(11,4))\nplt.subplot()\nplt.plot(X, ycap, color='r')\nplt.subplot()\nplt.scatter(X, y, color='b')\nplt.show()\n<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\/usr\/local\/anaconda\/lib\/python3.6\/site-packages\/ipykernel_launcher.py:6: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance.  In a future version, a new instance will always be created and returned.  Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n  \n<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAosAAAD5CAYAAABPn3\/0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+\/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3df5QcZZ3v8c83E0AGVI7JeAHDzCi\/hAiJMHLD0UUUf\/DLwB5ZxTNZQcAREGXlqhfNPSrsibtyvYvrjyVGEJEMP5QryiIqq8hZ7q5BJ0AQgmDACQSyMkQMSICQzPf+UT2Z7p6q7uruquqq7vfrnD4zXfVM99Ndncx3vs\/zfR5zdwEAAABhZrW7AwAAAMgvgkUAAABEIlgEAABAJIJFAAAARCJYBAAAQCSCRQAAAESaXa+BmR0o6fqyQ6+T9Dl3\/0pZm6Ml\/UjSH0qHfuDuF9d63Llz5\/rg4GCj\/QUAAEDCVq9e\/ZS794WdqxssuvuDkhZKkpn1SHpc0o0hTe9w9xPjdmpwcFBjY2NxmwMAACAlZrY+6lyjw9DHSHrY3SMfEAAAAJ2j0WDxVEnXRpw70szWmNlPzGx+i\/0CAABADsQOFs1sZ0mLJX0\/5PRdkgbcfYGkr0n6YcRjjJjZmJmNTUxMNNNfAAAAZKiRzOJxku5y9z9Wn3D3Z9z9L6Xvb5G0k5nNDWm3wt2H3H2ory90DiUAAABypJFg8QOKGII2sz3NzErfH1F63E2tdw8AAADtVLcaWpLMrFfSOyV9pOzY2ZLk7sslnSLpHDPbJul5Sae6uyffXQAAAGQpVrDo7lskzak6trzs+69L+nqyXQMAAEC7sYMLAAAAIhEsAgAAZGB0VBoclGbNCr6Ojra7R\/HEGoYGAABA80ZHpZERacuW4P769cF9SRoebl+\/4iCzCAAAkLKlS6cDxSlbtgTH845gEQAAIGWPPtrY8TwhWAQAAIVWhLmA\/f2NHc8TgkUAAFBYU3MB16+X3KfnAuYtYFy2TOrtrTzW2xsczzuCRQAAUFhFmQs4PCytWCENDEhmwdcVK\/Jf3CIRLAIAgAIr0lzA4WFpfFyanAy+SvkfPpcIFgEAQIEVdS5gUYbPJYJFAABQYEWdC1iU4XOJYBEAABRYUecCFmn4nB1cAABAoQ0P5z84rNbfHww9hx3PGzKLAAAAGSvS8DnBIgAAQMaKNHzOMDQAAEAbFGX4nMwiAAAAItUNFs3sQDO7p+z2jJn9XVUbM7Ovmtk6M7vXzA5Lr8sAAADISt1haHd\/UNJCSTKzHkmPS7qxqtlxkvYv3f67pMtKXwEAAFBgjQ5DHyPpYXevLvY+SdJ3PbBK0h5mtlciPQQAAOhU110nveUtQZXL5z7X7t6EarTA5VRJ14Ycf42kx8rubygd29hkvwAAADrP2Jj0pjeFn\/vDH7LtS0yxM4tmtrOkxZK+H3Y65JiHPMaImY2Z2djExET8XgIAgI4xOioNDkqzZgVf87gfcmK2bg2yhlO3sEDxU5+Stm2Trr46+\/7F0Mgw9HGS7nL3P4ac2yBpn7L78yQ9Ud3I3Ve4+5C7D\/X19TXWUwAAUHijo9LISLB7iXvwdWSkwwLGCy6YDg532SW8zQMPBG+Au3TJJVJPT7Z9bEAjweIHFD4ELUk3SfpgqSp6kaTN7s4QNAAAXaZe1nDpUmnLlspjW7YExwvr7rsrs4eXXjqzzZIl08Ghu\/T612ffzybFmrNoZr2S3inpI2XHzpYkd18u6RZJx0taJ2mLpA8l3lMAAJBrU1nDqWBwKmsoTS8+\/eij4T8bdTyXXnpJ2nnn+u2ee27mnn4FFCuz6O5b3H2Ou28uO7a8FCiqVAX9UXff190PcfextDoMAACSl8Q8wjhZw\/7+8J+NOp4bn\/nMdOYwKlC87bbK7GEHBIoSO7gAAAqsqwolUpTUPMI4WcNly2bGUL29wfFcueOOyqHlf\/zHmW3e977K4PBtb8u+nxkgWAQAFFJXFEpkJKl5hHGyhsPD0ooV0sBAEIMNDAT3275H8ksvVQaHRx0V2uz6y5+dDg6vvz7jTrYHwSIAoJA6slCiQUllVpOaRxg3azg8LI2PS5OTwde2BYqnnFJ3aHmJrpbJd9z+59\/vnnEn26\/RRbkBAMiFjiiUaEGcYpK4+vuDnw873oip5126NLgO\/f1BoNj2rOGUVaukI4+s3WbuXGliQrNmBcnDat3y+SpHZhEAUEiFLZRISJKZ1STnEeYmaygFC12XDy1HBYpPPTU9tFzaNKTbP1\/lCBYBAIVUmEKJlCSZWc3tPMJmHH74dHC4007hba64orIwZc6cGU26\/fNVjmFoAEAh5X7IM2VJDR1PGR4u6Ht3883Se95Tv13YmHIN3f75Kmfe4JuXlKGhIR8bYzlGAACaUT1nUQoyX4XNCMa1bVt0xrDc449Le++dfn86hJmtdvehsHMMQwMAUEAdNXRcz6tfXX9o+cwzK4eWCRQTwzA0AAAFVdih43puvVV697vrt2vT6Gi3IbMIAECHKswON5OTlVXLUYHiunWV2UNkgmARAIAOlPsdbvbcczo47OkJbzM8XBkc7rtvtn2EJIJFAAA6Uu52uPnxjyuzh3\/8Y3i78uBw5cps+4hQBIsAgK6S96HZvG3h17TqoeUTTwxv97vfMbSccxS4AAC6RpJb5KUhj1v4NcSsfpvDD5dYOq9QyCwCADpSWIYud0OzVeL0L27mMZMdSL7xjcrsYZTyzCGBYuGwKDcAoONELVhdHYhNMQtGTdtt1qzwkdip\/jW6EPdUgJzYDiTuQSfr+Plnb9M7lr2thSdC1lpelNvM9jCzG8zsd2b2gJkdWXX+aDPbbGb3lG6fS6LjAAA0IypDF1V0m+rQbAOi+jF1vNHM6PCwND4eBJrj400GiuWZwxqBosl33M4aJVBsRN7n0cYdhv5nST9199dLWiDpgZA2d7j7wtLt4sR6CABAg6KKOLZvz2BotgX1ho4zKVq58srYQ8uzbDpATK0\/HS73SxwpRrBoZq+QdJSkKyTJ3be6+5\/T7hgAAM2KytBNbYmX1y3y6m3hVy\/z2BT3yuDwjDPC242Ozqhajnpe93xkyPKesZPyP49WijFn0cwWSlohaa2CrOJqSee7+3NlbY6W9H8lbZD0hKRPuvv9IY81ImlEkvr7+w9fH1amBQBAixqd21cUib2uOFXLUt2lbML6U66d73lRPgP15qlmpdU5i7MlHSbpMnd\/o6TnJF1Y1eYuSQPuvkDS1yT9MOyB3H2Fuw+5+1BfX1\/sFwAAQCOGh6XTTpueo9jTE9zPU5DQjHqZx0jf+U68oeXJyYbWPCzvT5h2ZsiKkLGTUsoWJyxOZnFPSavcfbB0\/68kXejuJ9T4mXFJQ+7+VFQbqqEBAGkpSlYpVXGyh1\/7mnTeeYk8XV4yZHntT5S8fFZbyiy6+39JeszMDiwdOkbBkHT5E+xpFnwqzeyI0uNuaqnXAAA0qShZpUSVZw7jrnmYUKAo5S9Dlrf+RGk6W5yhuNXQH5M0amb3Sloo6YtmdraZnV06f4qk+8xsjaSvSjrV27WAIwCg66VdNZyLwom4C2Jv357JdnqZLAJe4P7UksgSRymKFSy6+z2luYaHuvvJ7v60uy939+Wl81939\/nuvsDdF7n7f6bbbQAAoqWZVWrrUiflwWFEVvBL+vSO5Wx263WNXpvNZm15y5DlrT9Fxg4uAICOk+Y8sMHB8D2XBwaCrFCiGqhazrRf6Dgt7+ACAECRpJlVSnWI+8tfjje0\/NJLM4aWM1mwG11pdrs7AABAGoaH0xly7O8Pz+A1PcQdJ3t43HHSLbdk2y+ghMwiACDXclFMUqblwolmqpbrBIqJ9AuIQLAIAMitPO6b2\/AQ9yWXxAsOX3ihbtVyrcCZgg6khQIXAGiT0dFg3b9HHw2GCpct4xd7tcIWbcQZWt5zT2njxtifg7ws3ozORIELAJTJw7BmHjNmeVSYoo2YQ8ujK12DA65Z5hrcZaPOPTf+56ArFxpHLpBZBNBV8pKdKWzGLGO5fZ8uu0w699z67Z59Vtp9d0nhnz2z8BHnsNdXlO3rUExkFgGgJC\/ZmcJkzNosV0Ub5ZnDWoFi+bzDUqAohX\/2ovI1YZ+Domxfh85DsAigq+QlSOMXfzzNFG0kNs2gmarlGqN1jXzGwj4HuQqca8jDNA8ki2ARQFfJS5BWlF\/85doVBDSyb25Lc0GvvDJecPj0003ttRz1Gat+qqjPQRGqnZmL25mYswigq+RlzuJUX4pSDZ2n962Whuc4NrCdXqui3sPTTguWUSzC56Ce3M4xRV215iwSLALoOkUK0vKiKEFA3SKQDIPDMJ3+2aMIp7gIFgEALSlKEFAd1L5P1+t6nVr\/BzduDNY9REuK8kcFZqIaGgDQkrzM9axn2TLJZTtuNQPF8nmHBIqJKOJcXNRHsAgAmKG6mOX443McBJQVpQwvab1qGc0rQhEOGkewCACoEFbRetVVQSFGq0FAIhXVP\/5xvKrlRx4hOGyDRqrXUQyxgkUz28PMbjCz35nZA2Z2ZNV5M7Ovmtk6M7vXzA5Lp7sAUBxFXW8uauHyW25pLQhoaVmV8uDwxBOj25UHh699bWMdBBAqbmbxnyX91N1fL2mBpAeqzh8naf\/SbUTSZYn1EAAKqMjrzaW1cHlDu+ckvCA2gObVDRbN7BWSjpJ0hSS5+1Z3\/3NVs5MkfdcDqyTtYWZ7Jd5bACiIvGwr2Iy0illqBqG33RYvOFy7luCwAIqaVUe4OJnF10makHSlmd1tZpeb2W5VbV4j6bGy+xtKxyqY2YiZjZnZ2MTERNOdBoC8y8u2gs1opKK1kaCgOticqliedJOOOSby56Zqm3frdY3edVDs19GKdgQ7nRJgFTmrjnBxgsXZkg6TdJm7v1HSc5IurGoT9mfgjD\/53H2Fuw+5+1BfX1\/DnQWAoijKUjNh4la0NhoUjK+3imVtIrlrcGC65ZSsMrP1XlcaQV0nBVhFzqojXN1Fuc1sT0mr3H2wdP+vJF3o7ieUtfmmpNvd\/drS\/QclHe3uG6Mel0W5AXSyomyP14q6CzDfeae0aFH9B\/r1r6U3vaniUDsXAa\/1upYtS+e6dtJi1kVZwB2VWlqU293\/S9JjZnZg6dAxktZWNbtJ0gdLVdGLJG2uFSgCQKfrhvXmwobUXabx9aV5h7UCxfJ5h1WBotTezGytKQRpZc3CAsVax\/OsyFl1hItbDf0xSaNmdq+khZK+aGZnm9nZpfO3SHpE0jpJ35J0buI9BYCC6bT15qqHX1\/1qsrdUuoNLTdSmNLOnUBqBTtpzUXt6WnseJ6xi0vniRUsuvs9pbmGh7r7ye7+tLsvd\/flpfPu7h91933d\/RB3Z3wZQMdM2O8UrVyPqWH1V6y\/V5MeZA+f2lQjOLz99paqltuZmY0Kdo4\/PnjvwrSaNdu+vbHjedYNWfWu4+5tuR1++OEOoHOtXOne21uZTjILvg4MBOeRnbDr0dsb8zrMzAuG3sKu68qVwfU2K9Z1r+73OefMfP8afh8jHnvqfthjDwyk8eqAmSSNeUTMVrfAJS0UuACdLWrC\/pROK\/bIu4YKKGqtc1jeTF6zaKGTinyi3r+enmArxLivJ+o9Oe204HE64b1CMdUqcCFYBJCKqIrIckWs9CyqmhWqv39Y2m+\/uo9xsm7Uj3RyxbFa15AK35nqVVovXRrMf+zvD+4TKCIrLVVDA0Az4szhKsIC1Z2i5oLYtQLF0ojo6ErXv\/VWBor1ihaKtDB5vfmcSVX41npPOq0gCp2DYBFAKsKKBKolvZRG+S\/8uXODG8U1gUYWxA4rTGmmaKEoS6jEWRA7qQrforwnQDmCRQCpKA8upJnT4JJeSqP6F\/6mTcGt6LthNO2JJ2Lttfz\/zr0mdtVyo5mvoiyhEmftxKQqfIvyngDlmLMIIBOjo+nOx6pXUCMVc65cQxooTJmSdhFF2tc9CVnvOFKE9wTdhwIXAB0vTkFNx203FjM4nHpjOqngJEm8LwAFLgDq6ITFs+PM+Wp2Xlhu3p+nnoo1tKzly0OHlotUcJIlhoaB2ma3uwMA2qt63bep+X1SsYbGli2buX5duWZ\/+bf9\/Wkwe1hLf394Bq3biyumruP55wfzXCVp113b1x8gb8gsAl0uzuT+LDWbxasuQJgzJ7i1ut1Y5u9PeeawVqDY4F7LEhm0ep5\/fvr7TZu6sCgKiMCcRaDLZT25v5Y87viR+vvzzDPSK19Zv90\/\/ZP0iU+0\/HQUV4Rj3iK6HXMWAUTK07pvectySim9P+WZw1qBYnnmMEagGCcry8LP4ZjPCUQjWAS6XJ6GJvP4CzuR9yfFoeUpcRaWRrQ8\/dEE5A3BItDlklpsOAl5\/IXd1Pvz\/PPxgsPPf77p4LBaHrOyRZKnP5qAvGHOIoDcyOOcxdgSrFpuRp7mnhYV8znRzZizCKAQsshyNlptHdk+g6HlRuQxK1s0zOcEwsUKFs1s3Mx+a2b3mNmMdKCZHW1mm0vn7zGzzyXfVQDdIM1f2I3O6ytv3+MvaXy9aXhJneDwvPNmBIdZLOq9bJm0006Vx3baiWFUAK1rZFHut7n7UzXO3+HuJ7baIQBIS615fWFB6fASU6xYtUbGMMtFvatj2Lgj4wBQC8PQABKTm23xItSttp4\/P9bQ8iyLP7ScVeHJ0qXS1q2Vx7ZupcAFQOviBosu6VYzW21mIxFtjjSzNWb2EzObH9bAzEbMbMzMxiYmJprqMIB8ytvSLWGBa\/X8vVnaLpdp0kvB4dq1oY91hc6QyXfcGpkHmNVyQHlcdghAZ4gbLL7Z3Q+TdJykj5rZUVXn75I04O4LJH1N0g\/DHsTdV7j7kLsP9fX1Nd1pAPmTp6VbogLX449XWchn2l5rJo67Rle6dut1naUrdhxudDmVrApP8lrgkvdsM4D6YgWL7v5E6euTkm6UdETV+Wfc\/S+l72+RtJOZzU24rwByLE+ZrfLA9Sc6Vi7Tc1tM\/3JZY1XLSVRnZ7V+Xx7XCcxbthlAc+oGi2a2m5m9fOp7Se+SdF9Vmz3Nggk+ZnZE6XE3Jd9dAHmVm8yWu8bXT2cPj9XPwtv99V\/HmnfYanV2Voue52lx9Sl5yjYDaF7dRbnN7HUKsolSUD19jbsvM7OzJcndl5vZeZLOkbRN0vOSLnD3\/6z1uCzKDXSWti6oHbPsd3DANT6ebleyUJTFo1koHCiOlhbldvdH3H1B6Tbf3ZeVji939+Wl779eOrfA3RfVCxQBdJ5MM1vnnBOratk0uWOG4m69XndINs78unbPwSvS0G5uss0AWsLSOQASk9qC2u6VweHy5eHtPvShHcPKoytdAwMWO3CNE4TlIVAr0tBuHudRAmgce0MDyKeM91oeHAyCv2oDA9oxdB2nTdqKNrRblCFzoNuxNzSA\/Lvwwnh7LW\/fnspey3GqufNQ8V20oV32WwaKj2ARQPuUB4df+lJ4m+qq5Vnp\/LcVJwjLQ6DG0C6ArBEsAshOeXBYK3tYHhz+4AeZdC1OEJaHQC2PS+QA6GwEi0CHaXe1boXPfz5ecLhtWypDy42IE4TlJVBjaBdAlihwATpIW9c6nBKnMOWww6TVq9PvCwAgFgpcgC7RlmVVmhlaJlAEgMIgWAQ6SCbVuitWxAsOX3yx7UPLAIDWESwCKctyDmFq1brlweFHPhLe5g1vqAwOd965xSdFJ8rVnFoAsRAsAinKesePxKp1mxla\/u1vG+4vuksedsAB0DiCRSBFrcwhbCYD03S17jXXxAsOt2xhaBlNK9JWhQCmUQ0NpKjZrdkyqWqOU7W8\/\/7SQw+F9o8t3NCoom1VCHQTqqGBNml2DmGrGZjQrGQzQ8sRgSJDiWhGHnbAAdA4gkUgRc3OIWylqnkqmDtg\/a2adNP4etPwkhrB4bPPNjS0zFAimpWHHXAANI5gEUhRrTmEteYkNp2BsSAwfG6L6Va9O7zNoYdWBoe7797Qa8pkeR50pLzsgAOgMbGCRTMbN7Pfmtk9ZjZjoqEFvmpm68zsXjM7LPmuopt00vIaYVuz1RvKjZ2BiTm0bHLNslJwuGbNjuPNvM9pDCWmeb076bPUCdiqECggd697kzQuaW6N88dL+okkk7RI0p31HvPwww93IMzKle69veWpr+D+ypXt7llyBgYqX9\/UbWBgus3KlcF9s+DrypXuvmpV+A9W3V6uzTUfe+rxm3mfk74+aV7vbvgsAUASJI15RMwWqxrazMYlDbn7UxHnvynpdne\/tnT\/QUlHu\/vGqMekGhpRBgeDTFu1gYEgE9EJGqoKjVO1PDQk\/eY3kuJXUrfyPidZDZ3m9e6GzxIAJCGJamiXdKuZrTazkZDzr5H0WNn9DaVjQMO6YU5czaHcZqqWS4GiFH9eWF7e56jnW7++9eHjvLxGACiyuMHim939MEnHSfqomR1VdT7sN9qMvImZjZjZmJmNTUxMNNhVdItuWF6jfE7ioVojl8kVVC5H2rQpdtVynHlhzb7PSS+dE\/V8Zq0\/Rzd8lgAgbbGCRXd\/ovT1SUk3SjqiqskGSfuU3Z8n6YmQx1nh7kPuPtTX19dcj9HxumF5jamKZZdpjRaGN3rd6yqDw1e9KtE+NPs+J710zvHHz0ygms2Mh5t5jm74LAFA2uoGi2a2m5m9fOp7Se+SdF9Vs5skfbBUFb1I0uZa8xWBWjpyeY3dd298aPnhh1PtUrPvc5JDu6Oj0lVXVQaGYYFiK8+x667T38+Z0wGfJQDI2OwYbf6bpBst+AU3W9I17v5TMztbktx9uaRbFFREr5O0RdKH0ukuusXwcMF\/oT\/yiLTvvvXbPfmk1IYse3WBytVXx3+\/+\/vDi0aaGdoNy1K6Sz090vbtrT1HWKHP88833kcA6HZ1M4vu\/oi7Lyjd5rv7stLx5aVAUaWq64+6+77ufoi7U+aMxBRmnbzyzGFUoLjffpXZwzYFiq3MOUxyaDcqU7h9e+vPwU4zAJAMdnBBruV6H+Jddml8aPn3v8+ufxFaDaKSnCYQlSmcesxWnoNKaABIRqx1FtPAOouII1fr5E2t5VLPE09Ie+2Venea1dAajymLuyZkM3L12QGAnEtinUUgEY0OKbc9O1SeOYwKFOfMqcwe5jhQlPK1nEyaxUxUQgNAMggWkZlmhpQzD2z22iv2Xsu79bpGV7r0VOjGRrmVtyAqrb2CO7KqHgDagGFoZKaZYcE0hyklSRs3SnvvXbfZW\/Z+RP\/xxGtnHC\/qkGaS2\/UBAIqv1jA0wSIy0+xcucQDmzh7Lff0SNu27bibp3l+AAAkjTmLyIVmh5RbHqY88sjGq5bLAsVafWTbuGIpzDJMAJAjBIvITGZz5TZtqgwOV60Kbbaffl\/akdk1OFA7w563eX5oXK6XYQKAHCNYRGZSLTgoDw7nzg1vs\/POmmW+I0B8WPvtOFWvuppiieJjkW4AaA5zFlEY5XMXf7nLsXrrCz+r\/0NVn2\/W3utezDsFgGjMWURL8jDP6\/pvPaPhJabx9aZJt+hA8f77K+ceVmE4uXsx7xQAmkOwiJraOs+rbGj5\/SOvjG5XHhwefHDNh2Q4uXvxhwIANIdgETVlOs\/rC1+IvSD21G2W1Z5GEZYVTWsRaOQbfygAQHMIFlFTqtvtvfBCZXB40UXh7dau1eDAdIBYrtYQYpZZ0TwM1aM+\/lAAgMYRLKKmxOd5lQeHu+4a3uaQQyqHlg86qKkhxKyyoizJAgDoZASLqKnleV6XXdb4gtj33jvjdDNDiGFVz1JCWdEyLMkCAOhks9vdAeTbVDAWe7u9rVulXXap\/8APPigdcEDDfYk7bDg6GgSVYUulJF39mupQPQAAbRY7s2hmPWZ2t5ndHHLudDObMLN7Srezku0m2qnuPK\/yzGFUoLhoUWX2sMFAsVFLl0avqZd09StLsgAAOlkjw9DnS3qgxvnr3X1h6XZ5i\/1CjlQXb\/xq5MrGh5Z\/9ausuispOqvnnnxRA0uyAAA6Waxg0czmSTpBEkFglxkdlc7+8PYdi2GPrzcd+a0zwhvfd1\/NBbGzFJXVGxhI\/rlYkgUA0MniZha\/IunTkmptivVeM7vXzG4ws31a71ryOml5k9Rfy7x5kpmGl5iefT5iauv8+ZXB4fz5CXeieVln+1iSBQDQqeoGi2Z2oqQn3X11jWb\/KmnQ3Q+V9HNJV0U81oiZjZnZ2MTERFMdblYnLW+Symv5xS8qh5Yffzy0WcVi2Pfd18ITpotsHwAAyTCvM1xoZv8g6W8lbZP0MkmvkPQDd18S0b5H0p\/cvcb+bNLQ0JCPjY011elmDA6GL6UyMBBkgookkdcyOSn19NRt9ta9f69\/f2K\/1p4LAADkmpmtdvehsHN1M4vu\/hl3n+fug5JOlXRbdaBoZnuV3V2s2oUwbdFJy5s0\/VoOPHA6cxgVKL7\/\/RVDyyOX7EfxBgAAXazpRbnN7GIzW1y6+3Ezu9\/M1kj6uKTTk+hckjppeZPYr+WOOyqHlh96KPwHy+cdXnddxSmGcwEA6G51h6HTkvUw9NQ8v\/KdNnp7ixn4RL6Wb7qG\/zZG\/L92rXTQQel1EAAAFEpLw9CdopMyZOWv5S69US7Tc1ssOlBcvHjGXssAAABxdE1msWOsWSMtXFi\/XZvXOQQAAMVRK7PI3tB55x4spljPmjXSoYem3x8AANBVumYYulC+\/e3popSoQPGssyqHlgkUAQBACsgs5sHGjdLee9dvNzlZey9mAACAhJFZbAd36eCDp7OHUYHi449XZg8JFAEAQMYIFrPy3e9WDi0\/ELJu+eWXVwaHcbKNAAAAKSJYTNDoaLAV36xZ0iH9m\/Xi7q+aDhBPO23mD+y\/fzC0PBUcnnlm5n0GAACohTmLCRkdla498+f65Ysf1ms1Lj0W0fCxx6R587LsGgAAQNPILLbiscek00+XzDS8xHTzi+8MAsUyH3z1TyuHlgkUAQBAgRAsNuLFF6VLL5Vmzw6Glvv7pauu2nF6rQ7SCbpZpkmZXCbXyol3t7HDAAAArSFYrOe226TDDguCw5e9TLrgAmn79unzy5ZJzz2nwQHXfK3VLTpB0nTVcn9\/9l0GAABICsFitQ0bpDPOmC5MOeYY6e67pzf4H9kAAAjDSURBVM\/\/zd9IDz00Paz82c9Kvb1atkzq7a18KDNp\/fqg6GV0NNNXAQAAkAgKXLZulZYvlz75Semll2ae339\/6ctflt7znprrHA4PB1+XLg0CRLPp7ZnXr5dGRirbAQAAFEF3ZhZvv10aGgoiul12kc4\/vzJQvOgi6dlng2jvoYekxYtjLYg9PCyNj0sDA9OB4pQtW4JAEgAAoEi6L7N40UXSF75Qeey975W++EXpgAMSeYpHH23sOAAAQF51X2bx5JOlt79duvHG6QWxb7ghsUBRii5qodgFAAAUTexg0cx6zOxuM7s55NwuZna9ma0zszvNbDDJTiZqwQLpF78IgsaU9loOK3bp7Q2OAwAAFEkjmcXzJYVsaCxJOlPS0+6+n6RLJX2p1Y4V2fCwtGJFMHfRLPi6YgXFLWkq32qR6nMAAJITK1g0s3mSTpB0eUSTkyRNrU59g6RjzFJK2xXEVLHL5GTwlUAxPaOjQbX5+vXBrIKp6nMCRgAAWhc3s\/gVSZ+WNBlx\/jUq7Ybs7tskbZY0p7qRmY2Y2ZiZjU1MTDTRXWCmpUuDavNyVJ8DAJCMusGimZ0o6Ul3X12rWcgxn3HAfYW7D7n7UF9fXwPdBKJRfQ4AQHriZBbfLGmxmY1Luk7S281sZVWbDZL2kSQzmy3plZL+lGA\/gUhUnwMAkJ66waK7f8bd57n7oKRTJd3m7kuqmt0k6bTS96eU2szILAJpoPocAID0NL3OopldbGaLS3evkDTHzNZJukDShUl0DoiD6nMAANJj7UoADg0N+djYWFueGwAAANPMbLW7D4Wd674dXAAAABAbwWKOsdA0AABot9nt7gDCTS00PbV+4NRC0xJz8QAAQHbILOYUC00DAIA8IFjMKRaaBgAAeUCwmFMsNA0AAPKAYDGnWGgaAADkAcFiTrHQNAAAyAOqoXNseJjgEAAAtBeZRQAAAEQiWAQAAEAkgkUAAABEIlgEAABAJILFHGJPaAAAkBdUQ+cMe0IDAIA8IbOYM+wJDQAA8oRgMWfYExoAAORJ3WDRzF5mZr82szVmdr+ZXRTS5nQzmzCze0q3s9LpbudjT2gAAJAncTKLL0p6u7svkLRQ0rFmtiik3fXuvrB0uzzRXnYR9oQGAAB5UjdY9MBfSnd3Kt081V51MfaEBgAAeRJrzqKZ9ZjZPZKelPRv7n5nSLP3mtm9ZnaDme0T8TgjZjZmZmMTExMtdLuzDQ9L4+PS5GTwlUARAAC0S6xg0d23u\/tCSfMkHWFmb6hq8q+SBt39UEk\/l3RVxOOscPchdx\/q6+trpd8AAADIQEPV0O7+Z0m3Szq26vgmd3+xdPdbkg5PpHcAAABoqzjV0H1mtkfp+10lvUPS76ra7FV2d7GkB5LsJAAAANojzg4ue0m6ysx6FASX33P3m83sYklj7n6TpI+b2WJJ2yT9SdLpaXUYAAAA2TH39hQ2Dw0N+djYWFueGwAAANPMbLW7D4WdYwcXAAAARCJYBAAAQKS2DUOb2YSk9Qk93FxJTyX0WGgfrmNn4Dp2Bq5jZ+A6doYsruOAu4eua9i2YDFJZjYWNc6O4uA6dgauY2fgOnYGrmNnaPd1ZBgaAAAAkQgWAQAAEKlTgsUV7e4AEsF17Axcx87AdewMXMfO0Nbr2BFzFgEAAJCOTsksAgAAIAWFChbN7Fgze9DM1pnZhSHndzGz60vn7zSzwex7iXpiXMcLzGytmd1rZr8ws4F29BO11buOZe1OMTM3MyoycyjOdTSz95X+Td5vZtdk3UfUF+P\/1X4z+6WZ3V36v\/X4dvQT0czs22b2pJndF3HezOyrpWt8r5kdllXfChMslvam\/oak4yQdLOkDZnZwVbMzJT3t7vtJulTSl7LtJeqJeR3vljTk7odKukHSJdn2EvXEvI4ys5dL+rikO7PtIeKIcx3NbH9Jn5H0ZnefL+nvMu8oaor57\/F\/Sfqeu79R0qmS\/iXbXiKG70g6tsb54yTtX7qNSLosgz5JKlCwKOkISevc\/RF33yrpOkknVbU5SdJVpe9vkHSMmVmGfUR9da+ju\/\/S3beU7q6SNC\/jPqK+OP8eJenvFQT7L2TZOcQW5zp+WNI33P1pSXL3JzPuI+qLcx1d0itK379S0hMZ9g8xuPu\/S\/pTjSYnSfquB1ZJ2sPM9sqib0UKFl8j6bGy+xtKx0LbuPs2SZslzcmkd4grznUsd6akn6TaIzSj7nU0szdK2sfdb86yY2hInH+PB0g6wMz+w8xWmVmtzAfaI851\/IKkJWa2QdItkj6WTdeQoEZ\/fyZmdhZPkpCwDGF1KXecNmiv2NfIzJZIGpL01lR7hGbUvI5mNkvBVJDTs+oQmhLn3+NsBcNeRyvI8t9hZm9w9z+n3DfEF+c6fkDSd9z9\/5jZkZKuLl3HyfS7h4S0LcYpUmZxg6R9yu7P08w0+o42ZjZbQaq9VkoX2YtzHWVm75C0VNJid38xo74hvnrX8eWS3iDpdjMbl7RI0k0UueRO3P9Xf+TuL7n7HyQ9qCB4RH7EuY5nSvqeJLn7ryS9TMF+wyiOWL8\/01CkYPE3kvY3s9ea2c4KJujeVNXmJkmnlb4\/RdJtzkKSeVP3OpaGL7+pIFBkflQ+1byO7r7Z3ee6+6C7DyqYe7rY3cfa011EiPP\/6g8lvU2SzGyugmHpRzLtJeqJcx0flXSMJJnZQQqCxYlMe4lW3STpg6Wq6EWSNrv7xiyeuDDD0O6+zczOk\/QzST2Svu3u95vZxZLG3P0mSVcoSK2vU5BRPLV9PUaYmNfxf0vaXdL3S\/VJj7r74rZ1GjPEvI7IuZjX8WeS3mVmayVtl\/Qpd9\/Uvl6jWszr+D8kfcvMPqFg6PJ0kin5YmbXKpjuMbc0t\/TzknaSJHdfrmCu6fGS1knaIulDmfWNzwoAAACiFGkYGgAAABkjWAQAAEAkgkUAAABEIlgEAABAJIJFAAAARCJYBAAAQCSCRQAAAEQiWAQAAECk\/w+HJ0i+3LINmwAAAABJRU5ErkJggg==%0A\" alt=\"\"\/><\/figure>\n\n\n\n<h2>Further Improvements &#8211; Backpropagation<\/h2>\n\n\n\n<p>In&nbsp;[93]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># Initialize<\/em>\nw11 = 0.5\nw12 = 0.5\nw21 = 0.5\nw22 = 0.5\n\n<strong>def<\/strong> neuron(w11, w12, x):\n    <em>#TODO: activation function<\/em>\n    <strong>return<\/strong> w11*x + w12\n\n<strong>def<\/strong> sq_error(o1, yy):\n    e = o1 - yy\n    <strong>return<\/strong> e*e\n\n<em># Learning Rate<\/em>\neta = 0.01\n\n<strong>for<\/strong> epoch <strong>in<\/strong> range(50):\n    <strong>for<\/strong> i <strong>in<\/strong> range(len(X)):\n        x = X[i]\n        yy = y[i]\n        \n        <em>#Forward Pass<\/em>\n        h1 = neuron(w11, w12, x)\n        o1 = neuron(w21, w22, h1)\n\n        dE_do1 = diffp(sq_error, 0, o1, yy)\n        do1_dw21 = diffp(neuron, 0, w21, w22, h1)\n        dE_w21 = dE_do1 * do1_dw21\n        \n        do1_dw22 = diffp(neuron, 1, w21, w22, h1)\n        dE_w22 = dE_do1 * do1_dw22\n        \n        do1_dh = diffp(neuron, 2, w21, w22, h1)\n        dE_dh = dE_do1 * do1_dh\n        dh_dw11 = diffp(neuron, 0, w11, w12, x)\n        dE_dw11 = dE_dh * dh_dw11\n\n        dh_dw12 = diffp(neuron, 1, w11, w12, x)\n        dE_dw12 = dE_do1 * do1_dh * dh_dw12\n        \n        w11 = w11 - eta * dE_dw11\n        w12 = w12 - eta * dE_dw12\n\n        w21 = w21 - eta * dE_w21\n        w22 = w22 - eta * dE_w22\n<\/pre>\n\n\n\n<p>In&nbsp;[94]:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># ycap = forward_nn(w11, w12, w21, w22, X)<\/em>\n\nh1 = neuron(w11, w12, X)\nycap1 = neuron(w21, w22, h1)\n\n<strong>from<\/strong> <strong>matplotlib<\/strong> <strong>import<\/strong> pyplot <strong>as<\/strong> plt\n\nplt.figure(figsize=(11,4))\n<em># plt.subplot()<\/em>\n<em># plt.scatter(X, ycap, color='r')<\/em>\nplt.subplot()\nplt.plot(X, ycap1, color='g')\nplt.subplot()\nplt.scatter(X, y, color='b')\nplt.show()\n<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\/usr\/local\/anaconda\/lib\/python3.6\/site-packages\/ipykernel_launcher.py:13: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance.  In a future version, a new instance will always be created and returned.  Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n  del sys.path[0]\n<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAosAAAD5CAYAAABPn3\/0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+\/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3df5hcZXn\/8c+dBALLr5RkLUjIrgpVKQjiNiBUiqB+JfzSSiu40RCtEaqIIGL4riUhsljh0oLgF1h\/UJQVIlQw1VRtURQr0C4IUVS40pKFGIQlkIAECMne3z\/OTDI7e87MmZlzZs6Zeb+ua6\/ZOfPkzLPnzLI39\/Pcz2PuLgAAACDMlFZ3AAAAANlFsAgAAIBIBIsAAACIRLAIAACASASLAAAAiESwCAAAgEjTqjUws9dKWl5y6NWSLnT3y0vaHC3pu5IeKRz6jrsvq3TeWbNmeW9vb639BQAAQMLuvffep9y9O+y1qsGiuz8k6RBJMrOpkn4v6daQpne6+wlxO9Xb26uRkZG4zQEAAJASMxuNeq3WYehjJf2Pu0eeEAAAAO2j1mDxVEk3Rrz2ZjN7wMz+zcz+vMF+AQAAIANiB4tmtqOkkyTdHPLyfZJ63P1gSVdKui3iHIvMbMTMRsbGxurpLwAAAJqolszicZLuc\/cnyl9w92fd\/Y+F71dK2sHMZoW0G3L3Pnfv6+4OnUMJAACADKklWDxNEUPQZraXmVnh+7mF865vvHsAAABoparV0JJkZl2S3i7pIyXHzpAkd79G0imSzjSzLZJekHSqu3vy3QUAAEAzxQoW3X2TpJllx64p+f4qSVcl2zUAAAC0Gju4AAAAIBLBIgAAQBMMD0u9vdKUKcHj8HCrexRPrGFoAAAA1G94WFq0SNq0KXg+Oho8l6T+\/tb1Kw4yiwAAACkbGNgeKBZt2hQczzqCRQAAgJQ9+mhtx7OEYBEAAORaHuYCzplT2\/EsIVgEAAC5VZwLODoquW+fC5i1gHFwUOrqmnisqys4nnUEiwAAILfyMhewv18aGpJ6eiSz4HFoKPvFLRLBIgAAyLE8zQXs75fWrJHGx4NHKfvD5xLBIgAAyLG8zgXMy\/C5RLAIAAByLK9zAfMyfC4RLAIAgBzL61zAbcPkr\/mR9P53SEtNOnpJJofP2cEFAADkWn9\/9oPDorHnx7T\/lfvLl2yc\/OLMhzM5fE6wCAAAkKLT\/uU03fTrm6IbjHxEWnmlunbaQYNDzetXXASLAAAACfr1k7\/WQVcfVLHN7R+4XY\/\/4hgNDARD0nPmBPMss5ghJVgEAABogLur5\/IePfbsYxXbbfmHLZo6Zer2A6\/KZnBYjmARAACgRt97+Hs68cYTK7b56ek\/1VE9RzWpR+mpGiya2WslLS859GpJF7r75SVtTNIVkuZJ2iTpdHe\/L+G+AgAAtMTmrZs1\/eLpFdvM3Weu7vm7e5rUo+apGiy6+0OSDpEkM5sq6feSbi1rdpyk\/Qtfh0m6uvAIAACQS4v+dZG+ct9XKrZZfdZqvWbP1zSpR61R6zD0sZL+x91Hy46fLOkb7u6S7jazGWa2t7s\/nkgvAQAAUrbuuXXa54v7VGzz0b\/4qK6ad1WTepQNtQaLp0q6MeT4PpJKZ3WuLRwjWAQAAJn1uqtep4fWP1SxzVOfekozu2Y2qUfZE3sHFzPbUdJJkm4OeznkmIecY5GZjZjZyNjYWPxeAgCAtjE8LPX2SlOmBI\/N3A\/57rV3yy6ybV9hgeKnj\/y0fIlv++rkQFGqLbN4nKT73P2JkNfWStq35PlsSevKG7n7kKQhSerr65sUTAIAgPY2PCwtWrR9X+TR0eC5lM4yMu6uKcuq58Ze\/oeXNW0Ki8SEqWVv6NMUPgQtSSskfcACh0vayHxFAAA6T7Ws4cDA9kCxaNOm4HhSPnfn57ZlDqMCxeWnLJ+QPSRQjBbryphZl6S3S\/pIybEzJMndr5G0UsGyOasVLJ2zMPGeAgCATIuTNXz00fB\/G3U8jk0vb9Iul+xStZ0vYVCzHhYUMDdfX1+fj4yMtOS9AQDARMPDanjrud7eIEAs19MjrVkTv02s97q8V6MbQ05U4s6Fd+ov5\/xl\/JN2MDO71937wl6rZRgaAIBMaWWhRDspZgRHRyX37RnBWq9nnKzh4KDU1TXx9a6u4Hglq59ePaEwJSpQLB1abjRQ5PMVILMIAMil8iFPKQg6hobysd9uliSW7Yt5nrhZTLsobLGVidacvUY9M3ridzKmTvt8VcosEiwCAHIpqQAnz5IYOpaCzFlYOGAmjY\/X1p9GAqzbfneb3r383RXbHPSKg7TqzFXxO1WnTvt8VQoWKf0BAORSGoUSeZLkEjRz5oQHRnPm1Hae4vvWEsDGyR6+OPCipk+rvC9z0jr981WKzCIAIJc6LfNTLsmfv5lDru+\/9f26YdUNFdtc8JcX6JJjL0n2jWvUaZ8vMosAgLYzOBge4FQrlGgXSWa+6skIxpXXZW06\/fNVimARAJBLaQY4eZDU0HFRf39y1y7O0PJN77lJ7z3wvcm8YQo6\/fNVimFoAAByKEvVuj8b\/Zn+6p\/\/qmq7rGUPsR3D0AAAtJlWZ77iZA9XnbFKB\/3pQU3oDdJEsAgAQE4lOXRczfn\/fr4u+8VlVduRPWw\/BIsAALSpRtdhjJM9fObTz2jGTjMa6CWyjmARAIA2VM86jDtdvJNe2vpS1XOTPewsFLgAANCG4qwTuPHFjZrx+epZQYLD9lepwGVKszsDAEArDQ8HgdSUKcHj8HCrezRRUv2LWm9xdKHJLgq+ogLFs+aeJV\/i277Q2RiGBgB0jCS3yEtDKlv49d4hnf7Wqu0JChGFzCIAoC2FZegGBiauSygFzwcGWtHDyeL0L07m0S4yjS40aalFBoor37cykexh1jO1aBxzFgEAbSdqweryQKzITBofb07fKpkyRQr7s1zsX9TPddCy9+qeP3676vlv2M8TzaBmaWFwNKbSnMVYwaKZzZD0VUkHSnJJH3T3u0peP1rSdyU9Ujj0HXdfVumcBIsAgLREFXdMnSpt3Tr5eGnRRytVK0qZ8PrS6svaPHHeE3rFLq9IsIcTxSmiQXWNLnGUhCR2cLlC0g\/c\/RQz21FSV0ibO939hHo7CQBAUqKKO7ZunZxh7OoK\/jhnweBgeKZucLCw5uHC6udo5tzDqOscdRyTZX0erRRjzqKZ7S7pKElfkyR33+zuG9LuGAAA9ZozJ\/x4T08wRNrTEwztFp9n5Y9yf\/\/2\/mnnp6Wlpk3nm+avrpBFXDqunutaU7kcdZ3dszF\/MQ\/zKbM+j1aKMQxtZodIGpL0G0kHS7pX0tnu\/nxJm6Ml\/YuktZLWSTrP3R8MOdciSYskac6cOW8aDctdAwDQoLzOpYuzY4o2zZIuHdv2tJU\/V9h1LpW1vmXxM1BtnmqzNLrO4jRJh0q62t3fKOl5SYvL2twnqcfdD5Z0paTbwk7k7kPu3ufufd3d3bF\/AAAAatHfLy1YEMxRlILHBQuyFSRI0jcf+Oa2NQ8rBYqlVcs3vGEsM5nRCZnQEK3MkOUhYydFZ2ejjrdCnMziXpLudvfewvO3SFrs7sdX+DdrJPW5+1NRbShwAQCkJctZpTjZw8vefpnOO+K8JvQmOVnJkGW1P1Gy8lltqMDF3f9gZo+Z2Wvd\/SFJxyoYki59g70kPeHubmZzFWQs1yfQdwAAalYpq9TsYHH3z+2u5zY\/V7Vd3hfF3rYIeMjxVshaf6IUP4+troauJO6i3GdJGjazVZIOkXSJmZ1hZmcUXj9F0q\/N7AFJX5J0qrdqAUcAQMdLu0q3WuFE6dByVKD48MceTnxLvVYWdAwOBhmxUq2sNM9afyrp7w+WGhofDx6zFChKLMoNAGhDaa7\/F1rUEWPNQynd7GEWhjOzsF5glvuTZQ0vyp0GgkUAQFrSDJx6e6XRJ9dLn55Vte34heMyixdINooFstGIJBblBgAgN9KYB7atMKXKwtitmnvIAtlIC8EiAKAt9fc3Fhxef\/\/1Ov27p1dvuDQIDludwctLQQfyJ26BCwAALdHMoo3SwpSoQPEde5ylrks9CBILgWIWCifyVNCBfCGzCADIrLT3ze0a7NILW16o2q58aHm4uzWFE5UKNvKwBAvyiQIXAGgRKjWrS6NoI86i2L\/8yC91yF6H1PcGNYr7OchCtTPaF9XQAFAiC0Eaf\/jjSWIXjlj7Las5hSnln71586Trr4\/3OaDaGWkiWASAgqwEafzhj6ee6\/TMC89oz0v3rHrurRdu1RRr3tT9sM+eWXgwHPbz5WX7OuQTwSIAFGQlSOMPfzxxg\/ssZQ+jRH32woR9DrLy2UV7qhQsUg0NoKNkZS26qOVMWOZkov7+IDDs6QkCqJ6e4PnmA66bULkcpec61w37JbulXr1q+YyFfQ7yUu3cyi0HkQ6CRQAdJStBWl7+8JdqVRBQ3DfXl5hGF5rmrzZ9cMUHQ9v27fLuCcvaFKunsxCwRH3Gyjd4ifocRAXOWZrjWswEj44GmfMsXX\/Uj2FoAB0lK3MWi31pdaFNXK24btOWTdNW31q1XWnGMMtDtVHXcMECaeXKfHwOqsny9UdlzFkEgBJ5CtKyollBQJy5h3d96C4dPvvw0NeyPhe03T97Wb\/+iEawCABoSFpBQNKFKWS2Wovrn1+VgkV2cAEAVJXUvsMbX9yoGZ+fUbXdy\/\/wsqZNqf1P1OBg+FBvlueCthOuf3siWAQATBJ38eg4QUAzl7Vhy7vW4vq3J4ahAQATNFqIMbxqWPNvnV\/1fXqucwIJICMaHoY2sxmSvirpQEku6YPuflfJ6ybpCknzJG2SdLq739doxwEgz\/JazDAwMDFQlILnK1dGzzuLkz189fS\/0B8++1\/bzj2qICiV8nFdgE4Vdxj6Ckk\/cPdTzGxHSWWrg+k4SfsXvg6TdHXhEQA6Unl2rrjenJT9wCjOwuXTL56uzVs3Vz1X+bI2YUHowED2rwnQyaouym1mu0s6StLXJMndN7v7hrJmJ0v6hgfuljTDzPZOvLcAkBNR2bmBgdb0pxZRRSu+ZPuOKVGB4u0fuH3bbinlcxBr3T2HnUDyi3vXXuLs4PJqSWOSrjOzX5rZV81sl7I2+0h6rOT52sKxCcxskZmNmNnI2NhY3Z0GgKzLyraC9di2u8xSm\/gVoec6l13k6rnO9fgvjolsV8vuOa3eCaQVwU67BFitvndIXpxgcZqkQyVd7e5vlPS8pMVlbcL+KzKpcsbdh9y9z937uru7a+4sAORFVrYVrMXzm5+XXRRsp7fp\/OjgcPNnNsuXBHsud13qsYOCWrY4bGVmtlqwk0ZQ104BVp6z6ghXtRrazPaSdLe79xaev0XSYnc\/vqTNtZLucPcbC88fknS0uz8edV6qoQG0syxtK1hJI8va1LMAc9yin1buBFLp54paR7DR+9pOi1mzi0s+NbyDi5ndKenv3P0hM1sqaRd3\/1TJ68dL+piCaujDJH3J3edWOifBIoB2l8Vq6Ft+c4v+5ua\/qdouzpqHaQYFrQyeKv1cUYuTN9ovqxCzt2iFu7q1U+DbSZLYweUsScOFSuj\/lbTQzM6QJHe\/RtJKBYHiagVL5yxsuNcAkHP9\/a0PDqV42cND9z5U9y66t2Kb8uB3zz2l9esnt0tiqL2VO4FU2q0mrbmoU6dKW7eGH88bdnFpP3HmLMrd7y\/MNXyDu7\/L3Z9x92sKgaIKVdAfdffXuPtB7k7KEEDbTNjPm9d\/+fXbqpYrBYo37Le9ajlOoFg+p+7ZZ6Udd5zYLqmgoL8\/GNrt6Qmybj09zRvCj5pbOW9e8FkO02iAHBYoVjqeZa28d0gHO7gASEXYnD2zINAozv3ij0dy4mQPpy\/\/kV767du3Pa9lrl3U0OLMmdKuu0YPtWdxKD6OONsdFtU6ZzHsmgwMMHSL1mp4zmIaCBaB9hYVXBRlsdgjT2otTGl0Hlk98xPzUuQTR9T1mzo1CCJrCRSjtlIM23s7j9cK+USwCKDpooKLUmRN4ntxy4vaeXDn6u0GXtT0adMnHW+0GKWeYLOdCh2SKuapVmmdxyws2kOlYDHWnEUAqFWcOVx5WKC6lUrnHVYKFEt3TAkLFKXG132sZY3EojwtTF5tfm1S62ZWuib9\/UEQPT4ePBIoIisIFgGkIiy4KJf0AtWlf\/BnzQq+8lRc84PVP4hVmFIaHMZZ4kaqL9grVU\/RQl4WJo+zIHaj168oL9cEKBV36RwAqEkxiChO3C8WtxQlvZRG+Vyw0iVdin\/8S\/uVFXHmHh74igP1qzN\/1dD7FH\/us8\/efm12rj6qPekctVy\/vCyhUmnHkeLPW\/p5bmSYOC\/XBCjFnEUATZF2VWy1ghopG3Pl5n5lrv573X9XbRc3Y1iLVhSc5KEautk7juThmqDzUOACoO3FKahp1XZjcbKHK05doRNfe2Kq\/WingpMkcV0AClwAVNEOi2fHmfNV77ywWq9P6bzDuHMP0w4UpXwVnDRTUvMRgXbFnEWgw5UPTWZ5fl8lYXPBStX7xz\/O9dm8dbOmXxxehVzq+f\/7vLp2qFL1k6JK29h1siTmcwLtjMwi0OEqTe5vhXqznOXVujNnBl+NbjcWdX3mr96eOawUKJZmD1sZKEpk0Kp54YXt369fP7kiGuhUzFkEOlyzJ\/dXksUdP7Zdn56fSguPrto+jcKUJFFcEY55i+h0FLgAiJSlP5JZ6osUrzClZ48erfnEmvQ7EwOBYP2y9D9NQCtUChaZswh0uCyt+9bqAox3L3+3bvvdbVXbdV3qmduzt13mnrYK8zmBaMxZBDpcPTtzpKUVu1uUVi1HBYpn7\/Ud9VznsotcPddlL1CUsjf3NG+YzwlEYxgaQGY0Y85inKFlKftzD8sxjNo4hvHRyRoehjazNZKek7RV0pbyk5nZ0ZK+K+mRwqHvuPuyejsMoDMltaVaqS3jW7TDZ3eo2u65C57TrjvuOul4XgIIhlEbV+t2hkCnqGXO4lvd\/akKr9\/p7ic02iEAnS2JP9hxs4da6tsyl7vuOPnlpOYBNiPgHByUFi6UXn55+7EddmAYFUDjKHABkHurnlilg685uGq7nut8UvatOK8vLHirNA8wbrDXzMITs8rPAaAeseYsmtkjkp6R5JKudfehstePlvQvktZKWifpPHd\/sNI5mbMItJ9mDtnGyR4eue+R+vkHf77tea3z+pKYB9is5YCytuwQgHxJYm\/oI939UEnHSfqomR1V9vp9knrc\/WBJV0oKLSk0s0VmNmJmI2NjYzHfGkAeFDNoo6NBgFXMoCW1A8Z5Pzqvpv2Wb9jPtXbZzyfsBFNrtXUS1dnNWg6o1csOAWhfsYJFd19XeHxS0q2S5pa9\/qy7\/7Hw\/UpJO5jZrJDzDLl7n7v3dXd3N9x5ANmRxtItpcHhF+76Qmib77\/v+xO21JOiA9d582pbHiWJ5VSatRxQK5YdiqPe7RsBZEfVYNHMdjGz3YrfS3qHpF+XtdnLLJgdY2ZzC+ddn3x3AWRVEpmt0uAwTvbQl7jm7T9v0utRgevKlbWtKZnEGpTNWr8vi+sEpp1tBtAcVecsmtmrFWQTpaAg5lvuPmhmZ0iSu19jZh+TdKakLZJekHSuu\/+i0nmZswi0l3rmzI37uKYum1r13M8ufla7Td8tdl+ytuZgs+ZyZm2ZH+ZRAvnB3tAAUhd3Qe1mLIrd7kFK1oLCKFkL2gFES6LABQAqihqyPehtq2oeWm5095R6h2TjzK9r9Ry8PA3tZnUeJYDakFkEkLg42cOD\/\/Rg3X\/G\/an1odbsW5zMaDO2I6wmT1nTLFwvAPEwDA0gVZ\/58Wc0eGf1Soos77ccJwjLQqCWt6HdvAyZA52OYBFA4uJkD2\/+m5t1ygGnNKE3jYsThGUhUMtCwAqg\/VQKFtnuD0AszShMaaU5c8KDsNL5dXHapG1wMHxolz2gAaSFYBFAKHfXlGXVa+A2fHqD9thpjyb0KF1xgrAsBGrFIVyGdgE0C8Ei0GYamSPW7tnDSuIEYVkJ1Pr7CQ4BNA9zFoE2Umv16ZoNa\/SqK15V9bztGBwCALajwAXoEHGKH+JkD4\/Y9wj95wf\/M9G+AQCyiwIXoEOE7sP8pms1euIZsosq\/1uyhwCAMOzgAqSsmTt+bKvKXWrbv048I7TtyvetTGzHFCCuVu+AA6B2ZBaBFJXPISxuzSYlW6BwxNeO0F1r75IWVm5HUIhWatbvA4BkkVkEUjQwMLHYRAqeDwxU\/7eVMjDuPmG\/5bvW3hV6jn1v2Kgb9iN7iGxo5PcBQOtQ4AKkqN4dP8KqmrU0O8vasIUb6pGFHXAAhKPABWiRenf8GBiQNk35g7R076rvERYcphnMMZSIemVhBxwAtWMYGkjR4GCwzmGpSjt+FIeVRxeadF54oHjagadVLEwpBnOjo0EWpxjMJVVIwFAi6lXr7wOAbGAYGkhZVJZveFg659pbNXbsX1c\/ydLg97R0vcQocdZabARDiWgEUxiAbKo0DB0rs2hma8zsV2Z2v5lNivAs8CUzW21mq8zs0EY7jc7WTstr9PcHQdr4ePA4f3WQPZy\/2iIDxU\/t\/W\/qutSDILEQKMbNwISutRhxvJ7rHDVk2MhQYpr3u50+S+2g\/PeBQBHIvlrmLL7V3Z+KeO04SfsXvg6TdHXhEahZu82JW3DbAn3jgW9Ub7jUJ2T\/Dt6lvgxM3Hlh9V7nwcHwLQXrHUpM836322cJAFoh1jC0ma2R1BcVLJrZtZLucPcbC88fknS0uz8edU6GoREl7WHUtLm7piyLkbT\/3AbppT0mHEpiKDfu\/tCNXOckhxLTvN95\/ywBQLMkUQ3tkn5kZi7pWncfKnt9H0mPlTxfWzgWGSwCUWoZRs2KOPstS9srl3t7pdGXJr+eRFVoMWirFsxl5TpHvd\/oaHCdGglIs\/IzAkCexQ0Wj3T3dWb2Ckn\/bma\/c\/eflbwe9pdyUsrSzBZJWiRJc1grARHysLzG+k3rNeuyWVXbRa15mPRQbrn+\/uqBVb3XOemh3ah+mG0\/Xu975OGzBABZF6vAxd3XFR6flHSrpLllTdZK2rfk+WxJ60LOM+Tufe7e193dXV+P0fayurxG6Y4pUYHimX1nxtpvub8\/GBbu6QmCop6eycPEaav3Oie9dM68ecE1KGU2ueK6nvfI6mcJAPKkambRzHaRNMXdnyt8\/w5Jy8qarZD0MTO7SUFhy8ZK8xWBSuIOo6bt+w9\/XyfceELVdvXumBIn+5emeq9zkkO7w8PS9ddPDAzDAsVG3mPnnbcHtzNnSldcQXELANQizjD0n0q61YL\/9Z8m6Vvu\/gMzO0OS3P0aSSslzZO0WtImSQvT6S46RasCqThzD1e+b6WO2\/+4JvQmPeUFKt\/8ZvzrneTQbliW0l2aOlXaurWx9wgr9Hnhhdr7CACdjkW5kXlpLuLb\/51+fetX36rarhn7LTdL3GrptP59qagFvovnbOQ9qIQGgPgqVUMTLCLTkgxMiuJkD9efv1577rxnfW+QcUkEUUkF8JX6MjjY2Huw0wwAxEewiNxKIrCpdVmbdpelICqN\/xkoIrMIAPE1vN0fkJRat16rp5hi44sbJ1QuRymtWo4TKLbLtnFpbNdXrzSrwqmEBoBk1LLdH9CQetbni1tMESd7uPCQhfr6yV+vocfbtdO2cWmv8VirtIqZslJVDwB5xzA0mqaeYcGoYcpPXH6HLln31qrvmdTQcrsNaaZZNAQAyB\/mLCIT6p0rVwxsRhcms6xNPYFSlub5AQCQNOYsIhNqnSt35T1Xyi4yzV9tFQPF0nmHcQLFRYuCLKH79uHkavMPszTPD\/Vrl3mnANBMzFlE08SZK5f2sjaVtqqrlF3M2jw\/1K6d5p0CQDMxDI2mKh8Cnn7mW\/Twiz+v+G\/2mL6HNizekMj7NzKczDy\/fGu3eacAkCTmLCIzXnj5BXVd0lW13fiF4ypsMblNEsEaAUPnYt4pAERjziIa0ug8r9I1D6MCxc++9bMT5h6GBYr1zDUsx9p7nYt5pwBQHzKLqKieHTYeXv+wXnvVa6ueu5ZlbZLMCDKc3JnS3C0GAPKOYWjULW6QFqcwZeTDI3rTK99UVz8aXXaHwBASnwcAiEKwiLpFBWl6ww3SX7+\/6r9v5aLYzcwkEYQAAPKsUrDI0jmoaMJ2e0urZw83fHqD9thpj8T7Uc\/SNfUuk1MrlmQBALQzMouItOyny7TkjiUV2xw++3Dd9aG7mtKfWrN3FhHbJl39SoU1ACDvyCwils1bN2v6xdOrtvvma8Y1f371LGPS+vvjZ+qGh4OgMOz\/hZKufn300dqOAwCQJ7GDRTObKmlE0u\/d\/YSy106XdJmk3xcOXeXuX02qk0jPm7\/2Zt299u6KbW56z01674HvbVKPkjEwEF0Qk\/QyOROG6suOAwCQd7VkFs+W9FtJu0e8vtzdP9Z4l5Cm3z\/7e83+p9lV25UWpgwPS70n5Kt4Iyqr555839kKEADQzmIFi2Y2W9LxkgYlnZtqj5C4OMvaPPj3D+qA7gMmHc9r8UZUtq+nJ\/n3Kl4HqqEBAO0o7g4ul0s6X1KlsoD3mNkqM7vFzPZtvGvJa3Qnkiyp9LP8+JEfT9g1JUx3V\/eEHVPCAkWpckVxljV7p5b+\/qCYZXw8eCRQBAC0i6rV0GZ2gqR57v73Zna0pPNC5izOlPRHd3\/JzM6Q9LfufkzIuRZJWiRJc+bMedNoWOonJe20e0PYzxJnWZtnFz+r3abvVtN75Xk\/XdY+BAAgnoYW5Tazz0l6v6QtknZSMGfxO+4+P6L9VElPu3vFxfaavXROOy1v0tsrjc78inTSoortPnzohzV04lDj79Um1w0AAIRraOkcd79A0gWFEx2tILM4IVA0s73d\/fHC05MUFMJkSt6XN9kyvkU7fHaH4MnC6HbjF47LohYYrAPFGwAAdLa611k0s2WSRtx9haSPm9lJCrKPT0s6PZnuJSePy5ss+ckSLfvZssqNbrxNeuhkSUG2zyqvoV0zijcAAOhsHbODSx7mLD730nPa\/R+jViba7ob9PPM\/CwAAyA92cFF2M2Sf\/OEn9cW7v1ixzegnRjVnj8kp0Kz9LAAAoP10TDKY\/xoAAAoFSURBVGYxK0Y3jKr3it6KbS455hJd8JYLmtMhAADQ8cgstthR1x2lOx+9s2KbFwde1PRp1fdlBgAAaCaCxRQ89NRDet2XX1exza3vvVXvet27mtQjAACA+hAsJsDddfNvbtY5PzxH655bF9pmr1330rpz1yW6rA0AAEDaCBbrtGbDGi3+j8Va\/uDyyDaPnP2Iemf0Nq9TAAAACSNYjGnL+BYN3Tukc354jjZv3Tzp9cP2OUxf\/D9f1BH7HtGC3gEAAKSDYLGCB\/7wgD75o0\/q9kduD33982\/7vD5+2Me107SdJAVrOb6P5WwAAEAbIVgs8fzm5\/WFu76gJXeEb4Ny\/P7H69K3X6oDug+Y9Fr5ot+jo8FziYARAADkV8evs\/iTR36ic354jh544oFJr+224266\/J2Xa8HBCzR1ytSK5+ntDd9OsKdHWrMmmb4CAACkgXUWS2x6eZMW\/8diXflfV4a+vuDgBbr4mIs1e\/fZNZ330UdrOw4AAJAHHRcsXviTCycEiq+a8Spd\/s7LdeKfndjQsjZz5oRnFudM3qUPAAAgNzouWDz3zefqlbu9UgsPWag\/2flPEjvv4ODEOYuSZBYEkL29FLsAAIB86rhg8ZW7vVLnvvncxM9bDAQHBoIA0UwqTgel2AUAAOTVlFZ3oJ309wfFLD092wPFok2bgkASAAAgTwgWU0CxCwAAaBcEiymIKmqh2AUAAORN7GDRzKaa2S\/N7Hshr003s+VmttrM7jGz3iQ7mTeDg1JX18RjXV3BcQAAgDypJbN4tqTfRrz2IUnPuPt+kv5J0ucb7Vie9fdLQ0PB3EWz4HFoiOKWNA0PB1XnU6YEj8PDre4RAADtIVawaGazJR0v6asRTU6WdH3h+1skHWuNLFrYBorFLuPjwSOBYnqKWy2OjgaFRcXqcwJGAAAaFzezeLmk8yWNR7y+j6THJMndt0jaKGlmeSMzW2RmI2Y2MjY2Vkd3gckGBiaubylRfQ4AQFKqBotmdoKkJ9393krNQo5N2nTa3Yfcvc\/d+7q7u2voJhCN6nMAANITJ7N4pKSTzGyNpJskHWNmN5S1WStpX0kys2mS9pD0dIL9BCJRfQ4AQHqqBovufoG7z3b3XkmnSvqxu88va7ZC0oLC96cU2kzKLAJpoPocAID01L3OopktM7OTCk+\/Jmmmma2WdK6kxUl0DoiD6nMAANJjrUoA9vX1+cjISEveGwAAANuZ2b3u3hf2Gju4AAAAIBLBYoax0DQAAGi1aa3uAMIVF5ourh9YXGhaYi4eAABoHjKLGcVC0wAAIAsIFjOKhaYBAEAWECxmFAtNAwCALCBYzCgWmgYAAFlAsJhRLDQNAACygGroDOvvJzgEAACtRWYRAAAAkQgWAQAAEIlgEQAAAJEIFgEAABCJYDGD2BMaAABkBdXQGcOe0AAAIEvILGYMe0IDAIAsIVjMGPaEBgAAWVI1WDSznczsv8zsATN70MwuCmlzupmNmdn9ha+\/S6e77Y89oQEAQJbEySy+JOkYdz9Y0iGS3mlmh4e0W+7uhxS+vppoLzsIe0IDAIAsqRoseuCPhac7FL481V51MPaEBgAAWRJrzqKZTTWz+yU9Kenf3f2ekGbvMbNVZnaLme0bcZ5FZjZiZiNjY2MNdLu99fdLa9ZI4+PBI4EiAABolVjBortvdfdDJM2WNNfMDixr8q+Set39DZL+Q9L1EecZcvc+d+\/r7u5upN8AAABogpqqod19g6Q7JL2z7Ph6d3+p8PQrkt6USO8AAADQUnGqobvNbEbh+50lvU3S78ra7F3y9CRJv02ykwAAAGiNODu47C3pejObqiC4\/La7f8\/MlkkacfcVkj5uZidJ2iLpaUmnp9VhAAAANI+5t6awua+vz0dGRlry3gAAANjOzO51976w19jBBQAAAJEIFgEAABCpZcPQZjYmaTSh082S9FRC50LrcB\/bA\/exPXAf2wP3sT004z72uHvouoYtCxaTZGYjUePsyA\/uY3vgPrYH7mN74D62h1bfR4ahAQAAEIlgEQAAAJHaJVgcanUHkAjuY3vgPrYH7mN74D62h5bex7aYswgAAIB0tEtmEQAAACnIVbBoZu80s4fMbLWZLQ55fbqZLS+8fo+Z9Ta\/l6gmxn0818x+Y2arzOx2M+tpRT9RWbX7WNLuFDNzM6MiM4Pi3Ecz+9vC7+SDZvatZvcR1cX47+ocM\/uJmf2y8N\/Wea3oJ6KZ2dfN7Ekz+3XE62ZmXyrc41Vmdmiz+pabYLGwN\/WXJR0n6QBJp5nZAWXNPiTpGXffT9I\/Sfp8c3uJamLex19K6nP3N0i6RdKlze0lqol5H2Vmu0n6uKR7mttDxBHnPprZ\/pIukHSku\/+5pE80vaOoKObv42ckfdvd3yjpVEn\/r7m9RAz\/LOmdFV4\/TtL+ha9Fkq5uQp8k5ShYlDRX0mp3\/1933yzpJkknl7U5WdL1he9vkXSsmVkT+4jqqt5Hd\/+Ju28qPL1b0uwm9xHVxfl9lKTPKgj2X2xm5xBbnPv4YUlfdvdnJMndn2xyH1FdnPvoknYvfL+HpHVN7B9icPefSXq6QpOTJX3DA3dLmmFmezejb3kKFveR9FjJ87WFY6Ft3H2LpI2SZjald4grzn0s9SFJ\/5Zqj1CPqvfRzN4oaV93\/14zO4aaxPl9\/DNJf2Zm\/2lmd5tZpcwHWiPOfVwqab6ZrZW0UtJZzekaElTr38\/ETGvGmyQkLENYXsodpw1aK\/Y9MrP5kvok\/VWqPUI9Kt5HM5uiYCrI6c3qEOoS5\/dxmoJhr6MVZPnvNLMD3X1Dyn1DfHHu42mS\/tndv2Bmb5b0zcJ9HE+\/e0hIy2KcPGUW10rat+T5bE1Oo29rY2bTFKTaK6V00Xxx7qPM7G2SBiSd5O4vNalviK\/afdxN0oGS7jCzNZIOl7SCIpfMifvf1e+6+8vu\/oikhxQEj8iOOPfxQ5K+LUnufpeknRTsN4z8iPX3Mw15Chb\/W9L+ZvYqM9tRwQTdFWVtVkhaUPj+FEk\/dhaSzJqq97EwfHmtgkCR+VHZVPE+uvtGd5\/l7r3u3qtg7ulJ7j7Smu4iQpz\/rt4m6a2SZGazFAxL\/29Te4lq4tzHRyUdK0lm9noFweJYU3uJRq2Q9IFCVfThkja6++PNeOPcDEO7+xYz+5ikH0qaKunr7v6gmS2TNOLuKyR9TUFqfbWCjOKpresxwsS8j5dJ2lXSzYX6pEfd\/aSWdRqTxLyPyLiY9\/GHkt5hZr+RtFXSp9x9fet6jXIx7+MnJX3FzM5RMHR5OsmUbDGzGxVM95hVmFu6RNIOkuTu1yiYazpP0mpJmyQtbFrf+KwAAAAgSp6GoQEAANBkBIsAAACIRLAIAACASASLAAAAiESwCAAAgEgEiwAAAIhEsAgAAIBIBIsAAACI9P8B7lOLQENZXhgAAAAASUVORK5CYII=%0A\" alt=\"\"\/><\/figure>\n\n\n\n<h2>Extensions<\/h2>\n\n\n\n<ol><li>Neurons are many. Weight are computed in a single shot using numpy.<\/li><li>The layers are many and the code needs to be flexible to stitch many layers flexible<\/li><li>Neuron definition is complex &#8211; activation function<\/li><\/ol>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>Let us know in the comments below if you find it helpful.<\/p>\n\n\n\n<p>In order to claim the certificate from E&amp;ICT Academy, IIT Roorkee, visit <a href=\"https:\/\/www.cloudxlab.com\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.cloudxlab.com<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>Website \u25ba<a href=\"https:\/\/www.youtube.com\/redirect?redir_token=QUFFLUhqbTJrZWd1TjhZUzVkN2x1WU5kQ3BZVVJaM01fZ3xBQ3Jtc0ttQmpZMGF5dUpDZ0U3azVXdVJpa1N3NGFzZlNnYkl6QWVmZWF4NkYydG12LWNfUnNPZEhDaTZzY1JBNUxnTVVlNV80c2ttRHU2aFFnbk5ZQ3ZsZDh4Nl9iVDVJQk1ER2laTF9BcG9pY3o0MDdVT1BjMA%3D%3D&amp;v=sVjBqjDWoQA&amp;q=https%3A%2F%2Fwww.cloudxlab.com&amp;event=video_description\"> https:\/\/www.cloudxlab.com<\/a><\/p>\n\n\n\n<p>Facebook \u25ba<a href=\"http:\/\/www.twitter.com\/cloudxlab\"> https:\/\/www.facebook.com\/cloudxlab<\/a><\/p>\n\n\n\n<p>Instagram \u25ba<a href=\"https:\/\/www.youtube.com\/redirect?redir_token=QUFFLUhqbGp4OEZhNTVrWFVWUlh6cW4tSklFV1pMaG9Id3xBQ3Jtc0trOGRlZ0lfTkVubGZ1dEZzZWduZmI0UWg0WUxuSGVlTkplR2lwRkxnS2s1bWVjdW1IbTFTZXFUQTZ6X2xSenpHUS1uZ2tyN0F1WnBZOEZrU3UzZ0k1aFV6MERtUTZJMVB4S2FjNWx1Y0lwQklXU2tIQQ%3D%3D&amp;v=sVjBqjDWoQA&amp;q=https%3A%2F%2Fwww.instagram.com%2Fcloudxlabof&amp;event=video_description\"> h<\/a><a href=\"ttps:\/\/www.instagram.com\/cloudxlab\">ttps:\/\/www.instagram.com\/cloudxlab<\/a><\/p>\n\n\n\n<p>Twitter \u25ba<a href=\"https:\/\/www.youtube.com\/redirect?redir_token=QUFFLUhqbFNjdkJBeEwxVXcxbXlGcFA2YVhSMWhPOGJXUXxBQ3Jtc0tucjlpRG1sRFFIMERRREpCdFF1cktrZG1lcGNnRzRLNmJza1ZMTzJTYkhZbzlXLVdBVGlXRHFxVnpVcUhpckZCcUs1ekd3QzR0dmpFWG5tTFBUVEpzUGJYdkJrXy1kUTVUQ251UjN2UW02bkl3WEJxdw%3D%3D&amp;v=sVjBqjDWoQA&amp;q=http%3A%2F%2Fwww.twitter.com%2Fcloudxlab&amp;event=video_description\"> h<\/a><a href=\"http:\/\/www.twitter.com\/cloudxlab\">ttp:\/\/www.twitter.com\/cloudxlab<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Backpropagation is considered one of the core algorithms in Machine Learning. It is mainly used in training the neural network. And backpropagation is basically gradient descent. What if we tell you that understanding and implementing it is not that hard?\u00a0 Anyone who knows basic Mathematics and has knowledge of the basics of Python Language can &hellip; <a href=\"https:\/\/cloudxlab.com\/blog\/backpropagation-from-scratch\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Coding Backpropagation and Gradient Descent From Scratch without using any libraries&#8221;<\/span><\/a><\/p>\n","protected":false},"author":14,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[67,28,30],"tags":[96,95,16,97,98,93,94],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v16.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Coding Backpropagation and Gradient Descent From Scratch without using any libraries | CloudxLab Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudxlab.com\/blog\/backpropagation-from-scratch\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Coding Backpropagation and Gradient Descent From Scratch without using any libraries | CloudxLab Blog\" \/>\n<meta property=\"og:description\" content=\"Backpropagation is considered one of the core algorithms in Machine Learning. It is mainly used in training the neural network. And backpropagation is basically gradient descent. What if we tell you that understanding and implementing it is not that hard?\u00a0 Anyone who knows basic Mathematics and has knowledge of the basics of Python Language can &hellip; Continue reading &quot;Coding Backpropagation and Gradient Descent From Scratch without using any libraries&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudxlab.com\/blog\/backpropagation-from-scratch\/\" \/>\n<meta property=\"og:site_name\" content=\"CloudxLab Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/cloudxlab\" \/>\n<meta property=\"article:published_time\" content=\"2020-08-25T12:57:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-07-05T04:27:55+00:00\" \/>\n<meta property=\"og:image\" content=\"\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CloudxLab\" \/>\n<meta name=\"twitter:site\" content=\"@CloudxLab\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\">\n\t<meta name=\"twitter:data1\" content=\"11 minutes\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudxlab.com\/blog\/#website\",\"url\":\"https:\/\/cloudxlab.com\/blog\/\",\"name\":\"CloudxLab Blog\",\"description\":\"Learn AI, Machine Learning, Deep Learning, Devops &amp; Big Data\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/cloudxlab.com\/blog\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/cloudxlab.com\/blog\/backpropagation-from-scratch\/#primaryimage\",\"inLanguage\":\"en-US\",\"url\":\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAo0AAAD4CAYAAACJ3dwWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+\/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAfbUlEQVR4nO3de5BcZ3nn8d9jeUxGhGQEEgkeEBZVlJKAFgt3UU4mYbG8QYQNtiJIYSoXSEhUuUNCVDVOqvDCJtEk3grZrVQuCrDLJsTY+DIxKPGlGBOqlNibEWNjG1tgHOS4TeIBe5yApvBIPPtHd9ut1jl9Tp\/75fupcnnm9OnTbx+3Wo\/f532e19xdAAAAwDjnlD0AAAAAVB9BIwAAACIRNAIAACASQSMAAAAiETQCAAAg0rlFvtjWrVv9ggsuKPIlAQAAEODYsWNfdfdtcc8vNGi84IILtLy8XORLAgAAIICZnZjkfNLTAAAAiETQCAAAgEgEjQAAAIhE0AgAAIBIBI0AAACIRNAIAACASIW23AEAAEDP4kpXV996XI+trev8mWkd3LtT+3bPlj2sUASNAAAABVtc6erKG+\/V+sZpSVJ3bV1X3nivJFU2cCQ9DQAAULCrbz3+TMA4sL5xWlfferykEUUjaAQAACjYY2vrEx2vAoJGAACAgp0\/Mz3R8SogaAQAACjYwb07NT216Yxj01ObdHDvzpJGFI1CGAAAgAKMVku\/+aJZ3fHgKtXTAAAA6Amqlr7hWFeH9u+qdKA4jPQ0AABAzupYLT2KoBEAACBndayWHhUZNJrZh83scTO7b+jY883sdjP7Yv\/fW\/IdJgAAQH3VsVp6VJyZxv8j6Q0jx+YlfcrdXy7pU\/3fAQAAEKCO1dKjIoNGd\/+MpCdGDl8u6SP9nz8iaV\/G4wIAAGiMfbtndWj\/Ls3OTMskzc5M16oIRpLM3aNPMrtA0ifd\/ZX939fcfWbo8SfdPTBFbWYHJB2QpO3bt1904sSJDIYNAABQX6Ptd8pot2Nmx9y9E\/f83FvuuPthSYclqdPpREeoAAAAE0gSgJUZtAW137nyxnslqdIzj0mrp\/\/NzF4kSf1\/P57dkAAAAOIZBGDdtXW5ng3AFle6mT4nS3Vtv5M0aLxZ0tv7P79d0t9kMxwAAID4kgRgUc9ZXOlqbmFJO+aPaG5hKbNgcnDdbk3b70Smp83sGkmvk7TVzB6VdJWkBUnXmdk7JT0i6cfzHCQAAECQJP0Pxz0nr9Tx6HWDVL39TmTQ6O5vC3no0ozHAgAAMJHzZ6YDZ+7GBWDjnhM2C\/me6+6RlDxwDLrusDq032FHGAAAUFtJ+h+Oe07YLORp91TrHsfNfNal\/Q5BIwAAqK0k\/Q\/HPWfcDGWaYpWw687OTOvo\/J7KB4xSAS13AAAA8rRv9+zEQVfYcw7u3Tl27WHSYpWg69YhJT2MoBEAAFRW0f0UB9d+z3X36HTABihJi1UG1y27oXcaBI0AAKCSymqCPbh21jODSWZEq4Q1jQAAoJLKbILdhL2is8ZMIwAAqKQkPRizVPeZwawx0wgAACopbP1g1ZtgNxVBIwAAqKQkPRiRH9LTAADUTNEVxWVpQsVxkxA0AgBQI2VVFBepLUFx3ZCeBgCgRsqsKC7CICjurq3L9WxQnHT7PmSHoBEAgBopu6I4b00PiuuMoBEAgBppekVx04PiOiNoBACgRppeUVyFoHhxpau5hSXtmD+iuYUlUuN9BI0AANRInXcqiROMlR0Us6YyHNXTAADUTB13Kolb9V12m51xayrrds+zRtAIAAByN0kwVmZQzJrKcKSnAQBA7uoSjFVhTWVVMdMIAAByd\/7MtLoBAWIRwVicZuGDc7pr6zJJPvRYkwqN0iBoBAAAuTu4d+cZaxqlYoKxOGspR89x6ZnAcXYoyGz7TjWp0tNm9i4zu8\/M7jezd2c1KAAA0CxlVX3HaRYedM4gYDw6v+eZgLHtVdWJZxrN7JWSfl7SayQ9LekWMzvi7l\/ManAAAKA5iixwGU43BxleSxlnvSVV1enS098r6U53PylJZvb3kn5M0h9kMTAAAFB9VUzZjqabgwyvpYyz3rIuhTx5SpOevk\/Sa83sBWa2WdIbJb1k9CQzO2Bmy2a2vLq6muLlAABAlVQ1ZRs0KzhsdC1lnIbiVFWnCBrd\/QFJvy\/pdkm3SLpH0qmA8w67e8fdO9u2bUs8UAAAUC1x1guWYdzsX9BayjjrLcveqaYKUlVPu\/uHJH1Ikszs9yQ9msWgAABA9VU1ZRuWbh4UtgSJWm9Z9k41VZAqaDSzF7r742a2XdJ+Sd+fzbAAAEDVldl7cZy82vvUcfvGLKXdEeYGM\/u8pE9I+mV3fzKDMQEAgBqoasq2rPY+TZc2Pf1DWQ0EAIA2qmL1cVxVTtm2fVYwD+wIAwBASeLsVlJ1BGftQdAIAEBJsmwYXecZS9QDQSMAAAmlDdSyqj5uwowlqi9tIQwAAK2URWPrrBpGV7VfIpqFoBEAgASyCNSiqo8XV7qaW1jSjvkjmltYCg1Iq9ovEc1CehoAgASyCNTGVR9PknKuar9ENAtBIwAAAaLWK2YVqIVVH09SJJNXM2tgGEEjACCxplbsRs3yLa509Y1vnjrreVkGapPMZFa5XyKag6ARAJBIkyt2o9Yrjs7qSdKWzVO66k2vyOy9TzqTSb9E5I1CGABAIk2u2B03yxf0viVp83nnZhq0VXWLPrQXM40AgESqVrEblCqXkqVsx83yFfW+STmjaggaAQCJVKliNyhVfvD6eySXNr7lzxyLmz4fV1hy9a3HC3vfpJxRJaSnAQCJVCl9GpQy3jjtzwSMA3HT5\/t2z+rQ\/l2anZmWSZqdmdah\/bu0b\/dspd43UCRmGgEAiVQpfTpJajjuuWGzfFV630CRCBoBAIlVJX0alioPOzetqrxvoEikpwEAtReUMp7aZJo6x844RhoZSI6ZRgBA7YWljIOOMUMIJGPuHn1WRjqdji8vLxf2egAAAAhmZsfcvRP3fGYaAQCV0NQtCYGmIGgEAJyl6AAuyy0JCT6BfFAIAwA4wyCA666ty\/VsALe40s3tNbPakrCMsQNtkSpoNLNfN7P7zew+M7vGzL4tq4EBAMpRxp7SWW3N1+T9sIGyJQ4azWxW0q9J6rj7KyVtknRFVgMDAJSjjD2lw3onTtpTsYixL650NbewpB3zRzS3sMQsJlojbXr6XEnTZnaupM2SHks\/JABAmbIK4CaR1dZ8eY+d9DfaLHHQ6O5dSf9D0iOSviLpKXe\/bfQ8MztgZstmtry6upp8pACAQpSxt\/K4vZ4nkffYSX+jzRL3aTSzLZJukPRWSWuSPi7penf\/q7Dn0KcRAOqhzhXIWY599FphWxWapH9e+K8pRg0Ub9I+jWmCxh+X9AZ3f2f\/95+WdLG7\/1LYcwgaAaBe6hw8pjXaBkjqBYdBf2vOzkzr6PyewsYGZKHI5t6PSLrYzDZLWpd0qSQiQgBoiCx7J9ZRUCradXbgyH7WaIs0axrvknS9pM9Kurd\/rcMZjQsAULKi1+9VrSo5rOLapdRrL4E6SrUjjLtfJemqjMYCAKiQIlvvBM1q\/vq1d2v5xBP6nX27Mn+9OMLWMJKKRluxIwwAIFCRrXfCUsEfvfOR0mYcy6giB6qMoBEAEKjIoGlcKrisdjZZtQECmiJVehoA0FyD4CjP6ulBdfa4Ph557kQTZd\/uWYJEoI+gEQBaKG4rnTyDpqCWNkHy3IkGQHykpwGgZYK2wnv3tXfrwvfdVuj6waB1jKNYQwhUBzONANAyYcHa2vqGDn78Hr3vE\/dr7eRG7s28x6WdTWpdM3Gg6ggaAaDmBqnm7tq6NpnptLtmxwRc44K1jW+5njy5ISn\/Zt60tAHqhfQ0ANTYcKpZkk73t4YdBHzD6eZB8+xJNo\/Ns5k3LW2AeiFoBIAaG7cucDjgGw0uJ5FX9TItbYB6IT0NADUWFdANHo9TdBImz+plWtoA9cFMIwDUWFRAN3g8quhEkmampzS1yc54jHQxgAGCRgCosaB1gQPDAd+44NLVSw3ffdXrdfVbXkW6GEAg0tMAUGPDu7aMq54+uHfn2Ebag5lI0sUAwhA0AkDNxQn0Bo+\/57p7nqmwHsauKwCiEDQCQAON2yZwdMaxSesW426PCGByBI0A0DCjezoHNeluYmAV530DSI6gEQBiynsWK6vrB7XXGfRsHKSymxhERb1vAOkQNAJADHnPYmV5\/bD2Onk16a6Ktr5voCi03AGAGMbNYlXt+mFFLU0vdmnr+waKQtAIoFUG+y\/vmD+iuYWlM\/ZmHifvWawsr9\/WPZ3b+r6BopCeBtAaaVLA589MB+7bnNUsVpbXb3Kxyzhtfd9AUcwD+nXFeqLZTknXDh16maT3uvsfhT2n0+n48vJyotcDgLTmFpYCA7PZmWkdnd8z9rmjAafUm8XKaseUvK8PAKPM7Ji7d+Ken3im0d2PS7qw\/6KbJHUl3ZT0egCQtzQp4LxnscKuL\/WCXWbOAJQtq\/T0pZK+5O4nMroeAGQuaQp4tBXOB956YarALay1zmgrHPoOAqiSrAphrpB0TdADZnbAzJbNbHl1dTWjlwOAyV3yPdtkI8eiCiUGgVt3bV2uZwO3uAU0aa6Xd8U2AEwiddBoZudJukzSx4Med\/fD7t5x9862bdvSvhwAJLK40tUNx7oaXsVtkt580fhG11kHbpNcj76DAKoki\/T0j0j6rLv\/WwbXAoBcBAVrLumOB8dnQJIGbmEp6Emul3fF9ij2bQYwThZB49sUkpoGgCTyCF7iBGtBr5skcBu3FnFm85SePLlx1nNmNk+ddezg3p2BFdV59B1k\/SSAKKnS02a2WdIPS7oxm+EAaLus1xAORO0WEva6l3zPtokbRo9LQYd1OQs6vm\/3rA7t36XZmWmZeq2B8mrBw\/pJAFFSzTS6+0lJL8hoLAAwNnhJEyxFzdqFve4dD67q0P5dE818JklpP7V+9uyjpLMqqvPC+kkAUdgRBkCl5BW8RPVZHPe6kwZuUSntItcpxlX0+kkA9UPQCKBS8gxexgV\/Wb5u1KxmUesUJ1Hk+kkA9ZRVn0YAyMTBvTsnXkNYtdcdtxaxyHWKWY0ZAKQUe08nwd7TAKTo6uik1dNpq65pOQOgTSbde5qgEUChRlu7SL0ZvbSzWnldN+h1CCwBNMGkQSPpaQCFyqu1SxEtY\/JqBwQAdUDQCKBQeVVHF9Eyhl6GANqMoBFAoaKabFftusPoZQigzQgaARQqqEp56hzTyadPacf8Ec0tLCVK9xZRdV1EYAoAVUXQCKBQo61dZqanJJOePLmRap1gES1jymoHBABVQPU0gFLNLSwFNtWenZnW0fk9JYxoPKqnATTFpNXT7AgDlIgApH7rBIvaCxoAqob0NFAS2rf0sE4QAOqBoBEoSd3btyyudDW3sJSqeEVinSAA1AXpaaAkcdOyVUxhj+6+MpgllTTx2AbnV+09AgDORNAIlOT8menAApDhtGyWwVmWxs2SJhkX6wQBoPpITwMliZOWrWoKu27FKwCA9JhpBEoSJy2bZ3CWJu0dZ5YUANAsBI1AiaLSsnkFZ2nT3gf37jzj+RLFKwDQdKSngQrLq7I4bdq7iN1XAADVwkwjUGHjUthp0stBs5fSZGlvilcAoF1SBY1mNiPpg5JeKckl\/ay7\/2MWAwPQExScpUkvL650Zer9gR3FmkQAQJi0M43\/U9It7v4WMztP0uYMxgQgQpqWN1ffejwwYDQpVtq7in0jAQD5Sxw0mtl3SHqtpHdIkrs\/LenpbIYFYJw0VdVh57jizVJWsW8kACB\/aQphXiZpVdL\/NrMVM\/ugmT139CQzO2Bmy2a2vLq6muLlgPrIaou9MGn2aw47ZzbGc6vaNzJvef\/3BIA6SBM0nivp1ZL+1N13S\/qGpPnRk9z9sLt33L2zbdu2FC8H1MNgNq67ti7Xs7NxSQONoIBlXFV1VICTpiK7jU29s\/7vCQB1lSZofFTSo+5+V\/\/369ULIoFWy3I2LixgkRTY8kZSZICTpl1OmhnOumrr7CoAjEq8ptHd\/9XM\/sXMdrr7cUmXSvp8dkMD6inL2bhxAcvR+T1nBXpzC0uxCmSStstpY1PvNs6uAkCQtNXTvyrpo\/3K6Ycl\/Uz6IQH1luUuLpMGLHkHOHG2PhxoSpU1WyYCQE+qoNHd75bUyWgsQCPEnY2LE1RNGrAUEeDEmaVsUpV1G2dXASAI2wgCGYuzZjBuccWkRSt5bTs4qSatA2TLRADoYRtBIAdhs3GD2cWg2cCwtYdSvHRwkvPz0rR1gGyZCAAEjUBhRlO2QYKCqkkDlioEOKwDBIDmIT0NFCQoZTuqTkHVuH6QVUmTAwCyw0wjUJCo1GydgqqoQpeqpMkBANkhaAQKEpaylXrFFXUKqsYVugzeQxXS5ACA7JCeBgoSlrL9o7deGNiou8qaVugCAIhG0AgUpEmtW9q4nSAAtB3paaBATUnZ0vAaANqHoBETa8r2cHG17f3GQaELALQPQSNiW1zp6r\/dfL\/W1jeeOVbn7eHiaNJ2eFlryqwpACAe1jQilkHwNBwwDtR1e7g4mrQdHgAAaRA0IpaoxtRNrZqlShgAgB7S04glKkiatGq2LusE2Q4PAIAeZhoRy7ggadKq2UGqu7u2Ltez6wSHt6GriqK3wxu3NR8AAGUiaEQsQcGTJG3ZPDVxr8E6rRMssrdinYJpAED7kJ5usUlSxFm2WKnbOsGiqoTjbM0HAEBZCBpbKkkrmayCJ9YJBqtbMA0AaBfS0y1VZoq46HWCdcHWfACAKiNobKkyZ7WatAdzlgimAQBVRnq6pcpOEbObyNnYmg8AUGWpgkYz+7Kk\/5B0WtIpd+9kMSjk7+DenWesaZTqM6tVlx6PSRBMAwCqKouZxkvc\/asZXAcFquusVlgBz\/KJJ3THg6u1ei8AANQJ6ekWq+OsVlgBz0fvfETe\/z1OJTgAAJhM2kIYl3SbmR0zswNBJ5jZATNbNrPl1dXVlC+Htgsr1PGR36vaLBwAgLpKO9M45+6PmdkLJd1uZg+6+2eGT3D3w5IOS1Kn0xn9u721mrwuL09hBTxB6G8IAEB2Us00uvtj\/X8\/LukmSa\/JYlBNx3ZxyQW1pbGQc+lvCABAdhIHjWb2XDN73uBnSa+XdF9WA2uyohtrL650NbewpB3zRzS3sFR4cJrl6wf1ePyJi7fT3xAAgJylSU9\/l6SbzGxwnb9291syGVXDFdlYO8l2gVV\/\/aACns5Ln0+6HwCAHCUOGt39YUmvynAsrVFkY+1xs5pFBFVFvX4dK8EBAKgTthEsQZHbxZW5XWAVXh8AAGSDoLEERe69HDZ7WVSRSNmvDwAAskFz74IEtdg5Or8n99cte7vAsl8fAABkg6CxAGUWo5S9XWDZrw8AALJh7sX12+50Or68vFzY61XFhe+7TWvrG2cdn52ZLmS2EQAAYJSZHXP3TtzzWdOYs8WVbmDAKFEMAgAA6oOgMWfjGnZTDAIAAOqCoDFn42YTKQYBAAB1QdCYs7DZxC2bpygGAQAAtUHQmLOwRt5XvekVJY0IAABgcrTcCRDUUzHNPskSLWcAAEC9ETSOyKOnYtP2Rc4yqAYAAPVAenrE1bceP2P3Ekla3zg9tgq6TQZBdXdtXa5ng+rFlW7ZQwMAADkiaBwRVu1MT8UegmoAANqJoHFEWLUzPRV7CKoBAGgngsYRYdXO9FTsIagGAKCdGhs0Lq50NbewpB3zRzS3sBS65m70PEk6tH+XZmemZertD31o\/y4KPfoIqgEAaKdGVk\/HrYAOO+\/Q\/l06Or9n4tfMqqK4ytXJtBACAKCdzN0Le7FOp+PLy8u5v87cwpK6AWvsZmemzwgG454XZTT4lHqzb0lmKLO8FgAAQBgzO+bunbjnNzI9HbdYY5KijnHp7iwriqlOBgAAVdTIoDFusUbc84J6E7772ru1+\/23aXGlm2lFMdXJAACgilIHjWa2ycxWzOyTWQwoC3GLNeKeFzT7J0lPntzQlTfeq5nNU4HjSFJRTHUyAACooixmGt8l6YEMrpOZfbtnY1VAxz1v3Czf+sZpuSuzimKqkwEAQBWlKoQxsxdL+oik35X0G+7+o+POL6oQJomgimWpN8sYVCwzzCR94K0XtqJ6GgAANMOkhTBpg8brJR2S9DxJvxkUNJrZAUkHJGn79u0XnThxIvHr5SWoYnnqHJNM2jgdfX8mrbYGAAAoW2HV02b2o5Ied\/dj485z98Pu3nH3zrZt25K+XK6C1ixufMtjBYykjgEAQBukWdM4J+kyM\/uypI9J2mNmf5XJqAo2aWUyu8UAAIC2SbwjjLtfKelKSTKz16mXnv7JjMZVqPNnpiPXLQ6QigYAAG3UyD6No6L2oQ6qWJ46xzS1yc44RioaAAC0VSZ7T7v7pyV9OotrZS3OPtRh+ykHHSMVDQAA2qiRe08Py2p\/aQAAgCZh7+kRbMsHAACQXuODRrblAwAASK\/xQSPb8gEAAKSXSSFMlYUVuVDQAgAAEF\/jg0apFzgSJAIAACTX+PQ0AAAA0iNoBAAAQCSCRgAAAEQiaAQAAEAkgkYAAABEKnQbQTNblXQi48tulfTVjK\/ZRNynaNyjaNyjeLhP0bhH0bhH8XCfooXdo5e6+7a4Fyk0aMyDmS1Psm9iW3GfonGPonGP4uE+ReMeReMexcN9ipbVPSI9DQAAgEgEjQAAAIjUhKDxcNkDqAnuUzTuUTTuUTzcp2jco2jco3i4T9EyuUe1X9MIAACA\/DVhphEAAAA5I2gEAABApEoHjWb2BjM7bmYPmdl8wOPPMbNr+4\/fZWYXDD12Zf\/4cTPbW+S4ixTjHv2GmX3ezD5nZp8ys5cOPXbazO7u\/3NzsSMvTox79A4zWx26Fz839NjbzeyL\/X\/eXuzIixXjPn1g6B59wczWhh5ry2fpw2b2uJndF\/K4mdn\/6t\/Dz5nZq4cea8VnKcY9+on+vfmcmf2Dmb1q6LEvm9m9\/c\/RcnGjLlaMe\/Q6M3tq6M\/Ue4ceG\/vntEli3KeDQ\/fovv730PP7j7Xls\/QSM7vDzB4ws\/vN7F0B52T3veTulfxH0iZJX5L0MknnSbpH0veNnPNLkv6s\/\/MVkq7t\/\/x9\/fOfI2lH\/zqbyn5PJd2jSyRt7v\/8i4N71P\/962W\/h4rco3dI+uOA5z5f0sP9f2\/p\/7yl7PdU1n0aOf9XJX24TZ+l\/vt8raRXS7ov5PE3Svo7SSbpYkl3tfCzFHWPfmDw3iX9yOAe9X\/\/sqStZb+HCtyj10n6ZMDxif6c1v2fqPs0cu6bJC0N\/d6Wz9KLJL26\/\/PzJH0h4O+4zL6XqjzT+BpJD7n7w+7+tKSPSbp85JzLJX2k\/\/P1ki41M+sf\/5i7f9Pd\/1nSQ\/3rNU3kPXL3O9z9ZP\/XOyW9uOAxli3O5yjMXkm3u\/sT7v6kpNslvSGncZZt0vv0NknXFDKyCnH3z0h6Yswpl0v6v95zp6QZM3uRWvRZirpH7v4P\/XsgtfM7Kc7nKEya77PamfA+tfU76Svu\/tn+z\/8h6QFJsyOnZfa9VOWgcVbSvwz9\/qjOvhHPnOPupyQ9JekFMZ\/bBJO+z3eq938bA99mZstmdqeZ7ctjgBUQ9x69uT9tf72ZvWTC5zZB7PfaX+KwQ9LS0OE2fJbiCLuPbfosTWL0O8kl3WZmx8zsQEljqorvN7N7zOzvzOwV\/WN8jgKY2Wb1gp0bhg637rNkvSV6uyXdNfJQZt9L56YdZI4s4Nhof6Cwc+I8twliv08z+0lJHUn\/eejwdnd\/zMxeJmnJzO519y\/lMM4yxblHn5B0jbt\/08x+Qb3Z6z0xn9sUk7zXKyRd7+6nh4614bMUR9u\/k2Izs0vUCxp\/cOjwXP9z9EJJt5vZg\/3Zprb5rHp7An\/dzN4oaVHSy8XnKMybJB119+FZyVZ9lszs29ULmt\/t7v8++nDAUxJ9L1V5pvFRSS8Z+v3Fkh4LO8fMzpX0nepNZcd5bhPEep9m9l8k\/baky9z9m4Pj7v5Y\/98PS\/q0ev+H0jSR98jdvzZ0X\/5C0kVxn9sgk7zXKzSSBmrJZymOsPvYps9SJDP7T5I+KOlyd\/\/a4PjQ5+hxSTepmcuKIrn7v7v71\/s\/\/62kKTPbKj5HYcZ9JzX+s2RmU+oFjB919xsDTsnse6nKQeM\/SXq5me0ws\/PU+1CMVmXeLGlQ7fMW9RbBev\/4Fdarrt6h3v+h\/b+Cxl2kyHtkZrsl\/bl6AePjQ8e3mNlz+j9vlTQn6fOFjbw4ce7Ri4Z+vUy9NSGSdKuk1\/fv1RZJr+8fa6I4f95kZjvVWzD9j0PH2vJZiuNmST\/dr1a8WNJT7v4VteuzNJaZbZd0o6SfcvcvDB1\/rpk9b\/CzevcosGq26czsu\/vr82Vmr1Hv7+qvKeaf0zYxs+9UL4P2N0PHWvNZ6n9OPiTpAXf\/w5DTMvteqmx62t1PmdmvqPcGNqlXqXm\/mb1f0rK736zejfpLM3tIvRnGK\/rPvd\/MrlPvL65Tkn55JJXWCDHv0dWSvl3Sx\/vfQY+4+2WSvlfSn5vZt9T7Qlpw98b9RR\/zHv2amV2m3mflCfWqqeXuT5jZf1fvi1qS3j+S\/miMmPdJ6i02\/1j\/f84GWvFZkiQzu0a9ytatZvaopKskTUmSu\/+ZpL9Vr1LxIUknJf1M\/7HWfJZi3KP3qrf2\/E\/630mn3L0j6bsk3dQ\/dq6kv3b3Wwp\/AwWIcY\/eIukXzeyUpHVJV\/T\/zAX+OS3hLRQixn2SpB+TdJu7f2Poqa35LKn3P+k\/JeleM7u7f+y3JG2Xsv9eYhtBAAAARKpyehoAAAAVQdAIAACASASNAAAAiETQCAAAgEgEjQAAAIhE0AgAAIBIBI0AAACI9P8BTNA2FtPweOoAAAAASUVORK5CYII=%0A\",\"contentUrl\":\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAo0AAAD4CAYAAACJ3dwWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+\/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAfbUlEQVR4nO3de5BcZ3nn8d9jeUxGhGQEEgkeEBZVlJKAFgt3UU4mYbG8QYQNtiJIYSoXSEhUuUNCVDVOqvDCJtEk3grZrVQuCrDLJsTY+DIxKPGlGBOqlNibEWNjG1tgHOS4TeIBe5yApvBIPPtHd9ut1jl9Tp\/75fupcnnm9OnTbx+3Wo\/f532e19xdAAAAwDjnlD0AAAAAVB9BIwAAACIRNAIAACASQSMAAAAiETQCAAAg0rlFvtjWrVv9ggsuKPIlAQAAEODYsWNfdfdtcc8vNGi84IILtLy8XORLAgAAIICZnZjkfNLTAAAAiETQCAAAgEgEjQAAAIhE0AgAAIBIBI0AAACIRNAIAACASIW23AEAAEDP4kpXV996XI+trev8mWkd3LtT+3bPlj2sUASNAAAABVtc6erKG+\/V+sZpSVJ3bV1X3nivJFU2cCQ9DQAAULCrbz3+TMA4sL5xWlfferykEUUjaAQAACjYY2vrEx2vAoJGAACAgp0\/Mz3R8SogaAQAACjYwb07NT216Yxj01ObdHDvzpJGFI1CGAAAgAKMVku\/+aJZ3fHgKtXTAAAA6Amqlr7hWFeH9u+qdKA4jPQ0AABAzupYLT2KoBEAACBndayWHhUZNJrZh83scTO7b+jY883sdjP7Yv\/fW\/IdJgAAQH3VsVp6VJyZxv8j6Q0jx+YlfcrdXy7pU\/3fAQAAEKCO1dKjIoNGd\/+MpCdGDl8u6SP9nz8iaV\/G4wIAAGiMfbtndWj\/Ls3OTMskzc5M16oIRpLM3aNPMrtA0ifd\/ZX939fcfWbo8SfdPTBFbWYHJB2QpO3bt1904sSJDIYNAABQX6Ptd8pot2Nmx9y9E\/f83FvuuPthSYclqdPpREeoAAAAE0gSgJUZtAW137nyxnslqdIzj0mrp\/\/NzF4kSf1\/P57dkAAAAOIZBGDdtXW5ng3AFle6mT4nS3Vtv5M0aLxZ0tv7P79d0t9kMxwAAID4kgRgUc9ZXOlqbmFJO+aPaG5hKbNgcnDdbk3b70Smp83sGkmvk7TVzB6VdJWkBUnXmdk7JT0i6cfzHCQAAECQJP0Pxz0nr9Tx6HWDVL39TmTQ6O5vC3no0ozHAgAAMJHzZ6YDZ+7GBWDjnhM2C\/me6+6RlDxwDLrusDq032FHGAAAUFtJ+h+Oe07YLORp91TrHsfNfNal\/Q5BIwAAqK0k\/Q\/HPWfcDGWaYpWw687OTOvo\/J7KB4xSAS13AAAA8rRv9+zEQVfYcw7u3Tl27WHSYpWg69YhJT2MoBEAAFRW0f0UB9d+z3X36HTABihJi1UG1y27oXcaBI0AAKCSymqCPbh21jODSWZEq4Q1jQAAoJLKbILdhL2is8ZMIwAAqKQkPRizVPeZwawx0wgAACopbP1g1ZtgNxVBIwAAqKQkPRiRH9LTAADUTNEVxWVpQsVxkxA0AgBQI2VVFBepLUFx3ZCeBgCgRsqsKC7CICjurq3L9WxQnHT7PmSHoBEAgBopu6I4b00PiuuMoBEAgBppekVx04PiOiNoBACgRppeUVyFoHhxpau5hSXtmD+iuYUlUuN9BI0AANRInXcqiROMlR0Us6YyHNXTAADUTB13Kolb9V12m51xayrrds+zRtAIAAByN0kwVmZQzJrKcKSnAQBA7uoSjFVhTWVVMdMIAAByd\/7MtLoBAWIRwVicZuGDc7pr6zJJPvRYkwqN0iBoBAAAuTu4d+cZaxqlYoKxOGspR89x6ZnAcXYoyGz7TjWp0tNm9i4zu8\/M7jezd2c1KAAA0CxlVX3HaRYedM4gYDw6v+eZgLHtVdWJZxrN7JWSfl7SayQ9LekWMzvi7l\/ManAAAKA5iixwGU43BxleSxlnvSVV1enS098r6U53PylJZvb3kn5M0h9kMTAAAFB9VUzZjqabgwyvpYyz3rIuhTx5SpOevk\/Sa83sBWa2WdIbJb1k9CQzO2Bmy2a2vLq6muLlAABAlVQ1ZRs0KzhsdC1lnIbiVFWnCBrd\/QFJvy\/pdkm3SLpH0qmA8w67e8fdO9u2bUs8UAAAUC1x1guWYdzsX9BayjjrLcveqaYKUlVPu\/uHJH1Ikszs9yQ9msWgAABA9VU1ZRuWbh4UtgSJWm9Z9k41VZAqaDSzF7r742a2XdJ+Sd+fzbAAAEDVldl7cZy82vvUcfvGLKXdEeYGM\/u8pE9I+mV3fzKDMQEAgBqoasq2rPY+TZc2Pf1DWQ0EAIA2qmL1cVxVTtm2fVYwD+wIAwBASeLsVlJ1BGftQdAIAEBJsmwYXecZS9QDQSMAAAmlDdSyqj5uwowlqi9tIQwAAK2URWPrrBpGV7VfIpqFoBEAgASyCNSiqo8XV7qaW1jSjvkjmltYCg1Iq9ovEc1CehoAgASyCNTGVR9PknKuar9ENAtBIwAAAaLWK2YVqIVVH09SJJNXM2tgGEEjACCxplbsRs3yLa509Y1vnjrreVkGapPMZFa5XyKag6ARAJBIkyt2o9Yrjs7qSdKWzVO66k2vyOy9TzqTSb9E5I1CGABAIk2u2B03yxf0viVp83nnZhq0VXWLPrQXM40AgESqVrEblCqXkqVsx83yFfW+STmjaggaAQCJVKliNyhVfvD6eySXNr7lzxyLmz4fV1hy9a3HC3vfpJxRJaSnAQCJVCl9GpQy3jjtzwSMA3HT5\/t2z+rQ\/l2anZmWSZqdmdah\/bu0b\/dspd43UCRmGgEAiVQpfTpJajjuuWGzfFV630CRCBoBAIlVJX0alioPOzetqrxvoEikpwEAtReUMp7aZJo6x844RhoZSI6ZRgBA7YWljIOOMUMIJGPuHn1WRjqdji8vLxf2egAAAAhmZsfcvRP3fGYaAQCV0NQtCYGmIGgEAJyl6AAuyy0JCT6BfFAIAwA4wyCA666ty\/VsALe40s3tNbPakrCMsQNtkSpoNLNfN7P7zew+M7vGzL4tq4EBAMpRxp7SWW3N1+T9sIGyJQ4azWxW0q9J6rj7KyVtknRFVgMDAJSjjD2lw3onTtpTsYixL650NbewpB3zRzS3sMQsJlojbXr6XEnTZnaupM2SHks\/JABAmbIK4CaR1dZ8eY+d9DfaLHHQ6O5dSf9D0iOSviLpKXe\/bfQ8MztgZstmtry6upp8pACAQpSxt\/K4vZ4nkffYSX+jzRL3aTSzLZJukPRWSWuSPi7penf\/q7Dn0KcRAOqhzhXIWY599FphWxWapH9e+K8pRg0Ub9I+jWmCxh+X9AZ3f2f\/95+WdLG7\/1LYcwgaAaBe6hw8pjXaBkjqBYdBf2vOzkzr6PyewsYGZKHI5t6PSLrYzDZLWpd0qSQiQgBoiCx7J9ZRUCradXbgyH7WaIs0axrvknS9pM9Kurd\/rcMZjQsAULKi1+9VrSo5rOLapdRrL4E6SrUjjLtfJemqjMYCAKiQIlvvBM1q\/vq1d2v5xBP6nX27Mn+9OMLWMJKKRluxIwwAIFCRrXfCUsEfvfOR0mYcy6giB6qMoBEAEKjIoGlcKrisdjZZtQECmiJVehoA0FyD4CjP6ulBdfa4Ph557kQTZd\/uWYJEoI+gEQBaKG4rnTyDpqCWNkHy3IkGQHykpwGgZYK2wnv3tXfrwvfdVuj6waB1jKNYQwhUBzONANAyYcHa2vqGDn78Hr3vE\/dr7eRG7s28x6WdTWpdM3Gg6ggaAaDmBqnm7tq6NpnptLtmxwRc44K1jW+5njy5ISn\/Zt60tAHqhfQ0ANTYcKpZkk73t4YdBHzD6eZB8+xJNo\/Ns5k3LW2AeiFoBIAaG7cucDjgGw0uJ5FX9TItbYB6IT0NADUWFdANHo9TdBImz+plWtoA9cFMIwDUWFRAN3g8quhEkmampzS1yc54jHQxgAGCRgCosaB1gQPDAd+44NLVSw3ffdXrdfVbXkW6GEAg0tMAUGPDu7aMq54+uHfn2Ebag5lI0sUAwhA0AkDNxQn0Bo+\/57p7nqmwHsauKwCiEDQCQAON2yZwdMaxSesW426PCGByBI0A0DCjezoHNeluYmAV530DSI6gEQBiynsWK6vrB7XXGfRsHKSymxhERb1vAOkQNAJADHnPYmV5\/bD2Onk16a6Ktr5voCi03AGAGMbNYlXt+mFFLU0vdmnr+waKQtAIoFUG+y\/vmD+iuYWlM\/ZmHifvWawsr9\/WPZ3b+r6BopCeBtAaaVLA589MB+7bnNUsVpbXb3Kxyzhtfd9AUcwD+nXFeqLZTknXDh16maT3uvsfhT2n0+n48vJyotcDgLTmFpYCA7PZmWkdnd8z9rmjAafUm8XKaseUvK8PAKPM7Ji7d+Ken3im0d2PS7qw\/6KbJHUl3ZT0egCQtzQp4LxnscKuL\/WCXWbOAJQtq\/T0pZK+5O4nMroeAGQuaQp4tBXOB956YarALay1zmgrHPoOAqiSrAphrpB0TdADZnbAzJbNbHl1dTWjlwOAyV3yPdtkI8eiCiUGgVt3bV2uZwO3uAU0aa6Xd8U2AEwiddBoZudJukzSx4Med\/fD7t5x9862bdvSvhwAJLK40tUNx7oaXsVtkt580fhG11kHbpNcj76DAKoki\/T0j0j6rLv\/WwbXAoBcBAVrLumOB8dnQJIGbmEp6Emul3fF9ij2bQYwThZB49sUkpoGgCTyCF7iBGtBr5skcBu3FnFm85SePLlx1nNmNk+ddezg3p2BFdV59B1k\/SSAKKnS02a2WdIPS7oxm+EAaLus1xAORO0WEva6l3zPtokbRo9LQYd1OQs6vm\/3rA7t36XZmWmZeq2B8mrBw\/pJAFFSzTS6+0lJL8hoLAAwNnhJEyxFzdqFve4dD67q0P5dE818JklpP7V+9uyjpLMqqvPC+kkAUdgRBkCl5BW8RPVZHPe6kwZuUSntItcpxlX0+kkA9UPQCKBS8gxexgV\/Wb5u1KxmUesUJ1Hk+kkA9ZRVn0YAyMTBvTsnXkNYtdcdtxaxyHWKWY0ZAKQUe08nwd7TAKTo6uik1dNpq65pOQOgTSbde5qgEUChRlu7SL0ZvbSzWnldN+h1CCwBNMGkQSPpaQCFyqu1SxEtY\/JqBwQAdUDQCKBQeVVHF9Eyhl6GANqMoBFAoaKabFftusPoZQigzQgaARQqqEp56hzTyadPacf8Ec0tLCVK9xZRdV1EYAoAVUXQCKBQo61dZqanJJOePLmRap1gES1jymoHBABVQPU0gFLNLSwFNtWenZnW0fk9JYxoPKqnATTFpNXT7AgDlIgApH7rBIvaCxoAqob0NFAS2rf0sE4QAOqBoBEoSd3btyyudDW3sJSqeEVinSAA1AXpaaAkcdOyVUxhj+6+MpgllTTx2AbnV+09AgDORNAIlOT8menAApDhtGyWwVmWxs2SJhkX6wQBoPpITwMliZOWrWoKu27FKwCA9JhpBEoSJy2bZ3CWJu0dZ5YUANAsBI1AiaLSsnkFZ2nT3gf37jzj+RLFKwDQdKSngQrLq7I4bdq7iN1XAADVwkwjUGHjUthp0stBs5fSZGlvilcAoF1SBY1mNiPpg5JeKckl\/ay7\/2MWAwPQExScpUkvL650Zer9gR3FmkQAQJi0M43\/U9It7v4WMztP0uYMxgQgQpqWN1ffejwwYDQpVtq7in0jAQD5Sxw0mtl3SHqtpHdIkrs\/LenpbIYFYJw0VdVh57jizVJWsW8kACB\/aQphXiZpVdL\/NrMVM\/ugmT139CQzO2Bmy2a2vLq6muLlgPrIaou9MGn2aw47ZzbGc6vaNzJvef\/3BIA6SBM0nivp1ZL+1N13S\/qGpPnRk9z9sLt33L2zbdu2FC8H1MNgNq67ti7Xs7NxSQONoIBlXFV1VICTpiK7jU29s\/7vCQB1lSZofFTSo+5+V\/\/369ULIoFWy3I2LixgkRTY8kZSZICTpl1OmhnOumrr7CoAjEq8ptHd\/9XM\/sXMdrr7cUmXSvp8dkMD6inL2bhxAcvR+T1nBXpzC0uxCmSStstpY1PvNs6uAkCQtNXTvyrpo\/3K6Ycl\/Uz6IQH1luUuLpMGLHkHOHG2PhxoSpU1WyYCQE+qoNHd75bUyWgsQCPEnY2LE1RNGrAUEeDEmaVsUpV1G2dXASAI2wgCGYuzZjBuccWkRSt5bTs4qSatA2TLRADoYRtBIAdhs3GD2cWg2cCwtYdSvHRwkvPz0rR1gGyZCAAEjUBhRlO2QYKCqkkDlioEOKwDBIDmIT0NFCQoZTuqTkHVuH6QVUmTAwCyw0wjUJCo1GydgqqoQpeqpMkBANkhaAQKEpaylXrFFXUKqsYVugzeQxXS5ACA7JCeBgoSlrL9o7deGNiou8qaVugCAIhG0AgUpEmtW9q4nSAAtB3paaBATUnZ0vAaANqHoBETa8r2cHG17f3GQaELALQPQSNiW1zp6r\/dfL\/W1jeeOVbn7eHiaNJ2eFlryqwpACAe1jQilkHwNBwwDtR1e7g4mrQdHgAAaRA0IpaoxtRNrZqlShgAgB7S04glKkiatGq2LusE2Q4PAIAeZhoRy7ggadKq2UGqu7u2Ltez6wSHt6GriqK3wxu3NR8AAGUiaEQsQcGTJG3ZPDVxr8E6rRMssrdinYJpAED7kJ5usUlSxFm2WKnbOsGiqoTjbM0HAEBZCBpbKkkrmayCJ9YJBqtbMA0AaBfS0y1VZoq46HWCdcHWfACAKiNobKkyZ7WatAdzlgimAQBVRnq6pcpOEbObyNnYmg8AUGWpgkYz+7Kk\/5B0WtIpd+9kMSjk7+DenWesaZTqM6tVlx6PSRBMAwCqKouZxkvc\/asZXAcFquusVlgBz\/KJJ3THg6u1ei8AANQJ6ekWq+OsVlgBz0fvfETe\/z1OJTgAAJhM2kIYl3SbmR0zswNBJ5jZATNbNrPl1dXVlC+Htgsr1PGR36vaLBwAgLpKO9M45+6PmdkLJd1uZg+6+2eGT3D3w5IOS1Kn0xn9u721mrwuL09hBTxB6G8IAEB2Us00uvtj\/X8\/LukmSa\/JYlBNx3ZxyQW1pbGQc+lvCABAdhIHjWb2XDN73uBnSa+XdF9WA2uyohtrL650NbewpB3zRzS3sFR4cJrl6wf1ePyJi7fT3xAAgJylSU9\/l6SbzGxwnb9291syGVXDFdlYO8l2gVV\/\/aACns5Ln0+6HwCAHCUOGt39YUmvynAsrVFkY+1xs5pFBFVFvX4dK8EBAKgTthEsQZHbxZW5XWAVXh8AAGSDoLEERe69HDZ7WVSRSNmvDwAAskFz74IEtdg5Or8n99cte7vAsl8fAABkg6CxAGUWo5S9XWDZrw8AALJh7sX12+50Or68vFzY61XFhe+7TWvrG2cdn52ZLmS2EQAAYJSZHXP3TtzzWdOYs8WVbmDAKFEMAgAA6oOgMWfjGnZTDAIAAOqCoDFn42YTKQYBAAB1QdCYs7DZxC2bpygGAQAAtUHQmLOwRt5XvekVJY0IAABgcrTcCRDUUzHNPskSLWcAAEC9ETSOyKOnYtP2Rc4yqAYAAPVAenrE1bceP2P3Ekla3zg9tgq6TQZBdXdtXa5ng+rFlW7ZQwMAADkiaBwRVu1MT8UegmoAANqJoHFEWLUzPRV7CKoBAGgngsYRYdXO9FTsIagGAKCdGhs0Lq50NbewpB3zRzS3sBS65m70PEk6tH+XZmemZertD31o\/y4KPfoIqgEAaKdGVk\/HrYAOO+\/Q\/l06Or9n4tfMqqK4ytXJtBACAKCdzN0Le7FOp+PLy8u5v87cwpK6AWvsZmemzwgG454XZTT4lHqzb0lmKLO8FgAAQBgzO+bunbjnNzI9HbdYY5KijnHp7iwriqlOBgAAVdTIoDFusUbc84J6E7772ru1+\/23aXGlm2lFMdXJAACgilIHjWa2ycxWzOyTWQwoC3GLNeKeFzT7J0lPntzQlTfeq5nNU4HjSFJRTHUyAACooixmGt8l6YEMrpOZfbtnY1VAxz1v3Czf+sZpuSuzimKqkwEAQBWlKoQxsxdL+oik35X0G+7+o+POL6oQJomgimWpN8sYVCwzzCR94K0XtqJ6GgAANMOkhTBpg8brJR2S9DxJvxkUNJrZAUkHJGn79u0XnThxIvHr5SWoYnnqHJNM2jgdfX8mrbYGAAAoW2HV02b2o5Ied\/dj485z98Pu3nH3zrZt25K+XK6C1ixufMtjBYykjgEAQBukWdM4J+kyM\/uypI9J2mNmf5XJqAo2aWUyu8UAAIC2SbwjjLtfKelKSTKz16mXnv7JjMZVqPNnpiPXLQ6QigYAAG3UyD6No6L2oQ6qWJ46xzS1yc44RioaAAC0VSZ7T7v7pyV9OotrZS3OPtRh+ykHHSMVDQAA2qiRe08Py2p\/aQAAgCZh7+kRbMsHAACQXuODRrblAwAASK\/xQSPb8gEAAKSXSSFMlYUVuVDQAgAAEF\/jg0apFzgSJAIAACTX+PQ0AAAA0iNoBAAAQCSCRgAAAEQiaAQAAEAkgkYAAABEKnQbQTNblXQi48tulfTVjK\/ZRNynaNyjaNyjeLhP0bhH0bhH8XCfooXdo5e6+7a4Fyk0aMyDmS1Psm9iW3GfonGPonGP4uE+ReMeReMexcN9ipbVPSI9DQAAgEgEjQAAAIjUhKDxcNkDqAnuUzTuUTTuUTzcp2jco2jco3i4T9EyuUe1X9MIAACA\/DVhphEAAAA5I2gEAABApEoHjWb2BjM7bmYPmdl8wOPPMbNr+4\/fZWYXDD12Zf\/4cTPbW+S4ixTjHv2GmX3ezD5nZp8ys5cOPXbazO7u\/3NzsSMvTox79A4zWx26Fz839NjbzeyL\/X\/eXuzIixXjPn1g6B59wczWhh5ry2fpw2b2uJndF\/K4mdn\/6t\/Dz5nZq4cea8VnKcY9+on+vfmcmf2Dmb1q6LEvm9m9\/c\/RcnGjLlaMe\/Q6M3tq6M\/Ue4ceG\/vntEli3KeDQ\/fovv730PP7j7Xls\/QSM7vDzB4ws\/vN7F0B52T3veTulfxH0iZJX5L0MknnSbpH0veNnPNLkv6s\/\/MVkq7t\/\/x9\/fOfI2lH\/zqbyn5PJd2jSyRt7v\/8i4N71P\/962W\/h4rco3dI+uOA5z5f0sP9f2\/p\/7yl7PdU1n0aOf9XJX24TZ+l\/vt8raRXS7ov5PE3Svo7SSbpYkl3tfCzFHWPfmDw3iX9yOAe9X\/\/sqStZb+HCtyj10n6ZMDxif6c1v2fqPs0cu6bJC0N\/d6Wz9KLJL26\/\/PzJH0h4O+4zL6XqjzT+BpJD7n7w+7+tKSPSbp85JzLJX2k\/\/P1ki41M+sf\/5i7f9Pd\/1nSQ\/3rNU3kPXL3O9z9ZP\/XOyW9uOAxli3O5yjMXkm3u\/sT7v6kpNslvSGncZZt0vv0NknXFDKyCnH3z0h6Yswpl0v6v95zp6QZM3uRWvRZirpH7v4P\/XsgtfM7Kc7nKEya77PamfA+tfU76Svu\/tn+z\/8h6QFJsyOnZfa9VOWgcVbSvwz9\/qjOvhHPnOPupyQ9JekFMZ\/bBJO+z3eq938bA99mZstmdqeZ7ctjgBUQ9x69uT9tf72ZvWTC5zZB7PfaX+KwQ9LS0OE2fJbiCLuPbfosTWL0O8kl3WZmx8zsQEljqorvN7N7zOzvzOwV\/WN8jgKY2Wb1gp0bhg637rNkvSV6uyXdNfJQZt9L56YdZI4s4Nhof6Cwc+I8twliv08z+0lJHUn\/eejwdnd\/zMxeJmnJzO519y\/lMM4yxblHn5B0jbt\/08x+Qb3Z6z0xn9sUk7zXKyRd7+6nh4614bMUR9u\/k2Izs0vUCxp\/cOjwXP9z9EJJt5vZg\/3Zprb5rHp7An\/dzN4oaVHSy8XnKMybJB119+FZyVZ9lszs29ULmt\/t7v8++nDAUxJ9L1V5pvFRSS8Z+v3Fkh4LO8fMzpX0nepNZcd5bhPEep9m9l8k\/baky9z9m4Pj7v5Y\/98PS\/q0ev+H0jSR98jdvzZ0X\/5C0kVxn9sgk7zXKzSSBmrJZymOsPvYps9SJDP7T5I+KOlyd\/\/a4PjQ5+hxSTepmcuKIrn7v7v71\/s\/\/62kKTPbKj5HYcZ9JzX+s2RmU+oFjB919xsDTsnse6nKQeM\/SXq5me0ws\/PU+1CMVmXeLGlQ7fMW9RbBev\/4Fdarrt6h3v+h\/b+Cxl2kyHtkZrsl\/bl6AePjQ8e3mNlz+j9vlTQn6fOFjbw4ce7Ri4Z+vUy9NSGSdKuk1\/fv1RZJr+8fa6I4f95kZjvVWzD9j0PH2vJZiuNmST\/dr1a8WNJT7v4VteuzNJaZbZd0o6SfcvcvDB1\/rpk9b\/CzevcosGq26czsu\/vr82Vmr1Hv7+qvKeaf0zYxs+9UL4P2N0PHWvNZ6n9OPiTpAXf\/w5DTMvteqmx62t1PmdmvqPcGNqlXqXm\/mb1f0rK736zejfpLM3tIvRnGK\/rPvd\/MrlPvL65Tkn55JJXWCDHv0dWSvl3Sx\/vfQY+4+2WSvlfSn5vZt9T7Qlpw98b9RR\/zHv2amV2m3mflCfWqqeXuT5jZf1fvi1qS3j+S\/miMmPdJ6i02\/1j\/f84GWvFZkiQzu0a9ytatZvaopKskTUmSu\/+ZpL9Vr1LxIUknJf1M\/7HWfJZi3KP3qrf2\/E\/630mn3L0j6bsk3dQ\/dq6kv3b3Wwp\/AwWIcY\/eIukXzeyUpHVJV\/T\/zAX+OS3hLRQixn2SpB+TdJu7f2Poqa35LKn3P+k\/JeleM7u7f+y3JG2Xsv9eYhtBAAAARKpyehoAAAAVQdAIAACASASNAAAAiETQCAAAgEgEjQAAAIhE0AgAAIBIBI0AAACI9P8BTNA2FtPweOoAAAAASUVORK5CYII=%0A\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudxlab.com\/blog\/backpropagation-from-scratch\/#webpage\",\"url\":\"https:\/\/cloudxlab.com\/blog\/backpropagation-from-scratch\/\",\"name\":\"Coding Backpropagation and Gradient Descent From Scratch without using any libraries | CloudxLab Blog\",\"isPartOf\":{\"@id\":\"https:\/\/cloudxlab.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudxlab.com\/blog\/backpropagation-from-scratch\/#primaryimage\"},\"datePublished\":\"2020-08-25T12:57:09+00:00\",\"dateModified\":\"2021-07-05T04:27:55+00:00\",\"author\":{\"@id\":\"https:\/\/cloudxlab.com\/blog\/#\/schema\/person\/4835f1b3d5000626cb15e9311d748e09\"},\"breadcrumb\":{\"@id\":\"https:\/\/cloudxlab.com\/blog\/backpropagation-from-scratch\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudxlab.com\/blog\/backpropagation-from-scratch\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudxlab.com\/blog\/backpropagation-from-scratch\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudxlab.com\/blog\/\",\"url\":\"https:\/\/cloudxlab.com\/blog\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@id\":\"https:\/\/cloudxlab.com\/blog\/backpropagation-from-scratch\/#webpage\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/cloudxlab.com\/blog\/#\/schema\/person\/4835f1b3d5000626cb15e9311d748e09\",\"name\":\"Sandeep Giri\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/cloudxlab.com\/blog\/#personlogo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1393214840cf7455bb4cba055cb30468?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1393214840cf7455bb4cba055cb30468?s=96&d=mm&r=g\",\"caption\":\"Sandeep Giri\"},\"sameAs\":[\"https:\/\/cloudxlab.com\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"https:\/\/cloudxlab.com\/blog\/wp-json\/wp\/v2\/posts\/3182"}],"collection":[{"href":"https:\/\/cloudxlab.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudxlab.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudxlab.com\/blog\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudxlab.com\/blog\/wp-json\/wp\/v2\/comments?post=3182"}],"version-history":[{"count":10,"href":"https:\/\/cloudxlab.com\/blog\/wp-json\/wp\/v2\/posts\/3182\/revisions"}],"predecessor-version":[{"id":3629,"href":"https:\/\/cloudxlab.com\/blog\/wp-json\/wp\/v2\/posts\/3182\/revisions\/3629"}],"wp:attachment":[{"href":"https:\/\/cloudxlab.com\/blog\/wp-json\/wp\/v2\/media?parent=3182"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudxlab.com\/blog\/wp-json\/wp\/v2\/categories?post=3182"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudxlab.com\/blog\/wp-json\/wp\/v2\/tags?post=3182"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}