{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "aac3243f-7d89-48fe-8c14-d58e5bb43636",
   "metadata": {},
   "source": [
    "# `micrograd`: construction d'une bibliothèque de rétropropagation du gradient (partie 2)\n",
    "\n",
    "Ce notebook est dérivé du travail d'[Andrej Karpathy](https://karpathy.ai/) et reprend pas à pas les étapes exposées dans sa première séance de cours sur la construction d'un outil en Python pour le calcul du gradient et sa propagation arrière:\n",
    "\n",
    "[The spelled-out intro to neural networks and backpropagation: building micrograd](https://www.youtube.com/watch?v=VMj-3S1tku0&list=PLAqhIrjkxbuWI23v9cThsA9GvCAUhRvKZ)\n",
    "\n",
    "Voici les ressources originales associées à la vidéo youtube d'Andrej:\n",
    "\n",
    "- micrograd on github: https://github.com/karpathy/micrograd\n",
    "- notebook original: https://github.com/karpathy/nn-zero-to-hero/tree/master/lectures/micrograd\n",
    "- exercices: https://colab.research.google.com/drive/1FPTx1RXtBfc4MaTkf7viZZD4U2F9gtKN?usp=sharing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "9b4fcf50-1497-420d-bf83-509712e79037",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Imports de la librairie standard Python\n",
    "import math\n",
    "# Imports spécifiques (doivent être présent dans l'environnement Python de ce notebook)\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "from graphviz import Digraph"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c9f63afd-ea76-4abc-8b63-c8221cb9d0af",
   "metadata": {},
   "source": [
    "## Amélioration de classe `Value`"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7708f490-1a9d-4aed-b797-59f1429794c0",
   "metadata": {},
   "source": [
    "### Rappels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "fc9472e1-f18b-49c6-a482-4bcfb3f6177e",
   "metadata": {},
   "outputs": [],
   "source": [
    "class Value:\n",
    "  \n",
    "    def __init__(self, data, children=(), op='', label=''):\n",
    "        self.data = data\n",
    "        self._prev = set(children)\n",
    "        self._op = op\n",
    "        self.label = label\n",
    "        self.grad = 0.0\n",
    "        self._backward = lambda: None\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"Value(data={self.data}, label={self.label}, grad={self.grad})\"\n",
    "\n",
    "    def __add__(self, other):\n",
    "        out = self.__class__(self.data + other.data, children=(self, other), op='+')\n",
    "        def _backward():\n",
    "            self.grad = out.grad \n",
    "            other.grad = out.grad\n",
    "        out._backward = _backward\n",
    "        return out\n",
    "\n",
    "    def __mul__(self, other):\n",
    "        out = self.__class__(self.data * other.data, children=(self, other), op='*')\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 tanh(self):\n",
    "        x = self.data\n",
    "        t = (math.exp(2*x) - 1) / (math.exp(2*x) + 1)\n",
    "        out = Value(t, children=(self,), op='tanh')\n",
    "        def _backward():\n",
    "            self.grad = (1 - t**2) * out.grad\n",
    "        out._backward = _backward\n",
    "        return out\n",
    "\n",
    "    def backward(self):\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",
    "        build_topo(self)\n",
    "        self.grad = 1.0\n",
    "        for node in reversed(topo):\n",
    "          node._backward()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "4c76d359-a934-4614-9e9f-d6ec723cd1f0",
   "metadata": {},
   "outputs": [],
   "source": [
    "a = Value(2.0, label='a')\n",
    "b = Value(-3.0, label='b')\n",
    "c = Value(10.0, label='c')\n",
    "e = a * b\n",
    "e.label = 'e'\n",
    "d = e + c\n",
    "d.label = 'd'\n",
    "f = Value(-2.0, label='f')\n",
    "L = d * f\n",
    "L.label = 'L'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "18501ff1-1ad0-4b52-be7b-c69cac8b3640",
   "metadata": {},
   "outputs": [],
   "source": [
    "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, 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 op node of n2\n",
    "    dot.edge(str(id(n1)), str(id(n2)) + n2._op)\n",
    "\n",
    "  return dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "9276f95c-5c4f-4a38-820b-2520cd14d82c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 14.1.0 (20251206.1807)\n",
       " -->\n",
       "<!-- Pages: 1 -->\n",
       "<svg width=\"1140pt\" height=\"154pt\"\n",
       " viewBox=\"0.00 0.00 1140.00 154.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 150)\">\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-150 1135.75,-150 1135.75,4 -4,4\"/>\n",
       "<!-- 4528953360 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>4528953360</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"631.12,-54.5 631.12,-90.5 814.88,-90.5 814.88,-54.5 631.12,-54.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"642.5\" y=\"-67.7\" font-family=\"Times,serif\" font-size=\"14.00\">d</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"653.88,-55 653.88,-90.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"693.75\" y=\"-67.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 4.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"733.62,-55 733.62,-90.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"774.25\" y=\"-67.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4528496416* -->\n",
       "<g id=\"node9\" class=\"node\">\n",
       "<title>4528496416*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"879\" cy=\"-99.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"879\" y=\"-94.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4528953360&#45;&gt;4528496416* -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>4528953360&#45;&gt;4528496416*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M815.36,-88.52C824.5,-90.12 833.36,-91.67 841.4,-93.08\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"840.58,-96.49 851.04,-94.77 841.79,-89.6 840.58,-96.49\"/>\n",
       "</g>\n",
       "<!-- 4528953360+ -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>4528953360+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"567\" cy=\"-72.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"567\" y=\"-67.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4528953360+&#45;&gt;4528953360 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>4528953360+&#45;&gt;4528953360</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M594.47,-72.5C601.87,-72.5 610.38,-72.5 619.43,-72.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"619.17,-76 629.17,-72.5 619.17,-69 619.17,-76\"/>\n",
       "</g>\n",
       "<!-- 4499667472 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>4499667472</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2.62,-55.5 2.62,-91.5 185.62,-91.5 185.62,-55.5 2.62,-55.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"13.62\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">a</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"24.62,-56 24.62,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"64.5\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 2.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"104.38,-56 104.38,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"145\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4528953056* -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>4528953056*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"251.25\" cy=\"-45.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"251.25\" y=\"-40.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4499667472&#45;&gt;4528953056* -->\n",
       "<g id=\"edge9\" class=\"edge\">\n",
       "<title>4499667472&#45;&gt;4528953056*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M185.81,-57.13C195.66,-55.35 205.21,-53.63 213.82,-52.08\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"214.19,-55.57 223.41,-50.34 212.95,-48.68 214.19,-55.57\"/>\n",
       "</g>\n",
       "<!-- 4528172048 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4528172048</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"314.25,-82.5 314.25,-118.5 504,-118.5 504,-82.5 314.25,-82.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"325.25\" y=\"-95.7\" font-family=\"Times,serif\" font-size=\"14.00\">c</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"336.25,-83 336.25,-118.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"379.5\" y=\"-95.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 10.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"422.75,-83 422.75,-118.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"463.38\" y=\"-95.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4528172048&#45;&gt;4528953360+ -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>4528172048&#45;&gt;4528953360+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M504.39,-83.57C513.16,-81.99 521.65,-80.47 529.37,-79.08\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"529.73,-82.57 538.95,-77.36 528.49,-75.68 529.73,-82.57\"/>\n",
       "</g>\n",
       "<!-- 4528171728 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>4528171728</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"0,-0.5 0,-36.5 188.25,-36.5 188.25,-0.5 0,-0.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"11.38\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">b</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"22.75,-1 22.75,-36.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"64.88\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;3.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"107,-1 107,-36.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"147.62\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4528171728&#45;&gt;4528953056* -->\n",
       "<g id=\"edge8\" class=\"edge\">\n",
       "<title>4528171728&#45;&gt;4528953056*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M188.49,-34.75C197.27,-36.28 205.77,-37.76 213.51,-39.1\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"212.66,-42.51 223.11,-40.78 213.86,-35.61 212.66,-42.51\"/>\n",
       "</g>\n",
       "<!-- 4528953056 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>4528953056</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"315.38,-27.5 315.38,-63.5 502.88,-63.5 502.88,-27.5 315.38,-27.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"326.38\" y=\"-40.7\" font-family=\"Times,serif\" font-size=\"14.00\">e</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"337.38,-28 337.38,-63.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"379.5\" y=\"-40.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;6.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"421.62,-28 421.62,-63.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"462.25\" y=\"-40.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4528953056&#45;&gt;4528953360+ -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>4528953056&#45;&gt;4528953360+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M503.05,-61.6C512.25,-63.19 521.16,-64.73 529.24,-66.13\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"528.48,-69.55 538.93,-67.81 529.68,-62.66 528.48,-69.55\"/>\n",
       "</g>\n",
       "<!-- 4528953056*&#45;&gt;4528953056 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>4528953056*&#45;&gt;4528953056</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M278.69,-45.5C286.1,-45.5 294.64,-45.5 303.71,-45.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"303.51,-49 313.51,-45.5 303.51,-42 303.51,-49\"/>\n",
       "</g>\n",
       "<!-- 4528496416 -->\n",
       "<g id=\"node8\" class=\"node\">\n",
       "<title>4528496416</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"942,-81.5 942,-117.5 1131.75,-117.5 1131.75,-81.5 942,-81.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"954.12\" y=\"-94.7\" font-family=\"Times,serif\" font-size=\"14.00\">L</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"966.25,-82 966.25,-117.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1008.38\" y=\"-94.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;8.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1050.5,-82 1050.5,-117.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1091.12\" y=\"-94.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4528496416*&#45;&gt;4528496416 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>4528496416*&#45;&gt;4528496416</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M906.44,-99.5C913.59,-99.5 921.78,-99.5 930.49,-99.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"930.26,-103 940.26,-99.5 930.26,-96 930.26,-103\"/>\n",
       "</g>\n",
       "<!-- 4499450352 -->\n",
       "<g id=\"node10\" class=\"node\">\n",
       "<title>4499450352</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"630,-109.5 630,-145.5 816,-145.5 816,-109.5 630,-109.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"640.25\" y=\"-122.7\" font-family=\"Times,serif\" font-size=\"14.00\">f</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"650.5,-110 650.5,-145.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"692.62\" y=\"-122.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;2.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"734.75,-110 734.75,-145.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"775.38\" y=\"-122.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4499450352&#45;&gt;4528496416* -->\n",
       "<g id=\"edge7\" class=\"edge\">\n",
       "<title>4499450352&#45;&gt;4528496416*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M816.25,-110.73C825.1,-109.12 833.67,-107.56 841.46,-106.14\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"841.93,-109.62 851.15,-104.38 840.68,-102.73 841.93,-109.62\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x10c380050>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "draw_dot(L)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "e883cef2-cd0d-42b6-bc0e-3a924f844853",
   "metadata": {},
   "outputs": [],
   "source": [
    "L.backward()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "b231c653-ec5a-430e-919b-adff3eb1c154",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 14.1.0 (20251206.1807)\n",
       " -->\n",
       "<!-- Pages: 1 -->\n",
       "<svg width=\"1151pt\" height=\"154pt\"\n",
       " viewBox=\"0.00 0.00 1151.00 154.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 150)\">\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-150 1147,-150 1147,4 -4,4\"/>\n",
       "<!-- 4528953360 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>4528953360</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"639,-54.5 639,-90.5 827.25,-90.5 827.25,-54.5 639,-54.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"650.38\" y=\"-67.7\" font-family=\"Times,serif\" font-size=\"14.00\">d</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"661.75,-55 661.75,-90.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"701.62\" y=\"-67.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 4.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"741.5,-55 741.5,-90.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"784.38\" y=\"-67.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad &#45;2.0000</text>\n",
       "</g>\n",
       "<!-- 4528496416* -->\n",
       "<g id=\"node9\" class=\"node\">\n",
       "<title>4528496416*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"890.25\" cy=\"-99.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"890.25\" y=\"-94.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4528953360&#45;&gt;4528496416* -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>4528953360&#45;&gt;4528496416*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M827.49,-88.75C836.27,-90.28 844.77,-91.76 852.51,-93.1\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"851.66,-96.51 862.11,-94.78 852.86,-89.61 851.66,-96.51\"/>\n",
       "</g>\n",
       "<!-- 4528953360+ -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>4528953360+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"576\" cy=\"-72.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"576\" y=\"-67.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4528953360+&#45;&gt;4528953360 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>4528953360+&#45;&gt;4528953360</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M603.31,-72.5C610.49,-72.5 618.72,-72.5 627.47,-72.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"627.29,-76 637.29,-72.5 627.29,-69 627.29,-76\"/>\n",
       "</g>\n",
       "<!-- 4499667472 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>4499667472</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"4.88,-55.5 4.88,-91.5 187.88,-91.5 187.88,-55.5 4.88,-55.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"15.88\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">a</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"26.88,-56 26.88,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"66.75\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 2.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"106.62,-56 106.62,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"147.25\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 6.0000</text>\n",
       "</g>\n",
       "<!-- 4528953056* -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>4528953056*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"255.75\" cy=\"-45.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"255.75\" y=\"-40.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4499667472&#45;&gt;4528953056* -->\n",
       "<g id=\"edge9\" class=\"edge\">\n",
       "<title>4499667472&#45;&gt;4528953056*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M188.01,-57.37C198.67,-55.48 209.04,-53.63 218.3,-51.99\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"218.65,-55.48 227.88,-50.28 217.42,-48.59 218.65,-55.48\"/>\n",
       "</g>\n",
       "<!-- 4528172048 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4528172048</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"318.75,-82.5 318.75,-118.5 513,-118.5 513,-82.5 318.75,-82.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"329.75\" y=\"-95.7\" font-family=\"Times,serif\" font-size=\"14.00\">c</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"340.75,-83 340.75,-118.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"384\" y=\"-95.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 10.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"427.25,-83 427.25,-118.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"470.12\" y=\"-95.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad &#45;2.0000</text>\n",
       "</g>\n",
       "<!-- 4528172048&#45;&gt;4528953360+ -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>4528172048&#45;&gt;4528953360+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M513.41,-83.41C522.21,-81.85 530.7,-80.34 538.42,-78.98\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"538.77,-82.47 548,-77.28 537.55,-75.58 538.77,-82.47\"/>\n",
       "</g>\n",
       "<!-- 4528171728 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>4528171728</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"0,-0.5 0,-36.5 192.75,-36.5 192.75,-0.5 0,-0.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"11.38\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">b</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"22.75,-1 22.75,-36.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"64.88\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;3.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"107,-1 107,-36.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"149.88\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad &#45;4.0000</text>\n",
       "</g>\n",
       "<!-- 4528171728&#45;&gt;4528953056* -->\n",
       "<g id=\"edge8\" class=\"edge\">\n",
       "<title>4528171728&#45;&gt;4528953056*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M193,-34.91C201.81,-36.42 210.32,-37.88 218.06,-39.2\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"217.21,-42.61 227.66,-40.85 218.4,-35.71 217.21,-42.61\"/>\n",
       "</g>\n",
       "<!-- 4528953056 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>4528953056</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"319.88,-27.5 319.88,-63.5 511.88,-63.5 511.88,-27.5 319.88,-27.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"330.88\" y=\"-40.7\" font-family=\"Times,serif\" font-size=\"14.00\">e</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"341.88,-28 341.88,-63.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"384\" y=\"-40.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;6.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"426.12,-28 426.12,-63.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"469\" y=\"-40.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad &#45;2.0000</text>\n",
       "</g>\n",
       "<!-- 4528953056&#45;&gt;4528953360+ -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>4528953056&#45;&gt;4528953360+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M512.05,-61.75C521.28,-63.33 530.2,-64.85 538.29,-66.23\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"537.53,-69.65 547.98,-67.89 538.71,-62.75 537.53,-69.65\"/>\n",
       "</g>\n",
       "<!-- 4528953056*&#45;&gt;4528953056 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>4528953056*&#45;&gt;4528953056</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M283.22,-45.5C290.59,-45.5 299.09,-45.5 308.13,-45.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"307.89,-49 317.89,-45.5 307.89,-42 307.89,-49\"/>\n",
       "</g>\n",
       "<!-- 4528496416 -->\n",
       "<g id=\"node8\" class=\"node\">\n",
       "<title>4528496416</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"953.25,-81.5 953.25,-117.5 1143,-117.5 1143,-81.5 953.25,-81.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"965.38\" y=\"-94.7\" font-family=\"Times,serif\" font-size=\"14.00\">L</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"977.5,-82 977.5,-117.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1019.62\" y=\"-94.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;8.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1061.75,-82 1061.75,-117.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1102.38\" y=\"-94.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 1.0000</text>\n",
       "</g>\n",
       "<!-- 4528496416*&#45;&gt;4528496416 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>4528496416*&#45;&gt;4528496416</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M917.69,-99.5C924.84,-99.5 933.03,-99.5 941.74,-99.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"941.51,-103 951.51,-99.5 941.51,-96 941.51,-103\"/>\n",
       "</g>\n",
       "<!-- 4499450352 -->\n",
       "<g id=\"node10\" class=\"node\">\n",
       "<title>4499450352</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"640.12,-109.5 640.12,-145.5 826.12,-145.5 826.12,-109.5 640.12,-109.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"650.38\" y=\"-122.7\" font-family=\"Times,serif\" font-size=\"14.00\">f</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"660.62,-110 660.62,-145.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"702.75\" y=\"-122.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;2.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"744.88,-110 744.88,-145.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"785.5\" y=\"-122.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 4.0000</text>\n",
       "</g>\n",
       "<!-- 4499450352&#45;&gt;4528496416* -->\n",
       "<g id=\"edge7\" class=\"edge\">\n",
       "<title>4499450352&#45;&gt;4528496416*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M826.6,-110.81C835.76,-109.16 844.62,-107.56 852.67,-106.1\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"853.09,-109.58 862.31,-104.36 851.84,-102.7 853.09,-109.58\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x10de66850>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "draw_dot(L)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f159f11b-9fc3-45b0-9dcd-2dcdf175e52d",
   "metadata": {},
   "source": [
    "### Problème de non-cumul des gradients"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "6a97bb87-1bb2-4bcd-bb31-9ccda55dae56",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 14.1.0 (20251206.1807)\n",
       " -->\n",
       "<!-- Pages: 1 -->\n",
       "<svg width=\"826pt\" height=\"100pt\"\n",
       " viewBox=\"0.00 0.00 826.00 100.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 96)\">\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-96 822.25,-96 822.25,4 -4,4\"/>\n",
       "<!-- 4528971824 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>4528971824</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"318.38,-55.5 318.38,-91.5 505.88,-91.5 505.88,-55.5 318.38,-55.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"329.38\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">e</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"340.38,-56 340.38,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"380.25\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 1.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"420.12,-56 420.12,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"463\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad &#45;6.0000</text>\n",
       "</g>\n",
       "<!-- 4528970384* -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4528970384*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"569.25\" cy=\"-45.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"569.25\" y=\"-40.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4528971824&#45;&gt;4528970384* -->\n",
       "<g id=\"edge7\" class=\"edge\">\n",
       "<title>4528971824&#45;&gt;4528970384*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M506.05,-56.73C514.96,-55.12 523.59,-53.56 531.44,-52.14\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"531.99,-55.6 541.21,-50.38 530.75,-48.71 531.99,-55.6\"/>\n",
       "</g>\n",
       "<!-- 4528971824+ -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>4528971824+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"255\" cy=\"-73.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"255\" y=\"-68.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4528971824+&#45;&gt;4528971824 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>4528971824+&#45;&gt;4528971824</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M282.31,-73.5C289.55,-73.5 297.86,-73.5 306.7,-73.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"306.62,-77 316.62,-73.5 306.62,-70 306.62,-77\"/>\n",
       "</g>\n",
       "<!-- 4528970384 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>4528970384</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"632.25,-27.5 632.25,-63.5 818.25,-63.5 818.25,-27.5 632.25,-27.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"642.5\" y=\"-40.7\" font-family=\"Times,serif\" font-size=\"14.00\">f</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"652.75,-28 652.75,-63.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"694.88\" y=\"-40.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;6.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"737,-28 737,-63.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"777.62\" y=\"-40.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 1.0000</text>\n",
       "</g>\n",
       "<!-- 4528970384*&#45;&gt;4528970384 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>4528970384*&#45;&gt;4528970384</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M596.72,-45.5C603.86,-45.5 612.03,-45.5 620.71,-45.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"620.44,-49 630.44,-45.5 620.44,-42 620.44,-49\"/>\n",
       "</g>\n",
       "<!-- 4528500496 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>4528500496</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"0,-55.5 0,-91.5 192,-91.5 192,-55.5 0,-55.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"11\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">a</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"22,-56 22,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"64.12\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;2.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"106.25,-56 106.25,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"149.12\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad &#45;6.0000</text>\n",
       "</g>\n",
       "<!-- 4528500496&#45;&gt;4528971824+ -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>4528500496&#45;&gt;4528971824+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M192.4,-73.5C200.73,-73.5 208.79,-73.5 216.18,-73.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"216.05,-77 226.05,-73.5 216.05,-70 216.05,-77\"/>\n",
       "</g>\n",
       "<!-- 4529021776* -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>4529021776*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"255\" cy=\"-18.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"255\" y=\"-13.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4528500496&#45;&gt;4529021776* -->\n",
       "<g id=\"edge8\" class=\"edge\">\n",
       "<title>4528500496&#45;&gt;4529021776*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M166.39,-55.06C175.08,-52.38 183.79,-49.5 192,-46.5 201.99,-42.85 212.63,-38.3 222.22,-33.93\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"223.55,-37.17 231.15,-29.78 220.6,-30.83 223.55,-37.17\"/>\n",
       "</g>\n",
       "<!-- 4529021776 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>4529021776</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"318,-0.5 318,-36.5 506.25,-36.5 506.25,-0.5 318,-0.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"329.38\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">d</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"340.75,-1 340.75,-36.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"382.88\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;6.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"425,-1 425,-36.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"465.62\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 1.0000</text>\n",
       "</g>\n",
       "<!-- 4529021776&#45;&gt;4528970384* -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>4529021776&#45;&gt;4528970384*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M506.49,-34.75C515.27,-36.28 523.77,-37.76 531.51,-39.1\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"530.66,-42.51 541.11,-40.78 531.86,-35.61 530.66,-42.51\"/>\n",
       "</g>\n",
       "<!-- 4529021776*&#45;&gt;4529021776 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>4529021776*&#45;&gt;4529021776</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M282.31,-18.5C289.49,-18.5 297.72,-18.5 306.47,-18.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"306.29,-22 316.29,-18.5 306.29,-15 306.29,-22\"/>\n",
       "</g>\n",
       "<!-- 4529021264 -->\n",
       "<g id=\"node8\" class=\"node\">\n",
       "<title>4529021264</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1.88,-0.5 1.88,-36.5 190.12,-36.5 190.12,-0.5 1.88,-0.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"13.25\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">b</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"24.62,-1 24.62,-36.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"64.5\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 3.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"104.38,-1 104.38,-36.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"147.25\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad &#45;6.0000</text>\n",
       "</g>\n",
       "<!-- 4529021264&#45;&gt;4528971824+ -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>4529021264&#45;&gt;4528971824+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M163.53,-36.96C173.14,-39.96 182.87,-43.18 192,-46.5 201.86,-50.08 212.39,-54.46 221.92,-58.63\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"220.23,-61.71 230.79,-62.59 223.09,-55.32 220.23,-61.71\"/>\n",
       "</g>\n",
       "<!-- 4529021264&#45;&gt;4529021776* -->\n",
       "<g id=\"edge9\" class=\"edge\">\n",
       "<title>4529021264&#45;&gt;4529021776*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M190.59,-18.5C199.58,-18.5 208.29,-18.5 216.23,-18.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"216.11,-22 226.11,-18.5 216.11,-15 216.11,-22\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x10de66350>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = Value(-2.0, label='a')\n",
    "b = Value(3.0, label='b')\n",
    "d = a * b    ; d.label = 'd'\n",
    "e = a + b    ; e.label = 'e'\n",
    "f = d * e    ; f.label = 'f'\n",
    "\n",
    "f.backward()\n",
    "\n",
    "draw_dot(f)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cfb483e7-0d21-4486-9c2b-ddc6eb47a9f9",
   "metadata": {},
   "source": [
    "Dans ce graphe un peu particulier, les valeurs des gradients pour $a$ et $b$ sont fausses. En effet, il faut cumuler ces gradients lors du calcul, voir [multivariable case (chain rule)](https://en.wikipedia.org/wiki/Chain_rule#Multivariable_case)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "8026b006-9757-47e4-8dba-5135868f022f",
   "metadata": {},
   "outputs": [],
   "source": [
    "class Value:\n",
    "  \n",
    "    def __init__(self, data, children=(), op='', label=''):\n",
    "        self.data = data\n",
    "        self._prev = set(children)\n",
    "        self._op = op\n",
    "        self.label = label\n",
    "        self.grad = 0.0\n",
    "        self._backward = lambda: None\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"Value(data={self.data}, label={self.label}, grad={self.grad})\"\n",
    "\n",
    "    def __add__(self, other):\n",
    "        out = self.__class__(self.data + other.data, children=(self, other), op='+')\n",
    "        def _backward():\n",
    "            self.grad += out.grad \n",
    "            other.grad += out.grad\n",
    "        out._backward = _backward\n",
    "        return out\n",
    "\n",
    "    def __mul__(self, other):\n",
    "        out = self.__class__(self.data * other.data, children=(self, other), op='*')\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 tanh(self):\n",
    "        x = self.data\n",
    "        t = (math.exp(2*x) - 1) / (math.exp(2*x) + 1)\n",
    "        out = Value(t, children=(self,), op='tanh')\n",
    "        def _backward():\n",
    "            self.grad += (1 - t**2) * out.grad\n",
    "        out._backward = _backward\n",
    "        return out\n",
    "\n",
    "    def backward(self):\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",
    "        build_topo(self)\n",
    "        self.grad = 1.0\n",
    "        for node in reversed(topo):\n",
    "          node._backward()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "24e15b37-7ff3-47ff-a8a8-b5c5eb46f702",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 14.1.0 (20251206.1807)\n",
       " -->\n",
       "<!-- Pages: 1 -->\n",
       "<svg width=\"826pt\" height=\"100pt\"\n",
       " viewBox=\"0.00 0.00 826.00 100.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 96)\">\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-96 822.25,-96 822.25,4 -4,4\"/>\n",
       "<!-- 4528954576 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>4528954576</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"318.38,-55.5 318.38,-91.5 505.88,-91.5 505.88,-55.5 318.38,-55.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"329.38\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">e</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"340.38,-56 340.38,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"380.25\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 1.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"420.12,-56 420.12,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"463\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad &#45;6.0000</text>\n",
       "</g>\n",
       "<!-- 4528953664* -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>4528953664*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"569.25\" cy=\"-45.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"569.25\" y=\"-40.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4528954576&#45;&gt;4528953664* -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>4528954576&#45;&gt;4528953664*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M506.05,-56.73C514.96,-55.12 523.59,-53.56 531.44,-52.14\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"531.99,-55.6 541.21,-50.38 530.75,-48.71 531.99,-55.6\"/>\n",
       "</g>\n",
       "<!-- 4528954576+ -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>4528954576+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"255\" cy=\"-73.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"255\" y=\"-68.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4528954576+&#45;&gt;4528954576 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>4528954576+&#45;&gt;4528954576</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M282.31,-73.5C289.55,-73.5 297.86,-73.5 306.7,-73.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"306.62,-77 316.62,-73.5 306.62,-70 306.62,-77\"/>\n",
       "</g>\n",
       "<!-- 4529081040 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>4529081040</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"0,-55.5 0,-91.5 192,-91.5 192,-55.5 0,-55.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"11\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">a</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"22,-56 22,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"64.12\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;2.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"106.25,-56 106.25,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"149.12\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad &#45;3.0000</text>\n",
       "</g>\n",
       "<!-- 4529081040&#45;&gt;4528954576+ -->\n",
       "<g id=\"edge7\" class=\"edge\">\n",
       "<title>4529081040&#45;&gt;4528954576+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M192.4,-73.5C200.73,-73.5 208.79,-73.5 216.18,-73.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"216.05,-77 226.05,-73.5 216.05,-70 216.05,-77\"/>\n",
       "</g>\n",
       "<!-- 4528173328* -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>4528173328*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"255\" cy=\"-18.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"255\" y=\"-13.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4529081040&#45;&gt;4528173328* -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>4529081040&#45;&gt;4528173328*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M166.39,-55.06C175.08,-52.38 183.79,-49.5 192,-46.5 201.99,-42.85 212.63,-38.3 222.22,-33.93\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"223.55,-37.17 231.15,-29.78 220.6,-30.83 223.55,-37.17\"/>\n",
       "</g>\n",
       "<!-- 4528173328 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4528173328</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"318,-0.5 318,-36.5 506.25,-36.5 506.25,-0.5 318,-0.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"329.38\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">d</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"340.75,-1 340.75,-36.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"382.88\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;6.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"425,-1 425,-36.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"465.62\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 1.0000</text>\n",
       "</g>\n",
       "<!-- 4528173328&#45;&gt;4528953664* -->\n",
       "<g id=\"edge9\" class=\"edge\">\n",
       "<title>4528173328&#45;&gt;4528953664*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M506.49,-34.75C515.27,-36.28 523.77,-37.76 531.51,-39.1\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"530.66,-42.51 541.11,-40.78 531.86,-35.61 530.66,-42.51\"/>\n",
       "</g>\n",
       "<!-- 4528173328*&#45;&gt;4528173328 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>4528173328*&#45;&gt;4528173328</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M282.31,-18.5C289.49,-18.5 297.72,-18.5 306.47,-18.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"306.29,-22 316.29,-18.5 306.29,-15 306.29,-22\"/>\n",
       "</g>\n",
       "<!-- 4528953664 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>4528953664</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"632.25,-27.5 632.25,-63.5 818.25,-63.5 818.25,-27.5 632.25,-27.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"642.5\" y=\"-40.7\" font-family=\"Times,serif\" font-size=\"14.00\">f</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"652.75,-28 652.75,-63.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"694.88\" y=\"-40.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;6.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"737,-28 737,-63.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"777.62\" y=\"-40.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 1.0000</text>\n",
       "</g>\n",
       "<!-- 4528953664*&#45;&gt;4528953664 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>4528953664*&#45;&gt;4528953664</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M596.72,-45.5C603.86,-45.5 612.03,-45.5 620.71,-45.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"620.44,-49 630.44,-45.5 620.44,-42 620.44,-49\"/>\n",
       "</g>\n",
       "<!-- 4528173008 -->\n",
       "<g id=\"node8\" class=\"node\">\n",
       "<title>4528173008</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1.88,-0.5 1.88,-36.5 190.12,-36.5 190.12,-0.5 1.88,-0.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"13.25\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">b</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"24.62,-1 24.62,-36.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"64.5\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 3.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"104.38,-1 104.38,-36.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"147.25\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad &#45;8.0000</text>\n",
       "</g>\n",
       "<!-- 4528173008&#45;&gt;4528954576+ -->\n",
       "<g id=\"edge8\" class=\"edge\">\n",
       "<title>4528173008&#45;&gt;4528954576+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M163.53,-36.96C173.14,-39.96 182.87,-43.18 192,-46.5 201.86,-50.08 212.39,-54.46 221.92,-58.63\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"220.23,-61.71 230.79,-62.59 223.09,-55.32 220.23,-61.71\"/>\n",
       "</g>\n",
       "<!-- 4528173008&#45;&gt;4528173328* -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>4528173008&#45;&gt;4528173328*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M190.59,-18.5C199.58,-18.5 208.29,-18.5 216.23,-18.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"216.11,-22 226.11,-18.5 216.11,-15 216.11,-22\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x10df25f30>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = Value(-2.0, label='a')\n",
    "b = Value(3.0, label='b')\n",
    "d = a * b    ; d.label = 'd'\n",
    "e = a + b    ; e.label = 'e'\n",
    "f = d * e    ; f.label = 'f'\n",
    "f.backward()\n",
    "\n",
    "draw_dot(f)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "74651552-874a-49bb-94cc-78df095fdfe0",
   "metadata": {},
   "source": [
    "### Ajout de nouvelles fonctions"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b0765900-28eb-4a15-bdc8-6f57cd6f0595",
   "metadata": {},
   "source": [
    "#### Support des constantes\n",
    "\n",
    "Pour `__add__` et `__mul__`, on ajoute une instruction permettant d'utiliser des constructions comme `b = a + 1`, en transformant `1` en `Value(1.0)`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "dee8092c-3f47-4e8c-af94-a939a4160fa3",
   "metadata": {},
   "outputs": [],
   "source": [
    "class Value:\n",
    "  \n",
    "    def __init__(self, data, children=(), op='', label=''):\n",
    "        self.data = data\n",
    "        self._prev = set(children)\n",
    "        self._op = op\n",
    "        self.label = label\n",
    "        self.grad = 0.0\n",
    "        self._backward = lambda: None\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"Value(data={self.data}, label={self.label}, grad={self.grad})\"\n",
    "\n",
    "    def __add__(self, other):\n",
    "        other = other if isinstance(other, Value) else Value(other)  # a + 1\n",
    "        out = self.__class__(self.data + other.data, children=(self, other), op='+')\n",
    "        def _backward():\n",
    "            self.grad += out.grad \n",
    "            other.grad += out.grad\n",
    "        out._backward = _backward\n",
    "        return out\n",
    "\n",
    "    def __mul__(self, other):\n",
    "        other = other if isinstance(other, Value) else Value(other)  # a * 1\n",
    "        out = self.__class__(self.data * other.data, children=(self, other), op='*')\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 tanh(self):\n",
    "        x = self.data\n",
    "        t = (math.exp(2*x) - 1) / (math.exp(2*x) + 1)\n",
    "        out = Value(t, children=(self,), op='tanh')\n",
    "        def _backward():\n",
    "            self.grad += (1 - t**2) * out.grad\n",
    "        out._backward = _backward\n",
    "        return out\n",
    "\n",
    "    def backward(self):\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",
    "        build_topo(self)\n",
    "        self.grad = 1.0\n",
    "        for node in reversed(topo):\n",
    "          node._backward()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d6d96b18-a1b1-4253-ba49-b19ef08dee15",
   "metadata": {},
   "source": [
    "#### Commutativité\n",
    "\n",
    "Pour `__add__` et `__mul__`, support indiférencié de `a + 1` ou `1 + a`, en déclarant les méthodes [`__radd__`](https://docs.python.org/3.12/reference/datamodel.html#object.__radd__) et [`__rmul__`](https://docs.python.org/3.12/reference/datamodel.html#object.__rmul__)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "7702d34b-d9f1-4515-adea-6f07eec841bf",
   "metadata": {},
   "outputs": [],
   "source": [
    "def __rmul__(self, other): # other * self\n",
    "    return self * other\n",
    "Value.__rmul__ = __rmul__"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "efc1800f-0ff1-4158-9da3-c871aec99f81",
   "metadata": {},
   "outputs": [],
   "source": [
    "def __radd__(self, other): # other * self\n",
    "    return self + other\n",
    "Value.__radd__ = __radd__"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f71f7daa-816a-4eb6-8267-da096aa73a53",
   "metadata": {},
   "source": [
    "#### Implémentation de l'exponentielle, de la négation, de la puissance et de la division"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "a1dcf23d-9f83-47e3-a612-96a2df00f01d",
   "metadata": {},
   "outputs": [],
   "source": [
    "class Value:\n",
    "  \n",
    "    def __init__(self, data, children=(), op='', label=''):\n",
    "        self.data = data\n",
    "        self._prev = set(children)\n",
    "        self._op = op\n",
    "        self.label = label\n",
    "        self.grad = 0.0\n",
    "        self._backward = lambda: None\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"Value(data={self.data}, label={self.label}, grad={self.grad})\"\n",
    "\n",
    "    def __add__(self, other):\n",
    "        other = other if isinstance(other, Value) else Value(other)  # a + 1\n",
    "        out = self.__class__(self.data + other.data, children=(self, other), op='+')\n",
    "        def _backward():\n",
    "            self.grad += out.grad \n",
    "            other.grad += out.grad\n",
    "        out._backward = _backward\n",
    "        return out\n",
    "\n",
    "    def __mul__(self, other):\n",
    "        other = other if isinstance(other, Value) else Value(other)  # a * 1\n",
    "        out = self.__class__(self.data * other.data, children=(self, other), op='*')\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 tanh(self):\n",
    "        x = self.data\n",
    "        t = (math.exp(2*x) - 1) / (math.exp(2*x) + 1)\n",
    "        out = Value(t, children=(self,), op='tanh')\n",
    "        def _backward():\n",
    "            self.grad += (1 - t**2) * out.grad\n",
    "        out._backward = _backward\n",
    "        return out\n",
    "\n",
    "    def __rmul__(self, other): # other * self\n",
    "        return self * other\n",
    "\n",
    "    def __radd__(self, other): # other * self\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",
    "        def _backward():\n",
    "            self.grad += other * (self.data ** (other - 1)) * out.grad\n",
    "        out._backward = _backward\n",
    "        return out\n",
    "\n",
    "    def __truediv__(self, other): # self / other\n",
    "        return self * other**-1\n",
    "\n",
    "    def __neg__(self): # -self\n",
    "        return self * -1\n",
    "\n",
    "    def __sub__(self, other): # self - other\n",
    "        return self + (-other)\n",
    "  \n",
    "    def exp(self):\n",
    "        x = self.data\n",
    "        out = Value(math.exp(x), (self, ), 'exp')\n",
    "        def _backward():\n",
    "          self.grad += out.data * out.grad\n",
    "        out._backward = _backward\n",
    "        return out\n",
    "\n",
    "    def backward(self):\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",
    "        build_topo(self)\n",
    "        self.grad = 1.0\n",
    "        for node in reversed(topo):\n",
    "          node._backward()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4054b683-b1a3-4ccc-8b6b-02e3a511fb21",
   "metadata": {},
   "source": [
    "#### Exemples d'utilisation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "05d20ec2-5ef3-4d88-a0cd-7226eedcbf23",
   "metadata": {},
   "outputs": [],
   "source": [
    "# inputs x1,x2\n",
    "x1 = Value(2.0, label='x1')\n",
    "x2 = Value(0.0, label='x2')\n",
    "# weights w1,w2\n",
    "w1 = Value(-3.0, label='w1')\n",
    "w2 = Value(1.0, label='w2')\n",
    "# bias of the neuron\n",
    "b = Value(6.8813735870195432, label='b')\n",
    "# x1*w1 + x2*w2 + b\n",
    "x1w1 = x1*w1; x1w1.label = 'x1*w1'\n",
    "x2w2 = x2*w2; x2w2.label = 'x2*w2'\n",
    "x1w1x2w2 = x1w1 + x2w2; x1w1x2w2.label = 'x1*w1 + x2*w2'\n",
    "n = x1w1x2w2 + b; n.label = 'n'\n",
    "o = n.tanh(); o.label = 'o'\n",
    "o.backward()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "a802d359-094a-44d3-90bb-7e4b4ee76330",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 14.1.0 (20251206.1807)\n",
       " -->\n",
       "<!-- Pages: 1 -->\n",
       "<svg width=\"1567pt\" height=\"210pt\"\n",
       " viewBox=\"0.00 0.00 1567.00 210.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 206)\">\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-206 1562.5,-206 1562.5,4 -4,4\"/>\n",
       "<!-- 4528500224 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>4528500224</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"326.25,-55.5 326.25,-91.5 540,-91.5 540,-55.5 326.25,-55.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"352.62\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">x2*w2</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"379,-56 379,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"418.88\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"458.75,-56 458.75,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"499.38\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.5000</text>\n",
       "</g>\n",
       "<!-- 4528499952+ -->\n",
       "<g id=\"node12\" class=\"node\">\n",
       "<title>4528499952+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"605.25\" cy=\"-100.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"605.25\" y=\"-95.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4528500224&#45;&gt;4528499952+ -->\n",
       "<g id=\"edge9\" class=\"edge\">\n",
       "<title>4528500224&#45;&gt;4528499952+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M540.42,-90.37C549.89,-91.87 559,-93.32 567.21,-94.62\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"566.63,-98.07 577.05,-96.18 567.72,-91.16 566.63,-98.07\"/>\n",
       "</g>\n",
       "<!-- 4528500224* -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>4528500224*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"261\" cy=\"-73.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"261\" y=\"-68.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4528500224*&#45;&gt;4528500224 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>4528500224*&#45;&gt;4528500224</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M288.21,-73.5C296,-73.5 305.08,-73.5 314.82,-73.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"314.55,-77 324.55,-73.5 314.55,-70 314.55,-77\"/>\n",
       "</g>\n",
       "<!-- 4528174608 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>4528174608</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"0,-165.5 0,-201.5 198,-201.5 198,-165.5 0,-165.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"16.25\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\">w1</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"32.5,-166 32.5,-201.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"74.62\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;3.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"116.75,-166 116.75,-201.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"157.38\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 1.0000</text>\n",
       "</g>\n",
       "<!-- 4528004784* -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>4528004784*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"261\" cy=\"-128.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"261\" y=\"-123.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4528174608&#45;&gt;4528004784* -->\n",
       "<g id=\"edge11\" class=\"edge\">\n",
       "<title>4528174608&#45;&gt;4528004784*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M172.12,-165.01C180.9,-162.35 189.7,-159.5 198,-156.5 208.09,-152.86 218.82,-148.27 228.47,-143.88\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"229.86,-147.09 237.45,-139.69 226.9,-140.75 229.86,-147.09\"/>\n",
       "</g>\n",
       "<!-- 4529021520 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4529021520</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1065,-109.5 1065,-145.5 1248.75,-145.5 1248.75,-109.5 1065,-109.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1076.38\" y=\"-122.7\" font-family=\"Times,serif\" font-size=\"14.00\">n</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1087.75,-110 1087.75,-145.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1127.62\" y=\"-122.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.8814</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1167.5,-110 1167.5,-145.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1208.12\" y=\"-122.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.5000</text>\n",
       "</g>\n",
       "<!-- 4529022800tanh -->\n",
       "<g id=\"node14\" class=\"node\">\n",
       "<title>4529022800tanh</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1311.75\" cy=\"-127.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1311.75\" y=\"-122.45\" font-family=\"Times,serif\" font-size=\"14.00\">tanh</text>\n",
       "</g>\n",
       "<!-- 4529021520&#45;&gt;4529022800tanh -->\n",
       "<g id=\"edge12\" class=\"edge\">\n",
       "<title>4529021520&#45;&gt;4529022800tanh</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1249.01,-127.5C1257.39,-127.5 1265.52,-127.5 1272.98,-127.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1272.95,-131 1282.95,-127.5 1272.95,-124 1272.95,-131\"/>\n",
       "</g>\n",
       "<!-- 4529021520+ -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>4529021520+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1002\" cy=\"-127.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1002\" y=\"-122.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4529021520+&#45;&gt;4529021520 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>4529021520+&#45;&gt;4529021520</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1029.28,-127.5C1036.42,-127.5 1044.61,-127.5 1053.32,-127.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1053.06,-131 1063.06,-127.5 1053.06,-124 1053.06,-131\"/>\n",
       "</g>\n",
       "<!-- 4528004784 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>4528004784</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"324,-110.5 324,-146.5 542.25,-146.5 542.25,-110.5 324,-110.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"350.38\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\">x1*w1</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"376.75,-111 376.75,-146.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"418.88\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;6.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"461,-111 461,-146.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"501.62\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.5000</text>\n",
       "</g>\n",
       "<!-- 4528004784&#45;&gt;4528499952+ -->\n",
       "<g id=\"edge8\" class=\"edge\">\n",
       "<title>4528004784&#45;&gt;4528499952+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M542.35,-110.69C551.12,-109.24 559.54,-107.86 567.19,-106.6\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"567.72,-110.06 577.02,-104.98 566.58,-103.15 567.72,-110.06\"/>\n",
       "</g>\n",
       "<!-- 4528004784*&#45;&gt;4528004784 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>4528004784*&#45;&gt;4528004784</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M288.21,-128.5C295.29,-128.5 303.43,-128.5 312.17,-128.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"312.01,-132 322.01,-128.5 312.01,-125 312.01,-132\"/>\n",
       "</g>\n",
       "<!-- 4528956096 -->\n",
       "<g id=\"node8\" class=\"node\">\n",
       "<title>4528956096</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2.25,-55.5 2.25,-91.5 195.75,-91.5 195.75,-55.5 2.25,-55.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"18.5\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">w2</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"34.75,-56 34.75,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"74.62\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 1.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"114.5,-56 114.5,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"155.12\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4528956096&#45;&gt;4528500224* -->\n",
       "<g id=\"edge10\" class=\"edge\">\n",
       "<title>4528956096&#45;&gt;4528500224*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M195.84,-73.5C205.14,-73.5 214.15,-73.5 222.32,-73.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"222.13,-77 232.13,-73.5 222.13,-70 222.13,-77\"/>\n",
       "</g>\n",
       "<!-- 4528174288 -->\n",
       "<g id=\"node9\" class=\"node\">\n",
       "<title>4528174288</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"3.75,-0.5 3.75,-36.5 194.25,-36.5 194.25,-0.5 3.75,-0.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"18.5\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">x2</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"33.25,-1 33.25,-36.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"73.12\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"113,-1 113,-36.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"153.62\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.5000</text>\n",
       "</g>\n",
       "<!-- 4528174288&#45;&gt;4528500224* -->\n",
       "<g id=\"edge7\" class=\"edge\">\n",
       "<title>4528174288&#45;&gt;4528500224*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M168.91,-36.94C178.74,-39.93 188.67,-43.15 198,-46.5 207.96,-50.07 218.58,-54.47 228.18,-58.68\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"226.54,-61.78 237.1,-62.67 229.4,-55.39 226.54,-61.78\"/>\n",
       "</g>\n",
       "<!-- 4529082048 -->\n",
       "<g id=\"node10\" class=\"node\">\n",
       "<title>4529082048</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1.5,-110.5 1.5,-146.5 196.5,-146.5 196.5,-110.5 1.5,-110.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"16.25\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\">x1</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"31,-111 31,-146.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"70.88\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 2.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"110.75,-111 110.75,-146.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"153.62\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad &#45;1.5000</text>\n",
       "</g>\n",
       "<!-- 4529082048&#45;&gt;4528004784* -->\n",
       "<g id=\"edge13\" class=\"edge\">\n",
       "<title>4529082048&#45;&gt;4528004784*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M196.76,-128.5C205.77,-128.5 214.47,-128.5 222.4,-128.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"222.25,-132 232.25,-128.5 222.25,-125 222.25,-132\"/>\n",
       "</g>\n",
       "<!-- 4528499952 -->\n",
       "<g id=\"node11\" class=\"node\">\n",
       "<title>4528499952</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"668.25,-82.5 668.25,-118.5 939,-118.5 939,-82.5 668.25,-82.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"720.88\" y=\"-95.7\" font-family=\"Times,serif\" font-size=\"14.00\">x1*w1 + x2*w2</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"773.5,-83 773.5,-118.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"815.62\" y=\"-95.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;6.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"857.75,-83 857.75,-118.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"898.38\" y=\"-95.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.5000</text>\n",
       "</g>\n",
       "<!-- 4528499952&#45;&gt;4529021520+ -->\n",
       "<g id=\"edge14\" class=\"edge\">\n",
       "<title>4528499952&#45;&gt;4529021520+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M939.14,-118.99C947.95,-120.21 956.31,-121.36 963.87,-122.4\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"963.16,-125.83 973.55,-123.73 964.12,-118.9 963.16,-125.83\"/>\n",
       "</g>\n",
       "<!-- 4528499952+&#45;&gt;4528499952 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>4528499952+&#45;&gt;4528499952</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M632.73,-100.5C639.73,-100.5 647.79,-100.5 656.52,-100.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"656.39,-104 666.39,-100.5 656.39,-97 656.39,-104\"/>\n",
       "</g>\n",
       "<!-- 4529022800 -->\n",
       "<g id=\"node13\" class=\"node\">\n",
       "<title>4529022800</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1374.75,-109.5 1374.75,-145.5 1558.5,-145.5 1558.5,-109.5 1374.75,-109.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1386.12\" y=\"-122.7\" font-family=\"Times,serif\" font-size=\"14.00\">o</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1397.5,-110 1397.5,-145.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1437.38\" y=\"-122.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.7071</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1477.25,-110 1477.25,-145.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1517.88\" y=\"-122.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 1.0000</text>\n",
       "</g>\n",
       "<!-- 4529022800tanh&#45;&gt;4529022800 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>4529022800tanh&#45;&gt;4529022800</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1339.03,-127.5C1346.17,-127.5 1354.36,-127.5 1363.07,-127.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1362.81,-131 1372.81,-127.5 1362.81,-124 1362.81,-131\"/>\n",
       "</g>\n",
       "<!-- 4528955792 -->\n",
       "<g id=\"node15\" class=\"node\">\n",
       "<title>4528955792</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"711.75,-137.5 711.75,-173.5 895.5,-173.5 895.5,-137.5 711.75,-137.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"723.12\" y=\"-150.7\" font-family=\"Times,serif\" font-size=\"14.00\">b</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"734.5,-138 734.5,-173.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"774.38\" y=\"-150.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 6.8814</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"814.25,-138 814.25,-173.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"854.88\" y=\"-150.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.5000</text>\n",
       "</g>\n",
       "<!-- 4528955792&#45;&gt;4529021520+ -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>4528955792&#45;&gt;4529021520+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M895.91,-142.48C919.97,-139.05 944.58,-135.55 963.93,-132.79\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"964.34,-136.26 973.75,-131.39 963.35,-129.33 964.34,-136.26\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x10df263f0>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "draw_dot(o)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "d8ff9996-090a-44c8-bfeb-4994da955169",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 14.1.0 (20251206.1807)\n",
       " -->\n",
       "<!-- Pages: 1 -->\n",
       "<svg width=\"2929pt\" height=\"236pt\"\n",
       " viewBox=\"0.00 0.00 2929.00 236.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 232)\">\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-232 2925.25,-232 2925.25,4 -4,4\"/>\n",
       "<!-- 4529006608 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>4529006608</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"326.25,-55.5 326.25,-91.5 540,-91.5 540,-55.5 326.25,-55.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"352.62\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">x2*w2</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"379,-56 379,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"418.88\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"458.75,-56 458.75,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"499.38\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.5000</text>\n",
       "</g>\n",
       "<!-- 4529484240+ -->\n",
       "<g id=\"node10\" class=\"node\">\n",
       "<title>4529484240+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"605.25\" cy=\"-100.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"605.25\" y=\"-95.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4529006608&#45;&gt;4529484240+ -->\n",
       "<g id=\"edge21\" class=\"edge\">\n",
       "<title>4529006608&#45;&gt;4529484240+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M540.42,-90.37C549.89,-91.87 559,-93.32 567.21,-94.62\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"566.63,-98.07 577.05,-96.18 567.72,-91.16 566.63,-98.07\"/>\n",
       "</g>\n",
       "<!-- 4529006608* -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>4529006608*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"261\" cy=\"-73.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"261\" y=\"-68.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4529006608*&#45;&gt;4529006608 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>4529006608*&#45;&gt;4529006608</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M288.21,-73.5C296,-73.5 305.08,-73.5 314.82,-73.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"314.55,-77 324.55,-73.5 314.55,-70 314.55,-77\"/>\n",
       "</g>\n",
       "<!-- 4529439280 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>4529439280</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1066.5,-164.5 1066.5,-200.5 1247.25,-200.5 1247.25,-164.5 1066.5,-164.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1076.38\" y=\"-177.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1086.25,-165 1086.25,-200.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1126.12\" y=\"-177.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 2.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1166,-165 1166,-200.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1206.62\" y=\"-177.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.2203</text>\n",
       "</g>\n",
       "<!-- 4529439440* -->\n",
       "<g id=\"node12\" class=\"node\">\n",
       "<title>4529439440*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1311.75\" cy=\"-154.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1311.75\" y=\"-149.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4529439280&#45;&gt;4529439440* -->\n",
       "<g id=\"edge16\" class=\"edge\">\n",
       "<title>4529439280&#45;&gt;4529439440*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1247.69,-166.05C1256.94,-164.35 1265.93,-162.71 1274.08,-161.22\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1274.67,-164.67 1283.87,-159.42 1273.41,-157.78 1274.67,-164.67\"/>\n",
       "</g>\n",
       "<!-- 4529344592 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4529344592</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1681.5,-81.5 1681.5,-117.5 1866.75,-117.5 1866.75,-81.5 1681.5,-81.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1691.38\" y=\"-94.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1701.25,-82 1701.25,-117.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1741.12\" y=\"-94.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 1.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1781,-82 1781,-117.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1823.88\" y=\"-94.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad &#45;0.1036</text>\n",
       "</g>\n",
       "<!-- 4529343824+ -->\n",
       "<g id=\"node25\" class=\"node\">\n",
       "<title>4529343824+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1929.75\" cy=\"-126.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1929.75\" y=\"-121.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4529344592&#45;&gt;4529343824+ -->\n",
       "<g id=\"edge20\" class=\"edge\">\n",
       "<title>4529344592&#45;&gt;4529343824+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1867.15,-115.67C1875.89,-117.21 1884.36,-118.7 1892.08,-120.05\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1891.2,-123.45 1901.66,-121.74 1892.41,-116.56 1891.2,-123.45\"/>\n",
       "</g>\n",
       "<!-- 4529351120 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>4529351120</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2430.75,-112.5 2430.75,-148.5 2611.5,-148.5 2611.5,-112.5 2430.75,-112.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2440.62\" y=\"-125.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2450.5,-113 2450.5,-148.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2490.38\" y=\"-125.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.1464</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2530.25,-113 2530.25,-148.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2570.88\" y=\"-125.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 4.8284</text>\n",
       "</g>\n",
       "<!-- 4529348944* -->\n",
       "<g id=\"node20\" class=\"node\">\n",
       "<title>4529348944*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2674.5\" cy=\"-153.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2674.5\" y=\"-148.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4529351120&#45;&gt;4529348944* -->\n",
       "<g id=\"edge24\" class=\"edge\">\n",
       "<title>4529351120&#45;&gt;4529348944*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2611.93,-144.15C2620.54,-145.45 2628.89,-146.72 2636.53,-147.88\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2635.96,-151.34 2646.37,-149.38 2637.01,-144.41 2635.96,-151.34\"/>\n",
       "</g>\n",
       "<!-- 4529351120**&#45;1 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>4529351120**&#45;1</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2304.38\" cy=\"-126.5\" rx=\"27.81\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2304.38\" y=\"-121.45\" font-family=\"Times,serif\" font-size=\"14.00\">**&#45;1</text>\n",
       "</g>\n",
       "<!-- 4529351120**&#45;1&#45;&gt;4529351120 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>4529351120**&#45;1&#45;&gt;4529351120</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2332.57,-127.01C2354.68,-127.42 2387.33,-128.03 2419.22,-128.62\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2418.87,-132.11 2428.93,-128.8 2419,-125.12 2418.87,-132.11\"/>\n",
       "</g>\n",
       "<!-- 4529484944 -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>4529484944</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1065,-109.5 1065,-145.5 1248.75,-145.5 1248.75,-109.5 1065,-109.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1076.38\" y=\"-122.7\" font-family=\"Times,serif\" font-size=\"14.00\">n</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1087.75,-110 1087.75,-145.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1127.62\" y=\"-122.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.8814</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1167.5,-110 1167.5,-145.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1208.12\" y=\"-122.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.5000</text>\n",
       "</g>\n",
       "<!-- 4529484944&#45;&gt;4529439440* -->\n",
       "<g id=\"edge27\" class=\"edge\">\n",
       "<title>4529484944&#45;&gt;4529439440*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1249.01,-143.6C1257.84,-145.16 1266.4,-146.67 1274.19,-148.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1273.42,-151.46 1283.88,-149.75 1274.64,-144.57 1273.42,-151.46\"/>\n",
       "</g>\n",
       "<!-- 4529484944+ -->\n",
       "<g id=\"node8\" class=\"node\">\n",
       "<title>4529484944+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1002\" cy=\"-127.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1002\" y=\"-122.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4529484944+&#45;&gt;4529484944 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>4529484944+&#45;&gt;4529484944</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1029.28,-127.5C1036.42,-127.5 1044.61,-127.5 1053.32,-127.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1053.06,-131 1063.06,-127.5 1053.06,-124 1053.06,-131\"/>\n",
       "</g>\n",
       "<!-- 4529484240 -->\n",
       "<g id=\"node9\" class=\"node\">\n",
       "<title>4529484240</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"668.25,-82.5 668.25,-118.5 939,-118.5 939,-82.5 668.25,-82.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"720.88\" y=\"-95.7\" font-family=\"Times,serif\" font-size=\"14.00\">x1*w1 + x2*w2</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"773.5,-83 773.5,-118.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"815.62\" y=\"-95.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;6.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"857.75,-83 857.75,-118.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"898.38\" y=\"-95.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.5000</text>\n",
       "</g>\n",
       "<!-- 4529484240&#45;&gt;4529484944+ -->\n",
       "<g id=\"edge14\" class=\"edge\">\n",
       "<title>4529484240&#45;&gt;4529484944+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M939.14,-118.99C947.95,-120.21 956.31,-121.36 963.87,-122.4\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"963.16,-125.83 973.55,-123.73 964.12,-118.9 963.16,-125.83\"/>\n",
       "</g>\n",
       "<!-- 4529484240+&#45;&gt;4529484240 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>4529484240+&#45;&gt;4529484240</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M632.73,-100.5C639.73,-100.5 647.79,-100.5 656.52,-100.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"656.39,-104 666.39,-100.5 656.39,-97 656.39,-104\"/>\n",
       "</g>\n",
       "<!-- 4529439440 -->\n",
       "<g id=\"node11\" class=\"node\">\n",
       "<title>4529439440</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1374.75,-136.5 1374.75,-172.5 1555.5,-172.5 1555.5,-136.5 1374.75,-136.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1384.62\" y=\"-149.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1394.5,-137 1394.5,-172.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1434.38\" y=\"-149.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 1.7627</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1474.25,-137 1474.25,-172.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1514.88\" y=\"-149.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.2500</text>\n",
       "</g>\n",
       "<!-- 4528092464exp -->\n",
       "<g id=\"node17\" class=\"node\">\n",
       "<title>4528092464exp</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1618.5\" cy=\"-154.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1618.5\" y=\"-149.45\" font-family=\"Times,serif\" font-size=\"14.00\">exp</text>\n",
       "</g>\n",
       "<!-- 4529439440&#45;&gt;4528092464exp -->\n",
       "<g id=\"edge18\" class=\"edge\">\n",
       "<title>4529439440&#45;&gt;4528092464exp</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1555.93,-154.5C1564.27,-154.5 1572.37,-154.5 1579.81,-154.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1579.75,-158 1589.75,-154.5 1579.75,-151 1579.75,-158\"/>\n",
       "</g>\n",
       "<!-- 4529439440*&#45;&gt;4529439440 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>4529439440*&#45;&gt;4529439440</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1339.12,-154.5C1346.26,-154.5 1354.45,-154.5 1363.14,-154.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1362.86,-158 1372.86,-154.5 1362.86,-151 1362.86,-158\"/>\n",
       "</g>\n",
       "<!-- 4529288400 -->\n",
       "<g id=\"node13\" class=\"node\">\n",
       "<title>4529288400</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2.25,-55.5 2.25,-91.5 195.75,-91.5 195.75,-55.5 2.25,-55.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"18.5\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">w2</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"34.75,-56 34.75,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"74.62\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 1.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"114.5,-56 114.5,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"155.12\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4529288400&#45;&gt;4529006608* -->\n",
       "<g id=\"edge23\" class=\"edge\">\n",
       "<title>4529288400&#45;&gt;4529006608*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M195.84,-73.5C205.14,-73.5 214.15,-73.5 222.32,-73.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"222.13,-77 232.13,-73.5 222.13,-70 222.13,-77\"/>\n",
       "</g>\n",
       "<!-- 4529355472 -->\n",
       "<g id=\"node14\" class=\"node\">\n",
       "<title>4529355472</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1681.5,-191.5 1681.5,-227.5 1866.75,-227.5 1866.75,-191.5 1681.5,-191.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1691.38\" y=\"-204.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1701.25,-192 1701.25,-227.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1743.38\" y=\"-204.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;1.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1785.5,-192 1785.5,-227.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1826.12\" y=\"-204.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.1464</text>\n",
       "</g>\n",
       "<!-- 4529343440+ -->\n",
       "<g id=\"node28\" class=\"node\">\n",
       "<title>4529343440+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1929.75\" cy=\"-181.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1929.75\" y=\"-176.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4529355472&#45;&gt;4529343440+ -->\n",
       "<g id=\"edge11\" class=\"edge\">\n",
       "<title>4529355472&#45;&gt;4529343440+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1867.15,-192.73C1875.89,-191.13 1884.36,-189.59 1892.08,-188.18\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1892.45,-191.67 1901.66,-186.44 1891.19,-184.79 1892.45,-191.67\"/>\n",
       "</g>\n",
       "<!-- 4529287952 -->\n",
       "<g id=\"node15\" class=\"node\">\n",
       "<title>4529287952</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"0,-165.5 0,-201.5 198,-201.5 198,-165.5 0,-165.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"16.25\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\">w1</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"32.5,-166 32.5,-201.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"74.62\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;3.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"116.75,-166 116.75,-201.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"157.38\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 1.0000</text>\n",
       "</g>\n",
       "<!-- 4529006416* -->\n",
       "<g id=\"node22\" class=\"node\">\n",
       "<title>4529006416*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"261\" cy=\"-128.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"261\" y=\"-123.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4529287952&#45;&gt;4529006416* -->\n",
       "<g id=\"edge15\" class=\"edge\">\n",
       "<title>4529287952&#45;&gt;4529006416*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M172.12,-165.01C180.9,-162.35 189.7,-159.5 198,-156.5 208.09,-152.86 218.82,-148.27 228.47,-143.88\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"229.86,-147.09 237.45,-139.69 226.9,-140.75 229.86,-147.09\"/>\n",
       "</g>\n",
       "<!-- 4528092464 -->\n",
       "<g id=\"node16\" class=\"node\">\n",
       "<title>4528092464</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1683.75,-136.5 1683.75,-172.5 1864.5,-172.5 1864.5,-136.5 1683.75,-136.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1693.62\" y=\"-149.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1703.5,-137 1703.5,-172.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1743.38\" y=\"-149.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 5.8284</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1783.25,-137 1783.25,-172.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1823.88\" y=\"-149.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0429</text>\n",
       "</g>\n",
       "<!-- 4528092464&#45;&gt;4529343824+ -->\n",
       "<g id=\"edge13\" class=\"edge\">\n",
       "<title>4528092464&#45;&gt;4529343824+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1864.93,-138.13C1874.48,-136.39 1883.76,-134.7 1892.14,-133.17\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1892.64,-136.64 1901.85,-131.4 1891.39,-129.75 1892.64,-136.64\"/>\n",
       "</g>\n",
       "<!-- 4528092464&#45;&gt;4529343440+ -->\n",
       "<g id=\"edge22\" class=\"edge\">\n",
       "<title>4528092464&#45;&gt;4529343440+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1864.93,-170.28C1874.48,-171.96 1883.76,-173.59 1892.14,-175.07\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1891.39,-178.49 1901.85,-176.77 1892.61,-171.59 1891.39,-178.49\"/>\n",
       "</g>\n",
       "<!-- 4528092464exp&#45;&gt;4528092464 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>4528092464exp&#45;&gt;4528092464</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1645.91,-154.5C1653.62,-154.5 1662.54,-154.5 1672.01,-154.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1671.82,-158 1681.82,-154.5 1671.82,-151 1671.82,-158\"/>\n",
       "</g>\n",
       "<!-- 4528971584 -->\n",
       "<g id=\"node18\" class=\"node\">\n",
       "<title>4528971584</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1.5,-110.5 1.5,-146.5 196.5,-146.5 196.5,-110.5 1.5,-110.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"16.25\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\">x1</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"31,-111 31,-146.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"70.88\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 2.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"110.75,-111 110.75,-146.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"153.62\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad &#45;1.5000</text>\n",
       "</g>\n",
       "<!-- 4528971584&#45;&gt;4529006416* -->\n",
       "<g id=\"edge12\" class=\"edge\">\n",
       "<title>4528971584&#45;&gt;4529006416*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M196.76,-128.5C205.77,-128.5 214.47,-128.5 222.4,-128.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"222.25,-132 232.25,-128.5 222.25,-125 222.25,-132\"/>\n",
       "</g>\n",
       "<!-- 4529348944 -->\n",
       "<g id=\"node19\" class=\"node\">\n",
       "<title>4529348944</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2737.5,-135.5 2737.5,-171.5 2921.25,-171.5 2921.25,-135.5 2737.5,-135.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2748.88\" y=\"-148.7\" font-family=\"Times,serif\" font-size=\"14.00\">o</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2760.25,-136 2760.25,-171.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2800.12\" y=\"-148.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.7071</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2840,-136 2840,-171.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2880.62\" y=\"-148.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 1.0000</text>\n",
       "</g>\n",
       "<!-- 4529348944*&#45;&gt;4529348944 -->\n",
       "<g id=\"edge7\" class=\"edge\">\n",
       "<title>4529348944*&#45;&gt;4529348944</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2701.78,-153.5C2708.92,-153.5 2717.11,-153.5 2725.82,-153.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2725.56,-157 2735.56,-153.5 2725.56,-150 2725.56,-157\"/>\n",
       "</g>\n",
       "<!-- 4529006416 -->\n",
       "<g id=\"node21\" class=\"node\">\n",
       "<title>4529006416</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"324,-110.5 324,-146.5 542.25,-146.5 542.25,-110.5 324,-110.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"350.38\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\">x1*w1</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"376.75,-111 376.75,-146.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"418.88\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;6.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"461,-111 461,-146.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"501.62\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.5000</text>\n",
       "</g>\n",
       "<!-- 4529006416&#45;&gt;4529484240+ -->\n",
       "<g id=\"edge19\" class=\"edge\">\n",
       "<title>4529006416&#45;&gt;4529484240+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M542.35,-110.69C551.12,-109.24 559.54,-107.86 567.19,-106.6\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"567.72,-110.06 577.02,-104.98 566.58,-103.15 567.72,-110.06\"/>\n",
       "</g>\n",
       "<!-- 4529006416*&#45;&gt;4529006416 -->\n",
       "<g id=\"edge8\" class=\"edge\">\n",
       "<title>4529006416*&#45;&gt;4529006416</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M288.21,-128.5C295.29,-128.5 303.43,-128.5 312.17,-128.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"312.01,-132 322.01,-128.5 312.01,-125 312.01,-132\"/>\n",
       "</g>\n",
       "<!-- 4530679664 -->\n",
       "<g id=\"node23\" class=\"node\">\n",
       "<title>4530679664</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"711.75,-137.5 711.75,-173.5 895.5,-173.5 895.5,-137.5 711.75,-137.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"723.12\" y=\"-150.7\" font-family=\"Times,serif\" font-size=\"14.00\">b</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"734.5,-138 734.5,-173.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"774.38\" y=\"-150.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 6.8814</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"814.25,-138 814.25,-173.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"854.88\" y=\"-150.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.5000</text>\n",
       "</g>\n",
       "<!-- 4530679664&#45;&gt;4529484944+ -->\n",
       "<g id=\"edge28\" class=\"edge\">\n",
       "<title>4530679664&#45;&gt;4529484944+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M895.91,-142.48C919.97,-139.05 944.58,-135.55 963.93,-132.79\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"964.34,-136.26 973.75,-131.39 963.35,-129.33 964.34,-136.26\"/>\n",
       "</g>\n",
       "<!-- 4529343824 -->\n",
       "<g id=\"node24\" class=\"node\">\n",
       "<title>4529343824</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1992.75,-108.5 1992.75,-144.5 2178,-144.5 2178,-108.5 1992.75,-108.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2002.62\" y=\"-121.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2012.5,-109 2012.5,-144.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2052.38\" y=\"-121.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 6.8284</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2092.25,-109 2092.25,-144.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2135.12\" y=\"-121.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad &#45;0.1036</text>\n",
       "</g>\n",
       "<!-- 4529343824&#45;&gt;4529351120**&#45;1 -->\n",
       "<g id=\"edge25\" class=\"edge\">\n",
       "<title>4529343824&#45;&gt;4529351120**&#45;1</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2178.4,-126.5C2208.64,-126.5 2240.63,-126.5 2264.67,-126.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2264.62,-130 2274.62,-126.5 2264.62,-123 2264.62,-130\"/>\n",
       "</g>\n",
       "<!-- 4529343824+&#45;&gt;4529343824 -->\n",
       "<g id=\"edge9\" class=\"edge\">\n",
       "<title>4529343824+&#45;&gt;4529343824</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1957.16,-126.5C1964.2,-126.5 1972.25,-126.5 1980.8,-126.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1980.79,-130 1990.79,-126.5 1980.79,-123 1980.79,-130\"/>\n",
       "</g>\n",
       "<!-- 4528973744 -->\n",
       "<g id=\"node26\" class=\"node\">\n",
       "<title>4528973744</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"3.75,-0.5 3.75,-36.5 194.25,-36.5 194.25,-0.5 3.75,-0.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"18.5\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">x2</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"33.25,-1 33.25,-36.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"73.12\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"113,-1 113,-36.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"153.62\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.5000</text>\n",
       "</g>\n",
       "<!-- 4528973744&#45;&gt;4529006608* -->\n",
       "<g id=\"edge17\" class=\"edge\">\n",
       "<title>4528973744&#45;&gt;4529006608*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M168.91,-36.94C178.74,-39.93 188.67,-43.15 198,-46.5 207.96,-50.07 218.58,-54.47 228.18,-58.68\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"226.54,-61.78 237.1,-62.67 229.4,-55.39 226.54,-61.78\"/>\n",
       "</g>\n",
       "<!-- 4529343440 -->\n",
       "<g id=\"node27\" class=\"node\">\n",
       "<title>4529343440</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2214,-163.5 2214,-199.5 2394.75,-199.5 2394.75,-163.5 2214,-163.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2223.88\" y=\"-176.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2233.75,-164 2233.75,-199.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2273.62\" y=\"-176.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 4.8284</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2313.5,-164 2313.5,-199.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2354.12\" y=\"-176.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.1464</text>\n",
       "</g>\n",
       "<!-- 4529343440&#45;&gt;4529348944* -->\n",
       "<g id=\"edge26\" class=\"edge\">\n",
       "<title>4529343440&#45;&gt;4529348944*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2395.13,-174.89C2456.15,-170.36 2538.7,-164.17 2611.5,-158.5 2619.38,-157.89 2627.83,-157.21 2635.87,-156.57\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2636.06,-160.06 2645.75,-155.77 2635.5,-153.09 2636.06,-160.06\"/>\n",
       "</g>\n",
       "<!-- 4529343440+&#45;&gt;4529343440 -->\n",
       "<g id=\"edge10\" class=\"edge\">\n",
       "<title>4529343440+&#45;&gt;4529343440</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1957.25,-181.5C2007.51,-181.5 2119.07,-181.5 2202.03,-181.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2202.02,-185 2212.02,-181.5 2202.02,-178 2202.02,-185\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x10df54710>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# inputs x1,x2\n",
    "x1 = Value(2.0, label='x1')\n",
    "x2 = Value(0.0, label='x2')\n",
    "# weights w1,w2\n",
    "w1 = Value(-3.0, label='w1')\n",
    "w2 = Value(1.0, label='w2')\n",
    "# bias of the neuron\n",
    "b = Value(6.8813735870195432, label='b')\n",
    "# x1*w1 + x2*w2 + b\n",
    "x1w1 = x1*w1; x1w1.label = 'x1*w1'\n",
    "x2w2 = x2*w2; x2w2.label = 'x2*w2'\n",
    "x1w1x2w2 = x1w1 + x2w2; x1w1x2w2.label = 'x1*w1 + x2*w2'\n",
    "n = x1w1x2w2 + b; n.label = 'n'\n",
    "# ----\n",
    "e = (2*n).exp()\n",
    "o = (e - 1) / (e + 1)\n",
    "# ----\n",
    "o.label = 'o'\n",
    "o.backward()\n",
    "draw_dot(o)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "344d845f-858b-4011-95e0-d8bfb2c691c6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7071067811865477\n"
     ]
    }
   ],
   "source": [
    "print(o.data)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "71999e0a-66f4-4541-b59a-df1e922f7c2a",
   "metadata": {},
   "source": [
    "#### Expression équivalente avec Pytorch\n",
    "\n",
    "Pour que cette section fonctionne, il est nécessaire que PyTorch soit installé sur la machine faisant tourner Jupyter (`pip install torch`)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "d1f3395d-c610-45f7-9d58-2eb5688cf21c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7071066904050358\n",
      "---\n",
      "x2 0.5000001283844369\n",
      "w2 0.0\n",
      "x1 -1.5000003851533106\n",
      "w1 1.0000002567688737\n"
     ]
    }
   ],
   "source": [
    "import torch\n",
    "x1 = torch.Tensor([2.0]).double()                ; x1.requires_grad = True\n",
    "x2 = torch.Tensor([0.0]).double()                ; x2.requires_grad = True\n",
    "w1 = torch.Tensor([-3.0]).double()               ; w1.requires_grad = True\n",
    "w2 = torch.Tensor([1.0]).double()                ; w2.requires_grad = True\n",
    "b = torch.Tensor([6.8813735870195432]).double()  ; b.requires_grad = True\n",
    "n = x1*w1 + x2*w2 + b\n",
    "o = torch.tanh(n)\n",
    "\n",
    "print(o.data.item())\n",
    "o.backward()\n",
    "\n",
    "print('---')\n",
    "print('x2', x2.grad.item())\n",
    "print('w2', w2.grad.item())\n",
    "print('x1', x1.grad.item())\n",
    "print('w1', w1.grad.item())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "5b8c8cca-1367-4893-9347-4fd3831009b7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([2.], dtype=torch.float64, requires_grad=True)\n"
     ]
    }
   ],
   "source": [
    "print(x1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "d76976b2-a905-4adb-a27f-1b83f4443759",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([-1.5000], dtype=torch.float64)\n"
     ]
    }
   ],
   "source": [
    "print(x1.grad)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "61c56de4-b7cb-4287-ab7c-b9279a4eeea8",
   "metadata": {},
   "source": [
    "# MLP: Multi Layer Perceptron\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ab91f4c8-2c6f-42d9-8f91-48c402811f06",
   "metadata": {},
   "source": [
    "## Modélisation d'un neurone\n",
    "\n",
    "Dessin issu de [\"_neural networks: representation_\"](https://www.jeremyjordan.me/intro-to-neural-networks/) de Jeremy Jordan.\n",
    "\n",
    "![Simple neuron](single_neuron.jpg)\n",
    "\n",
    "Source: <https://www.jeremyjordan.me/content/images/2018/01/single_neuron.jpg>\n",
    "\n",
    "Par défaut, dans la classe `Neuron` ci-dessous, on initialise les poids avec une valeur aléatoire (distribution de probabilité uniforme) comprise entre -1 et 1."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "0039461a-a52c-4599-84dd-f0103abdd35e",
   "metadata": {},
   "outputs": [],
   "source": [
    "import random\n",
    "\n",
    "class Neuron:\n",
    "  \n",
    "    def __init__(self, nin):\n",
    "        self.w = [Value(random.uniform(-1,1), label=f'w{i}') for i in range(nin)]\n",
    "        self.b = Value(random.uniform(-1,1), label='b')\n",
    "  \n",
    "    def __call__(self, x):\n",
    "        # tanh(w * x + b)\n",
    "        act = sum((wi*xi for wi, xi in zip(self.w, x)), self.b)\n",
    "        out = act.tanh()  # Fonction d'activation\n",
    "        out.label = 'out'\n",
    "        return out\n",
    "\n",
    "    def parameters(self):\n",
    "        return self.w + [self.b]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "03a75eb4-8fdb-49d6-9365-9de36f56f232",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Value(data=-0.8514542857879747, label=out, grad=0.0)"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n = Neuron(5)\n",
    "n((0.2,0.2,0.3,0.4,0.5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "9445d1c1-6394-4245-adf3-08bc5fa10ec4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Value(data=-0.8039598110691475, label=w0, grad=0.0),\n",
       " Value(data=0.5874188380995722, label=w1, grad=0.0),\n",
       " Value(data=-0.2589112549460806, label=w2, grad=0.0),\n",
       " Value(data=-0.9122108656376093, label=w3, grad=0.0),\n",
       " Value(data=0.24446900172649078, label=w4, grad=0.0),\n",
       " Value(data=-0.8977855630313485, label=b, grad=0.0)]"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n.parameters()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "bd63319c-97df-44f4-ac10-178d84350b72",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 14.1.0 (20251206.1807)\n",
       " -->\n",
       "<!-- Pages: 1 -->\n",
       "<svg width=\"2440pt\" height=\"375pt\"\n",
       " viewBox=\"0.00 0.00 2440.00 375.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 371)\">\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-371 2436.25,-371 2436.25,4 -4,4\"/>\n",
       "<!-- 4606636240 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>4606636240</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"973.88,-110.5 973.88,-146.5 1159.12,-146.5 1159.12,-110.5 973.88,-110.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"983.75\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"993.62,-111 993.62,-146.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1035.75\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.9411</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1077.88,-111 1077.88,-146.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1118.5\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606636624+ -->\n",
       "<g id=\"node10\" class=\"node\">\n",
       "<title>4606636624+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1228.5\" cy=\"-183.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1228.5\" y=\"-178.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606636240&#45;&gt;4606636624+ -->\n",
       "<g id=\"edge15\" class=\"edge\">\n",
       "<title>4606636240&#45;&gt;4606636624+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1136.41,-146.94C1146.24,-149.93 1156.17,-153.15 1165.5,-156.5 1175.46,-160.07 1186.08,-164.47 1195.68,-168.68\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1194.04,-171.78 1204.6,-172.67 1196.9,-165.39 1194.04,-171.78\"/>\n",
       "</g>\n",
       "<!-- 4606636240+ -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>4606636240+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"904.5\" cy=\"-128.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"904.5\" y=\"-123.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606636240+&#45;&gt;4606636240 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>4606636240+&#45;&gt;4606636240</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M931.92,-128.5C940.77,-128.5 951.25,-128.5 962.38,-128.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"962.17,-132 972.17,-128.5 962.17,-125 962.17,-132\"/>\n",
       "</g>\n",
       "<!-- 4606636368 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>4606636368</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"652.12,-220.5 652.12,-256.5 832.88,-256.5 832.88,-220.5 652.12,-220.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"662\" y=\"-233.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"671.88,-221 671.88,-256.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"711.75\" y=\"-233.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.3000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"751.62,-221 751.62,-256.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"792.25\" y=\"-233.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606636496* -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>4606636496*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"904.5\" cy=\"-183.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"904.5\" y=\"-178.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606636368&#45;&gt;4606636496* -->\n",
       "<g id=\"edge18\" class=\"edge\">\n",
       "<title>4606636368&#45;&gt;4606636496*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M815.62,-220.01C824.4,-217.35 833.2,-214.5 841.5,-211.5 851.59,-207.86 862.32,-203.27 871.97,-198.88\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"873.36,-202.09 880.95,-194.69 870.4,-195.75 873.36,-202.09\"/>\n",
       "</g>\n",
       "<!-- 4606632272 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4606632272</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"324,-55.5 324,-91.5 517.5,-91.5 517.5,-55.5 324,-55.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"340.25\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">w1</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"356.5,-56 356.5,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"396.38\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.5874</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"436.25,-56 436.25,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"476.88\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606635984* -->\n",
       "<g id=\"node33\" class=\"node\">\n",
       "<title>4606635984*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"580.5\" cy=\"-73.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"580.5\" y=\"-68.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606632272&#45;&gt;4606635984* -->\n",
       "<g id=\"edge12\" class=\"edge\">\n",
       "<title>4606632272&#45;&gt;4606635984*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M517.61,-73.5C526.06,-73.5 534.23,-73.5 541.73,-73.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"541.73,-77 551.73,-73.5 541.73,-70 541.73,-77\"/>\n",
       "</g>\n",
       "<!-- 4606632400 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>4606632400</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"643.5,-165.5 643.5,-201.5 841.5,-201.5 841.5,-165.5 643.5,-165.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"659.75\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\">w2</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"676,-166 676,-201.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"718.12\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.2589</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"760.25,-166 760.25,-201.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"800.88\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606632400&#45;&gt;4606636496* -->\n",
       "<g id=\"edge29\" class=\"edge\">\n",
       "<title>4606632400&#45;&gt;4606636496*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M841.64,-183.5C850.11,-183.5 858.3,-183.5 865.79,-183.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"865.79,-187 875.79,-183.5 865.79,-180 865.79,-187\"/>\n",
       "</g>\n",
       "<!-- 4606636496 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>4606636496</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"973.88,-165.5 973.88,-201.5 1159.12,-201.5 1159.12,-165.5 973.88,-165.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"983.75\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"993.62,-166 993.62,-201.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1035.75\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.0777</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1077.88,-166 1077.88,-201.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1118.5\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606636496&#45;&gt;4606636624+ -->\n",
       "<g id=\"edge32\" class=\"edge\">\n",
       "<title>4606636496&#45;&gt;4606636624+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1159.18,-183.5C1169.98,-183.5 1180.49,-183.5 1189.9,-183.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1189.66,-187 1199.66,-183.5 1189.66,-180 1189.66,-187\"/>\n",
       "</g>\n",
       "<!-- 4606636496*&#45;&gt;4606636496 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>4606636496*&#45;&gt;4606636496</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M931.92,-183.5C940.77,-183.5 951.25,-183.5 962.38,-183.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"962.17,-187 972.17,-183.5 962.17,-180 962.17,-187\"/>\n",
       "</g>\n",
       "<!-- 4606632528 -->\n",
       "<g id=\"node8\" class=\"node\">\n",
       "<title>4606632528</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"967.5,-275.5 967.5,-311.5 1165.5,-311.5 1165.5,-275.5 967.5,-275.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"983.75\" y=\"-288.7\" font-family=\"Times,serif\" font-size=\"14.00\">w3</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1000,-276 1000,-311.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1042.12\" y=\"-288.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.9122</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1084.25,-276 1084.25,-311.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1124.88\" y=\"-288.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606636880* -->\n",
       "<g id=\"node16\" class=\"node\">\n",
       "<title>4606636880*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1228.5\" cy=\"-238.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1228.5\" y=\"-233.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606632528&#45;&gt;4606636880* -->\n",
       "<g id=\"edge17\" class=\"edge\">\n",
       "<title>4606632528&#45;&gt;4606636880*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1139.62,-275.01C1148.4,-272.35 1157.2,-269.5 1165.5,-266.5 1175.59,-262.86 1186.32,-258.27 1195.97,-253.88\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1197.36,-257.09 1204.95,-249.69 1194.4,-250.75 1197.36,-257.09\"/>\n",
       "</g>\n",
       "<!-- 4606636624 -->\n",
       "<g id=\"node9\" class=\"node\">\n",
       "<title>4606636624</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1295.62,-165.5 1295.62,-201.5 1480.88,-201.5 1480.88,-165.5 1295.62,-165.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1305.5\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1315.38,-166 1315.38,-201.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1357.5\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;1.0188</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1399.62,-166 1399.62,-201.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1440.25\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606637008+ -->\n",
       "<g id=\"node19\" class=\"node\">\n",
       "<title>4606637008+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1548\" cy=\"-238.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1548\" y=\"-233.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606636624&#45;&gt;4606637008+ -->\n",
       "<g id=\"edge23\" class=\"edge\">\n",
       "<title>4606636624&#45;&gt;4606637008+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1456.3,-201.94C1466,-204.94 1475.8,-208.17 1485,-211.5 1494.86,-215.07 1505.4,-219.44 1514.93,-223.62\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1513.24,-226.69 1523.8,-227.58 1516.09,-220.3 1513.24,-226.69\"/>\n",
       "</g>\n",
       "<!-- 4606636624+&#45;&gt;4606636624 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>4606636624+&#45;&gt;4606636624</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1255.9,-183.5C1264.15,-183.5 1273.79,-183.5 1284.05,-183.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1283.86,-187 1293.86,-183.5 1283.86,-180 1283.86,-187\"/>\n",
       "</g>\n",
       "<!-- 4606630480 -->\n",
       "<g id=\"node11\" class=\"node\">\n",
       "<title>4606630480</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"328.12,-165.5 328.12,-201.5 513.38,-201.5 513.38,-165.5 328.12,-165.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"338\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"347.88,-166 347.88,-201.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"390\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.1608</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"432.12,-166 432.12,-201.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"472.75\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606629712+ -->\n",
       "<g id=\"node31\" class=\"node\">\n",
       "<title>4606629712+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"580.5\" cy=\"-128.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"580.5\" y=\"-123.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606630480&#45;&gt;4606629712+ -->\n",
       "<g id=\"edge19\" class=\"edge\">\n",
       "<title>4606630480&#45;&gt;4606629712+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M491.95,-165.01C500.62,-162.35 509.31,-159.49 517.5,-156.5 527.5,-152.86 538.14,-148.31 547.73,-143.95\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"549.06,-147.19 556.65,-139.79 546.11,-140.84 549.06,-147.19\"/>\n",
       "</g>\n",
       "<!-- 4606630480* -->\n",
       "<g id=\"node12\" class=\"node\">\n",
       "<title>4606630480*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"261\" cy=\"-183.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"261\" y=\"-178.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606630480*&#45;&gt;4606630480 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>4606630480*&#45;&gt;4606630480</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M288.4,-183.5C296.65,-183.5 306.29,-183.5 316.55,-183.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"316.36,-187 326.36,-183.5 316.36,-180 316.36,-187\"/>\n",
       "</g>\n",
       "<!-- 4606632656 -->\n",
       "<g id=\"node13\" class=\"node\">\n",
       "<title>4606632656</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1291.5,-330.5 1291.5,-366.5 1485,-366.5 1485,-330.5 1291.5,-330.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1307.75\" y=\"-343.7\" font-family=\"Times,serif\" font-size=\"14.00\">w4</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1324,-331 1324,-366.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1363.88\" y=\"-343.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.2445</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1403.75,-331 1403.75,-366.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1444.38\" y=\"-343.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606637264* -->\n",
       "<g id=\"node22\" class=\"node\">\n",
       "<title>4606637264*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1548\" cy=\"-293.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1548\" y=\"-288.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606632656&#45;&gt;4606637264* -->\n",
       "<g id=\"edge30\" class=\"edge\">\n",
       "<title>4606632656&#45;&gt;4606637264*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1459.45,-330.01C1468.12,-327.35 1476.81,-324.49 1485,-321.5 1495,-317.86 1505.64,-313.31 1515.23,-308.95\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1516.56,-312.19 1524.15,-304.79 1513.61,-305.84 1516.56,-312.19\"/>\n",
       "</g>\n",
       "<!-- 4606636752 -->\n",
       "<g id=\"node14\" class=\"node\">\n",
       "<title>4606636752</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"976.12,-220.5 976.12,-256.5 1156.88,-256.5 1156.88,-220.5 976.12,-220.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"986\" y=\"-233.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"995.88,-221 995.88,-256.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1035.75\" y=\"-233.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.4000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1075.62,-221 1075.62,-256.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1116.25\" y=\"-233.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606636752&#45;&gt;4606636880* -->\n",
       "<g id=\"edge21\" class=\"edge\">\n",
       "<title>4606636752&#45;&gt;4606636880*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1157.32,-238.5C1168.67,-238.5 1179.74,-238.5 1189.62,-238.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1189.5,-242 1199.5,-238.5 1189.5,-235 1189.5,-242\"/>\n",
       "</g>\n",
       "<!-- 4606636880 -->\n",
       "<g id=\"node15\" class=\"node\">\n",
       "<title>4606636880</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1295.62,-220.5 1295.62,-256.5 1480.88,-256.5 1480.88,-220.5 1295.62,-220.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1305.5\" y=\"-233.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1315.38,-221 1315.38,-256.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1357.5\" y=\"-233.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.3649</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1399.62,-221 1399.62,-256.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1440.25\" y=\"-233.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606636880&#45;&gt;4606637008+ -->\n",
       "<g id=\"edge14\" class=\"edge\">\n",
       "<title>4606636880&#45;&gt;4606637008+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1481.01,-238.5C1490.99,-238.5 1500.68,-238.5 1509.42,-238.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1509.19,-242 1519.19,-238.5 1509.19,-235 1509.19,-242\"/>\n",
       "</g>\n",
       "<!-- 4606636880*&#45;&gt;4606636880 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>4606636880*&#45;&gt;4606636880</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1255.9,-238.5C1264.15,-238.5 1273.79,-238.5 1284.05,-238.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1283.86,-242 1293.86,-238.5 1283.86,-235 1283.86,-242\"/>\n",
       "</g>\n",
       "<!-- 4606632784 -->\n",
       "<g id=\"node17\" class=\"node\">\n",
       "<title>4606632784</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"326.62,-110.5 326.62,-146.5 514.88,-146.5 514.88,-110.5 326.62,-110.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"338\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\">b</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"349.38,-111 349.38,-146.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"391.5\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.8978</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"433.62,-111 433.62,-146.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"474.25\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606632784&#45;&gt;4606629712+ -->\n",
       "<g id=\"edge31\" class=\"edge\">\n",
       "<title>4606632784&#45;&gt;4606629712+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M515.34,-128.5C524.61,-128.5 533.6,-128.5 541.77,-128.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"541.58,-132 551.58,-128.5 541.58,-125 541.58,-132\"/>\n",
       "</g>\n",
       "<!-- 4606637008 -->\n",
       "<g id=\"node18\" class=\"node\">\n",
       "<title>4606637008</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1611,-220.5 1611,-256.5 1796.25,-256.5 1796.25,-220.5 1611,-220.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1620.88\" y=\"-233.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1630.75,-221 1630.75,-256.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1672.88\" y=\"-233.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;1.3837</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1715,-221 1715,-256.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1755.62\" y=\"-233.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606637392+ -->\n",
       "<g id=\"node24\" class=\"node\">\n",
       "<title>4606637392+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1859.25\" cy=\"-265.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1859.25\" y=\"-260.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606637008&#45;&gt;4606637392+ -->\n",
       "<g id=\"edge25\" class=\"edge\">\n",
       "<title>4606637008&#45;&gt;4606637392+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1796.65,-254.67C1805.39,-256.21 1813.86,-257.7 1821.58,-259.05\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1820.7,-262.45 1831.16,-260.74 1821.91,-255.56 1820.7,-262.45\"/>\n",
       "</g>\n",
       "<!-- 4606637008+&#45;&gt;4606637008 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>4606637008+&#45;&gt;4606637008</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1575.41,-238.5C1582.45,-238.5 1590.5,-238.5 1599.05,-238.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1599.04,-242 1609.04,-238.5 1599.04,-235 1599.04,-242\"/>\n",
       "</g>\n",
       "<!-- 4606637136 -->\n",
       "<g id=\"node20\" class=\"node\">\n",
       "<title>4606637136</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1297.88,-275.5 1297.88,-311.5 1478.62,-311.5 1478.62,-275.5 1297.88,-275.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1307.75\" y=\"-288.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1317.62,-276 1317.62,-311.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1357.5\" y=\"-288.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.5000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1397.38,-276 1397.38,-311.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1438\" y=\"-288.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606637136&#45;&gt;4606637264* -->\n",
       "<g id=\"edge24\" class=\"edge\">\n",
       "<title>4606637136&#45;&gt;4606637264*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1478.73,-293.5C1489.48,-293.5 1499.97,-293.5 1509.37,-293.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1509.12,-297 1519.12,-293.5 1509.12,-290 1509.12,-297\"/>\n",
       "</g>\n",
       "<!-- 4606637264 -->\n",
       "<g id=\"node21\" class=\"node\">\n",
       "<title>4606637264</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1613.25,-275.5 1613.25,-311.5 1794,-311.5 1794,-275.5 1613.25,-275.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1623.12\" y=\"-288.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1633,-276 1633,-311.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1672.88\" y=\"-288.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.1222</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1712.75,-276 1712.75,-311.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1753.38\" y=\"-288.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606637264&#45;&gt;4606637392+ -->\n",
       "<g id=\"edge16\" class=\"edge\">\n",
       "<title>4606637264&#45;&gt;4606637392+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1794.43,-277.13C1803.98,-275.39 1813.26,-273.7 1821.64,-272.17\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1822.14,-275.64 1831.35,-270.4 1820.89,-268.75 1822.14,-275.64\"/>\n",
       "</g>\n",
       "<!-- 4606637264*&#45;&gt;4606637264 -->\n",
       "<g id=\"edge7\" class=\"edge\">\n",
       "<title>4606637264*&#45;&gt;4606637264</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1575.41,-293.5C1583.12,-293.5 1592.04,-293.5 1601.51,-293.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1601.32,-297 1611.32,-293.5 1601.32,-290 1601.32,-297\"/>\n",
       "</g>\n",
       "<!-- 4606637392 -->\n",
       "<g id=\"node23\" class=\"node\">\n",
       "<title>4606637392</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1922.25,-247.5 1922.25,-283.5 2107.5,-283.5 2107.5,-247.5 1922.25,-247.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1932.12\" y=\"-260.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1942,-248 1942,-283.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1984.12\" y=\"-260.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;1.2614</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2026.25,-248 2026.25,-283.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2066.88\" y=\"-260.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606637520tanh -->\n",
       "<g id=\"node28\" class=\"node\">\n",
       "<title>4606637520tanh</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2170.5\" cy=\"-265.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2170.5\" y=\"-260.45\" font-family=\"Times,serif\" font-size=\"14.00\">tanh</text>\n",
       "</g>\n",
       "<!-- 4606637392&#45;&gt;4606637520tanh -->\n",
       "<g id=\"edge13\" class=\"edge\">\n",
       "<title>4606637392&#45;&gt;4606637520tanh</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2107.9,-265.5C2116.27,-265.5 2124.39,-265.5 2131.84,-265.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2131.78,-269 2141.78,-265.5 2131.78,-262 2131.78,-269\"/>\n",
       "</g>\n",
       "<!-- 4606637392+&#45;&gt;4606637392 -->\n",
       "<g id=\"edge8\" class=\"edge\">\n",
       "<title>4606637392+&#45;&gt;4606637392</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1886.66,-265.5C1893.7,-265.5 1901.75,-265.5 1910.3,-265.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1910.29,-269 1920.29,-265.5 1910.29,-262 1910.29,-269\"/>\n",
       "</g>\n",
       "<!-- 4606635344 -->\n",
       "<g id=\"node25\" class=\"node\">\n",
       "<title>4606635344</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"330.38,-0.5 330.38,-36.5 511.12,-36.5 511.12,-0.5 330.38,-0.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"340.25\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"350.12,-1 350.12,-36.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"390\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.2000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"429.88,-1 429.88,-36.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"470.5\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606635344&#45;&gt;4606635984* -->\n",
       "<g id=\"edge26\" class=\"edge\">\n",
       "<title>4606635344&#45;&gt;4606635984*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M488.8,-36.94C498.5,-39.94 508.3,-43.17 517.5,-46.5 527.36,-50.07 537.9,-54.44 547.43,-58.62\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"545.74,-61.69 556.3,-62.58 548.59,-55.3 545.74,-61.69\"/>\n",
       "</g>\n",
       "<!-- 4606631248 -->\n",
       "<g id=\"node26\" class=\"node\">\n",
       "<title>4606631248</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"0,-193.5 0,-229.5 198,-229.5 198,-193.5 0,-193.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"16.25\" y=\"-206.7\" font-family=\"Times,serif\" font-size=\"14.00\">w0</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"32.5,-194 32.5,-229.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"74.62\" y=\"-206.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.8040</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"116.75,-194 116.75,-229.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"157.38\" y=\"-206.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606631248&#45;&gt;4606630480* -->\n",
       "<g id=\"edge27\" class=\"edge\">\n",
       "<title>4606631248&#45;&gt;4606630480*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M198.14,-194.33C206.99,-192.78 215.52,-191.28 223.28,-189.93\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"223.66,-193.41 232.91,-188.24 222.46,-186.52 223.66,-193.41\"/>\n",
       "</g>\n",
       "<!-- 4606637520 -->\n",
       "<g id=\"node27\" class=\"node\">\n",
       "<title>4606637520</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2233.5,-247.5 2233.5,-283.5 2432.25,-283.5 2432.25,-247.5 2233.5,-247.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2250.12\" y=\"-260.7\" font-family=\"Times,serif\" font-size=\"14.00\">out</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2266.75,-248 2266.75,-283.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2308.88\" y=\"-260.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.8515</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2351,-248 2351,-283.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2391.62\" y=\"-260.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606637520tanh&#45;&gt;4606637520 -->\n",
       "<g id=\"edge9\" class=\"edge\">\n",
       "<title>4606637520tanh&#45;&gt;4606637520</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2197.98,-265.5C2205.11,-265.5 2213.29,-265.5 2222.02,-265.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2221.81,-269 2231.81,-265.5 2221.81,-262 2221.81,-269\"/>\n",
       "</g>\n",
       "<!-- 4606635472 -->\n",
       "<g id=\"node29\" class=\"node\">\n",
       "<title>4606635472</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"8.62,-138.5 8.62,-174.5 189.38,-174.5 189.38,-138.5 8.62,-138.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"18.5\" y=\"-151.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"28.38,-139 28.38,-174.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"68.25\" y=\"-151.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.2000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"108.12,-139 108.12,-174.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"148.75\" y=\"-151.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606635472&#45;&gt;4606630480* -->\n",
       "<g id=\"edge28\" class=\"edge\">\n",
       "<title>4606635472&#45;&gt;4606630480*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M189.82,-171.66C201.6,-173.64 213.09,-175.58 223.24,-177.3\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"222.56,-180.73 233,-178.94 223.72,-173.83 222.56,-180.73\"/>\n",
       "</g>\n",
       "<!-- 4606629712 -->\n",
       "<g id=\"node30\" class=\"node\">\n",
       "<title>4606629712</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"649.88,-110.5 649.88,-146.5 835.12,-146.5 835.12,-110.5 649.88,-110.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"659.75\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"669.62,-111 669.62,-146.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"711.75\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;1.0586</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"753.88,-111 753.88,-146.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"794.5\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606629712&#45;&gt;4606636240+ -->\n",
       "<g id=\"edge20\" class=\"edge\">\n",
       "<title>4606629712&#45;&gt;4606636240+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M835.18,-128.5C845.98,-128.5 856.49,-128.5 865.9,-128.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"865.66,-132 875.66,-128.5 865.66,-125 865.66,-132\"/>\n",
       "</g>\n",
       "<!-- 4606629712+&#45;&gt;4606629712 -->\n",
       "<g id=\"edge10\" class=\"edge\">\n",
       "<title>4606629712+&#45;&gt;4606629712</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M607.92,-128.5C616.77,-128.5 627.25,-128.5 638.38,-128.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"638.17,-132 648.17,-128.5 638.17,-125 638.17,-132\"/>\n",
       "</g>\n",
       "<!-- 4606635984 -->\n",
       "<g id=\"node32\" class=\"node\">\n",
       "<title>4606635984</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"652.12,-55.5 652.12,-91.5 832.88,-91.5 832.88,-55.5 652.12,-55.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"662\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"671.88,-56 671.88,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"711.75\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.1175</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"751.62,-56 751.62,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"792.25\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606635984&#45;&gt;4606636240+ -->\n",
       "<g id=\"edge22\" class=\"edge\">\n",
       "<title>4606635984&#45;&gt;4606636240+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M812.41,-91.94C822.24,-94.93 832.17,-98.15 841.5,-101.5 851.46,-105.07 862.08,-109.47 871.68,-113.68\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"870.04,-116.78 880.6,-117.67 872.9,-110.39 870.04,-116.78\"/>\n",
       "</g>\n",
       "<!-- 4606635984*&#45;&gt;4606635984 -->\n",
       "<g id=\"edge11\" class=\"edge\">\n",
       "<title>4606635984*&#45;&gt;4606635984</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M607.92,-73.5C617.27,-73.5 628.43,-73.5 640.25,-73.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"640.24,-77 650.24,-73.5 640.24,-70 640.24,-77\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x10deb6ad0>"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "draw_dot(n((0.2,0.2,0.3,0.4,0.5)))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5aeff752-f9bf-4df0-84ad-aebbc2bb0327",
   "metadata": {},
   "source": [
    "## Couche de neurones"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "2224689f-12e3-4065-92e3-7d9e3924b780",
   "metadata": {},
   "outputs": [],
   "source": [
    "class Layer:\n",
    "  \n",
    "  def __init__(self, nin, nout):\n",
    "    self.neurons = [Neuron(nin) for _ in range(nout)]\n",
    "  \n",
    "  def __call__(self, x):\n",
    "    outs = [n(x) for n in self.neurons]\n",
    "    return outs[0] if len(outs) == 1 else outs\n",
    "  \n",
    "  def parameters(self):\n",
    "    return [p for neuron in self.neurons for p in neuron.parameters()]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "85b278ad-0e4c-4205-a316-89c9ed69493f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Value(data=0.3213930604635117, label=out, grad=0.0),\n",
       " Value(data=0.31464203078000524, label=out, grad=0.0),\n",
       " Value(data=-0.858850222206831, label=out, grad=0.0)]"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l = Layer(2,3)\n",
    "l((0.2,0.3))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2f015bf5-7fc3-40b1-9fe8-3b710e74c9f1",
   "metadata": {},
   "source": [
    "## Multicouches"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "3b6b332f-7d42-4dc1-8dd7-65ba6af003dd",
   "metadata": {},
   "outputs": [],
   "source": [
    "class MLP:\n",
    "  \n",
    "  def __init__(self, nin, nouts):\n",
    "    sz = [nin] + nouts\n",
    "    self.layers = [Layer(sz[i], sz[i+1]) for i in range(len(nouts))]\n",
    "  \n",
    "  def __call__(self, x):\n",
    "    for layer in self.layers:\n",
    "      x = layer(x)\n",
    "    return x\n",
    "  \n",
    "  def parameters(self):\n",
    "    return [p for layer in self.layers for p in layer.parameters()]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "578dc4dc-2fe7-4a60-8c14-3f97ebe2ead2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Value(data=0.5428321376017807, label=out, grad=0.0)"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = [2.0, 3.0, -1.0]\n",
    "n = MLP(3, [4, 4, 1])\n",
    "n(x)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "854a13e3-27f8-4f55-a64d-ba7f9acc31e4",
   "metadata": {},
   "source": [
    "https://cs231n.github.io/neural-networks-1/\n",
    "\n",
    "![MLP](neural_net2.jpeg)\n",
    "\n",
    "Source: <https://cs231n.github.io/assets/nn1/neural_net2.jpeg>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "1567f2cc-fc90-45c7-88cb-8749006cad89",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 14.1.0 (20251206.1807)\n",
       " -->\n",
       "<!-- Pages: 1 -->\n",
       "<svg width=\"5854pt\" height=\"980pt\"\n",
       " viewBox=\"0.00 0.00 5854.00 980.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 976)\">\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-976 5849.5,-976 5849.5,4 -4,4\"/>\n",
       "<!-- 4606795856 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>4606795856</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2266.88,-880.5 2266.88,-916.5 2452.12,-916.5 2452.12,-880.5 2266.88,-880.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2276.75\" y=\"-893.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2286.62,-881 2286.62,-916.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2328.75\" y=\"-893.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.5907</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2370.88,-881 2370.88,-916.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2411.5\" y=\"-893.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606796112+ -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>4606796112+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2521.5\" cy=\"-843.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2521.5\" y=\"-838.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606795856&#45;&gt;4606796112+ -->\n",
       "<g id=\"edge149\" class=\"edge\">\n",
       "<title>4606795856&#45;&gt;4606796112+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2432.62,-880.01C2441.4,-877.35 2450.2,-874.5 2458.5,-871.5 2468.59,-867.86 2479.32,-863.27 2488.97,-858.88\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2490.36,-862.09 2497.95,-854.69 2487.4,-855.75 2490.36,-862.09\"/>\n",
       "</g>\n",
       "<!-- 4606795856+ -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>4606795856+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2197.5\" cy=\"-898.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2197.5\" y=\"-893.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606795856+&#45;&gt;4606795856 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>4606795856+&#45;&gt;4606795856</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2224.92,-898.5C2233.77,-898.5 2244.25,-898.5 2255.38,-898.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2255.17,-902 2265.17,-898.5 2255.17,-895 2255.17,-902\"/>\n",
       "</g>\n",
       "<!-- 4606795984 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>4606795984</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2266.88,-825.5 2266.88,-861.5 2452.12,-861.5 2452.12,-825.5 2266.88,-825.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2276.75\" y=\"-838.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2286.62,-826 2286.62,-861.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2328.75\" y=\"-838.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.5310</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2370.88,-826 2370.88,-861.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2411.5\" y=\"-838.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606795984&#45;&gt;4606796112+ -->\n",
       "<g id=\"edge104\" class=\"edge\">\n",
       "<title>4606795984&#45;&gt;4606796112+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2452.18,-843.5C2462.98,-843.5 2473.49,-843.5 2482.9,-843.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2482.66,-847 2492.66,-843.5 2482.66,-840 2482.66,-847\"/>\n",
       "</g>\n",
       "<!-- 4606795984* -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4606795984*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2197.5\" cy=\"-843.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2197.5\" y=\"-838.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606795984*&#45;&gt;4606795984 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>4606795984*&#45;&gt;4606795984</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2224.92,-843.5C2233.77,-843.5 2244.25,-843.5 2255.38,-843.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2255.17,-847 2265.17,-843.5 2255.17,-840 2255.17,-847\"/>\n",
       "</g>\n",
       "<!-- 4606796112 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>4606796112</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2591.25,-784.5 2591.25,-820.5 2776.5,-820.5 2776.5,-784.5 2591.25,-784.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2601.12\" y=\"-797.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2611,-785 2611,-820.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2653.12\" y=\"-797.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;1.1216</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2695.25,-785 2695.25,-820.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2735.88\" y=\"-797.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606796368+ -->\n",
       "<g id=\"node10\" class=\"node\">\n",
       "<title>4606796368+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2846.25\" cy=\"-644.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2846.25\" y=\"-639.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606796112&#45;&gt;4606796368+ -->\n",
       "<g id=\"edge201\" class=\"edge\">\n",
       "<title>4606796112&#45;&gt;4606796368+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2717.67,-784.02C2737.95,-771.63 2763.74,-754.04 2783.25,-734.5 2802.14,-715.58 2819.02,-690.22 2830.38,-671.24\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2833.32,-673.15 2835.33,-662.75 2827.27,-669.62 2833.32,-673.15\"/>\n",
       "</g>\n",
       "<!-- 4606796112+&#45;&gt;4606796112 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>4606796112+&#45;&gt;4606796112</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2547.21,-837.18C2561.52,-833.52 2580.47,-828.68 2599.64,-823.78\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2600.32,-827.22 2609.14,-821.35 2598.58,-820.44 2600.32,-827.22\"/>\n",
       "</g>\n",
       "<!-- 4606796240 -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>4606796240</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2591.25,-626.5 2591.25,-662.5 2776.5,-662.5 2776.5,-626.5 2591.25,-626.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2601.12\" y=\"-639.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2611,-627 2611,-662.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2653.12\" y=\"-639.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.1114</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2695.25,-627 2695.25,-662.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2735.88\" y=\"-639.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606796240&#45;&gt;4606796368+ -->\n",
       "<g id=\"edge176\" class=\"edge\">\n",
       "<title>4606796240&#45;&gt;4606796368+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2776.77,-644.5C2787.6,-644.5 2798.13,-644.5 2807.56,-644.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2807.35,-648 2817.35,-644.5 2807.35,-641 2807.35,-648\"/>\n",
       "</g>\n",
       "<!-- 4606796240* -->\n",
       "<g id=\"node8\" class=\"node\">\n",
       "<title>4606796240*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2521.5\" cy=\"-644.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2521.5\" y=\"-639.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606796240*&#45;&gt;4606796240 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>4606796240*&#45;&gt;4606796240</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2548.98,-644.5C2557.86,-644.5 2568.36,-644.5 2579.51,-644.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2579.33,-648 2589.33,-644.5 2579.33,-641 2579.33,-648\"/>\n",
       "</g>\n",
       "<!-- 4606796368 -->\n",
       "<g id=\"node9\" class=\"node\">\n",
       "<title>4606796368</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2909.25,-591.5 2909.25,-627.5 3094.5,-627.5 3094.5,-591.5 2909.25,-591.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2919.12\" y=\"-604.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2929,-592 2929,-627.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2971.12\" y=\"-604.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;1.2330</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3013.25,-592 3013.25,-627.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3053.88\" y=\"-604.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606796624+ -->\n",
       "<g id=\"node16\" class=\"node\">\n",
       "<title>4606796624+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"3157.5\" cy=\"-547.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3157.5\" y=\"-542.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606796368&#45;&gt;4606796624+ -->\n",
       "<g id=\"edge121\" class=\"edge\">\n",
       "<title>4606796368&#45;&gt;4606796624+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3048.55,-591.07C3072.61,-581.36 3101.58,-569.66 3123.45,-560.84\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3124.5,-564.19 3132.46,-557.2 3121.88,-557.7 3124.5,-564.19\"/>\n",
       "</g>\n",
       "<!-- 4606796368+&#45;&gt;4606796368 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>4606796368+&#45;&gt;4606796368</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2872.27,-638.8C2882.67,-636.43 2895.44,-633.52 2908.86,-630.46\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2909.27,-633.96 2918.24,-628.33 2907.71,-627.13 2909.27,-633.96\"/>\n",
       "</g>\n",
       "<!-- 4606788304 -->\n",
       "<g id=\"node11\" class=\"node\">\n",
       "<title>4606788304</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"328.12,-825.5 328.12,-861.5 508.88,-861.5 508.88,-825.5 328.12,-825.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"338\" y=\"-838.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"347.88,-826 347.88,-861.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"387.75\" y=\"-838.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.8123</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"427.62,-826 427.62,-861.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"468.25\" y=\"-838.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606788816+ -->\n",
       "<g id=\"node25\" class=\"node\">\n",
       "<title>4606788816+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"580.5\" cy=\"-843.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"580.5\" y=\"-838.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606788304&#45;&gt;4606788816+ -->\n",
       "<g id=\"edge81\" class=\"edge\">\n",
       "<title>4606788304&#45;&gt;4606788816+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M509.32,-843.5C520.67,-843.5 531.74,-843.5 541.62,-843.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"541.5,-847 551.5,-843.5 541.5,-840 541.5,-847\"/>\n",
       "</g>\n",
       "<!-- 4606788304* -->\n",
       "<g id=\"node12\" class=\"node\">\n",
       "<title>4606788304*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"256.5\" cy=\"-843.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"256.5\" y=\"-838.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606788304*&#45;&gt;4606788304 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>4606788304*&#45;&gt;4606788304</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M283.92,-843.5C293.27,-843.5 304.43,-843.5 316.25,-843.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"316.24,-847 326.24,-843.5 316.24,-840 316.24,-847\"/>\n",
       "</g>\n",
       "<!-- 4606796496 -->\n",
       "<g id=\"node13\" class=\"node\">\n",
       "<title>4606796496</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2909.25,-392.5 2909.25,-428.5 3094.5,-428.5 3094.5,-392.5 2909.25,-392.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2919.12\" y=\"-405.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2929,-393 2929,-428.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2971.12\" y=\"-405.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.3399</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3013.25,-393 3013.25,-428.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3053.88\" y=\"-405.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606796496&#45;&gt;4606796624+ -->\n",
       "<g id=\"edge96\" class=\"edge\">\n",
       "<title>4606796496&#45;&gt;4606796624+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3081.47,-428.99C3086.08,-431.48 3090.48,-434.3 3094.5,-437.5 3120.98,-458.57 3138.07,-494.22 3147.46,-519.21\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3144.09,-520.18 3150.74,-528.43 3150.69,-517.83 3144.09,-520.18\"/>\n",
       "</g>\n",
       "<!-- 4606796496* -->\n",
       "<g id=\"node14\" class=\"node\">\n",
       "<title>4606796496*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2846.25\" cy=\"-410.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2846.25\" y=\"-405.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606796496*&#45;&gt;4606796496 -->\n",
       "<g id=\"edge7\" class=\"edge\">\n",
       "<title>4606796496*&#45;&gt;4606796496</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2873.66,-410.5C2880.7,-410.5 2888.75,-410.5 2897.3,-410.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2897.29,-414 2907.29,-410.5 2897.29,-407 2897.29,-414\"/>\n",
       "</g>\n",
       "<!-- 4606796624 -->\n",
       "<g id=\"node15\" class=\"node\">\n",
       "<title>4606796624</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"3220.5,-529.5 3220.5,-565.5 3405.75,-565.5 3405.75,-529.5 3220.5,-529.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3230.38\" y=\"-542.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3240.25,-530 3240.25,-565.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3282.38\" y=\"-542.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;1.5729</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3324.5,-530 3324.5,-565.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3365.12\" y=\"-542.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606796752tanh -->\n",
       "<g id=\"node19\" class=\"node\">\n",
       "<title>4606796752tanh</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"3468.75\" cy=\"-547.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3468.75\" y=\"-542.45\" font-family=\"Times,serif\" font-size=\"14.00\">tanh</text>\n",
       "</g>\n",
       "<!-- 4606796624&#45;&gt;4606796752tanh -->\n",
       "<g id=\"edge126\" class=\"edge\">\n",
       "<title>4606796624&#45;&gt;4606796752tanh</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3406.15,-547.5C3414.52,-547.5 3422.64,-547.5 3430.09,-547.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3430.03,-551 3440.03,-547.5 3430.03,-544 3430.03,-551\"/>\n",
       "</g>\n",
       "<!-- 4606796624+&#45;&gt;4606796624 -->\n",
       "<g id=\"edge8\" class=\"edge\">\n",
       "<title>4606796624+&#45;&gt;4606796624</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3184.91,-547.5C3191.95,-547.5 3200,-547.5 3208.55,-547.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3208.54,-551 3218.54,-547.5 3208.54,-544 3208.54,-551\"/>\n",
       "</g>\n",
       "<!-- 4606788560 -->\n",
       "<g id=\"node17\" class=\"node\">\n",
       "<title>4606788560</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"328.12,-935.5 328.12,-971.5 508.88,-971.5 508.88,-935.5 328.12,-935.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"338\" y=\"-948.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"347.88,-936 347.88,-971.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"387.75\" y=\"-948.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 3.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"427.62,-936 427.62,-971.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"468.25\" y=\"-948.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606788688* -->\n",
       "<g id=\"node21\" class=\"node\">\n",
       "<title>4606788688*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"580.5\" cy=\"-898.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"580.5\" y=\"-893.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606788560&#45;&gt;4606788688* -->\n",
       "<g id=\"edge189\" class=\"edge\">\n",
       "<title>4606788560&#45;&gt;4606788688*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M491.62,-935.01C500.4,-932.35 509.2,-929.5 517.5,-926.5 527.59,-922.86 538.32,-918.27 547.97,-913.88\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"549.36,-917.09 556.95,-909.69 546.4,-910.75 549.36,-917.09\"/>\n",
       "</g>\n",
       "<!-- 4606796752 -->\n",
       "<g id=\"node18\" class=\"node\">\n",
       "<title>4606796752</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"3531.75,-529.5 3531.75,-565.5 3730.5,-565.5 3730.5,-529.5 3531.75,-529.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3548.38\" y=\"-542.7\" font-family=\"Times,serif\" font-size=\"14.00\">out</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3565,-530 3565,-565.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3607.12\" y=\"-542.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.9175</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3649.25,-530 3649.25,-565.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3689.88\" y=\"-542.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606798544* -->\n",
       "<g id=\"node72\" class=\"node\">\n",
       "<title>4606798544*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"3793.5\" cy=\"-492.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3793.5\" y=\"-487.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606796752&#45;&gt;4606798544* -->\n",
       "<g id=\"edge210\" class=\"edge\">\n",
       "<title>4606796752&#45;&gt;4606798544*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3704.53,-529.02C3713.34,-526.36 3722.17,-523.5 3730.5,-520.5 3740.59,-516.86 3751.32,-512.28 3760.98,-507.88\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3762.37,-511.1 3769.95,-503.7 3759.41,-504.75 3762.37,-511.1\"/>\n",
       "</g>\n",
       "<!-- 4606796752tanh&#45;&gt;4606796752 -->\n",
       "<g id=\"edge9\" class=\"edge\">\n",
       "<title>4606796752tanh&#45;&gt;4606796752</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3496.23,-547.5C3503.36,-547.5 3511.54,-547.5 3520.27,-547.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3520.06,-551 3530.06,-547.5 3520.06,-544 3520.06,-551\"/>\n",
       "</g>\n",
       "<!-- 4606788688 -->\n",
       "<g id=\"node20\" class=\"node\">\n",
       "<title>4606788688</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"649.88,-880.5 649.88,-916.5 835.12,-916.5 835.12,-880.5 649.88,-880.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"659.75\" y=\"-893.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"669.62,-881 669.62,-916.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"711.75\" y=\"-893.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;2.3252</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"753.88,-881 753.88,-916.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"794.5\" y=\"-893.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606788944+ -->\n",
       "<g id=\"node29\" class=\"node\">\n",
       "<title>4606788944+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"904.5\" cy=\"-843.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"904.5\" y=\"-838.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606788688&#45;&gt;4606788944+ -->\n",
       "<g id=\"edge159\" class=\"edge\">\n",
       "<title>4606788688&#45;&gt;4606788944+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M815.62,-880.01C824.4,-877.35 833.2,-874.5 841.5,-871.5 851.59,-867.86 862.32,-863.27 871.97,-858.88\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"873.36,-862.09 880.95,-854.69 870.4,-855.75 873.36,-862.09\"/>\n",
       "</g>\n",
       "<!-- 4606788688*&#45;&gt;4606788688 -->\n",
       "<g id=\"edge10\" class=\"edge\">\n",
       "<title>4606788688*&#45;&gt;4606788688</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M607.92,-898.5C616.77,-898.5 627.25,-898.5 638.38,-898.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"638.17,-902 648.17,-898.5 638.17,-895 638.17,-902\"/>\n",
       "</g>\n",
       "<!-- 4606796880 -->\n",
       "<g id=\"node22\" class=\"node\">\n",
       "<title>4606796880</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1942.5,-275.5 1942.5,-311.5 2127.75,-311.5 2127.75,-275.5 1942.5,-275.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1952.38\" y=\"-288.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1962.25,-276 1962.25,-311.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2004.38\" y=\"-288.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.8101</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2046.5,-276 2046.5,-311.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2087.12\" y=\"-288.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606797008+ -->\n",
       "<g id=\"node27\" class=\"node\">\n",
       "<title>4606797008+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2197.5\" cy=\"-238.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2197.5\" y=\"-233.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606796880&#45;&gt;4606797008+ -->\n",
       "<g id=\"edge109\" class=\"edge\">\n",
       "<title>4606796880&#45;&gt;4606797008+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2105.3,-275.07C2115.17,-272.08 2125.14,-268.85 2134.5,-265.5 2144.46,-261.93 2155.09,-257.53 2164.68,-253.33\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2165.9,-256.61 2173.6,-249.33 2163.04,-250.23 2165.9,-256.61\"/>\n",
       "</g>\n",
       "<!-- 4606796880* -->\n",
       "<g id=\"node23\" class=\"node\">\n",
       "<title>4606796880*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1872.75\" cy=\"-293.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1872.75\" y=\"-288.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606796880*&#45;&gt;4606796880 -->\n",
       "<g id=\"edge11\" class=\"edge\">\n",
       "<title>4606796880*&#45;&gt;4606796880</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1900.23,-293.5C1909.11,-293.5 1919.61,-293.5 1930.76,-293.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1930.58,-297 1940.58,-293.5 1930.58,-290 1930.58,-297\"/>\n",
       "</g>\n",
       "<!-- 4606788816 -->\n",
       "<g id=\"node24\" class=\"node\">\n",
       "<title>4606788816</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"652.12,-825.5 652.12,-861.5 832.88,-861.5 832.88,-825.5 652.12,-825.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"662\" y=\"-838.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"671.88,-826 671.88,-861.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"711.75\" y=\"-838.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 1.5336</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"751.62,-826 751.62,-861.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"792.25\" y=\"-838.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606788816&#45;&gt;4606788944+ -->\n",
       "<g id=\"edge113\" class=\"edge\">\n",
       "<title>4606788816&#45;&gt;4606788944+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M833.32,-843.5C844.67,-843.5 855.74,-843.5 865.62,-843.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"865.5,-847 875.5,-843.5 865.5,-840 865.5,-847\"/>\n",
       "</g>\n",
       "<!-- 4606788816+&#45;&gt;4606788816 -->\n",
       "<g id=\"edge12\" class=\"edge\">\n",
       "<title>4606788816+&#45;&gt;4606788816</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M607.92,-843.5C617.27,-843.5 628.43,-843.5 640.25,-843.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"640.24,-847 650.24,-843.5 640.24,-840 640.24,-847\"/>\n",
       "</g>\n",
       "<!-- 4606797008 -->\n",
       "<g id=\"node26\" class=\"node\">\n",
       "<title>4606797008</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2266.88,-220.5 2266.88,-256.5 2452.12,-256.5 2452.12,-220.5 2266.88,-220.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2276.75\" y=\"-233.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2286.62,-221 2286.62,-256.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2328.75\" y=\"-233.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;1.7146</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2370.88,-221 2370.88,-256.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2411.5\" y=\"-233.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606797264+ -->\n",
       "<g id=\"node34\" class=\"node\">\n",
       "<title>4606797264+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2521.5\" cy=\"-245.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2521.5\" y=\"-240.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606797008&#45;&gt;4606797264+ -->\n",
       "<g id=\"edge175\" class=\"edge\">\n",
       "<title>4606797008&#45;&gt;4606797264+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2452.18,-242.51C2462.98,-242.98 2473.49,-243.44 2482.9,-243.86\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2482.52,-247.34 2492.66,-244.28 2482.82,-240.35 2482.52,-247.34\"/>\n",
       "</g>\n",
       "<!-- 4606797008+&#45;&gt;4606797008 -->\n",
       "<g id=\"edge13\" class=\"edge\">\n",
       "<title>4606797008+&#45;&gt;4606797008</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2224.92,-238.5C2233.77,-238.5 2244.25,-238.5 2255.38,-238.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2255.17,-242 2265.17,-238.5 2255.17,-235 2255.17,-242\"/>\n",
       "</g>\n",
       "<!-- 4606788944 -->\n",
       "<g id=\"node28\" class=\"node\">\n",
       "<title>4606788944</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"973.88,-825.5 973.88,-861.5 1159.12,-861.5 1159.12,-825.5 973.88,-825.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"983.75\" y=\"-838.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"993.62,-826 993.62,-861.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1035.75\" y=\"-838.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.7916</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1077.88,-826 1077.88,-861.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1118.5\" y=\"-838.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606789328+ -->\n",
       "<g id=\"node40\" class=\"node\">\n",
       "<title>4606789328+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1228.5\" cy=\"-788.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1228.5\" y=\"-783.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606788944&#45;&gt;4606789328+ -->\n",
       "<g id=\"edge155\" class=\"edge\">\n",
       "<title>4606788944&#45;&gt;4606789328+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1139.62,-825.01C1148.4,-822.35 1157.2,-819.5 1165.5,-816.5 1175.59,-812.86 1186.32,-808.27 1195.97,-803.88\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1197.36,-807.09 1204.95,-799.69 1194.4,-800.75 1197.36,-807.09\"/>\n",
       "</g>\n",
       "<!-- 4606788944+&#45;&gt;4606788944 -->\n",
       "<g id=\"edge14\" class=\"edge\">\n",
       "<title>4606788944+&#45;&gt;4606788944</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M931.92,-843.5C940.77,-843.5 951.25,-843.5 962.38,-843.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"962.17,-847 972.17,-843.5 962.17,-840 962.17,-847\"/>\n",
       "</g>\n",
       "<!-- 4606797136 -->\n",
       "<g id=\"node30\" class=\"node\">\n",
       "<title>4606797136</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2269.12,-275.5 2269.12,-311.5 2449.88,-311.5 2449.88,-275.5 2269.12,-275.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2279\" y=\"-288.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2288.88,-276 2288.88,-311.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2328.75\" y=\"-288.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.1814</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2368.62,-276 2368.62,-311.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2409.25\" y=\"-288.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606797136&#45;&gt;4606797264+ -->\n",
       "<g id=\"edge153\" class=\"edge\">\n",
       "<title>4606797136&#45;&gt;4606797264+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2426.22,-275.05C2437.02,-271.93 2448.09,-268.67 2458.5,-265.5 2467.4,-262.79 2476.99,-259.76 2485.89,-256.89\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2486.84,-260.26 2495.27,-253.85 2484.68,-253.61 2486.84,-260.26\"/>\n",
       "</g>\n",
       "<!-- 4606797136* -->\n",
       "<g id=\"node31\" class=\"node\">\n",
       "<title>4606797136*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2197.5\" cy=\"-348.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2197.5\" y=\"-343.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606797136*&#45;&gt;4606797136 -->\n",
       "<g id=\"edge15\" class=\"edge\">\n",
       "<title>4606797136*&#45;&gt;4606797136</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2219.68,-337.95C2231.51,-332.31 2246.61,-325.51 2260.5,-320.5 2265.43,-318.72 2270.53,-316.99 2275.7,-315.32\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2276.43,-318.76 2284.93,-312.44 2274.34,-312.08 2276.43,-318.76\"/>\n",
       "</g>\n",
       "<!-- 4606789072 -->\n",
       "<g id=\"node32\" class=\"node\">\n",
       "<title>4606789072</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"649.88,-770.5 649.88,-806.5 835.12,-806.5 835.12,-770.5 649.88,-770.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"659.75\" y=\"-783.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"669.62,-771 669.62,-806.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"711.75\" y=\"-783.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;1.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"753.88,-771 753.88,-806.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"794.5\" y=\"-783.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606789200* -->\n",
       "<g id=\"node36\" class=\"node\">\n",
       "<title>4606789200*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"904.5\" cy=\"-788.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"904.5\" y=\"-783.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606789072&#45;&gt;4606789200* -->\n",
       "<g id=\"edge183\" class=\"edge\">\n",
       "<title>4606789072&#45;&gt;4606789200*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M835.18,-788.5C845.98,-788.5 856.49,-788.5 865.9,-788.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"865.66,-792 875.66,-788.5 865.66,-785 865.66,-792\"/>\n",
       "</g>\n",
       "<!-- 4606797264 -->\n",
       "<g id=\"node33\" class=\"node\">\n",
       "<title>4606797264</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2591.25,-227.5 2591.25,-263.5 2776.5,-263.5 2776.5,-227.5 2591.25,-227.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2601.12\" y=\"-240.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2611,-228 2611,-263.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2653.12\" y=\"-240.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;1.5332</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2695.25,-228 2695.25,-263.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2735.88\" y=\"-240.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606797520+ -->\n",
       "<g id=\"node42\" class=\"node\">\n",
       "<title>4606797520+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2846.25\" cy=\"-246.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2846.25\" y=\"-241.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606797264&#45;&gt;4606797520+ -->\n",
       "<g id=\"edge95\" class=\"edge\">\n",
       "<title>4606797264&#45;&gt;4606797520+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2776.77,-246.07C2787.6,-246.14 2798.13,-246.21 2807.56,-246.27\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2807.32,-249.76 2817.35,-246.33 2807.37,-242.76 2807.32,-249.76\"/>\n",
       "</g>\n",
       "<!-- 4606797264+&#45;&gt;4606797264 -->\n",
       "<g id=\"edge16\" class=\"edge\">\n",
       "<title>4606797264+&#45;&gt;4606797264</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2548.98,-245.5C2557.86,-245.5 2568.36,-245.5 2579.51,-245.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2579.33,-249 2589.33,-245.5 2579.33,-242 2579.33,-249\"/>\n",
       "</g>\n",
       "<!-- 4606789200 -->\n",
       "<g id=\"node35\" class=\"node\">\n",
       "<title>4606789200</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"973.88,-770.5 973.88,-806.5 1159.12,-806.5 1159.12,-770.5 973.88,-770.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"983.75\" y=\"-783.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"993.62,-771 993.62,-806.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1035.75\" y=\"-783.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.7134</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1077.88,-771 1077.88,-806.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1118.5\" y=\"-783.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606789200&#45;&gt;4606789328+ -->\n",
       "<g id=\"edge83\" class=\"edge\">\n",
       "<title>4606789200&#45;&gt;4606789328+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1159.18,-788.5C1169.98,-788.5 1180.49,-788.5 1189.9,-788.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1189.66,-792 1199.66,-788.5 1189.66,-785 1189.66,-792\"/>\n",
       "</g>\n",
       "<!-- 4606789200*&#45;&gt;4606789200 -->\n",
       "<g id=\"edge17\" class=\"edge\">\n",
       "<title>4606789200*&#45;&gt;4606789200</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M931.92,-788.5C940.77,-788.5 951.25,-788.5 962.38,-788.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"962.17,-792 972.17,-788.5 962.17,-785 962.17,-792\"/>\n",
       "</g>\n",
       "<!-- 4606797392 -->\n",
       "<g id=\"node37\" class=\"node\">\n",
       "<title>4606797392</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2591.25,-282.5 2591.25,-318.5 2776.5,-318.5 2776.5,-282.5 2591.25,-282.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2601.12\" y=\"-295.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2611,-283 2611,-318.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2653.12\" y=\"-295.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.0586</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2695.25,-283 2695.25,-318.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2735.88\" y=\"-295.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606797392&#45;&gt;4606797520+ -->\n",
       "<g id=\"edge203\" class=\"edge\">\n",
       "<title>4606797392&#45;&gt;4606797520+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2753.74,-282.04C2763.7,-279.04 2773.78,-275.82 2783.25,-272.5 2792.99,-269.09 2803.39,-264.93 2812.85,-260.95\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2814.21,-264.17 2822.01,-257.01 2811.44,-257.74 2814.21,-264.17\"/>\n",
       "</g>\n",
       "<!-- 4606797392* -->\n",
       "<g id=\"node38\" class=\"node\">\n",
       "<title>4606797392*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2521.5\" cy=\"-348.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2521.5\" y=\"-343.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606797392*&#45;&gt;4606797392 -->\n",
       "<g id=\"edge18\" class=\"edge\">\n",
       "<title>4606797392*&#45;&gt;4606797392</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2545.95,-340.2C2557.5,-336.2 2571.68,-331.43 2584.5,-327.5 2590.37,-325.7 2596.46,-323.89 2602.6,-322.11\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2603.56,-325.48 2612.21,-319.36 2601.63,-318.75 2603.56,-325.48\"/>\n",
       "</g>\n",
       "<!-- 4606789328 -->\n",
       "<g id=\"node39\" class=\"node\">\n",
       "<title>4606789328</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1295.62,-742.5 1295.62,-778.5 1480.88,-778.5 1480.88,-742.5 1295.62,-742.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1305.5\" y=\"-755.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1315.38,-743 1315.38,-778.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1357.5\" y=\"-755.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;1.5051</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1399.62,-743 1399.62,-778.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1440.25\" y=\"-755.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606789456tanh -->\n",
       "<g id=\"node44\" class=\"node\">\n",
       "<title>4606789456tanh</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1548\" cy=\"-746.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1548\" y=\"-741.45\" font-family=\"Times,serif\" font-size=\"14.00\">tanh</text>\n",
       "</g>\n",
       "<!-- 4606789328&#45;&gt;4606789456tanh -->\n",
       "<g id=\"edge177\" class=\"edge\">\n",
       "<title>4606789328&#45;&gt;4606789456tanh</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1481.01,-752.36C1491.08,-751.46 1500.86,-750.6 1509.67,-749.81\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1509.86,-753.31 1519.51,-748.94 1509.24,-746.34 1509.86,-753.31\"/>\n",
       "</g>\n",
       "<!-- 4606789328+&#45;&gt;4606789328 -->\n",
       "<g id=\"edge19\" class=\"edge\">\n",
       "<title>4606789328+&#45;&gt;4606789328</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1254.85,-784C1263.4,-782.48 1273.55,-780.68 1284.36,-778.76\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1284.64,-782.27 1293.88,-777.07 1283.42,-775.38 1284.64,-782.27\"/>\n",
       "</g>\n",
       "<!-- 4606797520 -->\n",
       "<g id=\"node41\" class=\"node\">\n",
       "<title>4606797520</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2909.25,-228.5 2909.25,-264.5 3094.5,-264.5 3094.5,-228.5 2909.25,-228.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2919.12\" y=\"-241.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2929,-229 2929,-264.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2971.12\" y=\"-241.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;1.5919</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3013.25,-229 3013.25,-264.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3053.88\" y=\"-241.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606797776+ -->\n",
       "<g id=\"node49\" class=\"node\">\n",
       "<title>4606797776+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"3157.5\" cy=\"-217.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3157.5\" y=\"-212.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606797520&#45;&gt;4606797776+ -->\n",
       "<g id=\"edge166\" class=\"edge\">\n",
       "<title>4606797520&#45;&gt;4606797776+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3094.9,-229.13C3103.73,-227.46 3112.27,-225.85 3120.05,-224.38\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3120.53,-227.85 3129.71,-222.56 3119.23,-220.97 3120.53,-227.85\"/>\n",
       "</g>\n",
       "<!-- 4606797520+&#45;&gt;4606797520 -->\n",
       "<g id=\"edge20\" class=\"edge\">\n",
       "<title>4606797520+&#45;&gt;4606797520</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2873.66,-246.5C2880.7,-246.5 2888.75,-246.5 2897.3,-246.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2897.29,-250 2907.29,-246.5 2897.29,-243 2897.29,-250\"/>\n",
       "</g>\n",
       "<!-- 4606789456 -->\n",
       "<g id=\"node43\" class=\"node\">\n",
       "<title>4606789456</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1611,-715.5 1611,-751.5 1809.75,-751.5 1809.75,-715.5 1611,-715.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1627.62\" y=\"-728.7\" font-family=\"Times,serif\" font-size=\"14.00\">out</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1644.25,-716 1644.25,-751.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1686.38\" y=\"-728.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.9061</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1728.5,-716 1728.5,-751.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1769.12\" y=\"-728.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606789456&#45;&gt;4606796880* -->\n",
       "<g id=\"edge150\" class=\"edge\">\n",
       "<title>4606789456&#45;&gt;4606796880*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1800.53,-715.14C1803.89,-712.6 1806.99,-709.74 1809.75,-706.5 1857.6,-650.36 1830.65,-448.71 1845.75,-376.5 1849.63,-357.95 1855.96,-337.63 1861.4,-321.74\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1864.64,-323.07 1864.65,-312.47 1858.04,-320.75 1864.64,-323.07\"/>\n",
       "</g>\n",
       "<!-- 4606793424* -->\n",
       "<g id=\"node146\" class=\"node\">\n",
       "<title>4606793424*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1872.75\" cy=\"-568.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1872.75\" y=\"-563.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606789456&#45;&gt;4606793424* -->\n",
       "<g id=\"edge77\" class=\"edge\">\n",
       "<title>4606789456&#45;&gt;4606793424*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1797.51,-715.07C1801.86,-712.57 1805.98,-709.73 1809.75,-706.5 1827.17,-691.58 1849.67,-632.82 1862.21,-596.96\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1865.48,-598.23 1865.43,-587.64 1858.86,-595.95 1865.48,-598.23\"/>\n",
       "</g>\n",
       "<!-- 4606794576* -->\n",
       "<g id=\"node173\" class=\"node\">\n",
       "<title>4606794576*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1872.75\" cy=\"-733.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1872.75\" y=\"-728.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606789456&#45;&gt;4606794576* -->\n",
       "<g id=\"edge156\" class=\"edge\">\n",
       "<title>4606789456&#45;&gt;4606794576*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1810.2,-733.5C1818.56,-733.5 1826.64,-733.5 1834.03,-733.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1833.89,-737 1843.89,-733.5 1833.89,-730 1833.89,-737\"/>\n",
       "</g>\n",
       "<!-- 4606795728* -->\n",
       "<g id=\"node199\" class=\"node\">\n",
       "<title>4606795728*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1872.75\" cy=\"-898.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1872.75\" y=\"-893.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606789456&#45;&gt;4606795728* -->\n",
       "<g id=\"edge207\" class=\"edge\">\n",
       "<title>4606789456&#45;&gt;4606795728*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1795.64,-751.77C1800.68,-754.57 1805.45,-757.79 1809.75,-761.5 1842.36,-789.62 1858.69,-838.37 1866.17,-869.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1862.7,-870.01 1868.3,-879.01 1869.53,-868.49 1862.7,-870.01\"/>\n",
       "</g>\n",
       "<!-- 4606789456tanh&#45;&gt;4606789456 -->\n",
       "<g id=\"edge21\" class=\"edge\">\n",
       "<title>4606789456tanh&#45;&gt;4606789456</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1575.12,-744.38C1582.3,-743.8 1590.56,-743.13 1599.38,-742.42\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1599.62,-745.91 1609.3,-741.61 1599.05,-738.93 1599.62,-745.91\"/>\n",
       "</g>\n",
       "<!-- 4606797648 -->\n",
       "<g id=\"node45\" class=\"node\">\n",
       "<title>4606797648</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2911.5,-118.5 2911.5,-154.5 3092.25,-154.5 3092.25,-118.5 2911.5,-118.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2921.38\" y=\"-131.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2931.25,-119 2931.25,-154.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2971.12\" y=\"-131.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.1944</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3011,-119 3011,-154.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3051.62\" y=\"-131.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606797648&#45;&gt;4606797776+ -->\n",
       "<g id=\"edge124\" class=\"edge\">\n",
       "<title>4606797648&#45;&gt;4606797776+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3076.07,-154.92C3082.45,-157.46 3088.68,-160.31 3094.5,-163.5 3109.26,-171.59 3123.58,-183.69 3134.73,-194.39\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3131.96,-196.57 3141.52,-201.13 3136.9,-191.6 3131.96,-196.57\"/>\n",
       "</g>\n",
       "<!-- 4606797648* -->\n",
       "<g id=\"node46\" class=\"node\">\n",
       "<title>4606797648*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2846.25\" cy=\"-136.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2846.25\" y=\"-131.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606797648*&#45;&gt;4606797648 -->\n",
       "<g id=\"edge22\" class=\"edge\">\n",
       "<title>4606797648*&#45;&gt;4606797648</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2873.66,-136.5C2881.37,-136.5 2890.29,-136.5 2899.76,-136.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2899.57,-140 2909.57,-136.5 2899.57,-133 2899.57,-140\"/>\n",
       "</g>\n",
       "<!-- 4606789584 -->\n",
       "<g id=\"node47\" class=\"node\">\n",
       "<title>4606789584</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"328.12,-688.5 328.12,-724.5 508.88,-724.5 508.88,-688.5 328.12,-688.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"338\" y=\"-701.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"347.88,-689 347.88,-724.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"387.75\" y=\"-701.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 2.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"427.62,-689 427.62,-724.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"468.25\" y=\"-701.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606789712* -->\n",
       "<g id=\"node51\" class=\"node\">\n",
       "<title>4606789712*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"580.5\" cy=\"-678.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"580.5\" y=\"-673.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606789584&#45;&gt;4606789712* -->\n",
       "<g id=\"edge98\" class=\"edge\">\n",
       "<title>4606789584&#45;&gt;4606789712*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M509.32,-690.78C521.1,-688.72 532.59,-686.71 542.74,-684.93\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"543.26,-688.4 552.5,-683.22 542.05,-681.5 543.26,-688.4\"/>\n",
       "</g>\n",
       "<!-- 4606797776 -->\n",
       "<g id=\"node48\" class=\"node\">\n",
       "<title>4606797776</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"3220.5,-199.5 3220.5,-235.5 3405.75,-235.5 3405.75,-199.5 3220.5,-199.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3230.38\" y=\"-212.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3240.25,-200 3240.25,-235.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3282.38\" y=\"-212.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;1.3975</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3324.5,-200 3324.5,-235.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3365.12\" y=\"-212.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606797904tanh -->\n",
       "<g id=\"node53\" class=\"node\">\n",
       "<title>4606797904tanh</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"3468.75\" cy=\"-217.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3468.75\" y=\"-212.45\" font-family=\"Times,serif\" font-size=\"14.00\">tanh</text>\n",
       "</g>\n",
       "<!-- 4606797776&#45;&gt;4606797904tanh -->\n",
       "<g id=\"edge172\" class=\"edge\">\n",
       "<title>4606797776&#45;&gt;4606797904tanh</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3406.15,-217.5C3414.52,-217.5 3422.64,-217.5 3430.09,-217.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3430.03,-221 3440.03,-217.5 3430.03,-214 3430.03,-221\"/>\n",
       "</g>\n",
       "<!-- 4606797776+&#45;&gt;4606797776 -->\n",
       "<g id=\"edge23\" class=\"edge\">\n",
       "<title>4606797776+&#45;&gt;4606797776</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3184.91,-217.5C3191.95,-217.5 3200,-217.5 3208.55,-217.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3208.54,-221 3218.54,-217.5 3208.54,-214 3208.54,-221\"/>\n",
       "</g>\n",
       "<!-- 4606789712 -->\n",
       "<g id=\"node50\" class=\"node\">\n",
       "<title>4606789712</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"649.88,-660.5 649.88,-696.5 835.12,-696.5 835.12,-660.5 649.88,-660.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"659.75\" y=\"-673.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"669.62,-661 669.62,-696.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"711.75\" y=\"-673.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.6221</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"753.88,-661 753.88,-696.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"794.5\" y=\"-673.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606789840+ -->\n",
       "<g id=\"node57\" class=\"node\">\n",
       "<title>4606789840+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"904.5\" cy=\"-623.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"904.5\" y=\"-618.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606789712&#45;&gt;4606789840+ -->\n",
       "<g id=\"edge148\" class=\"edge\">\n",
       "<title>4606789712&#45;&gt;4606789840+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M815.62,-660.01C824.4,-657.35 833.2,-654.5 841.5,-651.5 851.59,-647.86 862.32,-643.27 871.97,-638.88\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"873.36,-642.09 880.95,-634.69 870.4,-635.75 873.36,-642.09\"/>\n",
       "</g>\n",
       "<!-- 4606789712*&#45;&gt;4606789712 -->\n",
       "<g id=\"edge24\" class=\"edge\">\n",
       "<title>4606789712*&#45;&gt;4606789712</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M607.92,-678.5C616.77,-678.5 627.25,-678.5 638.38,-678.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"638.17,-682 648.17,-678.5 638.17,-675 638.17,-682\"/>\n",
       "</g>\n",
       "<!-- 4606797904 -->\n",
       "<g id=\"node52\" class=\"node\">\n",
       "<title>4606797904</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"3531.75,-199.5 3531.75,-235.5 3730.5,-235.5 3730.5,-199.5 3531.75,-199.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3548.38\" y=\"-212.7\" font-family=\"Times,serif\" font-size=\"14.00\">out</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3565,-200 3565,-235.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3607.12\" y=\"-212.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.8848</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3649.25,-200 3649.25,-235.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3689.88\" y=\"-212.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606798800* -->\n",
       "<g id=\"node82\" class=\"node\">\n",
       "<title>4606798800*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"3793.5\" cy=\"-217.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3793.5\" y=\"-212.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606797904&#45;&gt;4606798800* -->\n",
       "<g id=\"edge74\" class=\"edge\">\n",
       "<title>4606797904&#45;&gt;4606798800*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3730.95,-217.5C3739.31,-217.5 3747.39,-217.5 3754.78,-217.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3754.64,-221 3764.64,-217.5 3754.64,-214 3754.64,-221\"/>\n",
       "</g>\n",
       "<!-- 4606797904tanh&#45;&gt;4606797904 -->\n",
       "<g id=\"edge25\" class=\"edge\">\n",
       "<title>4606797904tanh&#45;&gt;4606797904</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3496.23,-217.5C3503.36,-217.5 3511.54,-217.5 3520.27,-217.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3520.06,-221 3530.06,-217.5 3520.06,-214 3520.06,-221\"/>\n",
       "</g>\n",
       "<!-- 4606798032 -->\n",
       "<g id=\"node54\" class=\"node\">\n",
       "<title>4606798032</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"3858,-307.5 3858,-343.5 4038.75,-343.5 4038.75,-307.5 3858,-307.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3867.88\" y=\"-320.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3877.75,-308 3877.75,-343.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3917.62\" y=\"-320.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.0230</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3957.5,-308 3957.5,-343.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3998.12\" y=\"-320.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606798160+ -->\n",
       "<g id=\"node59\" class=\"node\">\n",
       "<title>4606798160+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"4166.62\" cy=\"-378.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"4166.62\" y=\"-373.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606798032&#45;&gt;4606798160+ -->\n",
       "<g id=\"edge92\" class=\"edge\">\n",
       "<title>4606798032&#45;&gt;4606798160+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M4024.71,-343.96C4060.38,-352.71 4101.32,-362.74 4129.84,-369.73\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"4128.86,-373.09 4139.41,-372.07 4130.53,-366.3 4128.86,-373.09\"/>\n",
       "</g>\n",
       "<!-- 4606798032* -->\n",
       "<g id=\"node55\" class=\"node\">\n",
       "<title>4606798032*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"3793.5\" cy=\"-325.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3793.5\" y=\"-320.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606798032*&#45;&gt;4606798032 -->\n",
       "<g id=\"edge26\" class=\"edge\">\n",
       "<title>4606798032*&#45;&gt;4606798032</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3820.78,-325.5C3828.31,-325.5 3836.99,-325.5 3846.22,-325.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3846.18,-329 3856.18,-325.5 3846.18,-322 3846.18,-329\"/>\n",
       "</g>\n",
       "<!-- 4606789840 -->\n",
       "<g id=\"node56\" class=\"node\">\n",
       "<title>4606789840</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"973.88,-605.5 973.88,-641.5 1159.12,-641.5 1159.12,-605.5 973.88,-605.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"983.75\" y=\"-618.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"993.62,-606 993.62,-641.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1035.75\" y=\"-618.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.0593</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1077.88,-606 1077.88,-641.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1118.5\" y=\"-618.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606790224+ -->\n",
       "<g id=\"node69\" class=\"node\">\n",
       "<title>4606790224+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1228.5\" cy=\"-623.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1228.5\" y=\"-618.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606789840&#45;&gt;4606790224+ -->\n",
       "<g id=\"edge133\" class=\"edge\">\n",
       "<title>4606789840&#45;&gt;4606790224+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1159.18,-623.5C1169.98,-623.5 1180.49,-623.5 1189.9,-623.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1189.66,-627 1199.66,-623.5 1189.66,-620 1189.66,-627\"/>\n",
       "</g>\n",
       "<!-- 4606789840+&#45;&gt;4606789840 -->\n",
       "<g id=\"edge27\" class=\"edge\">\n",
       "<title>4606789840+&#45;&gt;4606789840</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M931.92,-623.5C940.77,-623.5 951.25,-623.5 962.38,-623.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"962.17,-627 972.17,-623.5 962.17,-620 962.17,-627\"/>\n",
       "</g>\n",
       "<!-- 4606798160 -->\n",
       "<g id=\"node58\" class=\"node\">\n",
       "<title>4606798160</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"4295.25,-362.5 4295.25,-398.5 4476,-398.5 4476,-362.5 4295.25,-362.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"4305.12\" y=\"-375.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"4315,-363 4315,-398.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"4354.88\" y=\"-375.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.9275</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"4394.75,-363 4394.75,-398.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"4435.38\" y=\"-375.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606798416+ -->\n",
       "<g id=\"node67\" class=\"node\">\n",
       "<title>4606798416+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"4604.62\" cy=\"-394.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"4604.62\" y=\"-389.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606798160&#45;&gt;4606798416+ -->\n",
       "<g id=\"edge188\" class=\"edge\">\n",
       "<title>4606798160&#45;&gt;4606798416+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M4476.45,-386.3C4507.92,-388.33 4541.54,-390.49 4566.31,-392.09\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"4565.99,-395.58 4576.19,-392.73 4566.44,-388.59 4565.99,-395.58\"/>\n",
       "</g>\n",
       "<!-- 4606798160+&#45;&gt;4606798160 -->\n",
       "<g id=\"edge28\" class=\"edge\">\n",
       "<title>4606798160+&#45;&gt;4606798160</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M4193.8,-378.74C4216.38,-378.95 4250.51,-379.26 4283.7,-379.57\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"4283.35,-383.07 4293.38,-379.66 4283.41,-376.07 4283.35,-383.07\"/>\n",
       "</g>\n",
       "<!-- 4606789968 -->\n",
       "<g id=\"node60\" class=\"node\">\n",
       "<title>4606789968</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"652.12,-550.5 652.12,-586.5 832.88,-586.5 832.88,-550.5 652.12,-550.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"662\" y=\"-563.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"671.88,-551 671.88,-586.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"711.75\" y=\"-563.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 3.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"751.62,-551 751.62,-586.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"792.25\" y=\"-563.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606790096* -->\n",
       "<g id=\"node63\" class=\"node\">\n",
       "<title>4606790096*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"904.5\" cy=\"-568.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"904.5\" y=\"-563.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606789968&#45;&gt;4606790096* -->\n",
       "<g id=\"edge200\" class=\"edge\">\n",
       "<title>4606789968&#45;&gt;4606790096*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M833.32,-568.5C844.67,-568.5 855.74,-568.5 865.62,-568.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"865.5,-572 875.5,-568.5 865.5,-565 865.5,-572\"/>\n",
       "</g>\n",
       "<!-- 4606708048 -->\n",
       "<g id=\"node61\" class=\"node\">\n",
       "<title>4606708048</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"0,-853.5 0,-889.5 193.5,-889.5 193.5,-853.5 0,-853.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"16.25\" y=\"-866.7\" font-family=\"Times,serif\" font-size=\"14.00\">w0</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"32.5,-854 32.5,-889.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"72.38\" y=\"-866.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.4062</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"112.25,-854 112.25,-889.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"152.88\" y=\"-866.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606708048&#45;&gt;4606788304* -->\n",
       "<g id=\"edge198\" class=\"edge\">\n",
       "<title>4606708048&#45;&gt;4606788304*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M193.61,-854.49C202.52,-852.9 211.13,-851.38 218.94,-849.99\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"219.42,-853.46 228.65,-848.27 218.2,-846.57 219.42,-853.46\"/>\n",
       "</g>\n",
       "<!-- 4606790096 -->\n",
       "<g id=\"node62\" class=\"node\">\n",
       "<title>4606790096</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"973.88,-550.5 973.88,-586.5 1159.12,-586.5 1159.12,-550.5 973.88,-550.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"983.75\" y=\"-563.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"993.62,-551 993.62,-586.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1035.75\" y=\"-563.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;2.9253</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1077.88,-551 1077.88,-586.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1118.5\" y=\"-563.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606790096&#45;&gt;4606790224+ -->\n",
       "<g id=\"edge88\" class=\"edge\">\n",
       "<title>4606790096&#45;&gt;4606790224+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1136.41,-586.94C1146.24,-589.93 1156.17,-593.15 1165.5,-596.5 1175.46,-600.07 1186.08,-604.47 1195.68,-608.68\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1194.04,-611.78 1204.6,-612.67 1196.9,-605.39 1194.04,-611.78\"/>\n",
       "</g>\n",
       "<!-- 4606790096*&#45;&gt;4606790096 -->\n",
       "<g id=\"edge29\" class=\"edge\">\n",
       "<title>4606790096*&#45;&gt;4606790096</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M931.92,-568.5C940.77,-568.5 951.25,-568.5 962.38,-568.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"962.17,-572 972.17,-568.5 962.17,-565 962.17,-572\"/>\n",
       "</g>\n",
       "<!-- 4606798288 -->\n",
       "<g id=\"node64\" class=\"node\">\n",
       "<title>4606798288</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"4076.25,-415.5 4076.25,-451.5 4257,-451.5 4257,-415.5 4076.25,-415.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"4086.12\" y=\"-428.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"4096,-416 4096,-451.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"4135.88\" y=\"-428.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.1562</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"4175.75,-416 4175.75,-451.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"4216.38\" y=\"-428.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606798288&#45;&gt;4606798416+ -->\n",
       "<g id=\"edge138\" class=\"edge\">\n",
       "<title>4606798288&#45;&gt;4606798416+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M4257.38,-426.46C4319.44,-421.48 4403.89,-414.47 4478.25,-407.5 4507.97,-404.72 4541.61,-401.21 4566.56,-398.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"4566.63,-402.05 4576.2,-397.5 4565.89,-395.09 4566.63,-402.05\"/>\n",
       "</g>\n",
       "<!-- 4606798288* -->\n",
       "<g id=\"node65\" class=\"node\">\n",
       "<title>4606798288*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"3793.5\" cy=\"-433.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3793.5\" y=\"-428.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606798288*&#45;&gt;4606798288 -->\n",
       "<g id=\"edge30\" class=\"edge\">\n",
       "<title>4606798288*&#45;&gt;4606798288</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3820.89,-433.5C3870.87,-433.5 3981.71,-433.5 4064.3,-433.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"4064.24,-437 4074.24,-433.5 4064.24,-430 4064.24,-437\"/>\n",
       "</g>\n",
       "<!-- 4606798416 -->\n",
       "<g id=\"node66\" class=\"node\">\n",
       "<title>4606798416</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"4731,-376.5 4731,-412.5 4911.75,-412.5 4911.75,-376.5 4731,-376.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"4740.88\" y=\"-389.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"4750.75,-377 4750.75,-412.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"4790.62\" y=\"-389.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 1.0837</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"4830.5,-377 4830.5,-412.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"4871.12\" y=\"-389.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606798672+ -->\n",
       "<g id=\"node74\" class=\"node\">\n",
       "<title>4606798672+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"4974.75\" cy=\"-394.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"4974.75\" y=\"-389.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606798416&#45;&gt;4606798672+ -->\n",
       "<g id=\"edge180\" class=\"edge\">\n",
       "<title>4606798416&#45;&gt;4606798672+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M4912.18,-394.5C4920.52,-394.5 4928.62,-394.5 4936.06,-394.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"4936,-398 4946,-394.5 4936,-391 4936,-398\"/>\n",
       "</g>\n",
       "<!-- 4606798416+&#45;&gt;4606798416 -->\n",
       "<g id=\"edge31\" class=\"edge\">\n",
       "<title>4606798416+&#45;&gt;4606798416</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M4631.96,-394.5C4654.1,-394.5 4687.23,-394.5 4719.57,-394.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"4719.44,-398 4729.44,-394.5 4719.44,-391 4719.44,-398\"/>\n",
       "</g>\n",
       "<!-- 4606790224 -->\n",
       "<g id=\"node68\" class=\"node\">\n",
       "<title>4606790224</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1295.62,-605.5 1295.62,-641.5 1480.88,-641.5 1480.88,-605.5 1295.62,-605.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1305.5\" y=\"-618.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1315.38,-606 1315.38,-641.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1357.5\" y=\"-618.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;2.9845</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1399.62,-606 1399.62,-641.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1440.25\" y=\"-618.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606790608+ -->\n",
       "<g id=\"node79\" class=\"node\">\n",
       "<title>4606790608+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1548\" cy=\"-678.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1548\" y=\"-673.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606790224&#45;&gt;4606790608+ -->\n",
       "<g id=\"edge110\" class=\"edge\">\n",
       "<title>4606790224&#45;&gt;4606790608+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1456.3,-641.94C1466,-644.94 1475.8,-648.17 1485,-651.5 1494.86,-655.07 1505.4,-659.44 1514.93,-663.62\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1513.24,-666.69 1523.8,-667.58 1516.09,-660.3 1513.24,-666.69\"/>\n",
       "</g>\n",
       "<!-- 4606790224+&#45;&gt;4606790224 -->\n",
       "<g id=\"edge32\" class=\"edge\">\n",
       "<title>4606790224+&#45;&gt;4606790224</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1255.9,-623.5C1264.15,-623.5 1273.79,-623.5 1284.05,-623.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1283.86,-627 1293.86,-623.5 1283.86,-620 1283.86,-627\"/>\n",
       "</g>\n",
       "<!-- 4606790352 -->\n",
       "<g id=\"node70\" class=\"node\">\n",
       "<title>4606790352</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"973.88,-715.5 973.88,-751.5 1159.12,-751.5 1159.12,-715.5 973.88,-715.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"983.75\" y=\"-728.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"993.62,-716 993.62,-751.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1035.75\" y=\"-728.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;1.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1077.88,-716 1077.88,-751.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1118.5\" y=\"-728.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606790480* -->\n",
       "<g id=\"node76\" class=\"node\">\n",
       "<title>4606790480*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1228.5\" cy=\"-678.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1228.5\" y=\"-673.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606790352&#45;&gt;4606790480* -->\n",
       "<g id=\"edge134\" class=\"edge\">\n",
       "<title>4606790352&#45;&gt;4606790480*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1139.62,-715.01C1148.4,-712.35 1157.2,-709.5 1165.5,-706.5 1175.59,-702.86 1186.32,-698.27 1195.97,-693.88\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1197.36,-697.09 1204.95,-689.69 1194.4,-690.75 1197.36,-697.09\"/>\n",
       "</g>\n",
       "<!-- 4606798544 -->\n",
       "<g id=\"node71\" class=\"node\">\n",
       "<title>4606798544</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"4514.25,-454.5 4514.25,-490.5 4695,-490.5 4695,-454.5 4514.25,-454.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"4524.12\" y=\"-467.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"4534,-455 4534,-490.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"4573.88\" y=\"-467.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.2767</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"4613.75,-455 4613.75,-490.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"4654.38\" y=\"-467.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606798544&#45;&gt;4606798672+ -->\n",
       "<g id=\"edge157\" class=\"edge\">\n",
       "<title>4606798544&#45;&gt;4606798672+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M4695.35,-463.44C4757.07,-455.78 4840.46,-442.61 4911.75,-421.5 4921.97,-418.47 4932.75,-414.19 4942.39,-409.94\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"4943.71,-413.18 4951.34,-405.83 4940.79,-406.82 4943.71,-413.18\"/>\n",
       "</g>\n",
       "<!-- 4606798544*&#45;&gt;4606798544 -->\n",
       "<g id=\"edge33\" class=\"edge\">\n",
       "<title>4606798544*&#45;&gt;4606798544</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3820.96,-491.85C3925.8,-489.25 4315.4,-479.62 4502.32,-475\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"4502.36,-478.5 4512.27,-474.76 4502.19,-471.51 4502.36,-478.5\"/>\n",
       "</g>\n",
       "<!-- 4606798672 -->\n",
       "<g id=\"node73\" class=\"node\">\n",
       "<title>4606798672</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"5037.75,-363.5 5037.75,-399.5 5218.5,-399.5 5218.5,-363.5 5037.75,-363.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"5047.62\" y=\"-376.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"5057.5,-364 5057.5,-399.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"5097.38\" y=\"-376.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 1.3604</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"5137.25,-364 5137.25,-399.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"5177.88\" y=\"-376.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606798928+ -->\n",
       "<g id=\"node84\" class=\"node\">\n",
       "<title>4606798928+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"5281.5\" cy=\"-353.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"5281.5\" y=\"-348.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606798672&#45;&gt;4606798928+ -->\n",
       "<g id=\"edge106\" class=\"edge\">\n",
       "<title>4606798672&#45;&gt;4606798928+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M5218.93,-364.89C5227.72,-363.26 5236.25,-361.68 5244.02,-360.25\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"5244.48,-363.72 5253.67,-358.46 5243.21,-356.84 5244.48,-363.72\"/>\n",
       "</g>\n",
       "<!-- 4606798672+&#45;&gt;4606798672 -->\n",
       "<g id=\"edge34\" class=\"edge\">\n",
       "<title>4606798672+&#45;&gt;4606798672</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M5001.77,-392.27C5008.96,-391.65 5017.23,-390.94 5026.01,-390.18\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"5026.19,-393.68 5035.85,-389.34 5025.59,-386.71 5026.19,-393.68\"/>\n",
       "</g>\n",
       "<!-- 4606790480 -->\n",
       "<g id=\"node75\" class=\"node\">\n",
       "<title>4606790480</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1295.62,-660.5 1295.62,-696.5 1480.88,-696.5 1480.88,-660.5 1295.62,-660.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1305.5\" y=\"-673.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1315.38,-661 1315.38,-696.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1357.5\" y=\"-673.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.3086</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1399.62,-661 1399.62,-696.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1440.25\" y=\"-673.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606790480&#45;&gt;4606790608+ -->\n",
       "<g id=\"edge191\" class=\"edge\">\n",
       "<title>4606790480&#45;&gt;4606790608+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1481.01,-678.5C1490.99,-678.5 1500.68,-678.5 1509.42,-678.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1509.19,-682 1519.19,-678.5 1509.19,-675 1509.19,-682\"/>\n",
       "</g>\n",
       "<!-- 4606790480*&#45;&gt;4606790480 -->\n",
       "<g id=\"edge35\" class=\"edge\">\n",
       "<title>4606790480*&#45;&gt;4606790480</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1255.9,-678.5C1264.15,-678.5 1273.79,-678.5 1284.05,-678.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1283.86,-682 1293.86,-678.5 1283.86,-675 1283.86,-682\"/>\n",
       "</g>\n",
       "<!-- 4606708560 -->\n",
       "<g id=\"node77\" class=\"node\">\n",
       "<title>4606708560</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"319.5,-880.5 319.5,-916.5 517.5,-916.5 517.5,-880.5 319.5,-880.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"335.75\" y=\"-893.7\" font-family=\"Times,serif\" font-size=\"14.00\">w1</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"352,-881 352,-916.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"394.12\" y=\"-893.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.7751</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"436.25,-881 436.25,-916.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"476.88\" y=\"-893.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606708560&#45;&gt;4606788688* -->\n",
       "<g id=\"edge123\" class=\"edge\">\n",
       "<title>4606708560&#45;&gt;4606788688*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M517.64,-898.5C526.11,-898.5 534.3,-898.5 541.79,-898.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"541.79,-902 551.79,-898.5 541.79,-895 541.79,-902\"/>\n",
       "</g>\n",
       "<!-- 4606790608 -->\n",
       "<g id=\"node78\" class=\"node\">\n",
       "<title>4606790608</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1617.75,-660.5 1617.75,-696.5 1803,-696.5 1803,-660.5 1617.75,-660.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1627.62\" y=\"-673.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1637.5,-661 1637.5,-696.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1679.62\" y=\"-673.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;3.2931</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1721.75,-661 1721.75,-696.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1762.38\" y=\"-673.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606790736tanh -->\n",
       "<g id=\"node86\" class=\"node\">\n",
       "<title>4606790736tanh</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1872.75\" cy=\"-678.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1872.75\" y=\"-673.45\" font-family=\"Times,serif\" font-size=\"14.00\">tanh</text>\n",
       "</g>\n",
       "<!-- 4606790608&#45;&gt;4606790736tanh -->\n",
       "<g id=\"edge90\" class=\"edge\">\n",
       "<title>4606790608&#45;&gt;4606790736tanh</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1803.27,-678.5C1814.1,-678.5 1824.63,-678.5 1834.06,-678.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1833.85,-682 1843.85,-678.5 1833.85,-675 1833.85,-682\"/>\n",
       "</g>\n",
       "<!-- 4606790608+&#45;&gt;4606790608 -->\n",
       "<g id=\"edge36\" class=\"edge\">\n",
       "<title>4606790608+&#45;&gt;4606790608</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1575.48,-678.5C1584.36,-678.5 1594.86,-678.5 1606.01,-678.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1605.83,-682 1615.83,-678.5 1605.83,-675 1605.83,-682\"/>\n",
       "</g>\n",
       "<!-- 4606708688 -->\n",
       "<g id=\"node80\" class=\"node\">\n",
       "<title>4606708688</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"645.75,-715.5 645.75,-751.5 839.25,-751.5 839.25,-715.5 645.75,-715.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"662\" y=\"-728.7\" font-family=\"Times,serif\" font-size=\"14.00\">w2</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"678.25,-716 678.25,-751.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"718.12\" y=\"-728.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.7134</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"758,-716 758,-751.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"798.62\" y=\"-728.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606708688&#45;&gt;4606789200* -->\n",
       "<g id=\"edge79\" class=\"edge\">\n",
       "<title>4606708688&#45;&gt;4606789200*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M812.41,-751.94C822.24,-754.93 832.17,-758.15 841.5,-761.5 851.46,-765.07 862.08,-769.47 871.68,-773.68\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"870.04,-776.78 880.6,-777.67 872.9,-770.39 870.04,-776.78\"/>\n",
       "</g>\n",
       "<!-- 4606798800 -->\n",
       "<g id=\"node81\" class=\"node\">\n",
       "<title>4606798800</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"4293,-284.5 4293,-320.5 4478.25,-320.5 4478.25,-284.5 4293,-284.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"4302.88\" y=\"-297.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"4312.75,-285 4312.75,-320.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"4354.88\" y=\"-297.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.7522</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"4397,-285 4397,-320.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"4437.62\" y=\"-297.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606798800&#45;&gt;4606798928+ -->\n",
       "<g id=\"edge75\" class=\"edge\">\n",
       "<title>4606798800&#45;&gt;4606798928+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M4478.74,-311.9C4566.47,-320.04 4702.28,-330.5 4820.38,-330.5 4820.38,-330.5 4820.38,-330.5 4975.75,-330.5 5072.34,-330.5 5185.67,-342.13 5243.08,-348.85\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"5242.61,-352.32 5252.96,-350.03 5243.44,-345.37 5242.61,-352.32\"/>\n",
       "</g>\n",
       "<!-- 4606798800*&#45;&gt;4606798800 -->\n",
       "<g id=\"edge37\" class=\"edge\">\n",
       "<title>4606798800*&#45;&gt;4606798800</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3820.24,-221.21C3899.24,-232.59 4141.37,-267.46 4281.49,-287.64\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"4280.75,-291.07 4291.15,-289.04 4281.75,-284.15 4280.75,-291.07\"/>\n",
       "</g>\n",
       "<!-- 4606798928 -->\n",
       "<g id=\"node83\" class=\"node\">\n",
       "<title>4606798928</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"5344.5,-335.5 5344.5,-371.5 5525.25,-371.5 5525.25,-335.5 5344.5,-335.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"5354.38\" y=\"-348.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"5364.25,-336 5364.25,-371.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"5404.12\" y=\"-348.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.6082</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"5444,-336 5444,-371.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"5484.62\" y=\"-348.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606799056tanh -->\n",
       "<g id=\"node89\" class=\"node\">\n",
       "<title>4606799056tanh</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"5588.25\" cy=\"-353.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"5588.25\" y=\"-348.45\" font-family=\"Times,serif\" font-size=\"14.00\">tanh</text>\n",
       "</g>\n",
       "<!-- 4606798928&#45;&gt;4606799056tanh -->\n",
       "<g id=\"edge101\" class=\"edge\">\n",
       "<title>4606798928&#45;&gt;4606799056tanh</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M5525.68,-353.5C5534.02,-353.5 5542.12,-353.5 5549.56,-353.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"5549.5,-357 5559.5,-353.5 5549.5,-350 5549.5,-357\"/>\n",
       "</g>\n",
       "<!-- 4606798928+&#45;&gt;4606798928 -->\n",
       "<g id=\"edge38\" class=\"edge\">\n",
       "<title>4606798928+&#45;&gt;4606798928</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M5308.87,-353.5C5316.01,-353.5 5324.2,-353.5 5332.89,-353.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"5332.61,-357 5342.61,-353.5 5332.61,-350 5332.61,-357\"/>\n",
       "</g>\n",
       "<!-- 4606790736 -->\n",
       "<g id=\"node85\" class=\"node\">\n",
       "<title>4606790736</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1935.75,-660.5 1935.75,-696.5 2134.5,-696.5 2134.5,-660.5 1935.75,-660.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1952.38\" y=\"-673.7\" font-family=\"Times,serif\" font-size=\"14.00\">out</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1969,-661 1969,-696.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2011.12\" y=\"-673.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.9972</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2053.25,-661 2053.25,-696.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2093.88\" y=\"-673.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606790736&#45;&gt;4606795984* -->\n",
       "<g id=\"edge117\" class=\"edge\">\n",
       "<title>4606790736&#45;&gt;4606795984*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2121.77,-696.81C2126.36,-699.6 2130.66,-702.81 2134.5,-706.5 2171.32,-741.82 2144.55,-771.58 2170.5,-815.5 2171.47,-817.15 2172.56,-818.78 2173.72,-820.38\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2170.86,-822.42 2179.93,-827.9 2176.26,-817.96 2170.86,-822.42\"/>\n",
       "</g>\n",
       "<!-- 4606790736&#45;&gt;4606797136* -->\n",
       "<g id=\"edge192\" class=\"edge\">\n",
       "<title>4606790736&#45;&gt;4606797136*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2125.13,-660.02C2128.53,-657.51 2131.69,-654.69 2134.5,-651.5 2208.24,-568.03 2138.34,-510.13 2170.5,-403.5 2173.36,-394.01 2177.62,-384.09 2181.86,-375.32\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2184.85,-377.17 2186.26,-366.67 2178.61,-374 2184.85,-377.17\"/>\n",
       "</g>\n",
       "<!-- 4606793680* -->\n",
       "<g id=\"node152\" class=\"node\">\n",
       "<title>4606793680*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2197.5\" cy=\"-623.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2197.5\" y=\"-618.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606790736&#45;&gt;4606793680* -->\n",
       "<g id=\"edge127\" class=\"edge\">\n",
       "<title>4606790736&#45;&gt;4606793680*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2108.53,-660.02C2117.34,-657.36 2126.17,-654.5 2134.5,-651.5 2144.59,-647.86 2155.32,-643.28 2164.98,-638.88\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2166.37,-642.1 2173.95,-634.7 2163.41,-635.75 2166.37,-642.1\"/>\n",
       "</g>\n",
       "<!-- 4606794832* -->\n",
       "<g id=\"node179\" class=\"node\">\n",
       "<title>4606794832*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2197.5\" cy=\"-788.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2197.5\" y=\"-783.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606790736&#45;&gt;4606794832* -->\n",
       "<g id=\"edge161\" class=\"edge\">\n",
       "<title>4606790736&#45;&gt;4606794832*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2118.26,-696.89C2123.99,-699.65 2129.48,-702.84 2134.5,-706.5 2157.81,-723.49 2152.63,-737.86 2170.5,-760.5 2171.69,-762 2172.94,-763.52 2174.22,-765.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2171.47,-767.21 2180.73,-772.36 2176.7,-762.56 2171.47,-767.21\"/>\n",
       "</g>\n",
       "<!-- 4606790736tanh&#45;&gt;4606790736 -->\n",
       "<g id=\"edge39\" class=\"edge\">\n",
       "<title>4606790736tanh&#45;&gt;4606790736</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1900.23,-678.5C1907.36,-678.5 1915.54,-678.5 1924.27,-678.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1924.06,-682 1934.06,-678.5 1924.06,-675 1924.06,-682\"/>\n",
       "</g>\n",
       "<!-- 4606708816 -->\n",
       "<g id=\"node87\" class=\"node\">\n",
       "<title>4606708816</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"326.62,-770.5 326.62,-806.5 510.38,-806.5 510.38,-770.5 326.62,-770.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"338\" y=\"-783.7\" font-family=\"Times,serif\" font-size=\"14.00\">b</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"349.38,-771 349.38,-806.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"389.25\" y=\"-783.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.7213</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"429.12,-771 429.12,-806.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"469.75\" y=\"-783.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606708816&#45;&gt;4606788816+ -->\n",
       "<g id=\"edge89\" class=\"edge\">\n",
       "<title>4606708816&#45;&gt;4606788816+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M488.41,-806.94C498.24,-809.93 508.17,-813.15 517.5,-816.5 527.46,-820.07 538.08,-824.47 547.68,-828.68\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"546.04,-831.78 556.6,-832.67 548.9,-825.39 546.04,-831.78\"/>\n",
       "</g>\n",
       "<!-- 4606799056 -->\n",
       "<g id=\"node88\" class=\"node\">\n",
       "<title>4606799056</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"5651.25,-335.5 5651.25,-371.5 5845.5,-371.5 5845.5,-335.5 5651.25,-335.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"5667.88\" y=\"-348.7\" font-family=\"Times,serif\" font-size=\"14.00\">out</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"5684.5,-336 5684.5,-371.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"5724.38\" y=\"-348.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.5428</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"5764.25,-336 5764.25,-371.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"5804.88\" y=\"-348.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606799056tanh&#45;&gt;4606799056 -->\n",
       "<g id=\"edge40\" class=\"edge\">\n",
       "<title>4606799056tanh&#45;&gt;4606799056</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M5615.72,-353.5C5622.83,-353.5 5630.97,-353.5 5639.65,-353.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"5639.38,-357 5649.38,-353.5 5639.38,-350 5639.38,-357\"/>\n",
       "</g>\n",
       "<!-- 4606708944 -->\n",
       "<g id=\"node90\" class=\"node\">\n",
       "<title>4606708944</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"319.5,-633.5 319.5,-669.5 517.5,-669.5 517.5,-633.5 319.5,-633.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"335.75\" y=\"-646.7\" font-family=\"Times,serif\" font-size=\"14.00\">w0</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"352,-634 352,-669.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"394.12\" y=\"-646.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.3111</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"436.25,-634 436.25,-669.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"476.88\" y=\"-646.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606708944&#45;&gt;4606789712* -->\n",
       "<g id=\"edge187\" class=\"edge\">\n",
       "<title>4606708944&#45;&gt;4606789712*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M517.64,-668.06C526.49,-669.55 535.02,-670.99 542.78,-672.3\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"541.97,-675.72 552.41,-673.93 543.13,-668.81 541.97,-675.72\"/>\n",
       "</g>\n",
       "<!-- 4606790864 -->\n",
       "<g id=\"node91\" class=\"node\">\n",
       "<title>4606790864</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"652.12,-413.5 652.12,-449.5 832.88,-449.5 832.88,-413.5 652.12,-413.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"662\" y=\"-426.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"671.88,-414 671.88,-449.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"711.75\" y=\"-426.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 2.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"751.62,-414 751.62,-449.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"792.25\" y=\"-426.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606790992* -->\n",
       "<g id=\"node94\" class=\"node\">\n",
       "<title>4606790992*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"904.5\" cy=\"-403.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"904.5\" y=\"-398.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606790864&#45;&gt;4606790992* -->\n",
       "<g id=\"edge174\" class=\"edge\">\n",
       "<title>4606790864&#45;&gt;4606790992*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M833.32,-415.78C845.1,-413.72 856.59,-411.71 866.74,-409.93\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"867.26,-413.4 876.5,-408.22 866.05,-406.5 867.26,-413.4\"/>\n",
       "</g>\n",
       "<!-- 4606709072 -->\n",
       "<g id=\"node92\" class=\"node\">\n",
       "<title>4606709072</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"643.5,-495.5 643.5,-531.5 841.5,-531.5 841.5,-495.5 643.5,-495.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"659.75\" y=\"-508.7\" font-family=\"Times,serif\" font-size=\"14.00\">w1</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"676,-496 676,-531.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"718.12\" y=\"-508.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.9751</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"760.25,-496 760.25,-531.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"800.88\" y=\"-508.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606709072&#45;&gt;4606790096* -->\n",
       "<g id=\"edge209\" class=\"edge\">\n",
       "<title>4606709072&#45;&gt;4606790096*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M812.41,-531.94C822.24,-534.93 832.17,-538.15 841.5,-541.5 851.46,-545.07 862.08,-549.47 871.68,-553.68\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"870.04,-556.78 880.6,-557.67 872.9,-550.39 870.04,-556.78\"/>\n",
       "</g>\n",
       "<!-- 4606790992 -->\n",
       "<g id=\"node93\" class=\"node\">\n",
       "<title>4606790992</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"976.12,-385.5 976.12,-421.5 1156.88,-421.5 1156.88,-385.5 976.12,-385.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"986\" y=\"-398.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"995.88,-386 995.88,-421.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1035.75\" y=\"-398.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.3195</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1075.62,-386 1075.62,-421.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1116.25\" y=\"-398.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606791120+ -->\n",
       "<g id=\"node97\" class=\"node\">\n",
       "<title>4606791120+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1228.5\" cy=\"-403.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1228.5\" y=\"-398.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606790992&#45;&gt;4606791120+ -->\n",
       "<g id=\"edge108\" class=\"edge\">\n",
       "<title>4606790992&#45;&gt;4606791120+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1157.32,-403.5C1168.67,-403.5 1179.74,-403.5 1189.62,-403.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1189.5,-407 1199.5,-403.5 1189.5,-400 1189.5,-407\"/>\n",
       "</g>\n",
       "<!-- 4606790992*&#45;&gt;4606790992 -->\n",
       "<g id=\"edge41\" class=\"edge\">\n",
       "<title>4606790992*&#45;&gt;4606790992</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M931.92,-403.5C941.27,-403.5 952.43,-403.5 964.25,-403.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"964.24,-407 974.24,-403.5 964.24,-400 964.24,-407\"/>\n",
       "</g>\n",
       "<!-- 4606709200 -->\n",
       "<g id=\"node95\" class=\"node\">\n",
       "<title>4606709200</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"969.75,-660.5 969.75,-696.5 1163.25,-696.5 1163.25,-660.5 969.75,-660.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"986\" y=\"-673.7\" font-family=\"Times,serif\" font-size=\"14.00\">w2</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1002.25,-661 1002.25,-696.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1042.12\" y=\"-673.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.3086</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1082,-661 1082,-696.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1122.62\" y=\"-673.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606709200&#45;&gt;4606790480* -->\n",
       "<g id=\"edge91\" class=\"edge\">\n",
       "<title>4606709200&#45;&gt;4606790480*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1163.34,-678.5C1172.64,-678.5 1181.65,-678.5 1189.82,-678.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1189.63,-682 1199.63,-678.5 1189.63,-675 1189.63,-682\"/>\n",
       "</g>\n",
       "<!-- 4606791120 -->\n",
       "<g id=\"node96\" class=\"node\">\n",
       "<title>4606791120</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1297.88,-385.5 1297.88,-421.5 1478.62,-421.5 1478.62,-385.5 1297.88,-385.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1307.75\" y=\"-398.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1317.62,-386 1317.62,-421.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1357.5\" y=\"-398.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 1.1849</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1397.38,-386 1397.38,-421.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1438\" y=\"-398.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606791504+ -->\n",
       "<g id=\"node104\" class=\"node\">\n",
       "<title>4606791504+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1548\" cy=\"-403.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1548\" y=\"-398.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606791120&#45;&gt;4606791504+ -->\n",
       "<g id=\"edge114\" class=\"edge\">\n",
       "<title>4606791120&#45;&gt;4606791504+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1478.73,-403.5C1489.48,-403.5 1499.97,-403.5 1509.37,-403.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1509.12,-407 1519.12,-403.5 1509.12,-400 1509.12,-407\"/>\n",
       "</g>\n",
       "<!-- 4606791120+&#45;&gt;4606791120 -->\n",
       "<g id=\"edge42\" class=\"edge\">\n",
       "<title>4606791120+&#45;&gt;4606791120</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1255.9,-403.5C1264.72,-403.5 1275.13,-403.5 1286.18,-403.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1285.89,-407 1295.89,-403.5 1285.89,-400 1285.89,-407\"/>\n",
       "</g>\n",
       "<!-- 4606709328 -->\n",
       "<g id=\"node98\" class=\"node\">\n",
       "<title>4606709328</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"650.62,-605.5 650.62,-641.5 834.38,-641.5 834.38,-605.5 650.62,-605.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"662\" y=\"-618.7\" font-family=\"Times,serif\" font-size=\"14.00\">b</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"673.38,-606 673.38,-641.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"713.25\" y=\"-618.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.5629</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"753.12,-606 753.12,-641.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"793.75\" y=\"-618.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606709328&#45;&gt;4606789840+ -->\n",
       "<g id=\"edge137\" class=\"edge\">\n",
       "<title>4606709328&#45;&gt;4606789840+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M834.72,-623.5C845.67,-623.5 856.34,-623.5 865.88,-623.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"865.78,-627 875.78,-623.5 865.78,-620 865.78,-627\"/>\n",
       "</g>\n",
       "<!-- 4606791248 -->\n",
       "<g id=\"node99\" class=\"node\">\n",
       "<title>4606791248</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"976.12,-495.5 976.12,-531.5 1156.88,-531.5 1156.88,-495.5 976.12,-495.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"986\" y=\"-508.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"995.88,-496 995.88,-531.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1035.75\" y=\"-508.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 3.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1075.62,-496 1075.62,-531.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1116.25\" y=\"-508.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606791376* -->\n",
       "<g id=\"node101\" class=\"node\">\n",
       "<title>4606791376*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1228.5\" cy=\"-458.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1228.5\" y=\"-453.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606791248&#45;&gt;4606791376* -->\n",
       "<g id=\"edge147\" class=\"edge\">\n",
       "<title>4606791248&#45;&gt;4606791376*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1136.41,-495.06C1146.24,-492.07 1156.17,-488.85 1165.5,-485.5 1175.46,-481.93 1186.08,-477.53 1195.68,-473.32\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1196.9,-476.61 1204.6,-469.33 1194.04,-470.22 1196.9,-476.61\"/>\n",
       "</g>\n",
       "<!-- 4606791376 -->\n",
       "<g id=\"node100\" class=\"node\">\n",
       "<title>4606791376</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1297.88,-440.5 1297.88,-476.5 1478.62,-476.5 1478.62,-440.5 1297.88,-440.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1307.75\" y=\"-453.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1317.62,-441 1317.62,-476.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1357.5\" y=\"-453.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.3631</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1397.38,-441 1397.38,-476.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1438\" y=\"-453.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606791376&#45;&gt;4606791504+ -->\n",
       "<g id=\"edge165\" class=\"edge\">\n",
       "<title>4606791376&#45;&gt;4606791504+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1456.3,-440.06C1466,-437.06 1475.8,-433.83 1485,-430.5 1494.86,-426.93 1505.4,-422.56 1514.93,-418.38\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1516.09,-421.7 1523.8,-414.42 1513.24,-415.31 1516.09,-421.7\"/>\n",
       "</g>\n",
       "<!-- 4606791376*&#45;&gt;4606791376 -->\n",
       "<g id=\"edge43\" class=\"edge\">\n",
       "<title>4606791376*&#45;&gt;4606791376</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1255.9,-458.5C1264.72,-458.5 1275.13,-458.5 1286.18,-458.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1285.89,-462 1295.89,-458.5 1285.89,-455 1285.89,-462\"/>\n",
       "</g>\n",
       "<!-- 4606709456 -->\n",
       "<g id=\"node102\" class=\"node\">\n",
       "<title>4606709456</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"645.75,-358.5 645.75,-394.5 839.25,-394.5 839.25,-358.5 645.75,-358.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"662\" y=\"-371.7\" font-family=\"Times,serif\" font-size=\"14.00\">w0</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"678.25,-359 678.25,-394.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"718.12\" y=\"-371.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.1597</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"758,-359 758,-394.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"798.62\" y=\"-371.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606709456&#45;&gt;4606790992* -->\n",
       "<g id=\"edge195\" class=\"edge\">\n",
       "<title>4606709456&#45;&gt;4606790992*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M839.34,-392.67C849.02,-394.31 858.38,-395.89 866.82,-397.31\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"866.14,-400.74 876.58,-398.96 867.3,-393.84 866.14,-400.74\"/>\n",
       "</g>\n",
       "<!-- 4606791504 -->\n",
       "<g id=\"node103\" class=\"node\">\n",
       "<title>4606791504</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1620,-385.5 1620,-421.5 1800.75,-421.5 1800.75,-385.5 1620,-385.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1629.88\" y=\"-398.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1639.75,-386 1639.75,-421.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1679.62\" y=\"-398.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 1.5480</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1719.5,-386 1719.5,-421.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1760.12\" y=\"-398.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606791888+ -->\n",
       "<g id=\"node112\" class=\"node\">\n",
       "<title>4606791888+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1872.75\" cy=\"-403.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1872.75\" y=\"-398.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606791504&#45;&gt;4606791888+ -->\n",
       "<g id=\"edge185\" class=\"edge\">\n",
       "<title>4606791504&#45;&gt;4606791888+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1800.94,-403.5C1812.6,-403.5 1823.98,-403.5 1834.1,-403.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1833.82,-407 1843.82,-403.5 1833.82,-400 1833.82,-407\"/>\n",
       "</g>\n",
       "<!-- 4606791504+&#45;&gt;4606791504 -->\n",
       "<g id=\"edge44\" class=\"edge\">\n",
       "<title>4606791504+&#45;&gt;4606791504</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1575.48,-403.5C1585.02,-403.5 1596.43,-403.5 1608.51,-403.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1608.25,-407 1618.25,-403.5 1608.25,-400 1608.25,-407\"/>\n",
       "</g>\n",
       "<!-- 4606709584 -->\n",
       "<g id=\"node105\" class=\"node\">\n",
       "<title>4606709584</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"969.75,-440.5 969.75,-476.5 1163.25,-476.5 1163.25,-440.5 969.75,-440.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"986\" y=\"-453.7\" font-family=\"Times,serif\" font-size=\"14.00\">w1</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1002.25,-441 1002.25,-476.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1042.12\" y=\"-453.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.1210</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1082,-441 1082,-476.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1122.62\" y=\"-453.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606709584&#45;&gt;4606791376* -->\n",
       "<g id=\"edge82\" class=\"edge\">\n",
       "<title>4606709584&#45;&gt;4606791376*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1163.34,-458.5C1172.64,-458.5 1181.65,-458.5 1189.82,-458.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1189.63,-462 1199.63,-458.5 1189.63,-455 1189.63,-462\"/>\n",
       "</g>\n",
       "<!-- 4606709712 -->\n",
       "<g id=\"node106\" class=\"node\">\n",
       "<title>4606709712</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1291.5,-275.5 1291.5,-311.5 1485,-311.5 1485,-275.5 1291.5,-275.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1307.75\" y=\"-288.7\" font-family=\"Times,serif\" font-size=\"14.00\">w2</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1324,-276 1324,-311.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1363.88\" y=\"-288.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.8124</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1403.75,-276 1403.75,-311.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1444.38\" y=\"-288.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606791760* -->\n",
       "<g id=\"node109\" class=\"node\">\n",
       "<title>4606791760*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1548\" cy=\"-348.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1548\" y=\"-343.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606709712&#45;&gt;4606791760* -->\n",
       "<g id=\"edge99\" class=\"edge\">\n",
       "<title>4606709712&#45;&gt;4606791760*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1459.45,-311.99C1468.12,-314.65 1476.81,-317.51 1485,-320.5 1495,-324.14 1505.64,-328.69 1515.23,-333.05\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1513.61,-336.16 1524.15,-337.21 1516.56,-329.81 1513.61,-336.16\"/>\n",
       "</g>\n",
       "<!-- 4606791632 -->\n",
       "<g id=\"node107\" class=\"node\">\n",
       "<title>4606791632</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1295.62,-330.5 1295.62,-366.5 1480.88,-366.5 1480.88,-330.5 1295.62,-330.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1305.5\" y=\"-343.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1315.38,-331 1315.38,-366.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1357.5\" y=\"-343.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;1.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1399.62,-331 1399.62,-366.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1440.25\" y=\"-343.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606791632&#45;&gt;4606791760* -->\n",
       "<g id=\"edge87\" class=\"edge\">\n",
       "<title>4606791632&#45;&gt;4606791760*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1481.01,-348.5C1490.99,-348.5 1500.68,-348.5 1509.42,-348.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1509.19,-352 1519.19,-348.5 1509.19,-345 1509.19,-352\"/>\n",
       "</g>\n",
       "<!-- 4606791760 -->\n",
       "<g id=\"node108\" class=\"node\">\n",
       "<title>4606791760</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1617.75,-330.5 1617.75,-366.5 1803,-366.5 1803,-330.5 1617.75,-330.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1627.62\" y=\"-343.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1637.5,-331 1637.5,-366.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1679.62\" y=\"-343.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.8124</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1721.75,-331 1721.75,-366.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1762.38\" y=\"-343.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606791760&#45;&gt;4606791888+ -->\n",
       "<g id=\"edge139\" class=\"edge\">\n",
       "<title>4606791760&#45;&gt;4606791888+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1783.78,-366.98C1792.59,-369.64 1801.42,-372.5 1809.75,-375.5 1819.84,-379.14 1830.57,-383.72 1840.23,-388.12\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1838.66,-391.25 1849.2,-392.3 1841.62,-384.9 1838.66,-391.25\"/>\n",
       "</g>\n",
       "<!-- 4606791760*&#45;&gt;4606791760 -->\n",
       "<g id=\"edge45\" class=\"edge\">\n",
       "<title>4606791760*&#45;&gt;4606791760</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1575.48,-348.5C1584.36,-348.5 1594.86,-348.5 1606.01,-348.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1605.83,-352 1615.83,-348.5 1605.83,-345 1605.83,-352\"/>\n",
       "</g>\n",
       "<!-- 4606709840 -->\n",
       "<g id=\"node110\" class=\"node\">\n",
       "<title>4606709840</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"974.62,-330.5 974.62,-366.5 1158.38,-366.5 1158.38,-330.5 974.62,-330.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"986\" y=\"-343.7\" font-family=\"Times,serif\" font-size=\"14.00\">b</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"997.38,-331 997.38,-366.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1037.25\" y=\"-343.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.8655</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1077.12,-331 1077.12,-366.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1117.75\" y=\"-343.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606709840&#45;&gt;4606791120+ -->\n",
       "<g id=\"edge116\" class=\"edge\">\n",
       "<title>4606709840&#45;&gt;4606791120+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1139.62,-366.99C1148.4,-369.65 1157.2,-372.5 1165.5,-375.5 1175.59,-379.14 1186.32,-383.73 1195.97,-388.12\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1194.4,-391.25 1204.95,-392.31 1197.36,-384.91 1194.4,-391.25\"/>\n",
       "</g>\n",
       "<!-- 4606791888 -->\n",
       "<g id=\"node111\" class=\"node\">\n",
       "<title>4606791888</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1944.75,-385.5 1944.75,-421.5 2125.5,-421.5 2125.5,-385.5 1944.75,-385.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1954.62\" y=\"-398.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1964.5,-386 1964.5,-421.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2004.38\" y=\"-398.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.7356</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2044.25,-386 2044.25,-421.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2084.88\" y=\"-398.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606792016tanh -->\n",
       "<g id=\"node115\" class=\"node\">\n",
       "<title>4606792016tanh</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2197.5\" cy=\"-430.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2197.5\" y=\"-425.45\" font-family=\"Times,serif\" font-size=\"14.00\">tanh</text>\n",
       "</g>\n",
       "<!-- 4606791888&#45;&gt;4606792016tanh -->\n",
       "<g id=\"edge169\" class=\"edge\">\n",
       "<title>4606791888&#45;&gt;4606792016tanh</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2125.69,-418.58C2137.78,-420.61 2149.59,-422.6 2159.99,-424.35\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2159.13,-427.76 2169.57,-425.97 2160.29,-420.86 2159.13,-427.76\"/>\n",
       "</g>\n",
       "<!-- 4606791888+&#45;&gt;4606791888 -->\n",
       "<g id=\"edge46\" class=\"edge\">\n",
       "<title>4606791888+&#45;&gt;4606791888</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1900.23,-403.5C1909.77,-403.5 1921.18,-403.5 1933.26,-403.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1933,-407 1943,-403.5 1933,-400 1933,-407\"/>\n",
       "</g>\n",
       "<!-- 4606709968 -->\n",
       "<g id=\"node113\" class=\"node\">\n",
       "<title>4606709968</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"967.5,-137.5 967.5,-173.5 1165.5,-173.5 1165.5,-137.5 967.5,-137.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"983.75\" y=\"-150.7\" font-family=\"Times,serif\" font-size=\"14.00\">w0</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1000,-138 1000,-173.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1042.12\" y=\"-150.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.3484</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1084.25,-138 1084.25,-173.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1124.88\" y=\"-150.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606792272* -->\n",
       "<g id=\"node120\" class=\"node\">\n",
       "<title>4606792272*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1228.5\" cy=\"-128.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1228.5\" y=\"-123.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606709968&#45;&gt;4606792272* -->\n",
       "<g id=\"edge167\" class=\"edge\">\n",
       "<title>4606709968&#45;&gt;4606792272*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1165.64,-138.94C1174.49,-137.45 1183.02,-136.01 1190.78,-134.7\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1191.13,-138.19 1200.41,-133.07 1189.97,-131.28 1191.13,-138.19\"/>\n",
       "</g>\n",
       "<!-- 4606792016 -->\n",
       "<g id=\"node114\" class=\"node\">\n",
       "<title>4606792016</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2262.38,-440.5 2262.38,-476.5 2456.62,-476.5 2456.62,-440.5 2262.38,-440.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2279\" y=\"-453.7\" font-family=\"Times,serif\" font-size=\"14.00\">out</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2295.62,-441 2295.62,-476.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2335.5\" y=\"-453.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.6265</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2375.38,-441 2375.38,-476.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2416\" y=\"-453.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606792016&#45;&gt;4606796240* -->\n",
       "<g id=\"edge196\" class=\"edge\">\n",
       "<title>4606792016&#45;&gt;4606796240*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2447.7,-476.98C2451.57,-479.48 2455.21,-482.3 2458.5,-485.5 2497.54,-523.4 2472,-552.97 2494.5,-602.5 2496.96,-607.92 2500.01,-613.5 2503.13,-618.74\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2500.03,-620.38 2508.3,-627 2505.96,-616.67 2500.03,-620.38\"/>\n",
       "</g>\n",
       "<!-- 4606792016&#45;&gt;4606797392* -->\n",
       "<g id=\"edge140\" class=\"edge\">\n",
       "<title>4606792016&#45;&gt;4606797392*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2441.09,-440.21C2447.21,-437.42 2453.1,-434.2 2458.5,-430.5 2478.93,-416.5 2495.43,-393.58 2506.25,-375.53\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2509.28,-377.3 2511.21,-366.88 2503.2,-373.82 2509.28,-377.3\"/>\n",
       "</g>\n",
       "<!-- 4606793936* -->\n",
       "<g id=\"node158\" class=\"node\">\n",
       "<title>4606793936*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2521.5\" cy=\"-458.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2521.5\" y=\"-453.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606792016&#45;&gt;4606793936* -->\n",
       "<g id=\"edge205\" class=\"edge\">\n",
       "<title>4606792016&#45;&gt;4606793936*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2456.8,-458.5C2465.86,-458.5 2474.62,-458.5 2482.6,-458.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2482.54,-462 2492.54,-458.5 2482.54,-455 2482.54,-462\"/>\n",
       "</g>\n",
       "<!-- 4606795088* -->\n",
       "<g id=\"node185\" class=\"node\">\n",
       "<title>4606795088*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2521.5\" cy=\"-513.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2521.5\" y=\"-508.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606792016&#45;&gt;4606795088* -->\n",
       "<g id=\"edge120\" class=\"edge\">\n",
       "<title>4606792016&#45;&gt;4606795088*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2432.62,-476.99C2441.4,-479.65 2450.2,-482.5 2458.5,-485.5 2468.59,-489.14 2479.32,-493.73 2488.97,-498.12\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2487.4,-501.25 2497.95,-502.31 2490.36,-494.91 2487.4,-501.25\"/>\n",
       "</g>\n",
       "<!-- 4606792016tanh&#45;&gt;4606792016 -->\n",
       "<g id=\"edge47\" class=\"edge\">\n",
       "<title>4606792016tanh&#45;&gt;4606792016</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2223.85,-434.94C2231.81,-436.33 2241.15,-437.96 2251.14,-439.71\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2250.26,-443.11 2260.71,-441.39 2251.46,-436.22 2250.26,-443.11\"/>\n",
       "</g>\n",
       "<!-- 4606710096 -->\n",
       "<g id=\"node116\" class=\"node\">\n",
       "<title>4606710096</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1291.5,-0.5 1291.5,-36.5 1485,-36.5 1485,-0.5 1291.5,-0.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1307.75\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">w1</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1324,-1 1324,-36.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1363.88\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.4790</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1403.75,-1 1403.75,-36.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1444.38\" y=\"-13.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606792656* -->\n",
       "<g id=\"node130\" class=\"node\">\n",
       "<title>4606792656*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1548\" cy=\"-73.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1548\" y=\"-68.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606710096&#45;&gt;4606792656* -->\n",
       "<g id=\"edge85\" class=\"edge\">\n",
       "<title>4606710096&#45;&gt;4606792656*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1459.45,-36.99C1468.12,-39.65 1476.81,-42.51 1485,-45.5 1495,-49.14 1505.64,-53.69 1515.23,-58.05\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1513.61,-61.16 1524.15,-62.21 1516.56,-54.81 1513.61,-61.16\"/>\n",
       "</g>\n",
       "<!-- 4606710224 -->\n",
       "<g id=\"node117\" class=\"node\">\n",
       "<title>4606710224</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1613.62,-220.5 1613.62,-256.5 1807.12,-256.5 1807.12,-220.5 1613.62,-220.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1629.88\" y=\"-233.7\" font-family=\"Times,serif\" font-size=\"14.00\">w2</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1646.12,-221 1646.12,-256.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1686\" y=\"-233.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.6168</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1725.88,-221 1725.88,-256.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1766.5\" y=\"-233.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606793040* -->\n",
       "<g id=\"node137\" class=\"node\">\n",
       "<title>4606793040*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1872.75\" cy=\"-183.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1872.75\" y=\"-178.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606710224&#45;&gt;4606793040* -->\n",
       "<g id=\"edge206\" class=\"edge\">\n",
       "<title>4606710224&#45;&gt;4606793040*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1780.55,-220.07C1790.42,-217.08 1800.39,-213.85 1809.75,-210.5 1819.71,-206.93 1830.34,-202.53 1839.93,-198.33\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1841.15,-201.61 1848.85,-194.33 1838.29,-195.23 1841.15,-201.61\"/>\n",
       "</g>\n",
       "<!-- 4606792144 -->\n",
       "<g id=\"node118\" class=\"node\">\n",
       "<title>4606792144</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"976.12,-82.5 976.12,-118.5 1156.88,-118.5 1156.88,-82.5 976.12,-82.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"986\" y=\"-95.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"995.88,-83 995.88,-118.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1035.75\" y=\"-95.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 2.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1075.62,-83 1075.62,-118.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1116.25\" y=\"-95.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606792144&#45;&gt;4606792272* -->\n",
       "<g id=\"edge122\" class=\"edge\">\n",
       "<title>4606792144&#45;&gt;4606792272*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1157.32,-116.22C1169.1,-118.28 1180.59,-120.29 1190.74,-122.07\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1190.05,-125.5 1200.5,-123.78 1191.26,-118.6 1190.05,-125.5\"/>\n",
       "</g>\n",
       "<!-- 4606792272 -->\n",
       "<g id=\"node119\" class=\"node\">\n",
       "<title>4606792272</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1295.62,-110.5 1295.62,-146.5 1480.88,-146.5 1480.88,-110.5 1295.62,-110.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1305.5\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1315.38,-111 1315.38,-146.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1357.5\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.6968</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1399.62,-111 1399.62,-146.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1440.25\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606792400+ -->\n",
       "<g id=\"node124\" class=\"node\">\n",
       "<title>4606792400+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1548\" cy=\"-128.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1548\" y=\"-123.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606792272&#45;&gt;4606792400+ -->\n",
       "<g id=\"edge112\" class=\"edge\">\n",
       "<title>4606792272&#45;&gt;4606792400+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1481.01,-128.5C1490.99,-128.5 1500.68,-128.5 1509.42,-128.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1509.19,-132 1519.19,-128.5 1509.19,-125 1509.19,-132\"/>\n",
       "</g>\n",
       "<!-- 4606792272*&#45;&gt;4606792272 -->\n",
       "<g id=\"edge48\" class=\"edge\">\n",
       "<title>4606792272*&#45;&gt;4606792272</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1255.9,-128.5C1264.15,-128.5 1273.79,-128.5 1284.05,-128.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1283.86,-132 1293.86,-128.5 1283.86,-125 1283.86,-132\"/>\n",
       "</g>\n",
       "<!-- 4606710352 -->\n",
       "<g id=\"node121\" class=\"node\">\n",
       "<title>4606710352</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1294.12,-165.5 1294.12,-201.5 1482.38,-201.5 1482.38,-165.5 1294.12,-165.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1305.5\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\">b</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1316.88,-166 1316.88,-201.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1359\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.9786</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1401.12,-166 1401.12,-201.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1441.75\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606710352&#45;&gt;4606792400+ -->\n",
       "<g id=\"edge154\" class=\"edge\">\n",
       "<title>4606710352&#45;&gt;4606792400+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1456.3,-165.06C1466,-162.06 1475.8,-158.83 1485,-155.5 1494.86,-151.93 1505.4,-147.56 1514.93,-143.38\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1516.09,-146.7 1523.8,-139.42 1513.24,-140.31 1516.09,-146.7\"/>\n",
       "</g>\n",
       "<!-- 4606710480 -->\n",
       "<g id=\"node122\" class=\"node\">\n",
       "<title>4606710480</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1613.62,-550.5 1613.62,-586.5 1807.12,-586.5 1807.12,-550.5 1613.62,-550.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1629.88\" y=\"-563.7\" font-family=\"Times,serif\" font-size=\"14.00\">w0</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1646.12,-551 1646.12,-586.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1686\" y=\"-563.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.8916</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1725.88,-551 1725.88,-586.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1766.5\" y=\"-563.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606710480&#45;&gt;4606793424* -->\n",
       "<g id=\"edge132\" class=\"edge\">\n",
       "<title>4606710480&#45;&gt;4606793424*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1807.44,-568.5C1816.77,-568.5 1825.79,-568.5 1833.98,-568.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1833.82,-572 1843.82,-568.5 1833.82,-565 1833.82,-572\"/>\n",
       "</g>\n",
       "<!-- 4606792400 -->\n",
       "<g id=\"node123\" class=\"node\">\n",
       "<title>4606792400</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1617.75,-110.5 1617.75,-146.5 1803,-146.5 1803,-110.5 1617.75,-110.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1627.62\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1637.5,-111 1637.5,-146.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1679.62\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;1.6754</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1721.75,-111 1721.75,-146.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1762.38\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606792784+ -->\n",
       "<g id=\"node132\" class=\"node\">\n",
       "<title>4606792784+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1872.75\" cy=\"-128.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1872.75\" y=\"-123.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606792400&#45;&gt;4606792784+ -->\n",
       "<g id=\"edge193\" class=\"edge\">\n",
       "<title>4606792400&#45;&gt;4606792784+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1803.27,-128.5C1814.1,-128.5 1824.63,-128.5 1834.06,-128.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1833.85,-132 1843.85,-128.5 1833.85,-125 1833.85,-132\"/>\n",
       "</g>\n",
       "<!-- 4606792400+&#45;&gt;4606792400 -->\n",
       "<g id=\"edge49\" class=\"edge\">\n",
       "<title>4606792400+&#45;&gt;4606792400</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1575.48,-128.5C1584.36,-128.5 1594.86,-128.5 1606.01,-128.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1605.83,-132 1615.83,-128.5 1605.83,-125 1605.83,-132\"/>\n",
       "</g>\n",
       "<!-- 4606710608 -->\n",
       "<g id=\"node125\" class=\"node\">\n",
       "<title>4606710608</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1936.12,-550.5 1936.12,-586.5 2134.12,-586.5 2134.12,-550.5 1936.12,-550.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1952.38\" y=\"-563.7\" font-family=\"Times,serif\" font-size=\"14.00\">w1</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1968.62,-551 1968.62,-586.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2010.75\" y=\"-563.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.9839</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2052.88,-551 2052.88,-586.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2093.5\" y=\"-563.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606710608&#45;&gt;4606793680* -->\n",
       "<g id=\"edge111\" class=\"edge\">\n",
       "<title>4606710608&#45;&gt;4606793680*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2105.3,-586.93C2115.17,-589.92 2125.14,-593.15 2134.5,-596.5 2144.46,-600.07 2155.09,-604.47 2164.68,-608.67\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2163.04,-611.77 2173.6,-612.67 2165.9,-605.39 2163.04,-611.77\"/>\n",
       "</g>\n",
       "<!-- 4606792528 -->\n",
       "<g id=\"node126\" class=\"node\">\n",
       "<title>4606792528</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1297.88,-55.5 1297.88,-91.5 1478.62,-91.5 1478.62,-55.5 1297.88,-55.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1307.75\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1317.62,-56 1317.62,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1357.5\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 3.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1397.38,-56 1397.38,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1438\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606792528&#45;&gt;4606792656* -->\n",
       "<g id=\"edge105\" class=\"edge\">\n",
       "<title>4606792528&#45;&gt;4606792656*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1478.73,-73.5C1489.48,-73.5 1499.97,-73.5 1509.37,-73.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1509.12,-77 1519.12,-73.5 1509.12,-70 1509.12,-77\"/>\n",
       "</g>\n",
       "<!-- 4529345488 -->\n",
       "<g id=\"node127\" class=\"node\">\n",
       "<title>4529345488</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"6.38,-798.5 6.38,-834.5 187.12,-834.5 187.12,-798.5 6.38,-798.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"16.25\" y=\"-811.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"26.12,-799 26.12,-834.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"66\" y=\"-811.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 2.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"105.88,-799 105.88,-834.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"146.5\" y=\"-811.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4529345488&#45;&gt;4606788304* -->\n",
       "<g id=\"edge182\" class=\"edge\">\n",
       "<title>4529345488&#45;&gt;4606788304*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M187.23,-831.81C198.4,-833.73 209.28,-835.59 218.96,-837.25\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"218.16,-840.66 228.61,-838.9 219.34,-833.76 218.16,-840.66\"/>\n",
       "</g>\n",
       "<!-- 4606710736 -->\n",
       "<g id=\"node128\" class=\"node\">\n",
       "<title>4606710736</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2260.5,-385.5 2260.5,-421.5 2458.5,-421.5 2458.5,-385.5 2260.5,-385.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2276.75\" y=\"-398.7\" font-family=\"Times,serif\" font-size=\"14.00\">w2</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2293,-386 2293,-421.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2335.12\" y=\"-398.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.8065</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2377.25,-386 2377.25,-421.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2417.88\" y=\"-398.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606710736&#45;&gt;4606793936* -->\n",
       "<g id=\"edge76\" class=\"edge\">\n",
       "<title>4606710736&#45;&gt;4606793936*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2432.62,-421.99C2441.4,-424.65 2450.2,-427.5 2458.5,-430.5 2468.59,-434.14 2479.32,-438.73 2488.97,-443.12\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2487.4,-446.25 2497.95,-447.31 2490.36,-439.91 2487.4,-446.25\"/>\n",
       "</g>\n",
       "<!-- 4606792656 -->\n",
       "<g id=\"node129\" class=\"node\">\n",
       "<title>4606792656</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1620,-55.5 1620,-91.5 1800.75,-91.5 1800.75,-55.5 1620,-55.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1629.88\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1639.75,-56 1639.75,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1679.62\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 1.4370</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1719.5,-56 1719.5,-91.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1760.12\" y=\"-68.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606792656&#45;&gt;4606792784+ -->\n",
       "<g id=\"edge125\" class=\"edge\">\n",
       "<title>4606792656&#45;&gt;4606792784+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1783.78,-91.98C1792.59,-94.64 1801.42,-97.5 1809.75,-100.5 1819.84,-104.14 1830.57,-108.72 1840.23,-113.12\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1838.66,-116.25 1849.2,-117.3 1841.62,-109.9 1838.66,-116.25\"/>\n",
       "</g>\n",
       "<!-- 4606792656*&#45;&gt;4606792656 -->\n",
       "<g id=\"edge50\" class=\"edge\">\n",
       "<title>4606792656*&#45;&gt;4606792656</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1575.48,-73.5C1585.02,-73.5 1596.43,-73.5 1608.51,-73.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1608.25,-77 1618.25,-73.5 1608.25,-70 1608.25,-77\"/>\n",
       "</g>\n",
       "<!-- 4606792784 -->\n",
       "<g id=\"node131\" class=\"node\">\n",
       "<title>4606792784</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1942.5,-110.5 1942.5,-146.5 2127.75,-146.5 2127.75,-110.5 1942.5,-110.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1952.38\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1962.25,-111 1962.25,-146.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2004.38\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.2384</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2046.5,-111 2046.5,-146.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2087.12\" y=\"-123.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606793168+ -->\n",
       "<g id=\"node140\" class=\"node\">\n",
       "<title>4606793168+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2197.5\" cy=\"-183.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2197.5\" y=\"-178.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606792784&#45;&gt;4606793168+ -->\n",
       "<g id=\"edge162\" class=\"edge\">\n",
       "<title>4606792784&#45;&gt;4606793168+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2108.53,-146.98C2117.34,-149.64 2126.17,-152.5 2134.5,-155.5 2144.59,-159.14 2155.32,-163.72 2164.98,-168.12\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2163.41,-171.25 2173.95,-172.3 2166.37,-164.9 2163.41,-171.25\"/>\n",
       "</g>\n",
       "<!-- 4606792784+&#45;&gt;4606792784 -->\n",
       "<g id=\"edge51\" class=\"edge\">\n",
       "<title>4606792784+&#45;&gt;4606792784</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1900.23,-128.5C1909.11,-128.5 1919.61,-128.5 1930.76,-128.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1930.58,-132 1940.58,-128.5 1930.58,-125 1930.58,-132\"/>\n",
       "</g>\n",
       "<!-- 4606710864 -->\n",
       "<g id=\"node133\" class=\"node\">\n",
       "<title>4606710864</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2587.12,-117.5 2587.12,-153.5 2780.62,-153.5 2780.62,-117.5 2587.12,-117.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2603.38\" y=\"-130.7\" font-family=\"Times,serif\" font-size=\"14.00\">w3</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2619.62,-118 2619.62,-153.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2659.5\" y=\"-130.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.6833</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2699.38,-118 2699.38,-153.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2740\" y=\"-130.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606794192* -->\n",
       "<g id=\"node164\" class=\"node\">\n",
       "<title>4606794192*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2846.25\" cy=\"-190.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2846.25\" y=\"-185.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606710864&#45;&gt;4606794192* -->\n",
       "<g id=\"edge146\" class=\"edge\">\n",
       "<title>4606710864&#45;&gt;4606794192*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2757.28,-153.98C2766.09,-156.64 2774.92,-159.5 2783.25,-162.5 2793.34,-166.14 2804.07,-170.72 2813.73,-175.12\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2812.16,-178.25 2822.7,-179.3 2815.12,-171.9 2812.16,-178.25\"/>\n",
       "</g>\n",
       "<!-- 4606710992 -->\n",
       "<g id=\"node134\" class=\"node\">\n",
       "<title>4606710992</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1943.25,-440.5 1943.25,-476.5 2127,-476.5 2127,-440.5 1943.25,-440.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1954.62\" y=\"-453.7\" font-family=\"Times,serif\" font-size=\"14.00\">b</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1966,-441 1966,-476.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2005.88\" y=\"-453.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.7788</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2045.75,-441 2045.75,-476.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2086.38\" y=\"-453.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606793552+ -->\n",
       "<g id=\"node149\" class=\"node\">\n",
       "<title>4606793552+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2197.5\" cy=\"-513.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2197.5\" y=\"-508.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606710992&#45;&gt;4606793552+ -->\n",
       "<g id=\"edge194\" class=\"edge\">\n",
       "<title>4606710992&#45;&gt;4606793552+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2108.53,-476.98C2117.34,-479.64 2126.17,-482.5 2134.5,-485.5 2144.59,-489.14 2155.32,-493.72 2164.98,-498.12\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2163.41,-501.25 2173.95,-502.3 2166.37,-494.9 2163.41,-501.25\"/>\n",
       "</g>\n",
       "<!-- 4606792912 -->\n",
       "<g id=\"node135\" class=\"node\">\n",
       "<title>4606792912</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1617.75,-165.5 1617.75,-201.5 1803,-201.5 1803,-165.5 1617.75,-165.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1627.62\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1637.5,-166 1637.5,-201.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1679.62\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;1.0000</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1721.75,-166 1721.75,-201.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1762.38\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606792912&#45;&gt;4606793040* -->\n",
       "<g id=\"edge163\" class=\"edge\">\n",
       "<title>4606792912&#45;&gt;4606793040*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1803.27,-183.5C1814.1,-183.5 1824.63,-183.5 1834.06,-183.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1833.85,-187 1843.85,-183.5 1833.85,-180 1833.85,-187\"/>\n",
       "</g>\n",
       "<!-- 4606793040 -->\n",
       "<g id=\"node136\" class=\"node\">\n",
       "<title>4606793040</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1942.5,-165.5 1942.5,-201.5 2127.75,-201.5 2127.75,-165.5 1942.5,-165.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1952.38\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1962.25,-166 1962.25,-201.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2004.38\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.6168</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2046.5,-166 2046.5,-201.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2087.12\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606793040&#45;&gt;4606793168+ -->\n",
       "<g id=\"edge97\" class=\"edge\">\n",
       "<title>4606793040&#45;&gt;4606793168+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2128.02,-183.5C2138.85,-183.5 2149.38,-183.5 2158.81,-183.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2158.6,-187 2168.6,-183.5 2158.6,-180 2158.6,-187\"/>\n",
       "</g>\n",
       "<!-- 4606793040*&#45;&gt;4606793040 -->\n",
       "<g id=\"edge52\" class=\"edge\">\n",
       "<title>4606793040*&#45;&gt;4606793040</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1900.23,-183.5C1909.11,-183.5 1919.61,-183.5 1930.76,-183.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1930.58,-187 1940.58,-183.5 1930.58,-180 1930.58,-187\"/>\n",
       "</g>\n",
       "<!-- 4606711120 -->\n",
       "<g id=\"node138\" class=\"node\">\n",
       "<title>4606711120</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1613.62,-770.5 1613.62,-806.5 1807.12,-806.5 1807.12,-770.5 1613.62,-770.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1629.88\" y=\"-783.7\" font-family=\"Times,serif\" font-size=\"14.00\">w0</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1646.12,-771 1646.12,-806.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1686\" y=\"-783.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.2294</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1725.88,-771 1725.88,-806.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1766.5\" y=\"-783.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606711120&#45;&gt;4606794576* -->\n",
       "<g id=\"edge171\" class=\"edge\">\n",
       "<title>4606711120&#45;&gt;4606794576*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1783.78,-770.02C1792.59,-767.36 1801.42,-764.5 1809.75,-761.5 1819.84,-757.86 1830.57,-753.28 1840.23,-748.88\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1841.62,-752.1 1849.2,-744.7 1838.66,-745.75 1841.62,-752.1\"/>\n",
       "</g>\n",
       "<!-- 4606793168 -->\n",
       "<g id=\"node139\" class=\"node\">\n",
       "<title>4606793168</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2266.88,-165.5 2266.88,-201.5 2452.12,-201.5 2452.12,-165.5 2266.88,-165.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2276.75\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2286.62,-166 2286.62,-201.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2328.75\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.8552</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2370.88,-166 2370.88,-201.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2411.5\" y=\"-178.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606793296tanh -->\n",
       "<g id=\"node143\" class=\"node\">\n",
       "<title>4606793296tanh</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2521.5\" cy=\"-187.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2521.5\" y=\"-182.45\" font-family=\"Times,serif\" font-size=\"14.00\">tanh</text>\n",
       "</g>\n",
       "<!-- 4606793168&#45;&gt;4606793296tanh -->\n",
       "<g id=\"edge118\" class=\"edge\">\n",
       "<title>4606793168&#45;&gt;4606793296tanh</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2452.18,-185.79C2462.98,-186.06 2473.49,-186.32 2482.9,-186.56\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2482.57,-190.05 2492.66,-186.8 2482.75,-183.06 2482.57,-190.05\"/>\n",
       "</g>\n",
       "<!-- 4606793168+&#45;&gt;4606793168 -->\n",
       "<g id=\"edge53\" class=\"edge\">\n",
       "<title>4606793168+&#45;&gt;4606793168</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2224.92,-183.5C2233.77,-183.5 2244.25,-183.5 2255.38,-183.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2255.17,-187 2265.17,-183.5 2255.17,-180 2255.17,-187\"/>\n",
       "</g>\n",
       "<!-- 4606711248 -->\n",
       "<g id=\"node141\" class=\"node\">\n",
       "<title>4606711248</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1938.38,-770.5 1938.38,-806.5 2131.88,-806.5 2131.88,-770.5 1938.38,-770.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1954.62\" y=\"-783.7\" font-family=\"Times,serif\" font-size=\"14.00\">w1</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1970.88,-771 1970.88,-806.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2010.75\" y=\"-783.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.2730</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2050.62,-771 2050.62,-806.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2091.25\" y=\"-783.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606711248&#45;&gt;4606794832* -->\n",
       "<g id=\"edge115\" class=\"edge\">\n",
       "<title>4606711248&#45;&gt;4606794832*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2132.19,-788.5C2141.52,-788.5 2150.54,-788.5 2158.73,-788.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2158.57,-792 2168.57,-788.5 2158.57,-785 2158.57,-792\"/>\n",
       "</g>\n",
       "<!-- 4606793296 -->\n",
       "<g id=\"node142\" class=\"node\">\n",
       "<title>4606793296</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2584.5,-172.5 2584.5,-208.5 2783.25,-208.5 2783.25,-172.5 2584.5,-172.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2601.12\" y=\"-185.7\" font-family=\"Times,serif\" font-size=\"14.00\">out</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2617.75,-173 2617.75,-208.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2659.88\" y=\"-185.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.6938</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2702,-173 2702,-208.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2742.62\" y=\"-185.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606793296&#45;&gt;4606796496* -->\n",
       "<g id=\"edge143\" class=\"edge\">\n",
       "<title>4606793296&#45;&gt;4606796496*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2773.18,-208.93C2776.81,-211.44 2780.2,-214.29 2783.25,-217.5 2834.9,-271.96 2784.48,-315.98 2819.25,-382.5 2820.14,-384.2 2821.16,-385.87 2822.26,-387.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2819.36,-389.48 2828.36,-395.07 2824.82,-385.09 2819.36,-389.48\"/>\n",
       "</g>\n",
       "<!-- 4606793296&#45;&gt;4606797648* -->\n",
       "<g id=\"edge94\" class=\"edge\">\n",
       "<title>4606793296&#45;&gt;4606797648*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2753.74,-172.04C2763.7,-169.04 2773.78,-165.82 2783.25,-162.5 2792.99,-159.09 2803.39,-154.93 2812.85,-150.95\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2814.21,-154.17 2822.01,-147.01 2811.44,-147.74 2814.21,-154.17\"/>\n",
       "</g>\n",
       "<!-- 4606793296&#45;&gt;4606794192* -->\n",
       "<g id=\"edge152\" class=\"edge\">\n",
       "<title>4606793296&#45;&gt;4606794192*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2783.7,-190.5C2792.06,-190.5 2800.14,-190.5 2807.53,-190.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2807.39,-194 2817.39,-190.5 2807.39,-187 2807.39,-194\"/>\n",
       "</g>\n",
       "<!-- 4606795344* -->\n",
       "<g id=\"node191\" class=\"node\">\n",
       "<title>4606795344*</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2846.25\" cy=\"-355.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2846.25\" y=\"-350.45\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
       "</g>\n",
       "<!-- 4606793296&#45;&gt;4606795344* -->\n",
       "<g id=\"edge107\" class=\"edge\">\n",
       "<title>4606793296&#45;&gt;4606795344*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2771.01,-208.93C2775.36,-211.43 2779.48,-214.27 2783.25,-217.5 2800.67,-232.42 2823.17,-291.18 2835.71,-327.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2832.36,-328.05 2838.93,-336.36 2838.98,-325.77 2832.36,-328.05\"/>\n",
       "</g>\n",
       "<!-- 4606793296tanh&#45;&gt;4606793296 -->\n",
       "<g id=\"edge54\" class=\"edge\">\n",
       "<title>4606793296tanh&#45;&gt;4606793296</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2548.98,-188C2556.11,-188.13 2564.29,-188.28 2573.02,-188.45\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2572.75,-191.94 2582.81,-188.63 2572.88,-184.94 2572.75,-191.94\"/>\n",
       "</g>\n",
       "<!-- 4606711376 -->\n",
       "<g id=\"node144\" class=\"node\">\n",
       "<title>4606711376</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2260.5,-495.5 2260.5,-531.5 2458.5,-531.5 2458.5,-495.5 2260.5,-495.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2276.75\" y=\"-508.7\" font-family=\"Times,serif\" font-size=\"14.00\">w2</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2293,-496 2293,-531.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2335.12\" y=\"-508.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.8702</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2377.25,-496 2377.25,-531.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2417.88\" y=\"-508.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606711376&#45;&gt;4606795088* -->\n",
       "<g id=\"edge80\" class=\"edge\">\n",
       "<title>4606711376&#45;&gt;4606795088*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2458.64,-513.5C2467.11,-513.5 2475.3,-513.5 2482.79,-513.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2482.79,-517 2492.79,-513.5 2482.79,-510 2482.79,-517\"/>\n",
       "</g>\n",
       "<!-- 4606793424 -->\n",
       "<g id=\"node145\" class=\"node\">\n",
       "<title>4606793424</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1942.5,-495.5 1942.5,-531.5 2127.75,-531.5 2127.75,-495.5 1942.5,-495.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1952.38\" y=\"-508.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1962.25,-496 1962.25,-531.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2004.38\" y=\"-508.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.8079</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2046.5,-496 2046.5,-531.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2087.12\" y=\"-508.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606793424&#45;&gt;4606793552+ -->\n",
       "<g id=\"edge199\" class=\"edge\">\n",
       "<title>4606793424&#45;&gt;4606793552+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2128.02,-513.5C2138.85,-513.5 2149.38,-513.5 2158.81,-513.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2158.6,-517 2168.6,-513.5 2158.6,-510 2158.6,-517\"/>\n",
       "</g>\n",
       "<!-- 4606793424*&#45;&gt;4606793424 -->\n",
       "<g id=\"edge55\" class=\"edge\">\n",
       "<title>4606793424*&#45;&gt;4606793424</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1895.27,-558.28C1907.07,-552.9 1922.04,-546.41 1935.75,-541.5 1941.75,-539.35 1948,-537.26 1954.31,-535.24\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1955,-538.69 1963.51,-532.38 1952.92,-532 1955,-538.69\"/>\n",
       "</g>\n",
       "<!-- 4606711504 -->\n",
       "<g id=\"node147\" class=\"node\">\n",
       "<title>4606711504</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2587.12,-337.5 2587.12,-373.5 2780.62,-373.5 2780.62,-337.5 2587.12,-337.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2603.38\" y=\"-350.7\" font-family=\"Times,serif\" font-size=\"14.00\">w3</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2619.62,-338 2619.62,-373.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2659.5\" y=\"-350.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.4821</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2699.38,-338 2699.38,-373.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2740\" y=\"-350.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606711504&#45;&gt;4606795344* -->\n",
       "<g id=\"edge181\" class=\"edge\">\n",
       "<title>4606711504&#45;&gt;4606795344*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2780.94,-355.5C2790.27,-355.5 2799.29,-355.5 2807.48,-355.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2807.32,-359 2817.32,-355.5 2807.32,-352 2807.32,-359\"/>\n",
       "</g>\n",
       "<!-- 4606793552 -->\n",
       "<g id=\"node148\" class=\"node\">\n",
       "<title>4606793552</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2266.88,-550.5 2266.88,-586.5 2452.12,-586.5 2452.12,-550.5 2266.88,-550.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2276.75\" y=\"-563.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2286.62,-551 2286.62,-586.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2328.75\" y=\"-563.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.0291</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2370.88,-551 2370.88,-586.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2411.5\" y=\"-563.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606793808+ -->\n",
       "<g id=\"node155\" class=\"node\">\n",
       "<title>4606793808+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2521.5\" cy=\"-575.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2521.5\" y=\"-570.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606793552&#45;&gt;4606793808+ -->\n",
       "<g id=\"edge136\" class=\"edge\">\n",
       "<title>4606793552&#45;&gt;4606793808+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2452.18,-572.51C2462.98,-572.98 2473.49,-573.44 2482.9,-573.86\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2482.52,-577.34 2492.66,-574.28 2482.82,-570.35 2482.52,-577.34\"/>\n",
       "</g>\n",
       "<!-- 4606793552+&#45;&gt;4606793552 -->\n",
       "<g id=\"edge56\" class=\"edge\">\n",
       "<title>4606793552+&#45;&gt;4606793552</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2219.68,-524.05C2231.51,-529.69 2246.61,-536.49 2260.5,-541.5 2265.43,-543.28 2270.53,-545.01 2275.7,-546.68\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2274.34,-549.92 2284.93,-549.56 2276.43,-543.24 2274.34,-549.92\"/>\n",
       "</g>\n",
       "<!-- 4606711632 -->\n",
       "<g id=\"node150\" class=\"node\">\n",
       "<title>4606711632</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1941,-605.5 1941,-641.5 2129.25,-641.5 2129.25,-605.5 1941,-605.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1952.38\" y=\"-618.7\" font-family=\"Times,serif\" font-size=\"14.00\">b</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1963.75,-606 1963.75,-641.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2005.88\" y=\"-618.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.7638</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2048,-606 2048,-641.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2088.62\" y=\"-618.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606794704+ -->\n",
       "<g id=\"node176\" class=\"node\">\n",
       "<title>4606794704+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2197.5\" cy=\"-733.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2197.5\" y=\"-728.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606711632&#45;&gt;4606794704+ -->\n",
       "<g id=\"edge202\" class=\"edge\">\n",
       "<title>4606711632&#45;&gt;4606794704+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2117.52,-641.99C2123.49,-644.74 2129.23,-647.89 2134.5,-651.5 2154.94,-665.49 2171.43,-688.41 2182.26,-706.46\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2179.21,-708.17 2187.21,-715.11 2185.28,-704.7 2179.21,-708.17\"/>\n",
       "</g>\n",
       "<!-- 4606793680 -->\n",
       "<g id=\"node151\" class=\"node\">\n",
       "<title>4606793680</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2269.12,-605.5 2269.12,-641.5 2449.88,-641.5 2449.88,-605.5 2269.12,-605.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2279\" y=\"-618.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2288.88,-606 2288.88,-641.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2328.75\" y=\"-618.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.9812</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2368.62,-606 2368.62,-641.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2409.25\" y=\"-618.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606793680&#45;&gt;4606793808+ -->\n",
       "<g id=\"edge119\" class=\"edge\">\n",
       "<title>4606793680&#45;&gt;4606793808+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2429.45,-605.04C2439.23,-602.27 2449.14,-599.37 2458.5,-596.5 2467.51,-593.73 2477.2,-590.56 2486.17,-587.52\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2487.29,-590.84 2495.62,-584.29 2485.02,-584.21 2487.29,-590.84\"/>\n",
       "</g>\n",
       "<!-- 4606793680*&#45;&gt;4606793680 -->\n",
       "<g id=\"edge57\" class=\"edge\">\n",
       "<title>4606793680*&#45;&gt;4606793680</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2224.92,-623.5C2234.27,-623.5 2245.43,-623.5 2257.25,-623.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2257.24,-627 2267.24,-623.5 2257.24,-620 2257.24,-627\"/>\n",
       "</g>\n",
       "<!-- 4606711760 -->\n",
       "<g id=\"node153\" class=\"node\">\n",
       "<title>4606711760</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1613.62,-880.5 1613.62,-916.5 1807.12,-916.5 1807.12,-880.5 1613.62,-880.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1629.88\" y=\"-893.7\" font-family=\"Times,serif\" font-size=\"14.00\">w0</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1646.12,-881 1646.12,-916.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1686\" y=\"-893.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.5015</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1725.88,-881 1725.88,-916.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1766.5\" y=\"-893.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606711760&#45;&gt;4606795728* -->\n",
       "<g id=\"edge178\" class=\"edge\">\n",
       "<title>4606711760&#45;&gt;4606795728*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1807.44,-898.5C1816.77,-898.5 1825.79,-898.5 1833.98,-898.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1833.82,-902 1843.82,-898.5 1833.82,-895 1833.82,-902\"/>\n",
       "</g>\n",
       "<!-- 4606793808 -->\n",
       "<g id=\"node154\" class=\"node\">\n",
       "<title>4606793808</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2593.5,-557.5 2593.5,-593.5 2774.25,-593.5 2774.25,-557.5 2593.5,-557.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2603.38\" y=\"-570.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2613.25,-558 2613.25,-593.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2653.12\" y=\"-570.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.9521</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2693,-558 2693,-593.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2733.62\" y=\"-570.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606794064+ -->\n",
       "<g id=\"node161\" class=\"node\">\n",
       "<title>4606794064+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2846.25\" cy=\"-465.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2846.25\" y=\"-460.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606793808&#45;&gt;4606794064+ -->\n",
       "<g id=\"edge84\" class=\"edge\">\n",
       "<title>4606793808&#45;&gt;4606794064+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2768.99,-557.08C2774.01,-554.58 2778.81,-551.73 2783.25,-548.5 2806.86,-531.3 2801.25,-516.51 2819.25,-493.5 2820.43,-491.99 2821.68,-490.47 2822.96,-488.95\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2825.44,-491.43 2829.46,-481.62 2820.2,-486.78 2825.44,-491.43\"/>\n",
       "</g>\n",
       "<!-- 4606793808+&#45;&gt;4606793808 -->\n",
       "<g id=\"edge58\" class=\"edge\">\n",
       "<title>4606793808+&#45;&gt;4606793808</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2548.98,-575.5C2558.52,-575.5 2569.93,-575.5 2582.01,-575.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2581.75,-579 2591.75,-575.5 2581.75,-572 2581.75,-579\"/>\n",
       "</g>\n",
       "<!-- 4606711888 -->\n",
       "<g id=\"node156\" class=\"node\">\n",
       "<title>4606711888</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1938.38,-825.5 1938.38,-861.5 2131.88,-861.5 2131.88,-825.5 1938.38,-825.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1954.62\" y=\"-838.7\" font-family=\"Times,serif\" font-size=\"14.00\">w1</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1970.88,-826 1970.88,-861.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2010.75\" y=\"-838.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.5324</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2050.62,-826 2050.62,-861.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2091.25\" y=\"-838.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606711888&#45;&gt;4606795984* -->\n",
       "<g id=\"edge186\" class=\"edge\">\n",
       "<title>4606711888&#45;&gt;4606795984*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2132.19,-843.5C2141.52,-843.5 2150.54,-843.5 2158.73,-843.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2158.57,-847 2168.57,-843.5 2158.57,-840 2158.57,-847\"/>\n",
       "</g>\n",
       "<!-- 4606793936 -->\n",
       "<g id=\"node157\" class=\"node\">\n",
       "<title>4606793936</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2591.25,-447.5 2591.25,-483.5 2776.5,-483.5 2776.5,-447.5 2591.25,-447.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2601.12\" y=\"-460.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2611,-448 2611,-483.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2653.12\" y=\"-460.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.5053</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2695.25,-448 2695.25,-483.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2735.88\" y=\"-460.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606793936&#45;&gt;4606794064+ -->\n",
       "<g id=\"edge204\" class=\"edge\">\n",
       "<title>4606793936&#45;&gt;4606794064+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2776.77,-465.5C2787.6,-465.5 2798.13,-465.5 2807.56,-465.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2807.35,-469 2817.35,-465.5 2807.35,-462 2807.35,-469\"/>\n",
       "</g>\n",
       "<!-- 4606793936*&#45;&gt;4606793936 -->\n",
       "<g id=\"edge59\" class=\"edge\">\n",
       "<title>4606793936*&#45;&gt;4606793936</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2548.62,-459.64C2557.54,-460.03 2568.14,-460.49 2579.4,-460.98\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2579.19,-464.48 2589.33,-461.42 2579.5,-457.48 2579.19,-464.48\"/>\n",
       "</g>\n",
       "<!-- 4606712016 -->\n",
       "<g id=\"node159\" class=\"node\">\n",
       "<title>4606712016</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2260.5,-660.5 2260.5,-696.5 2458.5,-696.5 2458.5,-660.5 2260.5,-660.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2276.75\" y=\"-673.7\" font-family=\"Times,serif\" font-size=\"14.00\">w2</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2293,-661 2293,-696.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2335.12\" y=\"-673.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.1778</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2377.25,-661 2377.25,-696.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2417.88\" y=\"-673.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606712016&#45;&gt;4606796240* -->\n",
       "<g id=\"edge158\" class=\"edge\">\n",
       "<title>4606712016&#45;&gt;4606796240*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2447.52,-660.01C2460.58,-657.23 2473.38,-654.51 2484.53,-652.14\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2484.95,-655.63 2494.01,-650.13 2483.5,-648.78 2484.95,-655.63\"/>\n",
       "</g>\n",
       "<!-- 4606794064 -->\n",
       "<g id=\"node160\" class=\"node\">\n",
       "<title>4606794064</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2911.5,-447.5 2911.5,-483.5 3092.25,-483.5 3092.25,-447.5 2911.5,-447.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2921.38\" y=\"-460.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2931.25,-448 2931.25,-483.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2971.12\" y=\"-460.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.4469</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3011,-448 3011,-483.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3051.62\" y=\"-460.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606794320+ -->\n",
       "<g id=\"node167\" class=\"node\">\n",
       "<title>4606794320+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"3157.5\" cy=\"-327.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3157.5\" y=\"-322.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606794064&#45;&gt;4606794320+ -->\n",
       "<g id=\"edge168\" class=\"edge\">\n",
       "<title>4606794064&#45;&gt;4606794320+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3080.99,-447.08C3085.83,-444.32 3090.4,-441.15 3094.5,-437.5 3124.24,-411.05 3108.65,-388.77 3130.5,-355.5 3131.55,-353.9 3132.7,-352.3 3133.9,-350.73\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3136.42,-353.17 3140.22,-343.28 3131.08,-348.64 3136.42,-353.17\"/>\n",
       "</g>\n",
       "<!-- 4606794064+&#45;&gt;4606794064 -->\n",
       "<g id=\"edge60\" class=\"edge\">\n",
       "<title>4606794064+&#45;&gt;4606794064</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2873.66,-465.5C2881.37,-465.5 2890.29,-465.5 2899.76,-465.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2899.57,-469 2909.57,-465.5 2899.57,-462 2899.57,-469\"/>\n",
       "</g>\n",
       "<!-- 4606712144 -->\n",
       "<g id=\"node162\" class=\"node\">\n",
       "<title>4606712144</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2587.12,-392.5 2587.12,-428.5 2780.62,-428.5 2780.62,-392.5 2587.12,-392.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2603.38\" y=\"-405.7\" font-family=\"Times,serif\" font-size=\"14.00\">w3</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2619.62,-393 2619.62,-428.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2659.5\" y=\"-405.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.4899</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2699.38,-393 2699.38,-428.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2740\" y=\"-405.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606712144&#45;&gt;4606796496* -->\n",
       "<g id=\"edge129\" class=\"edge\">\n",
       "<title>4606712144&#45;&gt;4606796496*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2780.94,-410.5C2790.27,-410.5 2799.29,-410.5 2807.48,-410.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2807.32,-414 2817.32,-410.5 2807.32,-407 2807.32,-414\"/>\n",
       "</g>\n",
       "<!-- 4606794192 -->\n",
       "<g id=\"node163\" class=\"node\">\n",
       "<title>4606794192</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2909.25,-173.5 2909.25,-209.5 3094.5,-209.5 3094.5,-173.5 2909.25,-173.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2919.12\" y=\"-186.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2929,-174 2929,-209.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2971.12\" y=\"-186.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.4741</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3013.25,-174 3013.25,-209.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3053.88\" y=\"-186.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606794192&#45;&gt;4606794320+ -->\n",
       "<g id=\"edge145\" class=\"edge\">\n",
       "<title>4606794192&#45;&gt;4606794320+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3081.01,-209.77C3085.79,-212.31 3090.34,-215.2 3094.5,-218.5 3120.69,-239.25 3137.76,-274.31 3147.24,-299.05\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3143.85,-299.97 3150.54,-308.18 3150.43,-297.59 3143.85,-299.97\"/>\n",
       "</g>\n",
       "<!-- 4606794192*&#45;&gt;4606794192 -->\n",
       "<g id=\"edge61\" class=\"edge\">\n",
       "<title>4606794192*&#45;&gt;4606794192</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2873.66,-190.67C2880.7,-190.72 2888.75,-190.77 2897.3,-190.83\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2897.26,-194.33 2907.29,-190.89 2897.31,-187.33 2897.26,-194.33\"/>\n",
       "</g>\n",
       "<!-- 4606712272 -->\n",
       "<g id=\"node165\" class=\"node\">\n",
       "<title>4606712272</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1941,-880.5 1941,-916.5 2129.25,-916.5 2129.25,-880.5 1941,-880.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1952.38\" y=\"-893.7\" font-family=\"Times,serif\" font-size=\"14.00\">b</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1963.75,-881 1963.75,-916.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2005.88\" y=\"-893.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.1363</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2048,-881 2048,-916.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2088.62\" y=\"-893.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606712272&#45;&gt;4606795856+ -->\n",
       "<g id=\"edge144\" class=\"edge\">\n",
       "<title>4606712272&#45;&gt;4606795856+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2129.42,-898.5C2139.77,-898.5 2149.81,-898.5 2158.85,-898.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2158.57,-902 2168.57,-898.5 2158.57,-895 2158.57,-902\"/>\n",
       "</g>\n",
       "<!-- 4606794320 -->\n",
       "<g id=\"node166\" class=\"node\">\n",
       "<title>4606794320</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"3220.5,-309.5 3220.5,-345.5 3405.75,-345.5 3405.75,-309.5 3220.5,-309.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3230.38\" y=\"-322.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3240.25,-310 3240.25,-345.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3282.38\" y=\"-322.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.0272</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3324.5,-310 3324.5,-345.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3365.12\" y=\"-322.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606794448tanh -->\n",
       "<g id=\"node170\" class=\"node\">\n",
       "<title>4606794448tanh</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"3468.75\" cy=\"-327.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3468.75\" y=\"-322.45\" font-family=\"Times,serif\" font-size=\"14.00\">tanh</text>\n",
       "</g>\n",
       "<!-- 4606794320&#45;&gt;4606794448tanh -->\n",
       "<g id=\"edge173\" class=\"edge\">\n",
       "<title>4606794320&#45;&gt;4606794448tanh</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3406.15,-327.5C3414.52,-327.5 3422.64,-327.5 3430.09,-327.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3430.03,-331 3440.03,-327.5 3430.03,-324 3430.03,-331\"/>\n",
       "</g>\n",
       "<!-- 4606794320+&#45;&gt;4606794320 -->\n",
       "<g id=\"edge62\" class=\"edge\">\n",
       "<title>4606794320+&#45;&gt;4606794320</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3184.91,-327.5C3191.95,-327.5 3200,-327.5 3208.55,-327.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3208.54,-331 3218.54,-327.5 3208.54,-324 3208.54,-331\"/>\n",
       "</g>\n",
       "<!-- 4606712400 -->\n",
       "<g id=\"node168\" class=\"node\">\n",
       "<title>4606712400</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1613.62,-275.5 1613.62,-311.5 1807.12,-311.5 1807.12,-275.5 1613.62,-275.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1629.88\" y=\"-288.7\" font-family=\"Times,serif\" font-size=\"14.00\">w0</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1646.12,-276 1646.12,-311.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1686\" y=\"-288.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.8941</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1725.88,-276 1725.88,-311.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1766.5\" y=\"-288.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606712400&#45;&gt;4606796880* -->\n",
       "<g id=\"edge128\" class=\"edge\">\n",
       "<title>4606712400&#45;&gt;4606796880*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1807.44,-293.5C1816.77,-293.5 1825.79,-293.5 1833.98,-293.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1833.82,-297 1843.82,-293.5 1833.82,-290 1833.82,-297\"/>\n",
       "</g>\n",
       "<!-- 4606794448 -->\n",
       "<g id=\"node169\" class=\"node\">\n",
       "<title>4606794448</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"3531.75,-309.5 3531.75,-345.5 3730.5,-345.5 3730.5,-309.5 3531.75,-309.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3548.38\" y=\"-322.7\" font-family=\"Times,serif\" font-size=\"14.00\">out</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3565,-310 3565,-345.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3607.12\" y=\"-322.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.0272</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3649.25,-310 3649.25,-345.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3689.88\" y=\"-322.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606794448&#45;&gt;4606798032* -->\n",
       "<g id=\"edge135\" class=\"edge\">\n",
       "<title>4606794448&#45;&gt;4606798032*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3730.95,-326.27C3739.31,-326.16 3747.39,-326.06 3754.78,-325.97\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3754.68,-329.47 3764.64,-325.85 3754.6,-322.47 3754.68,-329.47\"/>\n",
       "</g>\n",
       "<!-- 4606794448tanh&#45;&gt;4606794448 -->\n",
       "<g id=\"edge63\" class=\"edge\">\n",
       "<title>4606794448tanh&#45;&gt;4606794448</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3496.23,-327.5C3503.36,-327.5 3511.54,-327.5 3520.27,-327.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3520.06,-331 3530.06,-327.5 3520.06,-324 3520.06,-331\"/>\n",
       "</g>\n",
       "<!-- 4606712528 -->\n",
       "<g id=\"node171\" class=\"node\">\n",
       "<title>4606712528</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1936.12,-330.5 1936.12,-366.5 2134.12,-366.5 2134.12,-330.5 1936.12,-330.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1952.38\" y=\"-343.7\" font-family=\"Times,serif\" font-size=\"14.00\">w1</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1968.62,-331 1968.62,-366.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2010.75\" y=\"-343.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.1819</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2052.88,-331 2052.88,-366.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2093.5\" y=\"-343.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606712528&#45;&gt;4606797136* -->\n",
       "<g id=\"edge197\" class=\"edge\">\n",
       "<title>4606712528&#45;&gt;4606797136*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2134.49,-348.5C2143.09,-348.5 2151.39,-348.5 2158.97,-348.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2158.72,-352 2168.72,-348.5 2158.72,-345 2158.72,-352\"/>\n",
       "</g>\n",
       "<!-- 4606794576 -->\n",
       "<g id=\"node172\" class=\"node\">\n",
       "<title>4606794576</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1942.5,-715.5 1942.5,-751.5 2127.75,-751.5 2127.75,-715.5 1942.5,-715.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1952.38\" y=\"-728.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1962.25,-716 1962.25,-751.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2004.38\" y=\"-728.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.2079</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2046.5,-716 2046.5,-751.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2087.12\" y=\"-728.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606794576&#45;&gt;4606794704+ -->\n",
       "<g id=\"edge93\" class=\"edge\">\n",
       "<title>4606794576&#45;&gt;4606794704+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2128.02,-733.5C2138.85,-733.5 2149.38,-733.5 2158.81,-733.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2158.6,-737 2168.6,-733.5 2158.6,-730 2158.6,-737\"/>\n",
       "</g>\n",
       "<!-- 4606794576*&#45;&gt;4606794576 -->\n",
       "<g id=\"edge64\" class=\"edge\">\n",
       "<title>4606794576*&#45;&gt;4606794576</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1900.23,-733.5C1909.11,-733.5 1919.61,-733.5 1930.76,-733.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1930.58,-737 1940.58,-733.5 1930.58,-730 1930.58,-737\"/>\n",
       "</g>\n",
       "<!-- 4606712656 -->\n",
       "<g id=\"node174\" class=\"node\">\n",
       "<title>4606712656</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2260.5,-330.5 2260.5,-366.5 2458.5,-366.5 2458.5,-330.5 2260.5,-330.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2276.75\" y=\"-343.7\" font-family=\"Times,serif\" font-size=\"14.00\">w2</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2293,-331 2293,-366.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2335.12\" y=\"-343.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.0936</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2377.25,-331 2377.25,-366.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2417.88\" y=\"-343.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606712656&#45;&gt;4606797392* -->\n",
       "<g id=\"edge160\" class=\"edge\">\n",
       "<title>4606712656&#45;&gt;4606797392*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2458.64,-348.5C2467.11,-348.5 2475.3,-348.5 2482.79,-348.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2482.79,-352 2492.79,-348.5 2482.79,-345 2482.79,-352\"/>\n",
       "</g>\n",
       "<!-- 4606794704 -->\n",
       "<g id=\"node175\" class=\"node\">\n",
       "<title>4606794704</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2266.88,-715.5 2266.88,-751.5 2452.12,-751.5 2452.12,-715.5 2266.88,-715.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2276.75\" y=\"-728.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2286.62,-716 2286.62,-751.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2328.75\" y=\"-728.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.9716</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2370.88,-716 2370.88,-751.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2411.5\" y=\"-728.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606794960+ -->\n",
       "<g id=\"node183\" class=\"node\">\n",
       "<title>4606794960+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2521.5\" cy=\"-733.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2521.5\" y=\"-728.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606794704&#45;&gt;4606794960+ -->\n",
       "<g id=\"edge190\" class=\"edge\">\n",
       "<title>4606794704&#45;&gt;4606794960+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2452.18,-733.5C2462.98,-733.5 2473.49,-733.5 2482.9,-733.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2482.66,-737 2492.66,-733.5 2482.66,-730 2482.66,-737\"/>\n",
       "</g>\n",
       "<!-- 4606794704+&#45;&gt;4606794704 -->\n",
       "<g id=\"edge65\" class=\"edge\">\n",
       "<title>4606794704+&#45;&gt;4606794704</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2224.92,-733.5C2233.77,-733.5 2244.25,-733.5 2255.38,-733.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2255.17,-737 2265.17,-733.5 2255.17,-730 2255.17,-737\"/>\n",
       "</g>\n",
       "<!-- 4606712784 -->\n",
       "<g id=\"node177\" class=\"node\">\n",
       "<title>4606712784</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2584.88,-62.5 2584.88,-98.5 2782.88,-98.5 2782.88,-62.5 2584.88,-62.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2601.12\" y=\"-75.7\" font-family=\"Times,serif\" font-size=\"14.00\">w3</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2617.38,-63 2617.38,-98.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2659.5\" y=\"-75.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.2801</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2701.62,-63 2701.62,-98.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2742.25\" y=\"-75.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606712784&#45;&gt;4606797648* -->\n",
       "<g id=\"edge131\" class=\"edge\">\n",
       "<title>4606712784&#45;&gt;4606797648*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2757.58,-98.95C2766.3,-101.61 2775.02,-104.47 2783.25,-107.5 2793.57,-111.3 2804.53,-116.14 2814.32,-120.77\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2812.51,-123.79 2823.03,-125 2815.56,-117.49 2812.51,-123.79\"/>\n",
       "</g>\n",
       "<!-- 4606794832 -->\n",
       "<g id=\"node178\" class=\"node\">\n",
       "<title>4606794832</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2266.88,-770.5 2266.88,-806.5 2452.12,-806.5 2452.12,-770.5 2266.88,-770.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2276.75\" y=\"-783.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2286.62,-771 2286.62,-806.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2328.75\" y=\"-783.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.2722</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2370.88,-771 2370.88,-806.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2411.5\" y=\"-783.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606794832&#45;&gt;4606794960+ -->\n",
       "<g id=\"edge164\" class=\"edge\">\n",
       "<title>4606794832&#45;&gt;4606794960+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2432.62,-770.01C2441.4,-767.35 2450.2,-764.5 2458.5,-761.5 2468.59,-757.86 2479.32,-753.27 2488.97,-748.88\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2490.36,-752.09 2497.95,-744.69 2487.4,-745.75 2490.36,-752.09\"/>\n",
       "</g>\n",
       "<!-- 4606794832*&#45;&gt;4606794832 -->\n",
       "<g id=\"edge66\" class=\"edge\">\n",
       "<title>4606794832*&#45;&gt;4606794832</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2224.92,-788.5C2233.77,-788.5 2244.25,-788.5 2255.38,-788.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2255.17,-792 2265.17,-788.5 2255.17,-785 2255.17,-792\"/>\n",
       "</g>\n",
       "<!-- 4606712912 -->\n",
       "<g id=\"node180\" class=\"node\">\n",
       "<title>4606712912</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1941,-220.5 1941,-256.5 2129.25,-256.5 2129.25,-220.5 1941,-220.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1952.38\" y=\"-233.7\" font-family=\"Times,serif\" font-size=\"14.00\">b</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1963.75,-221 1963.75,-256.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2005.88\" y=\"-233.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.9046</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2048,-221 2048,-256.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2088.62\" y=\"-233.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606712912&#45;&gt;4606797008+ -->\n",
       "<g id=\"edge151\" class=\"edge\">\n",
       "<title>4606712912&#45;&gt;4606797008+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2129.42,-238.5C2139.77,-238.5 2149.81,-238.5 2158.85,-238.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2158.57,-242 2168.57,-238.5 2158.57,-235 2158.57,-242\"/>\n",
       "</g>\n",
       "<!-- 4606713040 -->\n",
       "<g id=\"node181\" class=\"node\">\n",
       "<title>4606713040</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"3532.12,-254.5 3532.12,-290.5 3730.12,-290.5 3730.12,-254.5 3532.12,-254.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3548.38\" y=\"-267.7\" font-family=\"Times,serif\" font-size=\"14.00\">w0</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3564.62,-255 3564.62,-290.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3606.75\" y=\"-267.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.8468</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3648.88,-255 3648.88,-290.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3689.5\" y=\"-267.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606713040&#45;&gt;4606798032* -->\n",
       "<g id=\"edge130\" class=\"edge\">\n",
       "<title>4606713040&#45;&gt;4606798032*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3703.65,-290.96C3712.74,-293.65 3721.88,-296.52 3730.5,-299.5 3740.25,-302.87 3750.66,-307.01 3760.12,-310.99\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3758.71,-314.2 3769.28,-314.93 3761.48,-307.77 3758.71,-314.2\"/>\n",
       "</g>\n",
       "<!-- 4606794960 -->\n",
       "<g id=\"node182\" class=\"node\">\n",
       "<title>4606794960</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2591.25,-688.5 2591.25,-724.5 2776.5,-724.5 2776.5,-688.5 2591.25,-688.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2601.12\" y=\"-701.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2611,-689 2611,-724.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2653.12\" y=\"-701.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;1.2438</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2695.25,-689 2695.25,-724.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2735.88\" y=\"-701.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606795216+ -->\n",
       "<g id=\"node188\" class=\"node\">\n",
       "<title>4606795216+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2846.25\" cy=\"-520.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2846.25\" y=\"-515.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606794960&#45;&gt;4606795216+ -->\n",
       "<g id=\"edge142\" class=\"edge\">\n",
       "<title>4606794960&#45;&gt;4606795216+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2760.22,-688.2C2768.63,-684 2776.56,-678.84 2783.25,-672.5 2801.67,-655.06 2824.45,-588.38 2836.62,-549.37\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2839.93,-550.5 2839.53,-539.92 2833.24,-548.45 2839.93,-550.5\"/>\n",
       "</g>\n",
       "<!-- 4606794960+&#45;&gt;4606794960 -->\n",
       "<g id=\"edge67\" class=\"edge\">\n",
       "<title>4606794960+&#45;&gt;4606794960</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2547.91,-729.22C2557.01,-727.69 2567.92,-725.85 2579.54,-723.9\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2580.08,-727.36 2589.36,-722.24 2578.92,-720.45 2580.08,-727.36\"/>\n",
       "</g>\n",
       "<!-- 4606795088 -->\n",
       "<g id=\"node184\" class=\"node\">\n",
       "<title>4606795088</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2591.25,-502.5 2591.25,-538.5 2776.5,-538.5 2776.5,-502.5 2591.25,-502.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2601.12\" y=\"-515.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2611,-503 2611,-538.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2653.12\" y=\"-515.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.5452</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2695.25,-503 2695.25,-538.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2735.88\" y=\"-515.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606795088&#45;&gt;4606795216+ -->\n",
       "<g id=\"edge86\" class=\"edge\">\n",
       "<title>4606795088&#45;&gt;4606795216+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2776.77,-520.5C2787.6,-520.5 2798.13,-520.5 2807.56,-520.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2807.35,-524 2817.35,-520.5 2807.35,-517 2807.35,-524\"/>\n",
       "</g>\n",
       "<!-- 4606795088*&#45;&gt;4606795088 -->\n",
       "<g id=\"edge68\" class=\"edge\">\n",
       "<title>4606795088*&#45;&gt;4606795088</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2548.62,-514.64C2557.54,-515.03 2568.14,-515.49 2579.4,-515.98\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2579.19,-519.48 2589.33,-516.42 2579.5,-512.48 2579.19,-519.48\"/>\n",
       "</g>\n",
       "<!-- 4606713168 -->\n",
       "<g id=\"node186\" class=\"node\">\n",
       "<title>4606713168</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"3532.12,-419.5 3532.12,-455.5 3730.12,-455.5 3730.12,-419.5 3532.12,-419.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3548.38\" y=\"-432.7\" font-family=\"Times,serif\" font-size=\"14.00\">w1</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3564.62,-420 3564.62,-455.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3606.75\" y=\"-432.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.1607</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3648.88,-420 3648.88,-455.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3689.5\" y=\"-432.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606713168&#45;&gt;4606798288* -->\n",
       "<g id=\"edge103\" class=\"edge\">\n",
       "<title>4606713168&#45;&gt;4606798288*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3730.49,-435.05C3739.09,-434.83 3747.39,-434.63 3754.97,-434.44\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3754.81,-437.94 3764.72,-434.19 3754.64,-430.94 3754.81,-437.94\"/>\n",
       "</g>\n",
       "<!-- 4606795216 -->\n",
       "<g id=\"node187\" class=\"node\">\n",
       "<title>4606795216</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2909.25,-502.5 2909.25,-538.5 3094.5,-538.5 3094.5,-502.5 2909.25,-502.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2919.12\" y=\"-515.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2929,-503 2929,-538.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2971.12\" y=\"-515.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;1.7890</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3013.25,-503 3013.25,-538.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3053.88\" y=\"-515.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606795472+ -->\n",
       "<g id=\"node195\" class=\"node\">\n",
       "<title>4606795472+</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"3157.5\" cy=\"-382.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3157.5\" y=\"-377.45\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
       "</g>\n",
       "<!-- 4606795216&#45;&gt;4606795472+ -->\n",
       "<g id=\"edge184\" class=\"edge\">\n",
       "<title>4606795216&#45;&gt;4606795472+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3079.69,-502.08C3084.95,-499.32 3089.96,-496.15 3094.5,-492.5 3120.87,-471.3 3137.98,-435.67 3147.41,-410.73\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3150.63,-412.12 3150.7,-401.53 3144.04,-409.77 3150.63,-412.12\"/>\n",
       "</g>\n",
       "<!-- 4606795216+&#45;&gt;4606795216 -->\n",
       "<g id=\"edge69\" class=\"edge\">\n",
       "<title>4606795216+&#45;&gt;4606795216</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2873.66,-520.5C2880.7,-520.5 2888.75,-520.5 2897.3,-520.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2897.29,-524 2907.29,-520.5 2897.29,-517 2897.29,-524\"/>\n",
       "</g>\n",
       "<!-- 4606713296 -->\n",
       "<g id=\"node189\" class=\"node\">\n",
       "<title>4606713296</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"3532.12,-474.5 3532.12,-510.5 3730.12,-510.5 3730.12,-474.5 3532.12,-474.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3548.38\" y=\"-487.7\" font-family=\"Times,serif\" font-size=\"14.00\">w2</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3564.62,-475 3564.62,-510.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3606.75\" y=\"-487.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.3016</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3648.88,-475 3648.88,-510.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3689.5\" y=\"-487.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606713296&#45;&gt;4606798544* -->\n",
       "<g id=\"edge208\" class=\"edge\">\n",
       "<title>4606713296&#45;&gt;4606798544*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3730.49,-492.5C3739.09,-492.5 3747.39,-492.5 3754.97,-492.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3754.72,-496 3764.72,-492.5 3754.72,-489 3754.72,-496\"/>\n",
       "</g>\n",
       "<!-- 4606795344 -->\n",
       "<g id=\"node190\" class=\"node\">\n",
       "<title>4606795344</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2909.25,-337.5 2909.25,-373.5 3094.5,-373.5 3094.5,-337.5 2909.25,-337.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2919.12\" y=\"-350.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2929,-338 2929,-373.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2971.12\" y=\"-350.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.3345</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3013.25,-338 3013.25,-373.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3053.88\" y=\"-350.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606795344&#45;&gt;4606795472+ -->\n",
       "<g id=\"edge170\" class=\"edge\">\n",
       "<title>4606795344&#45;&gt;4606795472+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3094.9,-371.67C3103.64,-373.21 3112.11,-374.7 3119.83,-376.05\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3118.95,-379.45 3129.41,-377.74 3120.16,-372.56 3118.95,-379.45\"/>\n",
       "</g>\n",
       "<!-- 4606795344*&#45;&gt;4606795344 -->\n",
       "<g id=\"edge70\" class=\"edge\">\n",
       "<title>4606795344*&#45;&gt;4606795344</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2873.66,-355.5C2880.7,-355.5 2888.75,-355.5 2897.3,-355.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2897.29,-359 2907.29,-355.5 2897.29,-352 2897.29,-359\"/>\n",
       "</g>\n",
       "<!-- 4606713424 -->\n",
       "<g id=\"node192\" class=\"node\">\n",
       "<title>4606713424</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"3534.38,-144.5 3534.38,-180.5 3727.88,-180.5 3727.88,-144.5 3534.38,-144.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3550.62\" y=\"-157.7\" font-family=\"Times,serif\" font-size=\"14.00\">w3</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3566.88,-145 3566.88,-180.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3606.75\" y=\"-157.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.8501</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3646.62,-145 3646.62,-180.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3687.25\" y=\"-157.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606713424&#45;&gt;4606798800* -->\n",
       "<g id=\"edge78\" class=\"edge\">\n",
       "<title>4606713424&#45;&gt;4606798800*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3704.53,-180.98C3713.34,-183.64 3722.17,-186.5 3730.5,-189.5 3740.59,-193.14 3751.32,-197.72 3760.98,-202.12\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3759.41,-205.25 3769.95,-206.3 3762.37,-198.9 3759.41,-205.25\"/>\n",
       "</g>\n",
       "<!-- 4606713552 -->\n",
       "<g id=\"node193\" class=\"node\">\n",
       "<title>4606713552</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"3856.5,-362.5 3856.5,-398.5 4040.25,-398.5 4040.25,-362.5 3856.5,-362.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3867.88\" y=\"-375.7\" font-family=\"Times,serif\" font-size=\"14.00\">b</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3879.25,-363 3879.25,-398.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3919.12\" y=\"-375.7\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.9045</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3959,-363 3959,-398.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3999.62\" y=\"-375.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606713552&#45;&gt;4606798160+ -->\n",
       "<g id=\"edge100\" class=\"edge\">\n",
       "<title>4606713552&#45;&gt;4606798160+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M4040.46,-379.66C4071.07,-379.37 4103.55,-379.07 4127.75,-378.85\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"4127.78,-382.35 4137.75,-378.76 4127.71,-375.35 4127.78,-382.35\"/>\n",
       "</g>\n",
       "<!-- 4606795472 -->\n",
       "<g id=\"node194\" class=\"node\">\n",
       "<title>4606795472</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"3220.5,-364.5 3220.5,-400.5 3405.75,-400.5 3405.75,-364.5 3220.5,-364.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3230.38\" y=\"-377.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3240.25,-365 3240.25,-400.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3282.38\" y=\"-377.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;2.1235</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3324.5,-365 3324.5,-400.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3365.12\" y=\"-377.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606795600tanh -->\n",
       "<g id=\"node197\" class=\"node\">\n",
       "<title>4606795600tanh</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"3468.75\" cy=\"-382.5\" rx=\"27\" ry=\"18\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3468.75\" y=\"-377.45\" font-family=\"Times,serif\" font-size=\"14.00\">tanh</text>\n",
       "</g>\n",
       "<!-- 4606795472&#45;&gt;4606795600tanh -->\n",
       "<g id=\"edge102\" class=\"edge\">\n",
       "<title>4606795472&#45;&gt;4606795600tanh</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3406.15,-382.5C3414.52,-382.5 3422.64,-382.5 3430.09,-382.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3430.03,-386 3440.03,-382.5 3430.03,-379 3430.03,-386\"/>\n",
       "</g>\n",
       "<!-- 4606795472+&#45;&gt;4606795472 -->\n",
       "<g id=\"edge71\" class=\"edge\">\n",
       "<title>4606795472+&#45;&gt;4606795472</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3184.91,-382.5C3191.95,-382.5 3200,-382.5 3208.55,-382.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3208.54,-386 3218.54,-382.5 3208.54,-379 3208.54,-386\"/>\n",
       "</g>\n",
       "<!-- 4606795600 -->\n",
       "<g id=\"node196\" class=\"node\">\n",
       "<title>4606795600</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"3531.75,-364.5 3531.75,-400.5 3730.5,-400.5 3730.5,-364.5 3531.75,-364.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3548.38\" y=\"-377.7\" font-family=\"Times,serif\" font-size=\"14.00\">out</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3565,-365 3565,-400.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3607.12\" y=\"-377.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.9718</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"3649.25,-365 3649.25,-400.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"3689.88\" y=\"-377.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606795600&#45;&gt;4606798288* -->\n",
       "<g id=\"edge141\" class=\"edge\">\n",
       "<title>4606795600&#45;&gt;4606798288*</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3702.78,-400.96C3712.15,-403.68 3721.59,-406.56 3730.5,-409.5 3740.03,-412.64 3750.24,-416.42 3759.57,-420.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3758.03,-423.19 3768.62,-423.61 3760.6,-416.68 3758.03,-423.19\"/>\n",
       "</g>\n",
       "<!-- 4606795600tanh&#45;&gt;4606795600 -->\n",
       "<g id=\"edge72\" class=\"edge\">\n",
       "<title>4606795600tanh&#45;&gt;4606795600</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M3496.23,-382.5C3503.36,-382.5 3511.54,-382.5 3520.27,-382.5\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"3520.06,-386 3530.06,-382.5 3520.06,-379 3520.06,-386\"/>\n",
       "</g>\n",
       "<!-- 4606795728 -->\n",
       "<g id=\"node198\" class=\"node\">\n",
       "<title>4606795728</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1942.5,-935.5 1942.5,-971.5 2127.75,-971.5 2127.75,-935.5 1942.5,-935.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1952.38\" y=\"-948.7\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"1962.25,-936 1962.25,-971.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2004.38\" y=\"-948.7\" font-family=\"Times,serif\" font-size=\"14.00\">data &#45;0.4544</text>\n",
       "<polyline fill=\"none\" stroke=\"black\" points=\"2046.5,-936 2046.5,-971.5\"/>\n",
       "<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"2087.12\" y=\"-948.7\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
       "</g>\n",
       "<!-- 4606795728&#45;&gt;4606795856+ -->\n",
       "<g id=\"edge179\" class=\"edge\">\n",
       "<title>4606795728&#45;&gt;4606795856+</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M2108.53,-935.02C2117.34,-932.36 2126.17,-929.5 2134.5,-926.5 2144.59,-922.86 2155.32,-918.28 2164.98,-913.88\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"2166.37,-917.1 2173.95,-909.7 2163.41,-910.75 2166.37,-917.1\"/>\n",
       "</g>\n",
       "<!-- 4606795728*&#45;&gt;4606795728 -->\n",
       "<g id=\"edge73\" class=\"edge\">\n",
       "<title>4606795728*&#45;&gt;4606795728</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M1894.93,-909.06C1906.75,-914.7 1921.86,-921.49 1935.75,-926.5 1940.7,-928.28 1945.82,-930.02 1951.01,-931.69\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"1949.69,-934.94 1960.28,-934.57 1951.77,-928.26 1949.69,-934.94\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x10e0d4380>"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "draw_dot(n(x))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7312b83a-a979-4d3a-a735-014ac0830795",
   "metadata": {},
   "source": [
    "# Apprentissage"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "22c839fe-3908-4039-a07f-207bf44e52b0",
   "metadata": {},
   "source": [
    "## Définition d'une fonction de perte"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "90937f75-36ae-4760-b66e-898f2f2e02b0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Value(data=0.5428321376017807, label=out, grad=0.0),\n",
       " Value(data=0.8825476224698201, label=out, grad=0.0),\n",
       " Value(data=0.24590509211930503, label=out, grad=0.0),\n",
       " Value(data=0.4050940086029426, label=out, grad=0.0)]"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Jeu d'entrainement\n",
    "xs = [\n",
    "    [2.0, 3.0, -1.0],  # exemple 1\n",
    "    [3.0, -1.0, 0.5],  # exemple 2\n",
    "    [0.5, 1.0, 1.0],   # exemple 3\n",
    "    [1.0, 1.0, -1.0],  # exemple 4\n",
    "]\n",
    "ys = [1.0, -1.0, -1.0, 1.0] # desired targets\n",
    "ypred = [n(x) for x in xs]  # sortie \n",
    "ypred"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ebc29b6f-9a64-431c-8c0d-7a78271e94d8",
   "metadata": {},
   "source": [
    "À ce stade, les valeurs de sortie du réseau ne sont pas bonnes, ce qui est normal car nous n'avons réglé aucun paramètre.\n",
    "Nous allons définir une fonction que nous allons chercher à optimiser, ici à minimiser: une fonction de perte utilisant l'erreur quadratique moyenne."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "c53ebd96-9de4-4f1c-a431-a277160f3d80",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Value(data=0.20900245440975715, label=, grad=0.0),\n",
       " Value(data=3.5439855508667724, label=, grad=0.0),\n",
       " Value(data=1.5522794985688142, label=, grad=0.0),\n",
       " Value(data=0.3539131386001157, label=, grad=0.0)]"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[(yout - ygt)**2 for ygt, yout in zip(ys, ypred)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "504d1e45-2c88-4b7d-a016-651cca2afb1d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Value(data=5.65918064244546, label=, grad=0.0)"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "loss = sum((yout - ygt)**2 for ygt, yout in zip(ys, ypred))\n",
    "loss"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3dd67929-0ab4-4307-a105-8c4802268e8c",
   "metadata": {},
   "source": [
    "C'est cette valeur que l'on va chercher à minimiser."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d42f3ea1-c6a4-498e-942d-4b79f818c47f",
   "metadata": {},
   "source": [
    "## Reprise des étapes: apprentissage manuel"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "6aed4665-edf3-4994-948d-681828b3f584",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Architecture de notre réseau\n",
    "n = MLP(3, [4, 4, 1])\n",
    "\n",
    "# Données exemple\n",
    "xs = [\n",
    "    [2.0, 3.0, -1.0],  # exemple 1\n",
    "    [3.0, -1.0, 0.5],  # exemple 2\n",
    "    [0.5, 1.0, 1.0],   # exemple 3\n",
    "    [1.0, 1.0, -1.0],  # exemple 4\n",
    "]\n",
    "\n",
    "# Cible\n",
    "ys = [1.0, -1.0, -1.0, 1.0] # desired targets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "6a6e52cf-7127-46f6-a3e2-af55bc8fe0c7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.4020920928583902, -0.1894861802920144, -0.05922087190814421, 0.2550894154311267]\n",
      "2.4543836642161017\n"
     ]
    }
   ],
   "source": [
    "# forward pass\n",
    "ypred = [n(x) for x in xs]\n",
    "loss = sum((yout - ygt)**2 for ygt, yout in zip(ys, ypred))\n",
    "\n",
    "# backward pass\n",
    "for p in n.parameters():\n",
    "    p.grad = 0.0\n",
    "loss.backward()\n",
    "\n",
    "# update\n",
    "for p in n.parameters():\n",
    "    p.data += -0.1 * p.grad\n",
    "\n",
    "print(list(map(lambda x: x.data, ypred)))\n",
    "print(loss.data)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ceda5b12-4a89-4937-98f8-b1be79a26d1b",
   "metadata": {},
   "source": [
    "## Automatisation de l'apprentissage"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "ae841e0b-493c-4765-a0ff-dfc7cc611081",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 loss=0.00027815740115110454 [0.9947032216496835, -0.9913560575993751, -0.9900334740555171, 0.9912792110086672]\n",
      "1 loss=0.0002778910086773501 [0.9947058577753756, -0.9913601868709156, -0.9900382219334123, 0.9912833679881876]\n",
      "2 loss=0.0002776251162239342 [0.9947084901418856, -0.9913643103734111, -0.9900429631794665, 0.991287519178031]\n",
      "3 loss=0.0002773597223959083 [0.9947111187580135, -0.9913684281201739, -0.9900476978089977, 0.9912916645915285]\n",
      "4 loss=0.00027709482580351365 [0.9947137436325303, -0.9913725401244734, -0.990052425837274, 0.9912958042419678]\n",
      "5 loss=0.0002768304250621039 [0.9947163647741786, -0.9913766463995367, -0.9900571472795149, 0.9912999381425945]\n",
      "6 loss=0.0002765665187921489 [0.9947189821916727, -0.9913807469585485, -0.9900618621508906, 0.9913040663066116]\n",
      "7 loss=0.00027630310561922066 [0.9947215958936985, -0.9913848418146511, -0.9900665704665226, 0.9913081887471796]\n",
      "8 loss=0.00027604018417393545 [0.9947242058889137, -0.9913889309809447, -0.9900712722414844, 0.9913123054774174]\n",
      "9 loss=0.00027577775309196634 [0.9947268121859485, -0.9913930144704878, -0.9900759674908006, 0.9913164165104016]\n",
      "10 loss=0.00027551581101400513 [0.9947294147934046, -0.9913970922962964, -0.9900806562294483, 0.9913205218591671]\n",
      "11 loss=0.0002752543565857338 [0.9947320137198563, -0.991401164471346, -0.9900853384723558, 0.9913246215367074]\n",
      "12 loss=0.0002749933884578092 [0.9947346089738499, -0.99140523100857, -0.9900900142344047, 0.9913287155559745]\n",
      "13 loss=0.00027473290528583504 [0.9947372005639045, -0.991409291920861, -0.9900946835304283, 0.9913328039298793]\n",
      "14 loss=0.0002744729057303457 [0.9947397884985115, -0.99141334722107, -0.9900993463752135, 0.9913368866712914]\n",
      "15 loss=0.0002742133884567916 [0.9947423727861351, -0.9914173969220075, -0.9901040027834986, 0.9913409637930397]\n",
      "16 loss=0.00027395435213548193 [0.9947449534352122, -0.9914214410364433, -0.9901086527699767, 0.9913450353079123]\n",
      "17 loss=0.000273695795441608 [0.9947475304541527, -0.9914254795771064, -0.9901132963492928, 0.9913491012286568]\n",
      "18 loss=0.00027343771705518716 [0.9947501038513393, -0.9914295125566853, -0.9901179335360464, 0.9913531615679803]\n",
      "19 loss=0.00027318011566106204 [0.9947526736351281, -0.9914335399878288, -0.9901225643447896, 0.9913572163385497]\n",
      "20 loss=0.0002729229899488548 [0.9947552398138483, -0.9914375618831455, -0.9901271887900291, 0.991361265552992]\n",
      "21 loss=0.00027266633861298164 [0.9947578023958024, -0.9914415782552033, -0.9901318068862255, 0.991365309223894]\n",
      "22 loss=0.00027241016035259026 [0.9947603613892664, -0.9914455891165311, -0.9901364186477934, 0.9913693473638031]\n",
      "23 loss=0.0002721544538715773 [0.9947629168024897, -0.9914495944796184, -0.9901410240891017, 0.9913733799852267]\n",
      "24 loss=0.00027189921787852537 [0.9947654686436956, -0.9914535943569147, -0.9901456232244743, 0.9913774071006332]\n",
      "25 loss=0.000271644451086726 [0.9947680169210811, -0.9914575887608305, -0.9901502160681893, 0.9913814287224514]\n",
      "26 loss=0.0002713901522141172 [0.9947705616428171, -0.9914615777037371, -0.9901548026344803, 0.9913854448630712]\n",
      "27 loss=0.0002711363199832938 [0.9947731028170481, -0.9914655611979671, -0.9901593829375357, 0.9913894555348436]\n",
      "28 loss=0.00027088295312146973 [0.9947756404518935, -0.9914695392558139, -0.9901639569914994, 0.9913934607500805]\n",
      "29 loss=0.0002706300503604721 [0.9947781745554459, -0.9914735118895325, -0.9901685248104705, 0.9913974605210554]\n",
      "30 loss=0.00027037761043668615 [0.9947807051357732, -0.9914774791113397, -0.9901730864085039, 0.9914014548600034]\n",
      "31 loss=0.00027012563209108295 [0.9947832322009169, -0.9914814409334132, -0.9901776417996107, 0.9914054437791211]\n",
      "32 loss=0.0002698741140691602 [0.9947857557588934, -0.9914853973678934, -0.9901821909977574, 0.991409427290567]\n",
      "33 loss=0.0002696230551209477 [0.9947882758176937, -0.9914893484268822, -0.990186734016867, 0.9914134054064616]\n",
      "34 loss=0.0002693724540009601 [0.9947907923852835, -0.9914932941224436, -0.9901912708708193, 0.9914173781388874]\n",
      "35 loss=0.00026912230946821435 [0.994793305469603, -0.991497234466604, -0.9901958015734496, 0.9914213454998895]\n",
      "36 loss=0.00026887262028616176 [0.994795815078568, -0.9915011694713524, -0.990200326138551, 0.991425307501475]\n",
      "37 loss=0.0002686233852227112 [0.9947983212200685, -0.9915050991486403, -0.9902048445798729, 0.9914292641556139]\n",
      "38 loss=0.0002683746030501911 [0.9948008239019703, -0.9915090235103813, -0.9902093569111221, 0.991433215474239]\n",
      "39 loss=0.0002681262725453214 [0.9948033231321142, -0.9915129425684531, -0.9902138631459623, 0.9914371614692457]\n",
      "40 loss=0.0002678783924892086 [0.9948058189183161, -0.9915168563346958, -0.9902183632980147, 0.9914411021524925]\n",
      "41 loss=0.0002676309616673282 [0.9948083112683676, -0.991520764820912, -0.9902228573808582, 0.9914450375358014]\n",
      "42 loss=0.00026738397886947555 [0.9948108001900355, -0.9915246680388691, -0.9902273454080298, 0.9914489676309572]\n",
      "43 loss=0.0002671374428897925 [0.9948132856910629, -0.9915285660002966, -0.9902318273930236, 0.9914528924497088]\n",
      "44 loss=0.00026689135252670835 [0.9948157677791677, -0.9915324587168886, -0.9902363033492926, 0.9914568120037681]\n",
      "45 loss=0.00026664570658295 [0.9948182464620443, -0.9915363462003022, -0.9902407732902473, 0.9914607263048112]\n",
      "46 loss=0.00026640050386550387 [0.9948207217473627, -0.9915402284621586, -0.9902452372292573, 0.9914646353644778]\n",
      "47 loss=0.00026615574318559365 [0.9948231936427689, -0.9915441055140438, -0.9902496951796503, 0.991468539194372]\n",
      "48 loss=0.0002659114233586779 [0.9948256621558853, -0.9915479773675072, -0.9902541471547133, 0.9914724378060616]\n",
      "49 loss=0.0002656675432044268 [0.9948281272943102, -0.9915518440340627, -0.9902585931676916, 0.9914763312110793]\n",
      "50 loss=0.0002654241015467078 [0.9948305890656182, -0.9915557055251883, -0.9902630332317898, 0.9914802194209219]\n",
      "51 loss=0.0002651810972135345 [0.9948330474773605, -0.9915595618523279, -0.9902674673601719, 0.9914841024470509]\n",
      "52 loss=0.0002649385290371021 [0.9948355025370644, -0.9915634130268884, -0.9902718955659612, 0.9914879803008926]\n",
      "53 loss=0.00026469639585372163 [0.9948379542522342, -0.9915672590602432, -0.9902763178622406, 0.991491852993838]\n",
      "54 loss=0.0002644546965038287 [0.9948404026303508, -0.9915710999637297, -0.9902807342620525, 0.9914957205372436]\n",
      "55 loss=0.00026421342983196637 [0.9948428476788715, -0.9915749357486506, -0.9902851447783994, 0.9914995829424305]\n",
      "56 loss=0.00026397259468673195 [0.9948452894052309, -0.9915787664262744, -0.9902895494242441, 0.9915034402206855]\n",
      "57 loss=0.0002637321899208108 [0.9948477278168403, -0.9915825920078347, -0.9902939482125089, 0.9915072923832606]\n",
      "58 loss=0.00026349221439092536 [0.994850162921088, -0.9915864125045307, -0.9902983411560771, 0.9915111394413736]\n",
      "59 loss=0.0002632526669578241 [0.9948525947253397, -0.9915902279275273, -0.9903027282677919, 0.9915149814062079]\n",
      "60 loss=0.0002630135464862588 [0.994855023236938, -0.9915940382879552, -0.990307109560458, 0.9915188182889126]\n",
      "61 loss=0.0002627748518449845 [0.9948574484632029, -0.9915978435969114, -0.9903114850468401, 0.9915226501006031]\n",
      "62 loss=0.0002625365819067164 [0.994859870411432, -0.9916016438654587, -0.9903158547396645, 0.9915264768523607]\n",
      "63 loss=0.0002622987355481437 [0.9948622890889002, -0.9916054391046263, -0.990320218651618, 0.991530298555233]\n",
      "64 loss=0.0002620613116498816 [0.9948647045028599, -0.9916092293254094, -0.9903245767953495, 0.9915341152202339]\n",
      "65 loss=0.00026182430909647543 [0.9948671166605414, -0.9916130145387706, -0.9903289291834682, 0.991537926858344]\n",
      "66 loss=0.0002615877267763755 [0.9948695255691526, -0.991616794755638, -0.9903332758285457, 0.9915417334805103]\n",
      "67 loss=0.00026135156358190526 [0.9948719312358792, -0.9916205699869077, -0.9903376167431156, 0.9915455350976468]\n",
      "68 loss=0.0002611158184092889 [0.994874333667885, -0.9916243402434415, -0.9903419519396724, 0.9915493317206341]\n",
      "69 loss=0.00026088049015857975 [0.9948767328723116, -0.991628105536069, -0.9903462814306735, 0.9915531233603202]\n",
      "70 loss=0.0002606455777336732 [0.9948791288562789, -0.9916318658755867, -0.9903506052285381, 0.99155691002752]\n",
      "71 loss=0.00026041108004229614 [0.9948815216268849, -0.9916356212727587, -0.9903549233456476, 0.9915606917330158]\n",
      "72 loss=0.0002601769959959707 [0.9948839111912059, -0.9916393717383161, -0.990359235794346, 0.9915644684875572]\n",
      "73 loss=0.00025994332451001576 [0.9948862975562964, -0.9916431172829575, -0.99036354258694, 0.9915682403018614]\n",
      "74 loss=0.00025971006450350737 [0.9948886807291896, -0.9916468579173495, -0.9903678437356993, 0.9915720071866134]\n",
      "75 loss=0.0002594772148992945 [0.9948910607168969, -0.9916505936521265, -0.9903721392528556, 0.9915757691524658]\n",
      "76 loss=0.00025924477462394707 [0.9948934375264088, -0.9916543244978904, -0.990376429150605, 0.9915795262100391]\n",
      "77 loss=0.0002590127426077744 [0.994895811164694, -0.9916580504652116, -0.9903807134411053, 0.9915832783699219]\n",
      "78 loss=0.0002587811177847791 [0.9948981816387003, -0.9916617715646288, -0.9903849921364788, 0.991587025642671]\n",
      "79 loss=0.0002585498990926639 [0.9949005489553541, -0.991665487806648, -0.9903892652488109, 0.9915907680388114]\n",
      "80 loss=0.0002583190854728064 [0.994902913121561, -0.9916691992017448, -0.9903935327901501, 0.9915945055688365]\n",
      "81 loss=0.00025808867587022986 [0.9949052741442054, -0.9916729057603626, -0.9903977947725098, 0.9915982382432085]\n",
      "82 loss=0.00025785866923361744 [0.994907632030151, -0.9916766074929136, -0.9904020512078662, 0.9916019660723578]\n",
      "83 loss=0.00025762906451527224 [0.9949099867862405, -0.991680304409779, -0.99040630210816, 0.991605689066684]\n",
      "84 loss=0.0002573998606711118 [0.994912338419296, -0.9916839965213087, -0.9904105474852961, 0.9916094072365551]\n",
      "85 loss=0.0002571710566606487 [0.994914686936119, -0.9916876838378215, -0.9904147873511436, 0.9916131205923086]\n",
      "86 loss=0.00025694265144697635 [0.9949170323434902, -0.9916913663696055, -0.9904190217175362, 0.9916168291442506]\n",
      "87 loss=0.00025671464399674884 [0.99491937464817, -0.9916950441269184, -0.9904232505962718, 0.9916205329026572]\n",
      "88 loss=0.00025648703328018396 [0.9949217138568983, -0.9916987171199864, -0.9904274739991137, 0.991624231877773]\n",
      "89 loss=0.00025625981827102136 [0.9949240499763948, -0.9917023853590058, -0.9904316919377895, 0.9916279260798128]\n",
      "90 loss=0.000256032997946528 [0.9949263830133587, -0.9917060488541427, -0.9904359044239917, 0.9916316155189605]\n",
      "91 loss=0.00025580657128748024 [0.9949287129744692, -0.991709707615532, -0.9904401114693784, 0.9916353002053699]\n",
      "92 loss=0.0002555805372781285 [0.9949310398663853, -0.9917133616532797, -0.9904443130855728, 0.9916389801491646]\n",
      "93 loss=0.0002553548949062144 [0.9949333636957461, -0.9917170109774607, -0.9904485092841633, 0.9916426553604384]\n",
      "94 loss=0.000255129643162935 [0.9949356844691708, -0.9917206555981201, -0.9904527000767042, 0.9916463258492546]\n",
      "95 loss=0.0002549047810429273 [0.9949380021932585, -0.9917242955252741, -0.9904568854747148, 0.9916499916256472]\n",
      "96 loss=0.0002546803075442763 [0.9949403168745884, -0.9917279307689078, -0.9904610654896808, 0.99165365269962]\n",
      "97 loss=0.00025445622166846534 [0.9949426285197206, -0.9917315613389777, -0.9904652401330535, 0.9916573090811478]\n",
      "98 loss=0.0002542325224203795 [0.9949449371351949, -0.9917351872454109, -0.9904694094162505, 0.9916609607801753]\n",
      "99 loss=0.0002540092088083135 [0.9949472427275319, -0.991738808498104, -0.9904735733506552, 0.9916646078066182]\n"
     ]
    }
   ],
   "source": [
    "for k in range(100):\n",
    "    # forward pass\n",
    "    ypred = [n(x) for x in xs]\n",
    "    loss = sum((yout - ygt)**2 for ygt, yout in zip(ys, ypred))\n",
    "    \n",
    "    # backward pass\n",
    "    for p in n.parameters():\n",
    "        p.grad = 0.0\n",
    "    loss.backward()\n",
    "    \n",
    "    # update\n",
    "    for p in n.parameters():\n",
    "        p.data += -0.1 * p.grad\n",
    "    \n",
    "    print(f\"{k} loss={loss.data} {list(map(lambda x: x.data, ypred))}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d6ed699c-9cf8-4e54-b97f-ed2ddec25d09",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.14.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
