diff --git "a/x11_creating_a_multi_layer_perceptron.ipynb" "b/x11_creating_a_multi_layer_perceptron.ipynb" new file mode 100644--- /dev/null +++ "b/x11_creating_a_multi_layer_perceptron.ipynb" @@ -0,0 +1,387 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "code", + "source": [ + "from graphviz import Digraph\n", + "\n", + "def trace(root):\n", + " #Builds a set of all nodes and edges in a graph\n", + " nodes, edges = set(), set()\n", + " def build(v):\n", + " if v not in nodes:\n", + " nodes.add(v)\n", + " for child in v._prev:\n", + " edges.add((child, v))\n", + " build(child)\n", + " build(root)\n", + " return nodes, edges\n", + "\n", + "def draw_dot(root):\n", + " dot = Digraph(format='svg', graph_attr={'rankdir': 'LR'}) #LR == Left to Right\n", + "\n", + " nodes, edges = trace(root)\n", + " for n in nodes:\n", + " uid = str(id(n))\n", + " #For any value in the graph, create a rectangular ('record') node for it\n", + " dot.node(name = uid, label = \"{ %s | data %.4f | grad %.4f }\" % ( n.label, n.data, n.grad), shape='record')\n", + " if n._op:\n", + " #If this value is a result of some operation, then create an op node for it\n", + " dot.node(name = uid + n._op, label=n._op)\n", + " #and connect this node to it\n", + " dot.edge(uid + n._op, uid)\n", + "\n", + " for n1, n2 in edges:\n", + " #Connect n1 to the node of n2\n", + " dot.edge(str(id(n1)), str(id(n2)) + n2._op)\n", + "\n", + " return dot" + ], + "metadata": { + "id": "T0rN8d146jvF" + }, + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "import math" + ], + "metadata": { + "id": "JlYxBvFK0AjA" + }, + "execution_count": 2, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "class Value:\n", + "\n", + " def __init__(self, data, _children=(), _op='', label=''):\n", + " self.data = data\n", + " self.grad = 0.0\n", + " self._backward = lambda: None #Its an empty function by default. This is what will do that gradient calculation at each of the operations.\n", + " self._prev = set(_children)\n", + " self._op = _op\n", + " self.label = label\n", + "\n", + "\n", + " def __repr__(self):\n", + " return f\"Value(data={self.data})\"\n", + "\n", + " def __add__(self, other):\n", + " other = other if isinstance(other, Value) else Value(other)\n", + " out = Value(self.data + other.data, (self, other), '+')\n", + "\n", + " def backward():\n", + " self.grad += 1.0 * out.grad\n", + " other.grad += 1.0 * out.grad\n", + "\n", + " out._backward = backward\n", + " return out\n", + "\n", + " def __mul__(self, other):\n", + " other = other if isinstance(other, Value) else Value(other)\n", + " out = Value(self.data * other.data, (self, other), '*')\n", + "\n", + " def backward():\n", + " self.grad += other.data * out.grad\n", + " other.grad += self.data * out.grad\n", + " out._backward = backward\n", + " return out\n", + "\n", + " def __rmul__(self, other): #other * self\n", + " return self * other\n", + "\n", + " def __truediv__(self, other): #self/other\n", + " return self * other**-1\n", + "\n", + " def __neg__(self):\n", + " return self * -1\n", + "\n", + " def __sub__(self, other): #self - other\n", + " return self + (-other)\n", + "\n", + " def __pow__(self, other):\n", + " assert isinstance(other, (int, float)), \"only supporting int/float powers for now\"\n", + " out = Value(self.data ** other, (self, ), f\"**{other}\")\n", + "\n", + " def backward():\n", + " self.grad += (other * (self.data ** (other - 1))) * out.grad\n", + "\n", + " out._backward = backward\n", + " return out\n", + "\n", + " def tanh(self):\n", + " x = self.data\n", + " t = (math.exp(2*x) - 1)/(math.exp(2*x) + 1)\n", + " out = Value(t, (self, ), 'tanh')\n", + "\n", + " def backward():\n", + " self.grad += 1 - (t**2) * out.grad\n", + "\n", + " out._backward = backward\n", + " return out\n", + "\n", + " def exp(self):\n", + " x = self.data\n", + " out = Value(math.exp(x), (self, ), 'exp') #We merged t and out, into just out\n", + "\n", + " def backward():\n", + " self.grad += out.data * out.grad\n", + "\n", + " out._backward = backward\n", + " return out\n", + "\n", + " def backward(self):\n", + "\n", + " topo = []\n", + " visited = set()\n", + " def build_topo(v):\n", + " if v not in visited:\n", + " visited.add(v)\n", + " for child in v._prev:\n", + " build_topo(child)\n", + " topo.append(v)\n", + "\n", + " build_topo(self)\n", + "\n", + " self.grad = 1.0\n", + " for node in reversed(topo):\n", + " node._backward()" + ], + "metadata": { + "id": "tA0zbyEwFbD5" + }, + "execution_count": 3, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "---------------" + ], + "metadata": { + "id": "m9hy05zbxhLP" + } + }, + { + "cell_type": "code", + "source": [ + "import random" + ], + "metadata": { + "id": "gu3tnJu1Wti5" + }, + "execution_count": 5, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "class Neuron:\n", + "\tdef __init__(self, nin):\n", + "\t\tself.w = [ Value(random.uniform(-1,1)) for _ in range(nin) ]\n", + "\t\tself.b = Value(random.uniform(-1,1))\n", + "\n", + "\tdef __call__(self, x):\n", + "\t\t# (w*x)+b\n", + "\t\tact = sum( (wi*xi for wi,xi in zip(self.w, x)), self.b )\n", + "\t\tout = act.tanh()\n", + "\t\treturn out\n", + "\n", + "class Layer:\n", + "\tdef __init__(self, nin, nout):\n", + "\t\tself.neurons = [Neuron(nin) for _ in range(nout)]\n", + "\n", + "\tdef __call__(self, x):\n", + "\t\touts = [n(x) for n in self.neurons]\n", + "\t\treturn outs\n", + "\n", + "class MLP:\n", + "\tdef __init__(self, nin, nouts):\n", + "\t\tsz = [nin] + nouts\n", + "\t\tself.layers = [ Layer(sz[i], sz[i+1]) for i in range(len(nouts)) ]\n", + "\n", + "\tdef __call__(self, x):\n", + "\t\tfor layer in self.layers:\n", + "\t\t\tx = layer(x)\n", + "\t\treturn x" + ], + "metadata": { + "id": "fjmlJl8RWp5K" + }, + "execution_count": 8, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "x = [2.0, 3.0, -1.0]\n", + "n = MLP(3, [4, 4, 1])\n", + "n(x)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "VbhAb3CkWxoa", + "outputId": "8fbf7da2-1643-444c-e9d8-0255c6bdf537" + }, + "execution_count": 9, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[Value(data=0.6731685486278488)]" + ] + }, + "metadata": {}, + "execution_count": 9 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "Now in the final output, we see it in the form of a list right. \\\n", + "\\\n", + "So just for making this look better, we are adding this one line in the return statement of the layer method where if it is just one value left i.e. if it is the last value, then just return that value directly instead of putting it inside a list." + ], + "metadata": { + "id": "C3VxtKpWXCqU" + } + }, + { + "cell_type": "code", + "source": [ + "class Neuron:\n", + "\tdef __init__(self, nin):\n", + "\t\tself.w = [ Value(random.uniform(-1,1)) for _ in range(nin) ]\n", + "\t\tself.b = Value(random.uniform(-1,1))\n", + "\n", + "\tdef __call__(self, x):\n", + "\t\t# (w*x)+b\n", + "\t\tact = sum( (wi*xi for wi,xi in zip(self.w, x)), self.b )\n", + "\t\tout = act.tanh()\n", + "\t\treturn out\n", + "\n", + "class Layer:\n", + "\tdef __init__(self, nin, nout):\n", + "\t\tself.neurons = [Neuron(nin) for _ in range(nout)]\n", + "\n", + "\tdef __call__(self, x):\n", + "\t\touts = [n(x) for n in self.neurons]\n", + "\t\treturn outs[0] if len(outs)==1 else outs #The New added line for making the output better\n", + "\n", + "class MLP:\n", + "\tdef __init__(self, nin, nouts):\n", + "\t\tsz = [nin] + nouts\n", + "\t\tself.layers = [ Layer(sz[i], sz[i+1]) for i in range(len(nouts)) ]\n", + "\n", + "\tdef __call__(self, x):\n", + "\t\tfor layer in self.layers:\n", + "\t\t\tx = layer(x)\n", + "\t\treturn x" + ], + "metadata": { + "id": "aCXXYNg_W680" + }, + "execution_count": 10, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "x = [2.0, 3.0, -1.0]\n", + "n = MLP(3, [4, 4, 1])\n", + "n(x)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "aG9pKV_RXsO8", + "outputId": "196fd2b5-c838-4ba9-c4b8-e8ff3e773761" + }, + "execution_count": 11, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Value(data=-0.597277746687069)" + ] + }, + "metadata": {}, + "execution_count": 11 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "Like that!\\\n", + "\\\n", + "Now finally, lets make the graph of this" + ], + "metadata": { + "id": "ydnLxp7kXuuJ" + } + }, + { + "cell_type": "code", + "source": [ + "draw_dot(n(x))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "6sPjflG3Xt8J", + "outputId": "1bca9b07-e07b-41b4-8d3f-bfa6676cba42" + }, + "execution_count": 12, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "image/svg+xml": "\n\n\n\n\n\n%3\n\n\n\n139579772657696\n\n \n\ndata -0.6509\n\ngrad 0.0000\n\n\n\n139579772658080+\n\n+\n\n\n\n139579772657696->139579772658080+\n\n\n\n\n\n139579772657696+\n\n+\n\n\n\n139579772657696+->139579772657696\n\n\n\n\n\n139579774107760\n\n \n\ndata -0.2456\n\ngrad 0.0000\n\n\n\n139579772660384*\n\n*\n\n\n\n139579774107760->139579772660384*\n\n\n\n\n\n139579773608064\n\n \n\ndata 0.2590\n\ngrad 0.0000\n\n\n\n139579773609072*\n\n*\n\n\n\n139579773608064->139579773609072*\n\n\n\n\n\n139579773608112\n\n \n\ndata -0.9998\n\ngrad 0.0000\n\n\n\n139579772654624*\n\n*\n\n\n\n139579773608112->139579772654624*\n\n\n\n\n\n139579772649680\n\n \n\ndata -2.3666\n\ngrad 0.0000\n\n\n\n139579772650112+\n\n+\n\n\n\n139579772649680->139579772650112+\n\n\n\n\n\n139579772649680+\n\n+\n\n\n\n139579772649680+->139579772649680\n\n\n\n\n\n139579772657888\n\n \n\ndata 0.3301\n\ngrad 0.0000\n\n\n\n139579772657888->139579772658080+\n\n\n\n\n\n139579772657888*\n\n*\n\n\n\n139579772657888*->139579772657888\n\n\n\n\n\n139579773608256\n\n \n\ndata 0.9504\n\ngrad 0.0000\n\n\n\n139579772656928*\n\n*\n\n\n\n139579773608256->139579772656928*\n\n\n\n\n\n139579772649872\n\n \n\ndata -1.0000\n\ngrad 0.0000\n\n\n\n139579772649920*\n\n*\n\n\n\n139579772649872->139579772649920*\n\n\n\n\n\n139579772658080\n\n \n\ndata -0.3209\n\ngrad 0.0000\n\n\n\n139579772658464+\n\n+\n\n\n\n139579772658080->139579772658464+\n\n\n\n\n\n139579772658080+->139579772658080\n\n\n\n\n\n139579773526432\n\n \n\ndata -1.1474\n\ngrad 0.0000\n\n\n\n139579773529840+\n\n+\n\n\n\n139579773526432->139579773529840+\n\n\n\n\n\n139579773526432+\n\n+\n\n\n\n139579773526432+->139579773526432\n\n\n\n\n\n139579772649920\n\n \n\ndata 0.3201\n\ngrad 0.0000\n\n\n\n139579772649920->139579772650112+\n\n\n\n\n\n139579772649920*->139579772649920\n\n\n\n\n\n139579773608496\n\n \n\ndata 0.8157\n\ngrad 0.0000\n\n\n\n139579772655392+\n\n+\n\n\n\n139579773608496->139579772655392+\n\n\n\n\n\n139579772658272\n\n \n\ndata 0.2362\n\ngrad 0.0000\n\n\n\n139579772658272->139579772658464+\n\n\n\n\n\n139579772658272*\n\n*\n\n\n\n139579772658272*->139579772658272\n\n\n\n\n\n139579772650112\n\n \n\ndata -2.0466\n\ngrad 0.0000\n\n\n\n139579772650208tanh\n\ntanh\n\n\n\n139579772650112->139579772650208tanh\n\n\n\n\n\n139579772650112+->139579772650112\n\n\n\n\n\n139579772650208\n\n \n\ndata -0.9672\n\ngrad 0.0000\n\n\n\n139579772650208->139579772657888*\n\n\n\n\n\n139579772650208->139579773609072*\n\n\n\n\n\n139579772653856*\n\n*\n\n\n\n139579772650208->139579772653856*\n\n\n\n\n\n139579772655584*\n\n*\n\n\n\n139579772650208->139579772655584*\n\n\n\n\n\n139579772650208tanh->139579772650208\n\n\n\n\n\n139579773608688\n\n \n\ndata 0.7062\n\ngrad 0.0000\n\n\n\n139579772652464*\n\n*\n\n\n\n139579773608688->139579772652464*\n\n\n\n\n\n139579772658464\n\n \n\ndata -0.0846\n\ngrad 0.0000\n\n\n\n139579772658848+\n\n+\n\n\n\n139579772658464->139579772658848+\n\n\n\n\n\n139579772658464+->139579772658464\n\n\n\n\n\n139579773608736\n\n \n\ndata -0.6900\n\ngrad 0.0000\n\n\n\n139579773609600*\n\n*\n\n\n\n139579773608736->139579773609600*\n\n\n\n\n\n139579773526864\n\n \n\ndata -0.8456\n\ngrad 0.0000\n\n\n\n139579773529504+\n\n+\n\n\n\n139579773526864->139579773529504+\n\n\n\n\n\n139579773526864*\n\n*\n\n\n\n139579773526864*->139579773526864\n\n\n\n\n\n139579773608832\n\n \n\ndata 0.9827\n\ngrad 0.0000\n\n\n\n139579773523456+\n\n+\n\n\n\n139579773608832->139579773523456+\n\n\n\n\n\n139579773608880\n\n \n\ndata -0.0506\n\ngrad 0.0000\n\n\n\n139579772650976*\n\n*\n\n\n\n139579773608880->139579772650976*\n\n\n\n\n\n139579773608928\n\n \n\ndata 0.0409\n\ngrad 0.0000\n\n\n\n139579773533584*\n\n*\n\n\n\n139579773608928->139579773533584*\n\n\n\n\n\n139579772658656\n\n \n\ndata -0.2128\n\ngrad 0.0000\n\n\n\n139579772658656->139579772658848+\n\n\n\n\n\n139579772658656*\n\n*\n\n\n\n139579772658656*->139579772658656\n\n\n\n\n\n139579772650496\n\n \n\ndata 2.0000\n\ngrad 0.0000\n\n\n\n139579772650544*\n\n*\n\n\n\n139579772650496->139579772650544*\n\n\n\n\n\n139579772650544\n\n \n\ndata 1.7241\n\ngrad 0.0000\n\n\n\n139579772650736+\n\n+\n\n\n\n139579772650544->139579772650736+\n\n\n\n\n\n139579772650544*->139579772650544\n\n\n\n\n\n139579773527152\n\n \n\ndata -3.0621\n\ngrad 0.0000\n\n\n\n139579773527344tanh\n\ntanh\n\n\n\n139579773527152->139579773527344tanh\n\n\n\n\n\n139579773527152+\n\n+\n\n\n\n139579773527152+->139579773527152\n\n\n\n\n\n139579773609072\n\n \n\ndata -0.2505\n\ngrad 0.0000\n\n\n\n139579772656352+\n\n+\n\n\n\n139579773609072->139579772656352+\n\n\n\n\n\n139579773609072*->139579773609072\n\n\n\n\n\n139579772658848\n\n \n\ndata -0.2974\n\ngrad 0.0000\n\n\n\n139579772658944tanh\n\ntanh\n\n\n\n139579772658848->139579772658944tanh\n\n\n\n\n\n139579772658848+->139579772658848\n\n\n\n\n\n139579773609120\n\n \n\ndata -0.8479\n\ngrad 0.0000\n\n\n\n139579773609120->139579773526864*\n\n\n\n\n\n139579772650736\n\n \n\ndata 2.1921\n\ngrad 0.0000\n\n\n\n139579772651168+\n\n+\n\n\n\n139579772650736->139579772651168+\n\n\n\n\n\n139579772650736+->139579772650736\n\n\n\n\n\n139579772658944\n\n \n\ndata -0.2890\n\ngrad 0.0000\n\n\n\n139579772658944->139579772660384*\n\n\n\n\n\n139579772658944tanh->139579772658944\n\n\n\n\n\n139579773601056\n\n \n\ndata 0.1883\n\ngrad 0.0000\n\n\n\n139579772657504*\n\n*\n\n\n\n139579773601056->139579772657504*\n\n\n\n\n\n139579773527344\n\n \n\ndata -0.9956\n\ngrad 0.0000\n\n\n\n139579773527344->139579773609600*\n\n\n\n\n\n139579772653472*\n\n*\n\n\n\n139579773527344->139579772653472*\n\n\n\n\n\n139579772655200*\n\n*\n\n\n\n139579773527344->139579772655200*\n\n\n\n\n\n139579773527344->139579772657504*\n\n\n\n\n\n139579773527344tanh->139579773527344\n\n\n\n\n\n139579772650928\n\n \n\ndata 3.0000\n\ngrad 0.0000\n\n\n\n139579772650928->139579772650976*\n\n\n\n\n\n139579773609408\n\n \n\ndata 0.0155\n\ngrad 0.0000\n\n\n\n139579773611184+\n\n+\n\n\n\n139579773609408->139579773611184+\n\n\n\n\n\n139579772650976\n\n \n\ndata -0.1518\n\ngrad 0.0000\n\n\n\n139579772650976->139579772651168+\n\n\n\n\n\n139579772650976*->139579772650976\n\n\n\n\n\n139579772659232\n\n \n\ndata -0.4885\n\ngrad 0.0000\n\n\n\n139579772659424+\n\n+\n\n\n\n139579772659232->139579772659424+\n\n\n\n\n\n139579772659232*\n\n*\n\n\n\n139579772659232*->139579772659232\n\n\n\n\n\n139579773609600\n\n \n\ndata 0.6870\n\ngrad 0.0000\n\n\n\n139579773609600->139579773611184+\n\n\n\n\n\n139579773609600*->139579773609600\n\n\n\n\n\n139579772651168\n\n \n\ndata 2.0403\n\ngrad 0.0000\n\n\n\n139579772651600+\n\n+\n\n\n\n139579772651168->139579772651600+\n\n\n\n\n\n139579772651168+->139579772651168\n\n\n\n\n\n139579773609696\n\n \n\ndata -0.4417\n\ngrad 0.0000\n\n\n\n139579773522976*\n\n*\n\n\n\n139579773609696->139579773522976*\n\n\n\n\n\n139579772659424\n\n \n\ndata -0.5306\n\ngrad 0.0000\n\n\n\n139579772659808+\n\n+\n\n\n\n139579772659424->139579772659808+\n\n\n\n\n\n139579772659424+->139579772659424\n\n\n\n\n\n139579772651360\n\n \n\ndata -1.0000\n\ngrad 0.0000\n\n\n\n139579772651408*\n\n*\n\n\n\n139579772651360->139579772651408*\n\n\n\n\n\n139579774109536\n\n \n\ndata -0.0368\n\ngrad 0.0000\n\n\n\n139579772660000*\n\n*\n\n\n\n139579774109536->139579772660000*\n\n\n\n\n\n139579772651408\n\n \n\ndata 0.1361\n\ngrad 0.0000\n\n\n\n139579772651408->139579772651600+\n\n\n\n\n\n139579772651408*->139579772651408\n\n\n\n\n\n139579772659616\n\n \n\ndata -0.1947\n\ngrad 0.0000\n\n\n\n139579772659616->139579772659808+\n\n\n\n\n\n139579772659616*\n\n*\n\n\n\n139579772659616*->139579772659616\n\n\n\n\n\n139579772651600\n\n \n\ndata 2.1764\n\ngrad 0.0000\n\n\n\n139579772651696tanh\n\ntanh\n\n\n\n139579772651600->139579772651696tanh\n\n\n\n\n\n139579772651600+->139579772651600\n\n\n\n\n\n139579772659808\n\n \n\ndata -0.7253\n\ngrad 0.0000\n\n\n\n139579772660192+\n\n+\n\n\n\n139579772659808->139579772660192+\n\n\n\n\n\n139579772659808+->139579772659808\n\n\n\n\n\n139579772651696\n\n \n\ndata 0.9746\n\ngrad 0.0000\n\n\n\n139579772651696->139579772658272*\n\n\n\n\n\n139579772654240*\n\n*\n\n\n\n139579772651696->139579772654240*\n\n\n\n\n\n139579772655968*\n\n*\n\n\n\n139579772651696->139579772655968*\n\n\n\n\n\n139579772656544*\n\n*\n\n\n\n139579772651696->139579772656544*\n\n\n\n\n\n139579772651696tanh->139579772651696\n\n\n\n\n\n139579773610272\n\n \n\ndata -0.8220\n\ngrad 0.0000\n\n\n\n139579773529984*\n\n*\n\n\n\n139579773610272->139579773529984*\n\n\n\n\n\n139579772660000\n\n \n\ndata -0.0345\n\ngrad 0.0000\n\n\n\n139579772660000->139579772660192+\n\n\n\n\n\n139579772660000*->139579772660000\n\n\n\n\n\n139579773610368\n\n \n\ndata 0.8620\n\ngrad 0.0000\n\n\n\n139579773610368->139579772650544*\n\n\n\n\n\n139579773610416\n\n \n\ndata 0.3306\n\ngrad 0.0000\n\n\n\n139579773610416->139579772656544*\n\n\n\n\n\n139579772651984\n\n \n\ndata 2.0000\n\ngrad 0.0000\n\n\n\n139579772652032*\n\n*\n\n\n\n139579772651984->139579772652032*\n\n\n\n\n\n139579772660192\n\n \n\ndata -0.7599\n\ngrad 0.0000\n\n\n\n139579772660576+\n\n+\n\n\n\n139579772660192->139579772660576+\n\n\n\n\n\n139579772660192+->139579772660192\n\n\n\n\n\n139579772652032\n\n \n\ndata 1.6090\n\ngrad 0.0000\n\n\n\n139579772652224+\n\n+\n\n\n\n139579772652032->139579772652224+\n\n\n\n\n\n139579772652032*->139579772652032\n\n\n\n\n\n139579772660384\n\n \n\ndata 0.0710\n\ngrad 0.0000\n\n\n\n139579772660384->139579772660576+\n\n\n\n\n\n139579772660384*->139579772660384\n\n\n\n\n\n139579772652224\n\n \n\ndata 1.5157\n\ngrad 0.0000\n\n\n\n139579772652656+\n\n+\n\n\n\n139579772652224->139579772652656+\n\n\n\n\n\n139579772652224+->139579772652224\n\n\n\n\n\n139579773610800\n\n \n\ndata 0.8725\n\ngrad 0.0000\n\n\n\n139579773610800->139579772653856*\n\n\n\n\n\n139579772660576\n\n \n\ndata -0.6889\n\ngrad 0.0000\n\n\n\n139579772660672tanh\n\ntanh\n\n\n\n139579772660576->139579772660672tanh\n\n\n\n\n\n139579772660576+->139579772660576\n\n\n\n\n\n139579772652416\n\n \n\ndata 3.0000\n\ngrad 0.0000\n\n\n\n139579772652416->139579772652464*\n\n\n\n\n\n139579772652464\n\n \n\ndata 2.1187\n\ngrad 0.0000\n\n\n\n139579772652464->139579772652656+\n\n\n\n\n\n139579772652464*->139579772652464\n\n\n\n\n\n139579772660672\n\n \n\ndata -0.5973\n\ngrad 0.0000\n\n\n\n139579772660672tanh->139579772660672\n\n\n\n\n\n139579773610944\n\n \n\ndata 0.3231\n\ngrad 0.0000\n\n\n\n139579772652896*\n\n*\n\n\n\n139579773610944->139579772652896*\n\n\n\n\n\n139579772652656\n\n \n\ndata 3.6344\n\ngrad 0.0000\n\n\n\n139579772653088+\n\n+\n\n\n\n139579772652656->139579772653088+\n\n\n\n\n\n139579772652656+->139579772652656\n\n\n\n\n\n139579773611184\n\n \n\ndata 0.7025\n\ngrad 0.0000\n\n\n\n139579773611184->139579772656352+\n\n\n\n\n\n139579773611184+->139579773611184\n\n\n\n\n\n139579772652848\n\n \n\ndata -1.0000\n\ngrad 0.0000\n\n\n\n139579772652848->139579772652896*\n\n\n\n\n\n139579772652896\n\n \n\ndata -0.3231\n\ngrad 0.0000\n\n\n\n139579772652896->139579772653088+\n\n\n\n\n\n139579772652896*->139579772652896\n\n\n\n\n\n139579773611376\n\n \n\ndata -0.6239\n\ngrad 0.0000\n\n\n\n139579773611376->139579772654240*\n\n\n\n\n\n139579773529504\n\n \n\ndata -1.0316\n\ngrad 0.0000\n\n\n\n139579773607488tanh\n\ntanh\n\n\n\n139579773529504->139579773607488tanh\n\n\n\n\n\n139579773529504+->139579773529504\n\n\n\n\n\n139579773603360\n\n \n\ndata -0.3201\n\ngrad 0.0000\n\n\n\n139579773603360->139579772649920*\n\n\n\n\n\n139579772653088\n\n \n\ndata 3.3113\n\ngrad 0.0000\n\n\n\n139579772653184tanh\n\ntanh\n\n\n\n139579772653088->139579772653184tanh\n\n\n\n\n\n139579772653088+->139579772653088\n\n\n\n\n\n139579772653184\n\n \n\ndata 0.9973\n\ngrad 0.0000\n\n\n\n139579772653184->139579773526864*\n\n\n\n\n\n139579772653184->139579772658656*\n\n\n\n\n\n139579772653184->139579772654624*\n\n\n\n\n\n139579772653184->139579772656928*\n\n\n\n\n\n139579772653184tanh->139579772653184\n\n\n\n\n\n139579773603504\n\n \n\ndata 0.7875\n\ngrad 0.0000\n\n\n\n139579773603504->139579773526432+\n\n\n\n\n\n139579773611712\n\n \n\ndata -0.9674\n\ngrad 0.0000\n\n\n\n139579773530032*\n\n*\n\n\n\n139579773611712->139579773530032*\n\n\n\n\n\n139579773529792\n\n \n\ndata 2.0000\n\ngrad 0.0000\n\n\n\n139579773529792->139579773522976*\n\n\n\n\n\n139579773529840\n\n \n\ndata -3.0212\n\ngrad 0.0000\n\n\n\n139579773529840->139579773527152+\n\n\n\n\n\n139579773529840+->139579773529840\n\n\n\n\n\n139579773603600\n\n \n\ndata 0.8045\n\ngrad 0.0000\n\n\n\n139579773603600->139579772652032*\n\n\n\n\n\n139579773611808\n\n \n\ndata 0.4190\n\ngrad 0.0000\n\n\n\n139579773611808->139579772655200*\n\n\n\n\n\n139579773603648\n\n \n\ndata -0.9366\n\ngrad 0.0000\n\n\n\n139579773603648->139579772655968*\n\n\n\n\n\n139579773529936\n\n \n\ndata -1.0000\n\ngrad 0.0000\n\n\n\n139579773529936->139579773533584*\n\n\n\n\n\n139579773611856\n\n \n\ndata -0.1154\n\ngrad 0.0000\n\n\n\n139579772653664+\n\n+\n\n\n\n139579773611856->139579772653664+\n\n\n\n\n\n139579773529984\n\n \n\ndata -2.4660\n\ngrad 0.0000\n\n\n\n139579773529984->139579772649680+\n\n\n\n\n\n139579773529984*->139579773529984\n\n\n\n\n\n139579772653472\n\n \n\ndata -0.2110\n\ngrad 0.0000\n\n\n\n139579772653472->139579772653664+\n\n\n\n\n\n139579772653472*->139579772653472\n\n\n\n\n\n139579773530032\n\n \n\ndata -1.9348\n\ngrad 0.0000\n\n\n\n139579773530032->139579773526432+\n\n\n\n\n\n139579773530032*->139579773530032\n\n\n\n\n\n139579772653664\n\n \n\ndata -0.3264\n\ngrad 0.0000\n\n\n\n139579772654048+\n\n+\n\n\n\n139579772653664->139579772654048+\n\n\n\n\n\n139579772653664+->139579772653664\n\n\n\n\n\n139579772653856\n\n \n\ndata -0.8438\n\ngrad 0.0000\n\n\n\n139579772653856->139579772654048+\n\n\n\n\n\n139579772653856*->139579772653856\n\n\n\n\n\n139579773522304\n\n \n\ndata -1.8738\n\ngrad 0.0000\n\n\n\n139579773522304->139579773529840+\n\n\n\n\n\n139579773522304*\n\n*\n\n\n\n139579773522304*->139579773522304\n\n\n\n\n\n139579772654048\n\n \n\ndata -1.1703\n\ngrad 0.0000\n\n\n\n139579772654432+\n\n+\n\n\n\n139579772654048->139579772654432+\n\n\n\n\n\n139579772654048+->139579772654048\n\n\n\n\n\n139579773522448\n\n \n\ndata 3.0000\n\ngrad 0.0000\n\n\n\n139579773522448->139579773522304*\n\n\n\n\n\n139579774120528\n\n \n\ndata 0.4923\n\ngrad 0.0000\n\n\n\n139579774120528->139579772659232*\n\n\n\n\n\n139579772654240\n\n \n\ndata -0.6081\n\ngrad 0.0000\n\n\n\n139579772654240->139579772654432+\n\n\n\n\n\n139579772654240*->139579772654240\n\n\n\n\n\n139579772654432\n\n \n\ndata -1.7783\n\ngrad 0.0000\n\n\n\n139579772654816+\n\n+\n\n\n\n139579772654432->139579772654816+\n\n\n\n\n\n139579772654432+->139579772654432\n\n\n\n\n\n139579773522976\n\n \n\ndata -0.8833\n\ngrad 0.0000\n\n\n\n139579773522976->139579773523456+\n\n\n\n\n\n139579773522976*->139579773522976\n\n\n\n\n\n139579772654624\n\n \n\ndata -0.9971\n\ngrad 0.0000\n\n\n\n139579772654624->139579772654816+\n\n\n\n\n\n139579772654624*->139579772654624\n\n\n\n\n\n139579772654816\n\n \n\ndata -2.7754\n\ngrad 0.0000\n\n\n\n139579772654912tanh\n\ntanh\n\n\n\n139579772654816->139579772654912tanh\n\n\n\n\n\n139579772654816+->139579772654816\n\n\n\n\n\n139579772654912\n\n \n\ndata -0.9923\n\ngrad 0.0000\n\n\n\n139579772654912->139579772659232*\n\n\n\n\n\n139579772654912tanh->139579772654912\n\n\n\n\n\n139579773523456\n\n \n\ndata 0.0993\n\ngrad 0.0000\n\n\n\n139579773523456->139579772649680+\n\n\n\n\n\n139579773523456+->139579773523456\n\n\n\n\n\n139579772655200\n\n \n\ndata -0.4172\n\ngrad 0.0000\n\n\n\n139579772655200->139579772655392+\n\n\n\n\n\n139579772655200*->139579772655200\n\n\n\n\n\n139579772655392\n\n \n\ndata 0.3986\n\ngrad 0.0000\n\n\n\n139579772655776+\n\n+\n\n\n\n139579772655392->139579772655776+\n\n\n\n\n\n139579772655392+->139579772655392\n\n\n\n\n\n139579774113712\n\n \n\ndata -0.4635\n\ngrad 0.0000\n\n\n\n139579774113712->139579772657696+\n\n\n\n\n\n139579772655584\n\n \n\ndata 0.3283\n\ngrad 0.0000\n\n\n\n139579772655584->139579772655776+\n\n\n\n\n\n139579772655584*->139579772655584\n\n\n\n\n\n139579772655776\n\n \n\ndata 0.7268\n\ngrad 0.0000\n\n\n\n139579772656160+\n\n+\n\n\n\n139579772655776->139579772656160+\n\n\n\n\n\n139579772655776+->139579772655776\n\n\n\n\n\n139579773606192\n\n \n\ndata -0.6246\n\ngrad 0.0000\n\n\n\n139579773606192->139579773522304*\n\n\n\n\n\n139579772655968\n\n \n\ndata -0.9128\n\ngrad 0.0000\n\n\n\n139579772655968->139579772656160+\n\n\n\n\n\n139579772655968*->139579772655968\n\n\n\n\n\n139579774122352\n\n \n\ndata -0.0421\n\ngrad 0.0000\n\n\n\n139579774122352->139579772659424+\n\n\n\n\n\n139579772656160\n\n \n\ndata -0.1860\n\ngrad 0.0000\n\n\n\n139579772656160->139579773529504+\n\n\n\n\n\n139579772656160+->139579772656160\n\n\n\n\n\n139579773524560\n\n \n\ndata 2.0000\n\ngrad 0.0000\n\n\n\n139579773524560->139579773530032*\n\n\n\n\n\n139579773606528\n\n \n\ndata -0.1361\n\ngrad 0.0000\n\n\n\n139579773606528->139579772651408*\n\n\n\n\n\n139579772656352\n\n \n\ndata 0.4520\n\ngrad 0.0000\n\n\n\n139579772656736+\n\n+\n\n\n\n139579772656352->139579772656736+\n\n\n\n\n\n139579772656352+->139579772656352\n\n\n\n\n\n139579772656544\n\n \n\ndata 0.3222\n\ngrad 0.0000\n\n\n\n139579772656544->139579772656736+\n\n\n\n\n\n139579772656544*->139579772656544\n\n\n\n\n\n139579774122928\n\n \n\ndata 0.2514\n\ngrad 0.0000\n\n\n\n139579774122928->139579772659616*\n\n\n\n\n\n139579773606864\n\n \n\ndata 0.2424\n\ngrad 0.0000\n\n\n\n139579773606864->139579772658272*\n\n\n\n\n\n139579773606912\n\n \n\ndata -0.0933\n\ngrad 0.0000\n\n\n\n139579773606912->139579772652224+\n\n\n\n\n\n139579772656736\n\n \n\ndata 0.7742\n\ngrad 0.0000\n\n\n\n139579772657120+\n\n+\n\n\n\n139579772656736->139579772657120+\n\n\n\n\n\n139579772656736+->139579772656736\n\n\n\n\n\n139579773607152\n\n \n\ndata -0.3413\n\ngrad 0.0000\n\n\n\n139579773607152->139579772657888*\n\n\n\n\n\n139579772656928\n\n \n\ndata 0.9478\n\ngrad 0.0000\n\n\n\n139579772656928->139579772657120+\n\n\n\n\n\n139579772656928*->139579772656928\n\n\n\n\n\n139579773533584\n\n \n\ndata -0.0409\n\ngrad 0.0000\n\n\n\n139579773533584->139579773527152+\n\n\n\n\n\n139579773533584*->139579773533584\n\n\n\n\n\n139579773607392\n\n \n\ndata 0.4680\n\ngrad 0.0000\n\n\n\n139579773607392->139579772650736+\n\n\n\n\n\n139579772657120\n\n \n\ndata 1.7221\n\ngrad 0.0000\n\n\n\n139579772657216tanh\n\ntanh\n\n\n\n139579772657120->139579772657216tanh\n\n\n\n\n\n139579772657120+->139579772657120\n\n\n\n\n\n139579773615648\n\n \n\ndata 0.2119\n\ngrad 0.0000\n\n\n\n139579773615648->139579772653472*\n\n\n\n\n\n139579772657216\n\n \n\ndata 0.9381\n\ngrad 0.0000\n\n\n\n139579772657216->139579772660000*\n\n\n\n\n\n139579772657216tanh->139579772657216\n\n\n\n\n\n139579773607488\n\n \n\ndata -0.7746\n\ngrad 0.0000\n\n\n\n139579773607488->139579772659616*\n\n\n\n\n\n139579773607488tanh->139579773607488\n\n\n\n\n\n139579773533824\n\n \n\ndata 3.0000\n\ngrad 0.0000\n\n\n\n139579773533824->139579773529984*\n\n\n\n\n\n139579774115584\n\n \n\ndata -0.2134\n\ngrad 0.0000\n\n\n\n139579774115584->139579772658656*\n\n\n\n\n\n139579772657504\n\n \n\ndata -0.1875\n\ngrad 0.0000\n\n\n\n139579772657504->139579772657696+\n\n\n\n\n\n139579772657504*->139579772657504\n\n\n\n\n\n139579773607776\n\n \n\ndata -0.3394\n\ngrad 0.0000\n\n\n\n139579773607776->139579772655584*\n\n\n\n\n\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 12 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "**THAT'S AN ENTIRE MLP THAT WE'VE DEFINED NOW!**" + ], + "metadata": { + "id": "o2rQ1fX9YM40" + } + } + ] +} \ No newline at end of file