Explorar o código

update comment for ch07

Gen TANG %!s(int64=2) %!d(string=hai) anos
pai
achega
e18835b1cd

+ 1 - 0
.gitignore

@@ -5,6 +5,7 @@
 *~
 .#*
 *.dot
+*.svg
 *.png
 *.zip
 *.lprof

+ 15 - 0
ch07_autograd/README.md

@@ -0,0 +1,15 @@
+
+|代码|说明|
+|---|---|
+|[utils.py](utils.py)| 定义Scalar类以及相应的可视化工具 |
+|[linear_model.py](linear_model.py)| 定义线性回归模型 |
+|[autograd.ipynb](autograd.ipynb)| 通过简单的例子,展示向前传播和反向传播的过程 |
+|[optim_process.ipynb](optim_process.ipynb)| 展示在模型训练过程中出现的计算图膨胀现象,以及如何利用反向传播算法训练线性回归模型 |
+|[gradient_accumulation.ipynb](gradient_accumulation.ipynb)| 梯度累积算法 |
+|[parameter_freezing.ipynb](parameter_freezing.ipynb)| 参数冻结 |
+|[dropout.ipynb](dropout.ipynb)| 随机失活 |
+|[gpu.ipynb](gpu.ipynb)| GPU运算 |
+
+
+
+

+ 143 - 150
ch07_autograd/autograd.ipynb

@@ -2,18 +2,11 @@
  "cells": [
   {
    "cell_type": "code",
-   "execution_count": 1,
+   "execution_count": null,
    "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Requirement already satisfied: pygraphviz in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (1.11)\r\n"
-     ]
-    }
-   ],
+   "outputs": [],
    "source": [
+    "# 安装第三方库\n",
     "!pip install pygraphviz"
    ]
   },
@@ -45,17 +38,17 @@
        "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 150)\">\n",
        "<title>%3</title>\n",
        "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-150 148.295,-150 148.295,4 -4,4\"/>\n",
-       "<!-- 4416457600forward -->\n",
-       "<g id=\"node1\" class=\"node\"><title>4416457600forward</title>\n",
+       "<!-- 140308227507728forward -->\n",
+       "<g id=\"node1\" class=\"node\"><title>140308227507728forward</title>\n",
        "<polygon fill=\"springgreen\" stroke=\"black\" stroke-width=\"2\" points=\"0,-0.5 0,-54.5 63.2949,-54.5 63.2949,-0.5 0,-0.5\"/>\n",
        "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-42.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
        "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"0,-36.5 63.2949,-36.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 2.00</text>\n",
+       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 1.00</text>\n",
        "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"0,-18.5 63.2949,-18.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-6.5\" font-family=\"Times,serif\" font-size=\"10.00\">b</text>\n",
+       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-6.5\" font-family=\"Times,serif\" font-size=\"10.00\">a</text>\n",
        "</g>\n",
-       "<!-- 4416458128forward -->\n",
-       "<g id=\"node2\" class=\"node\"><title>4416458128forward</title>\n",
+       "<!-- 140308227507776forward -->\n",
+       "<g id=\"node3\" class=\"node\"><title>140308227507776forward</title>\n",
        "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M52,-91.5C52,-91.5 91.2949,-91.5 91.2949,-91.5 97.2949,-91.5 103.295,-97.5 103.295,-103.5 103.295,-103.5 103.295,-133.5 103.295,-133.5 103.295,-139.5 97.2949,-145.5 91.2949,-145.5 91.2949,-145.5 52,-145.5 52,-145.5 46,-145.5 40,-139.5 40,-133.5 40,-133.5 40,-103.5 40,-103.5 40,-97.5 46,-91.5 52,-91.5\"/>\n",
        "<text text-anchor=\"middle\" x=\"71.6475\" y=\"-133.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
        "<polyline fill=\"none\" stroke=\"black\" points=\"40,-127.5 103.295,-127.5 \"/>\n",
@@ -63,22 +56,22 @@
        "<polyline fill=\"none\" stroke=\"black\" points=\"40,-109.5 103.295,-109.5 \"/>\n",
        "<text text-anchor=\"middle\" x=\"71.6475\" y=\"-97.5\" font-family=\"Times,serif\" font-size=\"10.00\">+</text>\n",
        "</g>\n",
-       "<!-- 4416457600forward&#45;&gt;4416458128forward -->\n",
-       "<g id=\"edge1\" class=\"edge\"><title>4416457600forward&#45;&gt;4416458128forward</title>\n",
+       "<!-- 140308227507728forward&#45;&gt;140308227507776forward -->\n",
+       "<g id=\"edge2\" class=\"edge\"><title>140308227507728forward&#45;&gt;140308227507776forward</title>\n",
        "<path fill=\"none\" stroke=\"black\" d=\"M43.4324,-54.7216C47.2979,-63.3221 51.6588,-73.0253 55.7758,-82.1855\"/>\n",
        "<polygon fill=\"black\" stroke=\"black\" points=\"52.6549,-83.7795 59.9467,-91.4659 59.0397,-80.9099 52.6549,-83.7795\"/>\n",
        "</g>\n",
-       "<!-- 4416457264forward -->\n",
-       "<g id=\"node3\" class=\"node\"><title>4416457264forward</title>\n",
+       "<!-- 140308227507632forward -->\n",
+       "<g id=\"node2\" class=\"node\"><title>140308227507632forward</title>\n",
        "<polygon fill=\"springgreen\" stroke=\"black\" stroke-width=\"2\" points=\"81,-0.5 81,-54.5 144.295,-54.5 144.295,-0.5 81,-0.5\"/>\n",
        "<text text-anchor=\"middle\" x=\"112.647\" y=\"-42.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
        "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"81,-36.5 144.295,-36.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"112.647\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 1.00</text>\n",
+       "<text text-anchor=\"middle\" x=\"112.647\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 2.00</text>\n",
        "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"81,-18.5 144.295,-18.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"112.647\" y=\"-6.5\" font-family=\"Times,serif\" font-size=\"10.00\">a</text>\n",
+       "<text text-anchor=\"middle\" x=\"112.647\" y=\"-6.5\" font-family=\"Times,serif\" font-size=\"10.00\">b</text>\n",
        "</g>\n",
-       "<!-- 4416457264forward&#45;&gt;4416458128forward -->\n",
-       "<g id=\"edge2\" class=\"edge\"><title>4416457264forward&#45;&gt;4416458128forward</title>\n",
+       "<!-- 140308227507632forward&#45;&gt;140308227507776forward -->\n",
+       "<g id=\"edge1\" class=\"edge\"><title>140308227507632forward&#45;&gt;140308227507776forward</title>\n",
        "<path fill=\"none\" stroke=\"black\" d=\"M100.568,-54.7216C96.6058,-63.3221 92.1358,-73.0253 87.916,-82.1855\"/>\n",
        "<polygon fill=\"black\" stroke=\"black\" points=\"84.646,-80.9188 83.6407,-91.4659 91.0038,-83.8477 84.646,-80.9188\"/>\n",
        "</g>\n",
@@ -86,7 +79,7 @@
        "</svg>\n"
       ],
       "text/plain": [
-       "<graphviz.graphs.Digraph at 0x107233850>"
+       "<graphviz.graphs.Digraph at 0x7f9c0e0f4760>"
       ]
      },
      "execution_count": 3,
@@ -121,17 +114,17 @@
        "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 241)\">\n",
        "<title>%3</title>\n",
        "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-241 229.295,-241 229.295,4 -4,4\"/>\n",
-       "<!-- 4416480256forward -->\n",
-       "<g id=\"node1\" class=\"node\"><title>4416480256forward</title>\n",
-       "<polygon fill=\"springgreen\" stroke=\"black\" stroke-width=\"2\" points=\"0,-0.5 0,-54.5 63.2949,-54.5 63.2949,-0.5 0,-0.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-42.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"0,-36.5 63.2949,-36.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 2.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"0,-18.5 63.2949,-18.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-6.5\" font-family=\"Times,serif\" font-size=\"10.00\">b</text>\n",
+       "<!-- 140308227508784forward -->\n",
+       "<g id=\"node1\" class=\"node\"><title>140308227508784forward</title>\n",
+       "<polygon fill=\"springgreen\" stroke=\"black\" stroke-width=\"2\" points=\"81,-0.5 81,-54.5 144.295,-54.5 144.295,-0.5 81,-0.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"112.647\" y=\"-42.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"81,-36.5 144.295,-36.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"112.647\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 1.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"81,-18.5 144.295,-18.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"112.647\" y=\"-6.5\" font-family=\"Times,serif\" font-size=\"10.00\">a</text>\n",
        "</g>\n",
-       "<!-- 4416457264forward -->\n",
-       "<g id=\"node3\" class=\"node\"><title>4416457264forward</title>\n",
+       "<!-- 140308227508880forward -->\n",
+       "<g id=\"node3\" class=\"node\"><title>140308227508880forward</title>\n",
        "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M52,-91.5C52,-91.5 91.2949,-91.5 91.2949,-91.5 97.2949,-91.5 103.295,-97.5 103.295,-103.5 103.295,-103.5 103.295,-133.5 103.295,-133.5 103.295,-139.5 97.2949,-145.5 91.2949,-145.5 91.2949,-145.5 52,-145.5 52,-145.5 46,-145.5 40,-139.5 40,-133.5 40,-133.5 40,-103.5 40,-103.5 40,-97.5 46,-91.5 52,-91.5\"/>\n",
        "<text text-anchor=\"middle\" x=\"71.6475\" y=\"-133.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
        "<polyline fill=\"none\" stroke=\"black\" points=\"40,-127.5 103.295,-127.5 \"/>\n",
@@ -139,41 +132,13 @@
        "<polyline fill=\"none\" stroke=\"black\" points=\"40,-109.5 103.295,-109.5 \"/>\n",
        "<text text-anchor=\"middle\" x=\"71.6475\" y=\"-97.5\" font-family=\"Times,serif\" font-size=\"10.00\">+</text>\n",
        "</g>\n",
-       "<!-- 4416480256forward&#45;&gt;4416457264forward -->\n",
-       "<g id=\"edge5\" class=\"edge\"><title>4416480256forward&#45;&gt;4416457264forward</title>\n",
-       "<path fill=\"none\" stroke=\"black\" d=\"M43.4324,-54.7216C47.2979,-63.3221 51.6588,-73.0253 55.7758,-82.1855\"/>\n",
-       "<polygon fill=\"black\" stroke=\"black\" points=\"52.6549,-83.7795 59.9467,-91.4659 59.0397,-80.9099 52.6549,-83.7795\"/>\n",
-       "</g>\n",
-       "<!-- 4416480304forward -->\n",
-       "<g id=\"node2\" class=\"node\"><title>4416480304forward</title>\n",
-       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M89.5,-182.5C89.5,-182.5 133.795,-182.5 133.795,-182.5 139.795,-182.5 145.795,-188.5 145.795,-194.5 145.795,-194.5 145.795,-224.5 145.795,-224.5 145.795,-230.5 139.795,-236.5 133.795,-236.5 133.795,-236.5 89.5,-236.5 89.5,-236.5 83.5,-236.5 77.5,-230.5 77.5,-224.5 77.5,-224.5 77.5,-194.5 77.5,-194.5 77.5,-188.5 83.5,-182.5 89.5,-182.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"111.647\" y=\"-224.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"77.5,-218.5 145.795,-218.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"111.647\" y=\"-206.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 12.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"77.5,-200.5 145.795,-200.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"111.647\" y=\"-188.5\" font-family=\"Times,serif\" font-size=\"10.00\">*</text>\n",
-       "</g>\n",
-       "<!-- 4416457264forward&#45;&gt;4416480304forward -->\n",
-       "<g id=\"edge2\" class=\"edge\"><title>4416457264forward&#45;&gt;4416480304forward</title>\n",
-       "<path fill=\"none\" stroke=\"black\" d=\"M83.4324,-145.722C87.2979,-154.322 91.6588,-164.025 95.7758,-173.185\"/>\n",
-       "<polygon fill=\"black\" stroke=\"black\" points=\"92.6549,-174.78 99.9467,-182.466 99.0397,-171.91 92.6549,-174.78\"/>\n",
-       "</g>\n",
-       "<!-- 4416480352forward -->\n",
-       "<g id=\"node4\" class=\"node\"><title>4416480352forward</title>\n",
-       "<polygon fill=\"springgreen\" stroke=\"black\" stroke-width=\"2\" points=\"81,-0.5 81,-54.5 144.295,-54.5 144.295,-0.5 81,-0.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"112.647\" y=\"-42.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"81,-36.5 144.295,-36.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"112.647\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 1.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"81,-18.5 144.295,-18.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"112.647\" y=\"-6.5\" font-family=\"Times,serif\" font-size=\"10.00\">a</text>\n",
-       "</g>\n",
-       "<!-- 4416480352forward&#45;&gt;4416457264forward -->\n",
-       "<g id=\"edge6\" class=\"edge\"><title>4416480352forward&#45;&gt;4416457264forward</title>\n",
+       "<!-- 140308227508784forward&#45;&gt;140308227508880forward -->\n",
+       "<g id=\"edge6\" class=\"edge\"><title>140308227508784forward&#45;&gt;140308227508880forward</title>\n",
        "<path fill=\"none\" stroke=\"black\" d=\"M100.568,-54.7216C96.6058,-63.3221 92.1358,-73.0253 87.916,-82.1855\"/>\n",
        "<polygon fill=\"black\" stroke=\"black\" points=\"84.646,-80.9188 83.6407,-91.4659 91.0038,-83.8477 84.646,-80.9188\"/>\n",
        "</g>\n",
-       "<!-- 4416458128forward -->\n",
-       "<g id=\"node6\" class=\"node\"><title>4416458128forward</title>\n",
+       "<!-- 140308227509504forward -->\n",
+       "<g id=\"node5\" class=\"node\"><title>140308227509504forward</title>\n",
        "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M133,-91.5C133,-91.5 172.295,-91.5 172.295,-91.5 178.295,-91.5 184.295,-97.5 184.295,-103.5 184.295,-103.5 184.295,-133.5 184.295,-133.5 184.295,-139.5 178.295,-145.5 172.295,-145.5 172.295,-145.5 133,-145.5 133,-145.5 127,-145.5 121,-139.5 121,-133.5 121,-133.5 121,-103.5 121,-103.5 121,-97.5 127,-91.5 133,-91.5\"/>\n",
        "<text text-anchor=\"middle\" x=\"152.647\" y=\"-133.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
        "<polyline fill=\"none\" stroke=\"black\" points=\"121,-127.5 184.295,-127.5 \"/>\n",
@@ -181,13 +146,41 @@
        "<polyline fill=\"none\" stroke=\"black\" points=\"121,-109.5 184.295,-109.5 \"/>\n",
        "<text text-anchor=\"middle\" x=\"152.647\" y=\"-97.5\" font-family=\"Times,serif\" font-size=\"10.00\">*</text>\n",
        "</g>\n",
-       "<!-- 4416480352forward&#45;&gt;4416458128forward -->\n",
-       "<g id=\"edge3\" class=\"edge\"><title>4416480352forward&#45;&gt;4416458128forward</title>\n",
+       "<!-- 140308227508784forward&#45;&gt;140308227509504forward -->\n",
+       "<g id=\"edge3\" class=\"edge\"><title>140308227508784forward&#45;&gt;140308227509504forward</title>\n",
        "<path fill=\"none\" stroke=\"black\" d=\"M124.432,-54.7216C128.298,-63.3221 132.659,-73.0253 136.776,-82.1855\"/>\n",
        "<polygon fill=\"black\" stroke=\"black\" points=\"133.655,-83.7795 140.947,-91.4659 140.04,-80.9099 133.655,-83.7795\"/>\n",
        "</g>\n",
-       "<!-- 4416480400forward -->\n",
-       "<g id=\"node5\" class=\"node\"><title>4416480400forward</title>\n",
+       "<!-- 140308227508832forward -->\n",
+       "<g id=\"node2\" class=\"node\"><title>140308227508832forward</title>\n",
+       "<polygon fill=\"springgreen\" stroke=\"black\" stroke-width=\"2\" points=\"0,-0.5 0,-54.5 63.2949,-54.5 63.2949,-0.5 0,-0.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-42.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"0,-36.5 63.2949,-36.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 2.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"0,-18.5 63.2949,-18.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-6.5\" font-family=\"Times,serif\" font-size=\"10.00\">b</text>\n",
+       "</g>\n",
+       "<!-- 140308227508832forward&#45;&gt;140308227508880forward -->\n",
+       "<g id=\"edge4\" class=\"edge\"><title>140308227508832forward&#45;&gt;140308227508880forward</title>\n",
+       "<path fill=\"none\" stroke=\"black\" d=\"M43.4324,-54.7216C47.2979,-63.3221 51.6588,-73.0253 55.7758,-82.1855\"/>\n",
+       "<polygon fill=\"black\" stroke=\"black\" points=\"52.6549,-83.7795 59.9467,-91.4659 59.0397,-80.9099 52.6549,-83.7795\"/>\n",
+       "</g>\n",
+       "<!-- 140308227508016forward -->\n",
+       "<g id=\"node6\" class=\"node\"><title>140308227508016forward</title>\n",
+       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M89.5,-182.5C89.5,-182.5 133.795,-182.5 133.795,-182.5 139.795,-182.5 145.795,-188.5 145.795,-194.5 145.795,-194.5 145.795,-224.5 145.795,-224.5 145.795,-230.5 139.795,-236.5 133.795,-236.5 133.795,-236.5 89.5,-236.5 89.5,-236.5 83.5,-236.5 77.5,-230.5 77.5,-224.5 77.5,-224.5 77.5,-194.5 77.5,-194.5 77.5,-188.5 83.5,-182.5 89.5,-182.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"111.647\" y=\"-224.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"77.5,-218.5 145.795,-218.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"111.647\" y=\"-206.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 12.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"77.5,-200.5 145.795,-200.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"111.647\" y=\"-188.5\" font-family=\"Times,serif\" font-size=\"10.00\">*</text>\n",
+       "</g>\n",
+       "<!-- 140308227508880forward&#45;&gt;140308227508016forward -->\n",
+       "<g id=\"edge2\" class=\"edge\"><title>140308227508880forward&#45;&gt;140308227508016forward</title>\n",
+       "<path fill=\"none\" stroke=\"black\" d=\"M83.4324,-145.722C87.2979,-154.322 91.6588,-164.025 95.7758,-173.185\"/>\n",
+       "<polygon fill=\"black\" stroke=\"black\" points=\"92.6549,-174.78 99.9467,-182.466 99.0397,-171.91 92.6549,-174.78\"/>\n",
+       "</g>\n",
+       "<!-- 140308227508928forward -->\n",
+       "<g id=\"node4\" class=\"node\"><title>140308227508928forward</title>\n",
        "<polygon fill=\"springgreen\" stroke=\"black\" stroke-width=\"2\" points=\"162,-0.5 162,-54.5 225.295,-54.5 225.295,-0.5 162,-0.5\"/>\n",
        "<text text-anchor=\"middle\" x=\"193.647\" y=\"-42.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
        "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"162,-36.5 225.295,-36.5 \"/>\n",
@@ -195,13 +188,13 @@
        "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"162,-18.5 225.295,-18.5 \"/>\n",
        "<text text-anchor=\"middle\" x=\"193.647\" y=\"-6.5\" font-family=\"Times,serif\" font-size=\"10.00\">c</text>\n",
        "</g>\n",
-       "<!-- 4416480400forward&#45;&gt;4416458128forward -->\n",
-       "<g id=\"edge4\" class=\"edge\"><title>4416480400forward&#45;&gt;4416458128forward</title>\n",
+       "<!-- 140308227508928forward&#45;&gt;140308227509504forward -->\n",
+       "<g id=\"edge1\" class=\"edge\"><title>140308227508928forward&#45;&gt;140308227509504forward</title>\n",
        "<path fill=\"none\" stroke=\"black\" d=\"M181.568,-54.7216C177.606,-63.3221 173.136,-73.0253 168.916,-82.1855\"/>\n",
        "<polygon fill=\"black\" stroke=\"black\" points=\"165.646,-80.9188 164.641,-91.4659 172.004,-83.8477 165.646,-80.9188\"/>\n",
        "</g>\n",
-       "<!-- 4416458128forward&#45;&gt;4416480304forward -->\n",
-       "<g id=\"edge1\" class=\"edge\"><title>4416458128forward&#45;&gt;4416480304forward</title>\n",
+       "<!-- 140308227509504forward&#45;&gt;140308227508016forward -->\n",
+       "<g id=\"edge5\" class=\"edge\"><title>140308227509504forward&#45;&gt;140308227508016forward</title>\n",
        "<path fill=\"none\" stroke=\"black\" d=\"M140.568,-145.722C136.606,-154.322 132.136,-164.025 127.916,-173.185\"/>\n",
        "<polygon fill=\"black\" stroke=\"black\" points=\"124.646,-171.919 123.641,-182.466 131.004,-174.848 124.646,-171.919\"/>\n",
        "</g>\n",
@@ -209,7 +202,7 @@
        "</svg>\n"
       ],
       "text/plain": [
-       "<graphviz.graphs.Digraph at 0x1073e2610>"
+       "<graphviz.graphs.Digraph at 0x7f9c0e0f4ee0>"
       ]
      },
      "execution_count": 4,
@@ -248,8 +241,17 @@
        "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 269)\">\n",
        "<title>%3</title>\n",
        "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-269 231.295,-269 231.295,4 -4,4\"/>\n",
-       "<!-- 4416480256backward -->\n",
-       "<g id=\"node1\" class=\"node\"><title>4416480256backward</title>\n",
+       "<!-- 140308227508784backward -->\n",
+       "<g id=\"node1\" class=\"node\"><title>140308227508784backward</title>\n",
+       "<polygon fill=\"springgreen\" stroke=\"black\" stroke-width=\"2\" points=\"81.4434,-0.5 81.4434,-54.5 145.852,-54.5 145.852,-0.5 81.4434,-0.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"113.647\" y=\"-42.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad= 16.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"81.4434,-36.5 145.852,-36.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"113.647\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 1.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"81.4434,-18.5 145.852,-18.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"113.647\" y=\"-6.5\" font-family=\"Times,serif\" font-size=\"10.00\">a</text>\n",
+       "</g>\n",
+       "<!-- 140308227508832backward -->\n",
+       "<g id=\"node2\" class=\"node\"><title>140308227508832backward</title>\n",
        "<polygon fill=\"springgreen\" stroke=\"black\" stroke-width=\"2\" points=\"0,-0.5 0,-54.5 63.2949,-54.5 63.2949,-0.5 0,-0.5\"/>\n",
        "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-42.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad= 4.00</text>\n",
        "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"0,-36.5 63.2949,-36.5 \"/>\n",
@@ -257,68 +259,29 @@
        "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"0,-18.5 63.2949,-18.5 \"/>\n",
        "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-6.5\" font-family=\"Times,serif\" font-size=\"10.00\">b</text>\n",
        "</g>\n",
-       "<!-- 4416480304backward -->\n",
-       "<g id=\"node2\" class=\"node\"><title>4416480304backward</title>\n",
-       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M92.5,-210.5C92.5,-210.5 136.795,-210.5 136.795,-210.5 142.795,-210.5 148.795,-216.5 148.795,-222.5 148.795,-222.5 148.795,-252.5 148.795,-252.5 148.795,-258.5 142.795,-264.5 136.795,-264.5 136.795,-264.5 92.5,-264.5 92.5,-264.5 86.5,-264.5 80.5,-258.5 80.5,-252.5 80.5,-252.5 80.5,-222.5 80.5,-222.5 80.5,-216.5 86.5,-210.5 92.5,-210.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"114.647\" y=\"-252.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad= 1.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"80.5,-246.5 148.795,-246.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"114.647\" y=\"-234.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 12.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"80.5,-228.5 148.795,-228.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"114.647\" y=\"-216.5\" font-family=\"Times,serif\" font-size=\"10.00\">*</text>\n",
-       "</g>\n",
-       "<!-- 4416457264backward -->\n",
-       "<g id=\"node3\" class=\"node\"><title>4416457264backward</title>\n",
-       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M51,-105.5C51,-105.5 90.2949,-105.5 90.2949,-105.5 96.2949,-105.5 102.295,-111.5 102.295,-117.5 102.295,-117.5 102.295,-147.5 102.295,-147.5 102.295,-153.5 96.2949,-159.5 90.2949,-159.5 90.2949,-159.5 51,-159.5 51,-159.5 45,-159.5 39,-153.5 39,-147.5 39,-147.5 39,-117.5 39,-117.5 39,-111.5 45,-105.5 51,-105.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"70.6475\" y=\"-147.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad= 4.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"39,-141.5 102.295,-141.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"70.6475\" y=\"-129.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 3.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"39,-123.5 102.295,-123.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"70.6475\" y=\"-111.5\" font-family=\"Times,serif\" font-size=\"10.00\">+</text>\n",
-       "</g>\n",
-       "<!-- 4416480304backward&#45;&gt;4416457264backward -->\n",
-       "<g id=\"edge2\" class=\"edge\"><title>4416480304backward&#45;&gt;4416457264backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M103.431,-210.242C98.1036,-197.772 91.6561,-182.679 85.8933,-169.189\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"88.991,-167.531 81.8439,-159.71 82.5537,-170.281 88.991,-167.531\"/>\n",
-       "<text text-anchor=\"middle\" x=\"109.647\" y=\"-180.8\" font-family=\"Times,serif\" font-size=\"14.00\"> 4.00</text>\n",
-       "</g>\n",
-       "<!-- 4416458128backward -->\n",
-       "<g id=\"node6\" class=\"node\"><title>4416458128backward</title>\n",
-       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M132,-105.5C132,-105.5 171.295,-105.5 171.295,-105.5 177.295,-105.5 183.295,-111.5 183.295,-117.5 183.295,-117.5 183.295,-147.5 183.295,-147.5 183.295,-153.5 177.295,-159.5 171.295,-159.5 171.295,-159.5 132,-159.5 132,-159.5 126,-159.5 120,-153.5 120,-147.5 120,-147.5 120,-117.5 120,-117.5 120,-111.5 126,-105.5 132,-105.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"151.647\" y=\"-147.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad= 3.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"120,-141.5 183.295,-141.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"151.647\" y=\"-129.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 4.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"120,-123.5 183.295,-123.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"151.647\" y=\"-111.5\" font-family=\"Times,serif\" font-size=\"10.00\">*</text>\n",
-       "</g>\n",
-       "<!-- 4416480304backward&#45;&gt;4416458128backward -->\n",
-       "<g id=\"edge1\" class=\"edge\"><title>4416480304backward&#45;&gt;4416458128backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M124.08,-210.242C128.559,-197.772 133.981,-182.679 138.827,-169.189\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"142.145,-170.304 142.232,-159.71 135.558,-167.938 142.145,-170.304\"/>\n",
-       "<text text-anchor=\"middle\" x=\"149.647\" y=\"-180.8\" font-family=\"Times,serif\" font-size=\"14.00\"> 3.00</text>\n",
-       "</g>\n",
-       "<!-- 4416457264backward&#45;&gt;4416480256backward -->\n",
-       "<g id=\"edge5\" class=\"edge\"><title>4416457264backward&#45;&gt;4416480256backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M44.0267,-105.081C39.8297,-99.5174 36.0792,-93.3848 33.6475,-87 30.9867,-80.014 29.69,-72.2124 29.1931,-64.6408\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"32.6902,-64.4725 28.9582,-54.5567 25.6921,-64.6356 32.6902,-64.4725\"/>\n",
+       "<!-- 140308227508880backward -->\n",
+       "<g id=\"node3\" class=\"node\"><title>140308227508880backward</title>\n",
+       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M50,-105.5C50,-105.5 89.2949,-105.5 89.2949,-105.5 95.2949,-105.5 101.295,-111.5 101.295,-117.5 101.295,-117.5 101.295,-147.5 101.295,-147.5 101.295,-153.5 95.2949,-159.5 89.2949,-159.5 89.2949,-159.5 50,-159.5 50,-159.5 44,-159.5 38,-153.5 38,-147.5 38,-147.5 38,-117.5 38,-117.5 38,-111.5 44,-105.5 50,-105.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"69.6475\" y=\"-147.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad= 4.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"38,-141.5 101.295,-141.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"69.6475\" y=\"-129.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 3.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"38,-123.5 101.295,-123.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"69.6475\" y=\"-111.5\" font-family=\"Times,serif\" font-size=\"10.00\">+</text>\n",
+       "</g>\n",
+       "<!-- 140308227508880backward&#45;&gt;140308227508784backward -->\n",
+       "<g id=\"edge6\" class=\"edge\"><title>140308227508880backward&#45;&gt;140308227508784backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M80.8644,-105.242C86.1913,-92.7723 92.6388,-77.6793 98.4016,-64.1891\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"101.741,-65.2808 102.451,-54.7098 95.3039,-62.5309 101.741,-65.2808\"/>\n",
+       "<text text-anchor=\"middle\" x=\"108.647\" y=\"-75.8\" font-family=\"Times,serif\" font-size=\"14.00\"> 4.00</text>\n",
+       "</g>\n",
+       "<!-- 140308227508880backward&#45;&gt;140308227508832backward -->\n",
+       "<g id=\"edge4\" class=\"edge\"><title>140308227508880backward&#45;&gt;140308227508832backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M44.1021,-105.483C39.8733,-99.7972 36.0796,-93.517 33.6475,-87 31.0337,-79.9963 29.757,-72.1872 29.2646,-64.6139\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"32.7617,-64.4455 29.0276,-54.5306 25.7637,-64.6101 32.7617,-64.4455\"/>\n",
        "<text text-anchor=\"middle\" x=\"47.6475\" y=\"-75.8\" font-family=\"Times,serif\" font-size=\"14.00\"> 4.00</text>\n",
        "</g>\n",
-       "<!-- 4416480352backward -->\n",
-       "<g id=\"node4\" class=\"node\"><title>4416480352backward</title>\n",
-       "<polygon fill=\"springgreen\" stroke=\"black\" stroke-width=\"2\" points=\"81.4434,-0.5 81.4434,-54.5 145.852,-54.5 145.852,-0.5 81.4434,-0.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"113.647\" y=\"-42.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad= 16.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"81.4434,-36.5 145.852,-36.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"113.647\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 1.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"81.4434,-18.5 145.852,-18.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"113.647\" y=\"-6.5\" font-family=\"Times,serif\" font-size=\"10.00\">a</text>\n",
-       "</g>\n",
-       "<!-- 4416457264backward&#45;&gt;4416480352backward -->\n",
-       "<g id=\"edge6\" class=\"edge\"><title>4416457264backward&#45;&gt;4416480352backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M81.6094,-105.242C86.8153,-92.7723 93.1163,-77.6793 98.7481,-64.1891\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"102.083,-65.2863 102.706,-54.7098 95.6231,-62.5895 102.083,-65.2863\"/>\n",
-       "<text text-anchor=\"middle\" x=\"109.647\" y=\"-75.8\" font-family=\"Times,serif\" font-size=\"14.00\"> 4.00</text>\n",
-       "</g>\n",
-       "<!-- 4416480400backward -->\n",
-       "<g id=\"node5\" class=\"node\"><title>4416480400backward</title>\n",
+       "<!-- 140308227508928backward -->\n",
+       "<g id=\"node4\" class=\"node\"><title>140308227508928backward</title>\n",
        "<polygon fill=\"springgreen\" stroke=\"black\" stroke-width=\"2\" points=\"164,-0.5 164,-54.5 227.295,-54.5 227.295,-0.5 164,-0.5\"/>\n",
        "<text text-anchor=\"middle\" x=\"195.647\" y=\"-42.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad= 3.00</text>\n",
        "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"164,-36.5 227.295,-36.5 \"/>\n",
@@ -326,23 +289,53 @@
        "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"164,-18.5 227.295,-18.5 \"/>\n",
        "<text text-anchor=\"middle\" x=\"195.647\" y=\"-6.5\" font-family=\"Times,serif\" font-size=\"10.00\">c</text>\n",
        "</g>\n",
-       "<!-- 4416458128backward&#45;&gt;4416480352backward -->\n",
-       "<g id=\"edge3\" class=\"edge\"><title>4416458128backward&#45;&gt;4416480352backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M141.96,-105.242C137.36,-92.7723 131.791,-77.6793 126.814,-64.1891\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"130.062,-62.8802 123.317,-54.7098 123.495,-65.3032 130.062,-62.8802\"/>\n",
-       "<text text-anchor=\"middle\" x=\"153.147\" y=\"-75.8\" font-family=\"Times,serif\" font-size=\"14.00\"> 12.00</text>\n",
-       "</g>\n",
-       "<!-- 4416458128backward&#45;&gt;4416480400backward -->\n",
-       "<g id=\"edge4\" class=\"edge\"><title>4416458128backward&#45;&gt;4416480400backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M165.115,-105.349C168.042,-99.3715 171.04,-93.0085 173.647,-87 176.836,-79.6512 180.016,-71.6757 182.926,-64.0461\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"186.219,-65.2325 186.448,-54.6401 179.664,-62.7775 186.219,-65.2325\"/>\n",
+       "<!-- 140308227509504backward -->\n",
+       "<g id=\"node5\" class=\"node\"><title>140308227509504backward</title>\n",
+       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M131,-105.5C131,-105.5 170.295,-105.5 170.295,-105.5 176.295,-105.5 182.295,-111.5 182.295,-117.5 182.295,-117.5 182.295,-147.5 182.295,-147.5 182.295,-153.5 176.295,-159.5 170.295,-159.5 170.295,-159.5 131,-159.5 131,-159.5 125,-159.5 119,-153.5 119,-147.5 119,-147.5 119,-117.5 119,-117.5 119,-111.5 125,-105.5 131,-105.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"150.647\" y=\"-147.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad= 3.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"119,-141.5 182.295,-141.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"150.647\" y=\"-129.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 4.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"119,-123.5 182.295,-123.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"150.647\" y=\"-111.5\" font-family=\"Times,serif\" font-size=\"10.00\">*</text>\n",
+       "</g>\n",
+       "<!-- 140308227509504backward&#45;&gt;140308227508784backward -->\n",
+       "<g id=\"edge3\" class=\"edge\"><title>140308227509504backward&#45;&gt;140308227508784backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M141.215,-105.242C136.736,-92.7723 131.314,-77.6793 126.468,-64.1891\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"129.737,-62.9377 123.063,-54.7098 123.15,-65.3043 129.737,-62.9377\"/>\n",
+       "<text text-anchor=\"middle\" x=\"152.147\" y=\"-75.8\" font-family=\"Times,serif\" font-size=\"14.00\"> 12.00</text>\n",
+       "</g>\n",
+       "<!-- 140308227509504backward&#45;&gt;140308227508928backward -->\n",
+       "<g id=\"edge1\" class=\"edge\"><title>140308227509504backward&#45;&gt;140308227508928backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M164.787,-105.395C167.844,-99.4148 170.962,-93.0394 173.647,-87 176.902,-79.6801 180.109,-71.7167 183.026,-64.0899\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"186.319,-65.2753 186.546,-54.6829 179.763,-62.8219 186.319,-65.2753\"/>\n",
        "<text text-anchor=\"middle\" x=\"193.647\" y=\"-75.8\" font-family=\"Times,serif\" font-size=\"14.00\"> 3.00</text>\n",
        "</g>\n",
+       "<!-- 140308227508016backward -->\n",
+       "<g id=\"node6\" class=\"node\"><title>140308227508016backward</title>\n",
+       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M91.5,-210.5C91.5,-210.5 135.795,-210.5 135.795,-210.5 141.795,-210.5 147.795,-216.5 147.795,-222.5 147.795,-222.5 147.795,-252.5 147.795,-252.5 147.795,-258.5 141.795,-264.5 135.795,-264.5 135.795,-264.5 91.5,-264.5 91.5,-264.5 85.5,-264.5 79.5,-258.5 79.5,-252.5 79.5,-252.5 79.5,-222.5 79.5,-222.5 79.5,-216.5 85.5,-210.5 91.5,-210.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"113.647\" y=\"-252.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad= 1.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"79.5,-246.5 147.795,-246.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"113.647\" y=\"-234.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 12.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"79.5,-228.5 147.795,-228.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"113.647\" y=\"-216.5\" font-family=\"Times,serif\" font-size=\"10.00\">*</text>\n",
+       "</g>\n",
+       "<!-- 140308227508016backward&#45;&gt;140308227508880backward -->\n",
+       "<g id=\"edge2\" class=\"edge\"><title>140308227508016backward&#45;&gt;140308227508880backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M102.431,-210.242C97.1036,-197.772 90.6561,-182.679 84.8933,-169.189\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"87.991,-167.531 80.8439,-159.71 81.5537,-170.281 87.991,-167.531\"/>\n",
+       "<text text-anchor=\"middle\" x=\"108.647\" y=\"-180.8\" font-family=\"Times,serif\" font-size=\"14.00\"> 4.00</text>\n",
+       "</g>\n",
+       "<!-- 140308227508016backward&#45;&gt;140308227509504backward -->\n",
+       "<g id=\"edge5\" class=\"edge\"><title>140308227508016backward&#45;&gt;140308227509504backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M123.08,-210.242C127.559,-197.772 132.981,-182.679 137.827,-169.189\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"141.145,-170.304 141.232,-159.71 134.558,-167.938 141.145,-170.304\"/>\n",
+       "<text text-anchor=\"middle\" x=\"148.647\" y=\"-180.8\" font-family=\"Times,serif\" font-size=\"14.00\"> 3.00</text>\n",
+       "</g>\n",
        "</g>\n",
        "</svg>\n"
       ],
       "text/plain": [
-       "<graphviz.graphs.Digraph at 0x1073dcfa0>"
+       "<graphviz.graphs.Digraph at 0x7f9c0e0f4580>"
       ]
      },
      "execution_count": 5,
@@ -360,7 +353,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "# 将反向传播的过程展示出来\n",
+    "# 将反向传播的过程展示出来(可能会有弹框)\n",
     "for index, pic in enumerate(backward_process):\n",
     "    pic.view(str(index))"
    ]

+ 2 - 0
ch07_autograd/dropout.ipynb

@@ -219,10 +219,12 @@
     }
    ],
    "source": [
+    "# 定义训练数据\n",
     "x1 = Scalar(1.5, label='x1', requires_grad=False)\n",
     "y1 = Scalar(1.0, label='y1', requires_grad=False)\n",
     "x2 = Scalar(2.0, label='x2', requires_grad=False)\n",
     "y2 = Scalar(4.0, label='y2', requires_grad=False)\n",
+    "# 定义正常的计算图\n",
     "model = Linear()\n",
     "k = model.forward(x1)\n",
     "l = y1 - k\n",

+ 4 - 1
ch07_autograd/gradient_accumulation.ipynb

@@ -219,6 +219,7 @@
     }
    ],
    "source": [
+    "# 定义训练数据\n",
     "x1 = Scalar(1.5, label='x1', requires_grad=False)\n",
     "y1 = Scalar(1.0, label='y1', requires_grad=False)\n",
     "x2 = Scalar(2.0, label='x2', requires_grad=False)\n",
@@ -391,7 +392,7 @@
     "# 梯度累积\n",
     "model = Linear()\n",
     "# 使用x1,y1传播一次\n",
-    "# 系数0.5是因为平均数权重调整\n",
+    "# 系数0.5是因为梯度累积2次\n",
     "loss = 0.5 * mse([model.error(x1, y1)])\n",
     "loss.backward()\n",
     "draw_graph(loss, 'backward')"
@@ -618,6 +619,7 @@
     "batch_size = 20\n",
     "# 定义每批次梯度累积的次数\n",
     "gradient_accumulation_iter = 4\n",
+    "# 每次反向传播的数据量\n",
     "micro_size = int(batch_size / gradient_accumulation_iter)\n",
     "learning_rate = 0.1\n",
     "\n",
@@ -628,6 +630,7 @@
     "    yy = y[ix: ix + micro_size]\n",
     "    # 计算当前批次数据的损失\n",
     "    loss = mse([model.error(_x, _y) for _x, _y in zip(xx, yy)])\n",
+    "    # 根据梯度累积的次数,调整模型损失的权重\n",
     "    loss *= 1 / gradient_accumulation_iter\n",
     "    # 计算损失函数的梯度\n",
     "    loss.backward()\n",

+ 13 - 12
ch07_autograd/linear_model.py

@@ -1,16 +1,16 @@
 # -*- coding: UTF-8 -*-
-"""
+'''
 此脚本用于定义线性回归模型
-"""
+'''
 
 
 from utils import Scalar
 
 
 def mse(errors):
-    """
+    '''
     计算均方误差
-    """
+    '''
     n = len(errors)
     wrt = {}
     value = 0.0
@@ -26,27 +26,28 @@ def mse(errors):
 
 
 class Linear:
+    
     def __init__(self):
-        """
+        '''
         定义线性回归模型的参数:a, b
-        """
+        '''
         self.a = Scalar(0.0, label='a')
         self.b = Scalar(0.0, label='b')
 
     def forward(self, x):
-        """
+        '''
         根据当前的参数估计值,得到模型的预测结果
-        """
+        '''
         return self.a * x + self.b
     
     def error(self, x, y):
-        """
+        '''
         当前数据的模型误差
-        """
+        '''
         return y - self.forward(x)
 
     def string(self):
-        """
+        '''
         输出当前模型的结果
-        """
+        '''
         return f'y = {self.a.value:.2f} * x + {self.b.value:.2f}'

+ 490 - 489
ch07_autograd/optim_process.ipynb

@@ -24,64 +24,41 @@
        "<!-- Generated by graphviz version 2.38.0 (20140413.2041)\n",
        " -->\n",
        "<!-- Title: %3 Pages: 1 -->\n",
-       "<svg width=\"309pt\" height=\"427pt\"\n",
-       " viewBox=\"0.00 0.00 309.46 427.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
+       "<svg width=\"308pt\" height=\"427pt\"\n",
+       " viewBox=\"0.00 0.00 308.46 427.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 423)\">\n",
        "<title>%3</title>\n",
-       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-423 305.462,-423 305.462,4 -4,4\"/>\n",
-       "<!-- 4520854528forward -->\n",
-       "<g id=\"node1\" class=\"node\"><title>4520854528forward</title>\n",
-       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M174,-91.5C174,-91.5 213.295,-91.5 213.295,-91.5 219.295,-91.5 225.295,-97.5 225.295,-103.5 225.295,-103.5 225.295,-133.5 225.295,-133.5 225.295,-139.5 219.295,-145.5 213.295,-145.5 213.295,-145.5 174,-145.5 174,-145.5 168,-145.5 162,-139.5 162,-133.5 162,-133.5 162,-103.5 162,-103.5 162,-97.5 168,-91.5 174,-91.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"193.647\" y=\"-133.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"162,-127.5 225.295,-127.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"193.647\" y=\"-115.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"162,-109.5 225.295,-109.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"193.647\" y=\"-97.5\" font-family=\"Times,serif\" font-size=\"10.00\">*</text>\n",
-       "</g>\n",
-       "<!-- 4520854576forward -->\n",
-       "<g id=\"node2\" class=\"node\"><title>4520854576forward</title>\n",
-       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M173,-182.5C173,-182.5 212.295,-182.5 212.295,-182.5 218.295,-182.5 224.295,-188.5 224.295,-194.5 224.295,-194.5 224.295,-224.5 224.295,-224.5 224.295,-230.5 218.295,-236.5 212.295,-236.5 212.295,-236.5 173,-236.5 173,-236.5 167,-236.5 161,-230.5 161,-224.5 161,-224.5 161,-194.5 161,-194.5 161,-188.5 167,-182.5 173,-182.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"192.647\" y=\"-224.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"161,-218.5 224.295,-218.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"192.647\" y=\"-206.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"161,-200.5 224.295,-200.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"192.647\" y=\"-188.5\" font-family=\"Times,serif\" font-size=\"10.00\">+</text>\n",
-       "</g>\n",
-       "<!-- 4520854528forward&#45;&gt;4520854576forward -->\n",
-       "<g id=\"edge2\" class=\"edge\"><title>4520854528forward&#45;&gt;4520854576forward</title>\n",
-       "<path fill=\"none\" stroke=\"black\" d=\"M193.353,-145.722C193.259,-154.051 193.154,-163.414 193.054,-172.316\"/>\n",
-       "<polygon fill=\"black\" stroke=\"black\" points=\"189.553,-172.427 192.94,-182.466 196.552,-172.506 189.553,-172.427\"/>\n",
-       "</g>\n",
-       "<!-- 4520854624forward -->\n",
-       "<g id=\"node4\" class=\"node\"><title>4520854624forward</title>\n",
-       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M173,-273.5C173,-273.5 212.295,-273.5 212.295,-273.5 218.295,-273.5 224.295,-279.5 224.295,-285.5 224.295,-285.5 224.295,-315.5 224.295,-315.5 224.295,-321.5 218.295,-327.5 212.295,-327.5 212.295,-327.5 173,-327.5 173,-327.5 167,-327.5 161,-321.5 161,-315.5 161,-315.5 161,-285.5 161,-285.5 161,-279.5 167,-273.5 173,-273.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"192.647\" y=\"-315.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"161,-309.5 224.295,-309.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"192.647\" y=\"-297.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 4.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"161,-291.5 224.295,-291.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"192.647\" y=\"-279.5\" font-family=\"Times,serif\" font-size=\"10.00\">&#45;</text>\n",
+       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-423 304.462,-423 304.462,4 -4,4\"/>\n",
+       "<!-- 140604051737088forward -->\n",
+       "<g id=\"node1\" class=\"node\"><title>140604051737088forward</title>\n",
+       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M14,-182.5C14,-182.5 53.2949,-182.5 53.2949,-182.5 59.2949,-182.5 65.2949,-188.5 65.2949,-194.5 65.2949,-194.5 65.2949,-224.5 65.2949,-224.5 65.2949,-230.5 59.2949,-236.5 53.2949,-236.5 53.2949,-236.5 14,-236.5 14,-236.5 8,-236.5 2,-230.5 2,-224.5 2,-224.5 2,-194.5 2,-194.5 2,-188.5 8,-182.5 14,-182.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"33.6475\" y=\"-224.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"2,-218.5 65.2949,-218.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"33.6475\" y=\"-206.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"2,-200.5 65.2949,-200.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"33.6475\" y=\"-188.5\" font-family=\"Times,serif\" font-size=\"10.00\">+</text>\n",
        "</g>\n",
-       "<!-- 4520854576forward&#45;&gt;4520854624forward -->\n",
-       "<g id=\"edge9\" class=\"edge\"><title>4520854576forward&#45;&gt;4520854624forward</title>\n",
-       "<path fill=\"none\" stroke=\"black\" d=\"M192.647,-236.722C192.647,-245.051 192.647,-254.414 192.647,-263.316\"/>\n",
-       "<polygon fill=\"black\" stroke=\"black\" points=\"189.148,-263.466 192.647,-273.466 196.148,-263.466 189.148,-263.466\"/>\n",
+       "<!-- 140604051737184forward -->\n",
+       "<g id=\"node4\" class=\"node\"><title>140604051737184forward</title>\n",
+       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M92,-273.5C92,-273.5 131.295,-273.5 131.295,-273.5 137.295,-273.5 143.295,-279.5 143.295,-285.5 143.295,-285.5 143.295,-315.5 143.295,-315.5 143.295,-321.5 137.295,-327.5 131.295,-327.5 131.295,-327.5 92,-327.5 92,-327.5 86,-327.5 80,-321.5 80,-315.5 80,-315.5 80,-285.5 80,-285.5 80,-279.5 86,-273.5 92,-273.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"111.647\" y=\"-315.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"80,-309.5 143.295,-309.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"111.647\" y=\"-297.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 1.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"80,-291.5 143.295,-291.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"111.647\" y=\"-279.5\" font-family=\"Times,serif\" font-size=\"10.00\">&#45;</text>\n",
        "</g>\n",
-       "<!-- 4520854096forward -->\n",
-       "<g id=\"node3\" class=\"node\"><title>4520854096forward</title>\n",
-       "<polygon fill=\"springgreen\" stroke=\"black\" stroke-width=\"2\" points=\"81,-0.5 81,-54.5 144.295,-54.5 144.295,-0.5 81,-0.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"112.647\" y=\"-42.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"81,-36.5 144.295,-36.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"112.647\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"81,-18.5 144.295,-18.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"112.647\" y=\"-6.5\" font-family=\"Times,serif\" font-size=\"10.00\">a</text>\n",
+       "<!-- 140604051737088forward&#45;&gt;140604051737184forward -->\n",
+       "<g id=\"edge2\" class=\"edge\"><title>140604051737088forward&#45;&gt;140604051737184forward</title>\n",
+       "<path fill=\"none\" stroke=\"black\" d=\"M56.6282,-236.722C64.6418,-245.865 73.7476,-256.255 82.2127,-265.914\"/>\n",
+       "<polygon fill=\"black\" stroke=\"black\" points=\"79.6078,-268.252 88.831,-273.466 84.8721,-263.638 79.6078,-268.252\"/>\n",
        "</g>\n",
-       "<!-- 4520854096forward&#45;&gt;4520854528forward -->\n",
-       "<g id=\"edge11\" class=\"edge\"><title>4520854096forward&#45;&gt;4520854528forward</title>\n",
-       "<path fill=\"none\" stroke=\"black\" d=\"M136.512,-54.7216C144.834,-63.8653 154.29,-74.2553 163.081,-83.9142\"/>\n",
-       "<polygon fill=\"black\" stroke=\"black\" points=\"160.634,-86.426 169.953,-91.4659 165.811,-81.7144 160.634,-86.426\"/>\n",
+       "<!-- 140604051736608forward -->\n",
+       "<g id=\"node2\" class=\"node\"><title>140604051736608forward</title>\n",
+       "<ellipse fill=\"none\" stroke=\"black\" cx=\"31.6475\" cy=\"-27.5\" rx=\"29.6295\" ry=\"18\"/>\n",
+       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">x1= 1.50</text>\n",
        "</g>\n",
-       "<!-- 4520853952forward -->\n",
-       "<g id=\"node12\" class=\"node\"><title>4520853952forward</title>\n",
+       "<!-- 140604051736656forward -->\n",
+       "<g id=\"node3\" class=\"node\"><title>140604051736656forward</title>\n",
        "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M12,-91.5C12,-91.5 51.2949,-91.5 51.2949,-91.5 57.2949,-91.5 63.2949,-97.5 63.2949,-103.5 63.2949,-103.5 63.2949,-133.5 63.2949,-133.5 63.2949,-139.5 57.2949,-145.5 51.2949,-145.5 51.2949,-145.5 12,-145.5 12,-145.5 6,-145.5 0,-139.5 0,-133.5 0,-133.5 0,-103.5 0,-103.5 0,-97.5 6,-91.5 12,-91.5\"/>\n",
        "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-133.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
        "<polyline fill=\"none\" stroke=\"black\" points=\"0,-127.5 63.2949,-127.5 \"/>\n",
@@ -89,13 +66,18 @@
        "<polyline fill=\"none\" stroke=\"black\" points=\"0,-109.5 63.2949,-109.5 \"/>\n",
        "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-97.5\" font-family=\"Times,serif\" font-size=\"10.00\">*</text>\n",
        "</g>\n",
-       "<!-- 4520854096forward&#45;&gt;4520853952forward -->\n",
-       "<g id=\"edge13\" class=\"edge\"><title>4520854096forward&#45;&gt;4520853952forward</title>\n",
-       "<path fill=\"none\" stroke=\"black\" d=\"M88.7829,-54.7216C80.461,-63.8653 71.005,-74.2553 62.2143,-83.9142\"/>\n",
-       "<polygon fill=\"black\" stroke=\"black\" points=\"59.4839,-81.7144 55.3415,-91.4659 64.6608,-86.426 59.4839,-81.7144\"/>\n",
+       "<!-- 140604051736608forward&#45;&gt;140604051736656forward -->\n",
+       "<g id=\"edge11\" class=\"edge\"><title>140604051736608forward&#45;&gt;140604051736656forward</title>\n",
+       "<path fill=\"none\" stroke=\"black\" d=\"M31.6475,-45.6601C31.6475,-55.7626 31.6475,-68.9344 31.6475,-81.2361\"/>\n",
+       "<polygon fill=\"black\" stroke=\"black\" points=\"28.1476,-81.2784 31.6475,-91.2784 35.1476,-81.2785 28.1476,-81.2784\"/>\n",
        "</g>\n",
-       "<!-- 4520854672forward -->\n",
-       "<g id=\"node6\" class=\"node\"><title>4520854672forward</title>\n",
+       "<!-- 140604051736656forward&#45;&gt;140604051737088forward -->\n",
+       "<g id=\"edge7\" class=\"edge\"><title>140604051736656forward&#45;&gt;140604051737088forward</title>\n",
+       "<path fill=\"none\" stroke=\"black\" d=\"M32.2367,-145.722C32.4239,-154.051 32.6343,-163.414 32.8343,-172.316\"/>\n",
+       "<polygon fill=\"black\" stroke=\"black\" points=\"29.3385,-172.547 33.0624,-182.466 36.3368,-172.39 29.3385,-172.547\"/>\n",
+       "</g>\n",
+       "<!-- 140604051737328forward -->\n",
+       "<g id=\"node9\" class=\"node\"><title>140604051737328forward</title>\n",
        "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M132,-364.5C132,-364.5 171.295,-364.5 171.295,-364.5 177.295,-364.5 183.295,-370.5 183.295,-376.5 183.295,-376.5 183.295,-406.5 183.295,-406.5 183.295,-412.5 177.295,-418.5 171.295,-418.5 171.295,-418.5 132,-418.5 132,-418.5 126,-418.5 120,-412.5 120,-406.5 120,-406.5 120,-376.5 120,-376.5 120,-370.5 126,-364.5 132,-364.5\"/>\n",
        "<text text-anchor=\"middle\" x=\"151.647\" y=\"-406.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
        "<polyline fill=\"none\" stroke=\"black\" points=\"120,-400.5 183.295,-400.5 \"/>\n",
@@ -103,13 +85,74 @@
        "<polyline fill=\"none\" stroke=\"black\" points=\"120,-382.5 183.295,-382.5 \"/>\n",
        "<text text-anchor=\"middle\" x=\"151.647\" y=\"-370.5\" font-family=\"Times,serif\" font-size=\"10.00\">mse</text>\n",
        "</g>\n",
-       "<!-- 4520854624forward&#45;&gt;4520854672forward -->\n",
-       "<g id=\"edge10\" class=\"edge\"><title>4520854624forward&#45;&gt;4520854672forward</title>\n",
+       "<!-- 140604051737184forward&#45;&gt;140604051737328forward -->\n",
+       "<g id=\"edge13\" class=\"edge\"><title>140604051737184forward&#45;&gt;140604051737328forward</title>\n",
+       "<path fill=\"none\" stroke=\"black\" d=\"M123.432,-327.722C127.298,-336.322 131.659,-346.025 135.776,-355.185\"/>\n",
+       "<polygon fill=\"black\" stroke=\"black\" points=\"132.655,-356.78 139.947,-364.466 139.04,-353.91 132.655,-356.78\"/>\n",
+       "</g>\n",
+       "<!-- 140604051737232forward -->\n",
+       "<g id=\"node5\" class=\"node\"><title>140604051737232forward</title>\n",
+       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M174,-91.5C174,-91.5 213.295,-91.5 213.295,-91.5 219.295,-91.5 225.295,-97.5 225.295,-103.5 225.295,-103.5 225.295,-133.5 225.295,-133.5 225.295,-139.5 219.295,-145.5 213.295,-145.5 213.295,-145.5 174,-145.5 174,-145.5 168,-145.5 162,-139.5 162,-133.5 162,-133.5 162,-103.5 162,-103.5 162,-97.5 168,-91.5 174,-91.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"193.647\" y=\"-133.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"162,-127.5 225.295,-127.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"193.647\" y=\"-115.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"162,-109.5 225.295,-109.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"193.647\" y=\"-97.5\" font-family=\"Times,serif\" font-size=\"10.00\">*</text>\n",
+       "</g>\n",
+       "<!-- 140604051737280forward -->\n",
+       "<g id=\"node7\" class=\"node\"><title>140604051737280forward</title>\n",
+       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M172,-182.5C172,-182.5 211.295,-182.5 211.295,-182.5 217.295,-182.5 223.295,-188.5 223.295,-194.5 223.295,-194.5 223.295,-224.5 223.295,-224.5 223.295,-230.5 217.295,-236.5 211.295,-236.5 211.295,-236.5 172,-236.5 172,-236.5 166,-236.5 160,-230.5 160,-224.5 160,-224.5 160,-194.5 160,-194.5 160,-188.5 166,-182.5 172,-182.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"191.647\" y=\"-224.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"160,-218.5 223.295,-218.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"191.647\" y=\"-206.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"160,-200.5 223.295,-200.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"191.647\" y=\"-188.5\" font-family=\"Times,serif\" font-size=\"10.00\">+</text>\n",
+       "</g>\n",
+       "<!-- 140604051737232forward&#45;&gt;140604051737280forward -->\n",
+       "<g id=\"edge14\" class=\"edge\"><title>140604051737232forward&#45;&gt;140604051737280forward</title>\n",
+       "<path fill=\"none\" stroke=\"black\" d=\"M193.058,-145.722C192.871,-154.051 192.661,-163.414 192.461,-172.316\"/>\n",
+       "<polygon fill=\"black\" stroke=\"black\" points=\"188.958,-172.39 192.232,-182.466 195.956,-172.547 188.958,-172.39\"/>\n",
+       "</g>\n",
+       "<!-- 140604051736752forward -->\n",
+       "<g id=\"node6\" class=\"node\"><title>140604051736752forward</title>\n",
+       "<polygon fill=\"springgreen\" stroke=\"black\" stroke-width=\"2\" points=\"81,-0.5 81,-54.5 144.295,-54.5 144.295,-0.5 81,-0.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"112.647\" y=\"-42.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"81,-36.5 144.295,-36.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"112.647\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"81,-18.5 144.295,-18.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"112.647\" y=\"-6.5\" font-family=\"Times,serif\" font-size=\"10.00\">a</text>\n",
+       "</g>\n",
+       "<!-- 140604051736752forward&#45;&gt;140604051736656forward -->\n",
+       "<g id=\"edge10\" class=\"edge\"><title>140604051736752forward&#45;&gt;140604051736656forward</title>\n",
+       "<path fill=\"none\" stroke=\"black\" d=\"M88.7829,-54.7216C80.461,-63.8653 71.005,-74.2553 62.2143,-83.9142\"/>\n",
+       "<polygon fill=\"black\" stroke=\"black\" points=\"59.4839,-81.7144 55.3415,-91.4659 64.6608,-86.426 59.4839,-81.7144\"/>\n",
+       "</g>\n",
+       "<!-- 140604051736752forward&#45;&gt;140604051737232forward -->\n",
+       "<g id=\"edge1\" class=\"edge\"><title>140604051736752forward&#45;&gt;140604051737232forward</title>\n",
+       "<path fill=\"none\" stroke=\"black\" d=\"M136.512,-54.7216C144.834,-63.8653 154.29,-74.2553 163.081,-83.9142\"/>\n",
+       "<polygon fill=\"black\" stroke=\"black\" points=\"160.634,-86.426 169.953,-91.4659 165.811,-81.7144 160.634,-86.426\"/>\n",
+       "</g>\n",
+       "<!-- 140604050260704forward -->\n",
+       "<g id=\"node8\" class=\"node\"><title>140604050260704forward</title>\n",
+       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M173,-273.5C173,-273.5 212.295,-273.5 212.295,-273.5 218.295,-273.5 224.295,-279.5 224.295,-285.5 224.295,-285.5 224.295,-315.5 224.295,-315.5 224.295,-321.5 218.295,-327.5 212.295,-327.5 212.295,-327.5 173,-327.5 173,-327.5 167,-327.5 161,-321.5 161,-315.5 161,-315.5 161,-285.5 161,-285.5 161,-279.5 167,-273.5 173,-273.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"192.647\" y=\"-315.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"161,-309.5 224.295,-309.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"192.647\" y=\"-297.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 4.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"161,-291.5 224.295,-291.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"192.647\" y=\"-279.5\" font-family=\"Times,serif\" font-size=\"10.00\">&#45;</text>\n",
+       "</g>\n",
+       "<!-- 140604051737280forward&#45;&gt;140604050260704forward -->\n",
+       "<g id=\"edge4\" class=\"edge\"><title>140604051737280forward&#45;&gt;140604050260704forward</title>\n",
+       "<path fill=\"none\" stroke=\"black\" d=\"M191.942,-236.722C192.036,-245.051 192.141,-254.414 192.241,-263.316\"/>\n",
+       "<polygon fill=\"black\" stroke=\"black\" points=\"188.743,-263.506 192.355,-273.466 195.742,-263.427 188.743,-263.506\"/>\n",
+       "</g>\n",
+       "<!-- 140604050260704forward&#45;&gt;140604051737328forward -->\n",
+       "<g id=\"edge6\" class=\"edge\"><title>140604050260704forward&#45;&gt;140604051737328forward</title>\n",
        "<path fill=\"none\" stroke=\"black\" d=\"M180.568,-327.722C176.606,-336.322 172.136,-346.025 167.916,-355.185\"/>\n",
        "<polygon fill=\"black\" stroke=\"black\" points=\"164.646,-353.919 163.641,-364.466 171.004,-356.848 164.646,-353.919\"/>\n",
        "</g>\n",
-       "<!-- 4520854144forward -->\n",
-       "<g id=\"node5\" class=\"node\"><title>4520854144forward</title>\n",
+       "<!-- 140604051736848forward -->\n",
+       "<g id=\"node10\" class=\"node\"><title>140604051736848forward</title>\n",
        "<polygon fill=\"springgreen\" stroke=\"black\" stroke-width=\"2\" points=\"81,-91.5 81,-145.5 144.295,-145.5 144.295,-91.5 81,-91.5\"/>\n",
        "<text text-anchor=\"middle\" x=\"112.647\" y=\"-133.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
        "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"81,-127.5 144.295,-127.5 \"/>\n",
@@ -117,94 +160,51 @@
        "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"81,-109.5 144.295,-109.5 \"/>\n",
        "<text text-anchor=\"middle\" x=\"112.647\" y=\"-97.5\" font-family=\"Times,serif\" font-size=\"10.00\">b</text>\n",
        "</g>\n",
-       "<!-- 4520854144forward&#45;&gt;4520854576forward -->\n",
-       "<g id=\"edge3\" class=\"edge\"><title>4520854144forward&#45;&gt;4520854576forward</title>\n",
-       "<path fill=\"none\" stroke=\"black\" d=\"M136.217,-145.722C144.437,-154.865 153.776,-165.255 162.458,-174.914\"/>\n",
-       "<polygon fill=\"black\" stroke=\"black\" points=\"159.958,-177.369 169.246,-182.466 165.164,-172.689 159.958,-177.369\"/>\n",
-       "</g>\n",
-       "<!-- 4520854384forward -->\n",
-       "<g id=\"node11\" class=\"node\"><title>4520854384forward</title>\n",
-       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M14,-182.5C14,-182.5 53.2949,-182.5 53.2949,-182.5 59.2949,-182.5 65.2949,-188.5 65.2949,-194.5 65.2949,-194.5 65.2949,-224.5 65.2949,-224.5 65.2949,-230.5 59.2949,-236.5 53.2949,-236.5 53.2949,-236.5 14,-236.5 14,-236.5 8,-236.5 2,-230.5 2,-224.5 2,-224.5 2,-194.5 2,-194.5 2,-188.5 8,-182.5 14,-182.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"33.6475\" y=\"-224.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"2,-218.5 65.2949,-218.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"33.6475\" y=\"-206.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"2,-200.5 65.2949,-200.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"33.6475\" y=\"-188.5\" font-family=\"Times,serif\" font-size=\"10.00\">+</text>\n",
-       "</g>\n",
-       "<!-- 4520854144forward&#45;&gt;4520854384forward -->\n",
-       "<g id=\"edge14\" class=\"edge\"><title>4520854144forward&#45;&gt;4520854384forward</title>\n",
+       "<!-- 140604051736848forward&#45;&gt;140604051737088forward -->\n",
+       "<g id=\"edge9\" class=\"edge\"><title>140604051736848forward&#45;&gt;140604051737088forward</title>\n",
        "<path fill=\"none\" stroke=\"black\" d=\"M89.3721,-145.722C81.2558,-154.865 72.0332,-165.255 63.4596,-174.914\"/>\n",
        "<polygon fill=\"black\" stroke=\"black\" points=\"60.7773,-172.664 56.7564,-182.466 66.0124,-177.311 60.7773,-172.664\"/>\n",
        "</g>\n",
-       "<!-- 4520854192forward -->\n",
-       "<g id=\"node7\" class=\"node\"><title>4520854192forward</title>\n",
+       "<!-- 140604051736848forward&#45;&gt;140604051737280forward -->\n",
+       "<g id=\"edge12\" class=\"edge\"><title>140604051736848forward&#45;&gt;140604051737280forward</title>\n",
+       "<path fill=\"none\" stroke=\"black\" d=\"M135.923,-145.722C144.039,-154.865 153.262,-165.255 161.835,-174.914\"/>\n",
+       "<polygon fill=\"black\" stroke=\"black\" points=\"159.282,-177.311 168.538,-182.466 164.518,-172.664 159.282,-177.311\"/>\n",
+       "</g>\n",
+       "<!-- 140604051736896forward -->\n",
+       "<g id=\"node11\" class=\"node\"><title>140604051736896forward</title>\n",
        "<ellipse fill=\"none\" stroke=\"black\" cx=\"193.647\" cy=\"-27.5\" rx=\"29.6295\" ry=\"18\"/>\n",
        "<text text-anchor=\"middle\" x=\"193.647\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">x2= 2.00</text>\n",
        "</g>\n",
-       "<!-- 4520854192forward&#45;&gt;4520854528forward -->\n",
-       "<g id=\"edge6\" class=\"edge\"><title>4520854192forward&#45;&gt;4520854528forward</title>\n",
+       "<!-- 140604051736896forward&#45;&gt;140604051737232forward -->\n",
+       "<g id=\"edge3\" class=\"edge\"><title>140604051736896forward&#45;&gt;140604051737232forward</title>\n",
        "<path fill=\"none\" stroke=\"black\" d=\"M193.647,-45.6601C193.647,-55.7626 193.647,-68.9344 193.647,-81.2361\"/>\n",
        "<polygon fill=\"black\" stroke=\"black\" points=\"190.148,-81.2784 193.647,-91.2784 197.148,-81.2785 190.148,-81.2784\"/>\n",
        "</g>\n",
-       "<!-- 4520854240forward -->\n",
-       "<g id=\"node8\" class=\"node\"><title>4520854240forward</title>\n",
+       "<!-- 140604051736944forward -->\n",
+       "<g id=\"node12\" class=\"node\"><title>140604051736944forward</title>\n",
        "<ellipse fill=\"none\" stroke=\"black\" cx=\"112.647\" cy=\"-209.5\" rx=\"29.6295\" ry=\"18\"/>\n",
        "<text text-anchor=\"middle\" x=\"112.647\" y=\"-206.5\" font-family=\"Times,serif\" font-size=\"10.00\">y1= 1.00</text>\n",
        "</g>\n",
-       "<!-- 4520854480forward -->\n",
-       "<g id=\"node13\" class=\"node\"><title>4520854480forward</title>\n",
-       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M92,-273.5C92,-273.5 131.295,-273.5 131.295,-273.5 137.295,-273.5 143.295,-279.5 143.295,-285.5 143.295,-285.5 143.295,-315.5 143.295,-315.5 143.295,-321.5 137.295,-327.5 131.295,-327.5 131.295,-327.5 92,-327.5 92,-327.5 86,-327.5 80,-321.5 80,-315.5 80,-315.5 80,-285.5 80,-285.5 80,-279.5 86,-273.5 92,-273.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"111.647\" y=\"-315.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=None</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"80,-309.5 143.295,-309.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"111.647\" y=\"-297.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 1.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"80,-291.5 143.295,-291.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"111.647\" y=\"-279.5\" font-family=\"Times,serif\" font-size=\"10.00\">&#45;</text>\n",
-       "</g>\n",
-       "<!-- 4520854240forward&#45;&gt;4520854480forward -->\n",
-       "<g id=\"edge7\" class=\"edge\"><title>4520854240forward&#45;&gt;4520854480forward</title>\n",
+       "<!-- 140604051736944forward&#45;&gt;140604051737184forward -->\n",
+       "<g id=\"edge5\" class=\"edge\"><title>140604051736944forward&#45;&gt;140604051737184forward</title>\n",
        "<path fill=\"none\" stroke=\"black\" d=\"M112.455,-227.66C112.341,-237.763 112.193,-250.934 112.055,-263.236\"/>\n",
        "<polygon fill=\"black\" stroke=\"black\" points=\"108.555,-263.24 111.942,-273.278 115.554,-263.318 108.555,-263.24\"/>\n",
        "</g>\n",
-       "<!-- 4520854288forward -->\n",
-       "<g id=\"node9\" class=\"node\"><title>4520854288forward</title>\n",
-       "<ellipse fill=\"none\" stroke=\"black\" cx=\"271.647\" cy=\"-209.5\" rx=\"29.6295\" ry=\"18\"/>\n",
-       "<text text-anchor=\"middle\" x=\"271.647\" y=\"-206.5\" font-family=\"Times,serif\" font-size=\"10.00\">y2= 4.00</text>\n",
-       "</g>\n",
-       "<!-- 4520854288forward&#45;&gt;4520854624forward -->\n",
-       "<g id=\"edge12\" class=\"edge\"><title>4520854288forward&#45;&gt;4520854624forward</title>\n",
-       "<path fill=\"none\" stroke=\"black\" d=\"M258.246,-225.598C248.44,-236.645 234.751,-252.067 222.412,-265.968\"/>\n",
-       "<polygon fill=\"black\" stroke=\"black\" points=\"219.751,-263.694 215.73,-273.496 224.986,-268.341 219.751,-263.694\"/>\n",
-       "</g>\n",
-       "<!-- 4520853856forward -->\n",
-       "<g id=\"node10\" class=\"node\"><title>4520853856forward</title>\n",
-       "<ellipse fill=\"none\" stroke=\"black\" cx=\"31.6475\" cy=\"-27.5\" rx=\"29.6295\" ry=\"18\"/>\n",
-       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">x1= 1.50</text>\n",
+       "<!-- 140604051736992forward -->\n",
+       "<g id=\"node13\" class=\"node\"><title>140604051736992forward</title>\n",
+       "<ellipse fill=\"none\" stroke=\"black\" cx=\"270.647\" cy=\"-209.5\" rx=\"29.6295\" ry=\"18\"/>\n",
+       "<text text-anchor=\"middle\" x=\"270.647\" y=\"-206.5\" font-family=\"Times,serif\" font-size=\"10.00\">y2= 4.00</text>\n",
        "</g>\n",
-       "<!-- 4520853856forward&#45;&gt;4520853952forward -->\n",
-       "<g id=\"edge8\" class=\"edge\"><title>4520853856forward&#45;&gt;4520853952forward</title>\n",
-       "<path fill=\"none\" stroke=\"black\" d=\"M31.6475,-45.6601C31.6475,-55.7626 31.6475,-68.9344 31.6475,-81.2361\"/>\n",
-       "<polygon fill=\"black\" stroke=\"black\" points=\"28.1476,-81.2784 31.6475,-91.2784 35.1476,-81.2785 28.1476,-81.2784\"/>\n",
-       "</g>\n",
-       "<!-- 4520854384forward&#45;&gt;4520854480forward -->\n",
-       "<g id=\"edge5\" class=\"edge\"><title>4520854384forward&#45;&gt;4520854480forward</title>\n",
-       "<path fill=\"none\" stroke=\"black\" d=\"M56.6282,-236.722C64.6418,-245.865 73.7476,-256.255 82.2127,-265.914\"/>\n",
-       "<polygon fill=\"black\" stroke=\"black\" points=\"79.6078,-268.252 88.831,-273.466 84.8721,-263.638 79.6078,-268.252\"/>\n",
-       "</g>\n",
-       "<!-- 4520853952forward&#45;&gt;4520854384forward -->\n",
-       "<g id=\"edge4\" class=\"edge\"><title>4520853952forward&#45;&gt;4520854384forward</title>\n",
-       "<path fill=\"none\" stroke=\"black\" d=\"M32.2367,-145.722C32.4239,-154.051 32.6343,-163.414 32.8343,-172.316\"/>\n",
-       "<polygon fill=\"black\" stroke=\"black\" points=\"29.3385,-172.547 33.0624,-182.466 36.3368,-172.39 29.3385,-172.547\"/>\n",
-       "</g>\n",
-       "<!-- 4520854480forward&#45;&gt;4520854672forward -->\n",
-       "<g id=\"edge1\" class=\"edge\"><title>4520854480forward&#45;&gt;4520854672forward</title>\n",
-       "<path fill=\"none\" stroke=\"black\" d=\"M123.432,-327.722C127.298,-336.322 131.659,-346.025 135.776,-355.185\"/>\n",
-       "<polygon fill=\"black\" stroke=\"black\" points=\"132.655,-356.78 139.947,-364.466 139.04,-353.91 132.655,-356.78\"/>\n",
+       "<!-- 140604051736992forward&#45;&gt;140604050260704forward -->\n",
+       "<g id=\"edge8\" class=\"edge\"><title>140604051736992forward&#45;&gt;140604050260704forward</title>\n",
+       "<path fill=\"none\" stroke=\"black\" d=\"M257.061,-226.003C247.501,-236.91 234.334,-251.935 222.394,-265.558\"/>\n",
+       "<polygon fill=\"black\" stroke=\"black\" points=\"219.502,-263.549 215.543,-273.376 224.766,-268.162 219.502,-263.549\"/>\n",
        "</g>\n",
        "</g>\n",
        "</svg>\n"
       ],
       "text/plain": [
-       "<graphviz.graphs.Digraph at 0x10d76c520>"
+       "<graphviz.graphs.Digraph at 0x7fe0ee8ecbb0>"
       ]
      },
      "execution_count": 2,
@@ -215,6 +215,7 @@
    "source": [
     "# 计算图膨胀\n",
     "model = Linear()\n",
+    "# 定义训练数据\n",
     "x1 = Scalar(1.5, label='x1', requires_grad=False)\n",
     "y1 = Scalar(1.0, label='y1', requires_grad=False)\n",
     "x2 = Scalar(2.0, label='x2', requires_grad=False)\n",
@@ -238,193 +239,193 @@
        "<!-- Generated by graphviz version 2.38.0 (20140413.2041)\n",
        " -->\n",
        "<!-- Title: %3 Pages: 1 -->\n",
-       "<svg width=\"307pt\" height=\"483pt\"\n",
-       " viewBox=\"0.00 0.00 307.29 483.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
+       "<svg width=\"308pt\" height=\"483pt\"\n",
+       " viewBox=\"0.00 0.00 308.46 483.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 479)\">\n",
        "<title>%3</title>\n",
-       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-479 303.295,-479 303.295,4 -4,4\"/>\n",
-       "<!-- 4520854528backward -->\n",
-       "<g id=\"node1\" class=\"node\"><title>4520854528backward</title>\n",
-       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M28,-105.5C28,-105.5 67.2949,-105.5 67.2949,-105.5 73.2949,-105.5 79.2949,-111.5 79.2949,-117.5 79.2949,-117.5 79.2949,-147.5 79.2949,-147.5 79.2949,-153.5 73.2949,-159.5 67.2949,-159.5 67.2949,-159.5 28,-159.5 28,-159.5 22,-159.5 16,-153.5 16,-147.5 16,-147.5 16,-117.5 16,-117.5 16,-111.5 22,-105.5 28,-105.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"47.6475\" y=\"-147.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=&#45;4.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"16,-141.5 79.2949,-141.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"47.6475\" y=\"-129.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"16,-123.5 79.2949,-123.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"47.6475\" y=\"-111.5\" font-family=\"Times,serif\" font-size=\"10.00\">*</text>\n",
-       "</g>\n",
-       "<!-- 4520854096backward -->\n",
-       "<g id=\"node3\" class=\"node\"><title>4520854096backward</title>\n",
-       "<polygon fill=\"springgreen\" stroke=\"black\" stroke-width=\"2\" points=\"127,-0.5 127,-54.5 190.295,-54.5 190.295,-0.5 127,-0.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"158.647\" y=\"-42.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=&#45;9.50</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"127,-36.5 190.295,-36.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"158.647\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"127,-18.5 190.295,-18.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"158.647\" y=\"-6.5\" font-family=\"Times,serif\" font-size=\"10.00\">a</text>\n",
-       "</g>\n",
-       "<!-- 4520854528backward&#45;&gt;4520854096backward -->\n",
-       "<g id=\"edge11\" class=\"edge\"><title>4520854528backward&#45;&gt;4520854096backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M75.9447,-105.242C90.1659,-92.0459 107.553,-75.912 122.709,-61.8487\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"125.452,-64.0774 130.402,-54.7098 120.691,-58.9462 125.452,-64.0774\"/>\n",
-       "<text text-anchor=\"middle\" x=\"125.229\" y=\"-75.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;8.00</text>\n",
-       "</g>\n",
-       "<!-- 4520854192backward -->\n",
-       "<g id=\"node7\" class=\"node\"><title>4520854192backward</title>\n",
-       "<ellipse fill=\"none\" stroke=\"black\" stroke-dasharray=\"5,2\" cx=\"47.6475\" cy=\"-27.5\" rx=\"29.6295\" ry=\"18\"/>\n",
-       "<text text-anchor=\"middle\" x=\"47.6475\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">x2= 2.00</text>\n",
-       "</g>\n",
-       "<!-- 4520854528backward&#45;&gt;4520854192backward -->\n",
-       "<g id=\"edge6\" class=\"edge\"><title>4520854528backward&#45;&gt;4520854192backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" stroke-dasharray=\"5,2\" d=\"M47.6475,-105.242C47.6475,-86.5272 47.6475,-61.9035 47.6475,-45.6575\"/>\n",
-       "</g>\n",
-       "<!-- 4520854576backward -->\n",
-       "<g id=\"node2\" class=\"node\"><title>4520854576backward</title>\n",
-       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M12,-210.5C12,-210.5 51.2949,-210.5 51.2949,-210.5 57.2949,-210.5 63.2949,-216.5 63.2949,-222.5 63.2949,-222.5 63.2949,-252.5 63.2949,-252.5 63.2949,-258.5 57.2949,-264.5 51.2949,-264.5 51.2949,-264.5 12,-264.5 12,-264.5 6,-264.5 0,-258.5 0,-252.5 0,-252.5 0,-222.5 0,-222.5 0,-216.5 6,-210.5 12,-210.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-252.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=&#45;4.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"0,-246.5 63.2949,-246.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-234.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"0,-228.5 63.2949,-228.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-216.5\" font-family=\"Times,serif\" font-size=\"10.00\">+</text>\n",
-       "</g>\n",
-       "<!-- 4520854576backward&#45;&gt;4520854528backward -->\n",
-       "<g id=\"edge2\" class=\"edge\"><title>4520854576backward&#45;&gt;4520854528backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M35.7263,-210.242C37.6258,-198.014 39.9171,-183.264 41.9812,-169.977\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"45.4995,-170.129 43.576,-159.71 38.5824,-169.054 45.4995,-170.129\"/>\n",
-       "<text text-anchor=\"middle\" x=\"55.2285\" y=\"-180.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;4.00</text>\n",
-       "</g>\n",
-       "<!-- 4520854144backward -->\n",
-       "<g id=\"node5\" class=\"node\"><title>4520854144backward</title>\n",
-       "<polygon fill=\"springgreen\" stroke=\"black\" stroke-width=\"2\" points=\"134,-105.5 134,-159.5 197.295,-159.5 197.295,-105.5 134,-105.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"165.647\" y=\"-147.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=&#45;5.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"134,-141.5 197.295,-141.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"165.647\" y=\"-129.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"134,-123.5 197.295,-123.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"165.647\" y=\"-111.5\" font-family=\"Times,serif\" font-size=\"10.00\">b</text>\n",
-       "</g>\n",
-       "<!-- 4520854576backward&#45;&gt;4520854144backward -->\n",
-       "<g id=\"edge3\" class=\"edge\"><title>4520854576backward&#45;&gt;4520854144backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M63.4036,-212.09C82.0416,-197.764 105.766,-179.528 125.669,-164.23\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"127.859,-166.961 133.655,-158.091 123.593,-161.411 127.859,-166.961\"/>\n",
-       "<text text-anchor=\"middle\" x=\"122.229\" y=\"-180.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;4.00</text>\n",
-       "</g>\n",
-       "<!-- 4520854624backward -->\n",
-       "<g id=\"node4\" class=\"node\"><title>4520854624backward</title>\n",
-       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M89,-315.5C89,-315.5 128.295,-315.5 128.295,-315.5 134.295,-315.5 140.295,-321.5 140.295,-327.5 140.295,-327.5 140.295,-357.5 140.295,-357.5 140.295,-363.5 134.295,-369.5 128.295,-369.5 128.295,-369.5 89,-369.5 89,-369.5 83,-369.5 77,-363.5 77,-357.5 77,-357.5 77,-327.5 77,-327.5 77,-321.5 83,-315.5 89,-315.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"108.647\" y=\"-357.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad= 4.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"77,-351.5 140.295,-351.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"108.647\" y=\"-339.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 4.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"77,-333.5 140.295,-333.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"108.647\" y=\"-321.5\" font-family=\"Times,serif\" font-size=\"10.00\">&#45;</text>\n",
-       "</g>\n",
-       "<!-- 4520854624backward&#45;&gt;4520854576backward -->\n",
-       "<g id=\"edge9\" class=\"edge\"><title>4520854624backward&#45;&gt;4520854576backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M89.0179,-315.242C79.4242,-302.409 67.7536,-286.798 57.4496,-273.014\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"60.0321,-270.623 51.2412,-264.71 54.4255,-274.815 60.0321,-270.623\"/>\n",
-       "<text text-anchor=\"middle\" x=\"90.2285\" y=\"-285.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;4.00</text>\n",
-       "</g>\n",
-       "<!-- 4520854288backward -->\n",
-       "<g id=\"node9\" class=\"node\"><title>4520854288backward</title>\n",
-       "<ellipse fill=\"none\" stroke=\"black\" stroke-dasharray=\"5,2\" cx=\"110.647\" cy=\"-237.5\" rx=\"29.6295\" ry=\"18\"/>\n",
-       "<text text-anchor=\"middle\" x=\"110.647\" y=\"-234.5\" font-family=\"Times,serif\" font-size=\"10.00\">y2= 4.00</text>\n",
-       "</g>\n",
-       "<!-- 4520854624backward&#45;&gt;4520854288backward -->\n",
-       "<g id=\"edge12\" class=\"edge\"><title>4520854624backward&#45;&gt;4520854288backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" stroke-dasharray=\"5,2\" d=\"M109.157,-315.242C109.521,-296.527 109.999,-271.903 110.314,-255.657\"/>\n",
-       "</g>\n",
-       "<!-- 4520854672backward -->\n",
-       "<g id=\"node6\" class=\"node\"><title>4520854672backward</title>\n",
-       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M133,-420.5C133,-420.5 172.295,-420.5 172.295,-420.5 178.295,-420.5 184.295,-426.5 184.295,-432.5 184.295,-432.5 184.295,-462.5 184.295,-462.5 184.295,-468.5 178.295,-474.5 172.295,-474.5 172.295,-474.5 133,-474.5 133,-474.5 127,-474.5 121,-468.5 121,-462.5 121,-462.5 121,-432.5 121,-432.5 121,-426.5 127,-420.5 133,-420.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"152.647\" y=\"-462.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad= 1.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"121,-456.5 184.295,-456.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"152.647\" y=\"-444.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 8.50</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"121,-438.5 184.295,-438.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"152.647\" y=\"-426.5\" font-family=\"Times,serif\" font-size=\"10.00\">mse</text>\n",
-       "</g>\n",
-       "<!-- 4520854672backward&#45;&gt;4520854624backward -->\n",
-       "<g id=\"edge10\" class=\"edge\"><title>4520854672backward&#45;&gt;4520854624backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M141.431,-420.242C136.104,-407.772 129.656,-392.679 123.893,-379.189\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"126.991,-377.531 119.844,-369.71 120.554,-380.281 126.991,-377.531\"/>\n",
-       "<text text-anchor=\"middle\" x=\"147.647\" y=\"-390.8\" font-family=\"Times,serif\" font-size=\"14.00\"> 4.00</text>\n",
-       "</g>\n",
-       "<!-- 4520854480backward -->\n",
-       "<g id=\"node13\" class=\"node\"><title>4520854480backward</title>\n",
-       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M170,-315.5C170,-315.5 209.295,-315.5 209.295,-315.5 215.295,-315.5 221.295,-321.5 221.295,-327.5 221.295,-327.5 221.295,-357.5 221.295,-357.5 221.295,-363.5 215.295,-369.5 209.295,-369.5 209.295,-369.5 170,-369.5 170,-369.5 164,-369.5 158,-363.5 158,-357.5 158,-357.5 158,-327.5 158,-327.5 158,-321.5 164,-315.5 170,-315.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"189.647\" y=\"-357.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad= 1.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"158,-351.5 221.295,-351.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"189.647\" y=\"-339.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 1.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"158,-333.5 221.295,-333.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"189.647\" y=\"-321.5\" font-family=\"Times,serif\" font-size=\"10.00\">&#45;</text>\n",
-       "</g>\n",
-       "<!-- 4520854672backward&#45;&gt;4520854480backward -->\n",
-       "<g id=\"edge1\" class=\"edge\"><title>4520854672backward&#45;&gt;4520854480backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M162.08,-420.242C166.559,-407.772 171.981,-392.679 176.827,-379.189\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"180.145,-380.304 180.232,-369.71 173.558,-377.938 180.145,-380.304\"/>\n",
-       "<text text-anchor=\"middle\" x=\"187.647\" y=\"-390.8\" font-family=\"Times,serif\" font-size=\"14.00\"> 1.00</text>\n",
-       "</g>\n",
-       "<!-- 4520854240backward -->\n",
-       "<g id=\"node8\" class=\"node\"><title>4520854240backward</title>\n",
-       "<ellipse fill=\"none\" stroke=\"black\" stroke-dasharray=\"5,2\" cx=\"188.647\" cy=\"-237.5\" rx=\"29.6295\" ry=\"18\"/>\n",
-       "<text text-anchor=\"middle\" x=\"188.647\" y=\"-234.5\" font-family=\"Times,serif\" font-size=\"10.00\">y1= 1.00</text>\n",
-       "</g>\n",
-       "<!-- 4520853856backward -->\n",
-       "<g id=\"node10\" class=\"node\"><title>4520853856backward</title>\n",
-       "<ellipse fill=\"none\" stroke=\"black\" stroke-dasharray=\"5,2\" cx=\"257.647\" cy=\"-27.5\" rx=\"29.6295\" ry=\"18\"/>\n",
-       "<text text-anchor=\"middle\" x=\"257.647\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">x1= 1.50</text>\n",
-       "</g>\n",
-       "<!-- 4520854384backward -->\n",
-       "<g id=\"node11\" class=\"node\"><title>4520854384backward</title>\n",
-       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M248,-210.5C248,-210.5 287.295,-210.5 287.295,-210.5 293.295,-210.5 299.295,-216.5 299.295,-222.5 299.295,-222.5 299.295,-252.5 299.295,-252.5 299.295,-258.5 293.295,-264.5 287.295,-264.5 287.295,-264.5 248,-264.5 248,-264.5 242,-264.5 236,-258.5 236,-252.5 236,-252.5 236,-222.5 236,-222.5 236,-216.5 242,-210.5 248,-210.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"267.647\" y=\"-252.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=&#45;1.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"236,-246.5 299.295,-246.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"267.647\" y=\"-234.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"236,-228.5 299.295,-228.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"267.647\" y=\"-216.5\" font-family=\"Times,serif\" font-size=\"10.00\">+</text>\n",
-       "</g>\n",
-       "<!-- 4520854384backward&#45;&gt;4520854144backward -->\n",
-       "<g id=\"edge14\" class=\"edge\"><title>4520854384backward&#45;&gt;4520854144backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M241.645,-210.242C228.576,-197.046 212.599,-180.912 198.672,-166.849\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"201.126,-164.353 191.603,-159.71 196.152,-169.278 201.126,-164.353\"/>\n",
-       "<text text-anchor=\"middle\" x=\"237.229\" y=\"-180.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;1.00</text>\n",
-       "</g>\n",
-       "<!-- 4520853952backward -->\n",
-       "<g id=\"node12\" class=\"node\"><title>4520853952backward</title>\n",
-       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M238,-105.5C238,-105.5 277.295,-105.5 277.295,-105.5 283.295,-105.5 289.295,-111.5 289.295,-117.5 289.295,-117.5 289.295,-147.5 289.295,-147.5 289.295,-153.5 283.295,-159.5 277.295,-159.5 277.295,-159.5 238,-159.5 238,-159.5 232,-159.5 226,-153.5 226,-147.5 226,-147.5 226,-117.5 226,-117.5 226,-111.5 232,-105.5 238,-105.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"257.647\" y=\"-147.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=&#45;1.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"226,-141.5 289.295,-141.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"257.647\" y=\"-129.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"226,-123.5 289.295,-123.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"257.647\" y=\"-111.5\" font-family=\"Times,serif\" font-size=\"10.00\">*</text>\n",
-       "</g>\n",
-       "<!-- 4520854384backward&#45;&gt;4520853952backward -->\n",
-       "<g id=\"edge4\" class=\"edge\"><title>4520854384backward&#45;&gt;4520853952backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M265.098,-210.242C263.911,-198.014 262.479,-183.264 261.189,-169.977\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"264.642,-169.325 260.192,-159.71 257.675,-170.001 264.642,-169.325\"/>\n",
-       "<text text-anchor=\"middle\" x=\"277.229\" y=\"-180.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;1.00</text>\n",
-       "</g>\n",
-       "<!-- 4520853952backward&#45;&gt;4520854096backward -->\n",
-       "<g id=\"edge13\" class=\"edge\"><title>4520853952backward&#45;&gt;4520854096backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M232.409,-105.242C219.842,-92.167 204.502,-76.2078 191.074,-62.2363\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"193.293,-59.4941 183.839,-54.7098 188.246,-64.3449 193.293,-59.4941\"/>\n",
-       "<text text-anchor=\"middle\" x=\"228.229\" y=\"-75.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;1.50</text>\n",
-       "</g>\n",
-       "<!-- 4520853952backward&#45;&gt;4520853856backward -->\n",
-       "<g id=\"edge8\" class=\"edge\"><title>4520853952backward&#45;&gt;4520853856backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" stroke-dasharray=\"5,2\" d=\"M257.647,-105.242C257.647,-86.5272 257.647,-61.9035 257.647,-45.6575\"/>\n",
-       "</g>\n",
-       "<!-- 4520854480backward&#45;&gt;4520854240backward -->\n",
-       "<g id=\"edge7\" class=\"edge\"><title>4520854480backward&#45;&gt;4520854240backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" stroke-dasharray=\"5,2\" d=\"M189.393,-315.242C189.211,-296.527 188.972,-271.903 188.814,-255.657\"/>\n",
-       "</g>\n",
-       "<!-- 4520854480backward&#45;&gt;4520854384backward -->\n",
-       "<g id=\"edge5\" class=\"edge\"><title>4520854480backward&#45;&gt;4520854384backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M209.532,-315.242C219.25,-302.409 231.072,-286.798 241.51,-273.014\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"244.552,-274.795 247.799,-264.71 238.972,-270.569 244.552,-274.795\"/>\n",
-       "<text text-anchor=\"middle\" x=\"247.229\" y=\"-285.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;1.00</text>\n",
+       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-479 304.462,-479 304.462,4 -4,4\"/>\n",
+       "<!-- 140604051737088backward -->\n",
+       "<g id=\"node1\" class=\"node\"><title>140604051737088backward</title>\n",
+       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M14,-210.5C14,-210.5 53.2949,-210.5 53.2949,-210.5 59.2949,-210.5 65.2949,-216.5 65.2949,-222.5 65.2949,-222.5 65.2949,-252.5 65.2949,-252.5 65.2949,-258.5 59.2949,-264.5 53.2949,-264.5 53.2949,-264.5 14,-264.5 14,-264.5 8,-264.5 2,-258.5 2,-252.5 2,-252.5 2,-222.5 2,-222.5 2,-216.5 8,-210.5 14,-210.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"33.6475\" y=\"-252.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=&#45;1.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"2,-246.5 65.2949,-246.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"33.6475\" y=\"-234.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"2,-228.5 65.2949,-228.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"33.6475\" y=\"-216.5\" font-family=\"Times,serif\" font-size=\"10.00\">+</text>\n",
+       "</g>\n",
+       "<!-- 140604051736656backward -->\n",
+       "<g id=\"node3\" class=\"node\"><title>140604051736656backward</title>\n",
+       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M12,-105.5C12,-105.5 51.2949,-105.5 51.2949,-105.5 57.2949,-105.5 63.2949,-111.5 63.2949,-117.5 63.2949,-117.5 63.2949,-147.5 63.2949,-147.5 63.2949,-153.5 57.2949,-159.5 51.2949,-159.5 51.2949,-159.5 12,-159.5 12,-159.5 6,-159.5 0,-153.5 0,-147.5 0,-147.5 0,-117.5 0,-117.5 0,-111.5 6,-105.5 12,-105.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-147.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=&#45;1.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"0,-141.5 63.2949,-141.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-129.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"0,-123.5 63.2949,-123.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-111.5\" font-family=\"Times,serif\" font-size=\"10.00\">*</text>\n",
+       "</g>\n",
+       "<!-- 140604051737088backward&#45;&gt;140604051736656backward -->\n",
+       "<g id=\"edge7\" class=\"edge\"><title>140604051737088backward&#45;&gt;140604051736656backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M33.1376,-210.242C32.9002,-198.014 32.6138,-183.264 32.3557,-169.977\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"35.85,-169.64 32.1564,-159.71 28.8513,-169.776 35.85,-169.64\"/>\n",
+       "<text text-anchor=\"middle\" x=\"48.2285\" y=\"-180.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;1.00</text>\n",
+       "</g>\n",
+       "<!-- 140604051736848backward -->\n",
+       "<g id=\"node10\" class=\"node\"><title>140604051736848backward</title>\n",
+       "<polygon fill=\"springgreen\" stroke=\"black\" stroke-width=\"2\" points=\"81,-105.5 81,-159.5 144.295,-159.5 144.295,-105.5 81,-105.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"112.647\" y=\"-147.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=&#45;5.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"81,-141.5 144.295,-141.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"112.647\" y=\"-129.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"81,-123.5 144.295,-123.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"112.647\" y=\"-111.5\" font-family=\"Times,serif\" font-size=\"10.00\">b</text>\n",
+       "</g>\n",
+       "<!-- 140604051737088backward&#45;&gt;140604051736848backward -->\n",
+       "<g id=\"edge9\" class=\"edge\"><title>140604051737088backward&#45;&gt;140604051736848backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M53.7869,-210.242C63.6298,-197.409 75.6035,-181.798 86.1752,-168.014\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"89.236,-169.775 92.5448,-159.71 83.6816,-165.515 89.236,-169.775\"/>\n",
+       "<text text-anchor=\"middle\" x=\"92.2285\" y=\"-180.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;1.00</text>\n",
+       "</g>\n",
+       "<!-- 140604051736608backward -->\n",
+       "<g id=\"node2\" class=\"node\"><title>140604051736608backward</title>\n",
+       "<ellipse fill=\"none\" stroke=\"black\" stroke-dasharray=\"5,2\" cx=\"31.6475\" cy=\"-27.5\" rx=\"29.6295\" ry=\"18\"/>\n",
+       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">x1= 1.50</text>\n",
+       "</g>\n",
+       "<!-- 140604051736656backward&#45;&gt;140604051736608backward -->\n",
+       "<g id=\"edge11\" class=\"edge\"><title>140604051736656backward&#45;&gt;140604051736608backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" stroke-dasharray=\"5,2\" d=\"M31.6475,-105.242C31.6475,-86.5272 31.6475,-61.9035 31.6475,-45.6575\"/>\n",
+       "</g>\n",
+       "<!-- 140604051736752backward -->\n",
+       "<g id=\"node6\" class=\"node\"><title>140604051736752backward</title>\n",
+       "<polygon fill=\"springgreen\" stroke=\"black\" stroke-width=\"2\" points=\"81,-0.5 81,-54.5 144.295,-54.5 144.295,-0.5 81,-0.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"112.647\" y=\"-42.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=&#45;9.50</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"81,-36.5 144.295,-36.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"112.647\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"81,-18.5 144.295,-18.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"112.647\" y=\"-6.5\" font-family=\"Times,serif\" font-size=\"10.00\">a</text>\n",
+       "</g>\n",
+       "<!-- 140604051736656backward&#45;&gt;140604051736752backward -->\n",
+       "<g id=\"edge10\" class=\"edge\"><title>140604051736656backward&#45;&gt;140604051736752backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M52.2968,-105.242C62.484,-92.2881 74.8975,-76.503 85.8114,-62.6249\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"88.6054,-64.7339 92.0359,-54.7098 83.103,-60.4068 88.6054,-64.7339\"/>\n",
+       "<text text-anchor=\"middle\" x=\"91.2285\" y=\"-75.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;1.50</text>\n",
+       "</g>\n",
+       "<!-- 140604051737184backward -->\n",
+       "<g id=\"node4\" class=\"node\"><title>140604051737184backward</title>\n",
+       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M92,-315.5C92,-315.5 131.295,-315.5 131.295,-315.5 137.295,-315.5 143.295,-321.5 143.295,-327.5 143.295,-327.5 143.295,-357.5 143.295,-357.5 143.295,-363.5 137.295,-369.5 131.295,-369.5 131.295,-369.5 92,-369.5 92,-369.5 86,-369.5 80,-363.5 80,-357.5 80,-357.5 80,-327.5 80,-327.5 80,-321.5 86,-315.5 92,-315.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"111.647\" y=\"-357.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad= 1.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"80,-351.5 143.295,-351.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"111.647\" y=\"-339.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 1.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"80,-333.5 143.295,-333.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"111.647\" y=\"-321.5\" font-family=\"Times,serif\" font-size=\"10.00\">&#45;</text>\n",
+       "</g>\n",
+       "<!-- 140604051737184backward&#45;&gt;140604051737088backward -->\n",
+       "<g id=\"edge2\" class=\"edge\"><title>140604051737184backward&#45;&gt;140604051737088backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M91.7629,-315.242C82.0447,-302.409 70.2225,-286.798 59.7847,-273.014\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"62.323,-270.569 53.4957,-264.71 56.7426,-274.795 62.323,-270.569\"/>\n",
+       "<text text-anchor=\"middle\" x=\"91.2285\" y=\"-285.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;1.00</text>\n",
+       "</g>\n",
+       "<!-- 140604051736944backward -->\n",
+       "<g id=\"node12\" class=\"node\"><title>140604051736944backward</title>\n",
+       "<ellipse fill=\"none\" stroke=\"black\" stroke-dasharray=\"5,2\" cx=\"112.647\" cy=\"-237.5\" rx=\"29.6295\" ry=\"18\"/>\n",
+       "<text text-anchor=\"middle\" x=\"112.647\" y=\"-234.5\" font-family=\"Times,serif\" font-size=\"10.00\">y1= 1.00</text>\n",
+       "</g>\n",
+       "<!-- 140604051737184backward&#45;&gt;140604051736944backward -->\n",
+       "<g id=\"edge5\" class=\"edge\"><title>140604051737184backward&#45;&gt;140604051736944backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" stroke-dasharray=\"5,2\" d=\"M111.902,-315.242C112.084,-296.527 112.323,-271.903 112.481,-255.657\"/>\n",
+       "</g>\n",
+       "<!-- 140604051737232backward -->\n",
+       "<g id=\"node5\" class=\"node\"><title>140604051737232backward</title>\n",
+       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M174,-105.5C174,-105.5 213.295,-105.5 213.295,-105.5 219.295,-105.5 225.295,-111.5 225.295,-117.5 225.295,-117.5 225.295,-147.5 225.295,-147.5 225.295,-153.5 219.295,-159.5 213.295,-159.5 213.295,-159.5 174,-159.5 174,-159.5 168,-159.5 162,-153.5 162,-147.5 162,-147.5 162,-117.5 162,-117.5 162,-111.5 168,-105.5 174,-105.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"193.647\" y=\"-147.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=&#45;4.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"162,-141.5 225.295,-141.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"193.647\" y=\"-129.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"162,-123.5 225.295,-123.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"193.647\" y=\"-111.5\" font-family=\"Times,serif\" font-size=\"10.00\">*</text>\n",
+       "</g>\n",
+       "<!-- 140604051737232backward&#45;&gt;140604051736752backward -->\n",
+       "<g id=\"edge1\" class=\"edge\"><title>140604051737232backward&#45;&gt;140604051736752backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M172.998,-105.242C162.811,-92.2881 150.397,-76.503 139.484,-62.6249\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"142.192,-60.4068 133.259,-54.7098 136.689,-64.7339 142.192,-60.4068\"/>\n",
+       "<text text-anchor=\"middle\" x=\"172.229\" y=\"-75.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;8.00</text>\n",
+       "</g>\n",
+       "<!-- 140604051736896backward -->\n",
+       "<g id=\"node11\" class=\"node\"><title>140604051736896backward</title>\n",
+       "<ellipse fill=\"none\" stroke=\"black\" stroke-dasharray=\"5,2\" cx=\"193.647\" cy=\"-27.5\" rx=\"29.6295\" ry=\"18\"/>\n",
+       "<text text-anchor=\"middle\" x=\"193.647\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">x2= 2.00</text>\n",
+       "</g>\n",
+       "<!-- 140604051737232backward&#45;&gt;140604051736896backward -->\n",
+       "<g id=\"edge3\" class=\"edge\"><title>140604051737232backward&#45;&gt;140604051736896backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" stroke-dasharray=\"5,2\" d=\"M193.647,-105.242C193.647,-86.5272 193.647,-61.9035 193.647,-45.6575\"/>\n",
+       "</g>\n",
+       "<!-- 140604051737280backward -->\n",
+       "<g id=\"node7\" class=\"node\"><title>140604051737280backward</title>\n",
+       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M172,-210.5C172,-210.5 211.295,-210.5 211.295,-210.5 217.295,-210.5 223.295,-216.5 223.295,-222.5 223.295,-222.5 223.295,-252.5 223.295,-252.5 223.295,-258.5 217.295,-264.5 211.295,-264.5 211.295,-264.5 172,-264.5 172,-264.5 166,-264.5 160,-258.5 160,-252.5 160,-252.5 160,-222.5 160,-222.5 160,-216.5 166,-210.5 172,-210.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"191.647\" y=\"-252.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=&#45;4.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"160,-246.5 223.295,-246.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"191.647\" y=\"-234.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"160,-228.5 223.295,-228.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"191.647\" y=\"-216.5\" font-family=\"Times,serif\" font-size=\"10.00\">+</text>\n",
+       "</g>\n",
+       "<!-- 140604051737280backward&#45;&gt;140604051737232backward -->\n",
+       "<g id=\"edge14\" class=\"edge\"><title>140604051737280backward&#45;&gt;140604051737232backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M192.157,-210.242C192.395,-198.014 192.681,-183.264 192.939,-169.977\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"196.444,-169.776 193.139,-159.71 189.445,-169.64 196.444,-169.776\"/>\n",
+       "<text text-anchor=\"middle\" x=\"207.229\" y=\"-180.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;4.00</text>\n",
+       "</g>\n",
+       "<!-- 140604051737280backward&#45;&gt;140604051736848backward -->\n",
+       "<g id=\"edge12\" class=\"edge\"><title>140604051737280backward&#45;&gt;140604051736848backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M171.508,-210.242C161.665,-197.409 149.691,-181.798 139.12,-168.014\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"141.613,-165.515 132.75,-159.71 136.059,-169.775 141.613,-165.515\"/>\n",
+       "<text text-anchor=\"middle\" x=\"171.229\" y=\"-180.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;4.00</text>\n",
+       "</g>\n",
+       "<!-- 140604050260704backward -->\n",
+       "<g id=\"node8\" class=\"node\"><title>140604050260704backward</title>\n",
+       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M173,-315.5C173,-315.5 212.295,-315.5 212.295,-315.5 218.295,-315.5 224.295,-321.5 224.295,-327.5 224.295,-327.5 224.295,-357.5 224.295,-357.5 224.295,-363.5 218.295,-369.5 212.295,-369.5 212.295,-369.5 173,-369.5 173,-369.5 167,-369.5 161,-363.5 161,-357.5 161,-357.5 161,-327.5 161,-327.5 161,-321.5 167,-315.5 173,-315.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"192.647\" y=\"-357.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad= 4.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"161,-351.5 224.295,-351.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"192.647\" y=\"-339.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 4.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"161,-333.5 224.295,-333.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"192.647\" y=\"-321.5\" font-family=\"Times,serif\" font-size=\"10.00\">&#45;</text>\n",
+       "</g>\n",
+       "<!-- 140604050260704backward&#45;&gt;140604051737280backward -->\n",
+       "<g id=\"edge4\" class=\"edge\"><title>140604050260704backward&#45;&gt;140604051737280backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M192.393,-315.242C192.274,-303.014 192.131,-288.264 192.002,-274.977\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"195.499,-274.675 191.902,-264.71 188.499,-274.743 195.499,-274.675\"/>\n",
+       "<text text-anchor=\"middle\" x=\"206.229\" y=\"-285.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;4.00</text>\n",
+       "</g>\n",
+       "<!-- 140604051736992backward -->\n",
+       "<g id=\"node13\" class=\"node\"><title>140604051736992backward</title>\n",
+       "<ellipse fill=\"none\" stroke=\"black\" stroke-dasharray=\"5,2\" cx=\"270.647\" cy=\"-237.5\" rx=\"29.6295\" ry=\"18\"/>\n",
+       "<text text-anchor=\"middle\" x=\"270.647\" y=\"-234.5\" font-family=\"Times,serif\" font-size=\"10.00\">y2= 4.00</text>\n",
+       "</g>\n",
+       "<!-- 140604050260704backward&#45;&gt;140604051736992backward -->\n",
+       "<g id=\"edge8\" class=\"edge\"><title>140604050260704backward&#45;&gt;140604051736992backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" stroke-dasharray=\"5,2\" d=\"M212.532,-315.242C227.156,-295.931 246.544,-270.329 258.81,-254.131\"/>\n",
+       "</g>\n",
+       "<!-- 140604051737328backward -->\n",
+       "<g id=\"node9\" class=\"node\"><title>140604051737328backward</title>\n",
+       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M136,-420.5C136,-420.5 175.295,-420.5 175.295,-420.5 181.295,-420.5 187.295,-426.5 187.295,-432.5 187.295,-432.5 187.295,-462.5 187.295,-462.5 187.295,-468.5 181.295,-474.5 175.295,-474.5 175.295,-474.5 136,-474.5 136,-474.5 130,-474.5 124,-468.5 124,-462.5 124,-462.5 124,-432.5 124,-432.5 124,-426.5 130,-420.5 136,-420.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"155.647\" y=\"-462.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad= 1.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"124,-456.5 187.295,-456.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"155.647\" y=\"-444.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 8.50</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"124,-438.5 187.295,-438.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"155.647\" y=\"-426.5\" font-family=\"Times,serif\" font-size=\"10.00\">mse</text>\n",
+       "</g>\n",
+       "<!-- 140604051737328backward&#45;&gt;140604051737184backward -->\n",
+       "<g id=\"edge13\" class=\"edge\"><title>140604051737328backward&#45;&gt;140604051737184backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M144.431,-420.242C139.104,-407.772 132.656,-392.679 126.893,-379.189\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"129.991,-377.531 122.844,-369.71 123.554,-380.281 129.991,-377.531\"/>\n",
+       "<text text-anchor=\"middle\" x=\"149.647\" y=\"-390.8\" font-family=\"Times,serif\" font-size=\"14.00\"> 1.00</text>\n",
+       "</g>\n",
+       "<!-- 140604051737328backward&#45;&gt;140604050260704backward -->\n",
+       "<g id=\"edge6\" class=\"edge\"><title>140604051737328backward&#45;&gt;140604050260704backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M165.08,-420.242C169.559,-407.772 174.981,-392.679 179.827,-379.189\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"183.145,-380.304 183.232,-369.71 176.558,-377.938 183.145,-380.304\"/>\n",
+       "<text text-anchor=\"middle\" x=\"189.647\" y=\"-390.8\" font-family=\"Times,serif\" font-size=\"14.00\"> 4.00</text>\n",
        "</g>\n",
        "</g>\n",
        "</svg>\n"
       ],
       "text/plain": [
-       "<graphviz.graphs.Digraph at 0x10d75bf40>"
+       "<graphviz.graphs.Digraph at 0x7fe0ee8ec310>"
       ]
      },
      "execution_count": 3,
@@ -452,193 +453,193 @@
        "<!-- Generated by graphviz version 2.38.0 (20140413.2041)\n",
        " -->\n",
        "<!-- Title: %3 Pages: 1 -->\n",
-       "<svg width=\"307pt\" height=\"483pt\"\n",
-       " viewBox=\"0.00 0.00 307.29 483.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
+       "<svg width=\"310pt\" height=\"483pt\"\n",
+       " viewBox=\"0.00 0.00 310.46 483.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 479)\">\n",
        "<title>%3</title>\n",
-       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-479 303.295,-479 303.295,4 -4,4\"/>\n",
-       "<!-- 4520854528backward -->\n",
-       "<g id=\"node1\" class=\"node\"><title>4520854528backward</title>\n",
-       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M27,-105.5C27,-105.5 66.2949,-105.5 66.2949,-105.5 72.2949,-105.5 78.2949,-111.5 78.2949,-117.5 78.2949,-117.5 78.2949,-147.5 78.2949,-147.5 78.2949,-153.5 72.2949,-159.5 66.2949,-159.5 66.2949,-159.5 27,-159.5 27,-159.5 21,-159.5 15,-153.5 15,-147.5 15,-147.5 15,-117.5 15,-117.5 15,-111.5 21,-105.5 27,-105.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"46.6475\" y=\"-147.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=&#45;8.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"15,-141.5 78.2949,-141.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"46.6475\" y=\"-129.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"15,-123.5 78.2949,-123.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"46.6475\" y=\"-111.5\" font-family=\"Times,serif\" font-size=\"10.00\">*</text>\n",
-       "</g>\n",
-       "<!-- 4520854096backward -->\n",
-       "<g id=\"node3\" class=\"node\"><title>4520854096backward</title>\n",
-       "<polygon fill=\"springgreen\" stroke=\"black\" stroke-width=\"2\" points=\"124.028,-0.5 124.028,-54.5 189.267,-54.5 189.267,-0.5 124.028,-0.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"156.647\" y=\"-42.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=&#45;19.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"124.028,-36.5 189.267,-36.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"156.647\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"124.028,-18.5 189.267,-18.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"156.647\" y=\"-6.5\" font-family=\"Times,serif\" font-size=\"10.00\">a</text>\n",
-       "</g>\n",
-       "<!-- 4520854528backward&#45;&gt;4520854096backward -->\n",
-       "<g id=\"edge11\" class=\"edge\"><title>4520854528backward&#45;&gt;4520854096backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M74.6897,-105.242C88.7829,-92.0459 106.013,-75.912 121.032,-61.8487\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"123.749,-64.0997 128.656,-54.7098 118.965,-58.99 123.749,-64.0997\"/>\n",
-       "<text text-anchor=\"middle\" x=\"123.229\" y=\"-75.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;8.00</text>\n",
-       "</g>\n",
-       "<!-- 4520854192backward -->\n",
-       "<g id=\"node7\" class=\"node\"><title>4520854192backward</title>\n",
-       "<ellipse fill=\"none\" stroke=\"black\" stroke-dasharray=\"5,2\" cx=\"46.6475\" cy=\"-27.5\" rx=\"29.6295\" ry=\"18\"/>\n",
-       "<text text-anchor=\"middle\" x=\"46.6475\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">x2= 2.00</text>\n",
-       "</g>\n",
-       "<!-- 4520854528backward&#45;&gt;4520854192backward -->\n",
-       "<g id=\"edge6\" class=\"edge\"><title>4520854528backward&#45;&gt;4520854192backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" stroke-dasharray=\"5,2\" d=\"M46.6475,-105.242C46.6475,-86.5272 46.6475,-61.9035 46.6475,-45.6575\"/>\n",
-       "</g>\n",
-       "<!-- 4520854576backward -->\n",
-       "<g id=\"node2\" class=\"node\"><title>4520854576backward</title>\n",
-       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M12,-210.5C12,-210.5 51.2949,-210.5 51.2949,-210.5 57.2949,-210.5 63.2949,-216.5 63.2949,-222.5 63.2949,-222.5 63.2949,-252.5 63.2949,-252.5 63.2949,-258.5 57.2949,-264.5 51.2949,-264.5 51.2949,-264.5 12,-264.5 12,-264.5 6,-264.5 0,-258.5 0,-252.5 0,-252.5 0,-222.5 0,-222.5 0,-216.5 6,-210.5 12,-210.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-252.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=&#45;8.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"0,-246.5 63.2949,-246.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-234.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"0,-228.5 63.2949,-228.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-216.5\" font-family=\"Times,serif\" font-size=\"10.00\">+</text>\n",
-       "</g>\n",
-       "<!-- 4520854576backward&#45;&gt;4520854528backward -->\n",
-       "<g id=\"edge2\" class=\"edge\"><title>4520854576backward&#45;&gt;4520854528backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M35.4714,-210.242C37.2521,-198.014 39.4002,-183.264 41.3353,-169.977\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"44.8528,-170.11 42.8305,-159.71 37.9258,-169.101 44.8528,-170.11\"/>\n",
-       "<text text-anchor=\"middle\" x=\"55.2285\" y=\"-180.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;4.00</text>\n",
-       "</g>\n",
-       "<!-- 4520854144backward -->\n",
-       "<g id=\"node5\" class=\"node\"><title>4520854144backward</title>\n",
-       "<polygon fill=\"springgreen\" stroke=\"black\" stroke-width=\"2\" points=\"132.028,-105.5 132.028,-159.5 197.267,-159.5 197.267,-105.5 132.028,-105.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"164.647\" y=\"-147.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=&#45;10.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"132.028,-141.5 197.267,-141.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"164.647\" y=\"-129.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"132.028,-123.5 197.267,-123.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"164.647\" y=\"-111.5\" font-family=\"Times,serif\" font-size=\"10.00\">b</text>\n",
-       "</g>\n",
-       "<!-- 4520854576backward&#45;&gt;4520854144backward -->\n",
-       "<g id=\"edge3\" class=\"edge\"><title>4520854576backward&#45;&gt;4520854144backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M63.5043,-211.829C81.5254,-197.873 104.256,-180.269 123.601,-165.287\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"125.898,-167.936 131.662,-159.045 121.612,-162.401 125.898,-167.936\"/>\n",
-       "<text text-anchor=\"middle\" x=\"121.229\" y=\"-180.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;4.00</text>\n",
-       "</g>\n",
-       "<!-- 4520854624backward -->\n",
-       "<g id=\"node4\" class=\"node\"><title>4520854624backward</title>\n",
-       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M89,-315.5C89,-315.5 128.295,-315.5 128.295,-315.5 134.295,-315.5 140.295,-321.5 140.295,-327.5 140.295,-327.5 140.295,-357.5 140.295,-357.5 140.295,-363.5 134.295,-369.5 128.295,-369.5 128.295,-369.5 89,-369.5 89,-369.5 83,-369.5 77,-363.5 77,-357.5 77,-357.5 77,-327.5 77,-327.5 77,-321.5 83,-315.5 89,-315.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"108.647\" y=\"-357.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad= 8.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"77,-351.5 140.295,-351.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"108.647\" y=\"-339.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 4.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"77,-333.5 140.295,-333.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"108.647\" y=\"-321.5\" font-family=\"Times,serif\" font-size=\"10.00\">&#45;</text>\n",
-       "</g>\n",
-       "<!-- 4520854624backward&#45;&gt;4520854576backward -->\n",
-       "<g id=\"edge9\" class=\"edge\"><title>4520854624backward&#45;&gt;4520854576backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M89.0179,-315.242C79.4242,-302.409 67.7536,-286.798 57.4496,-273.014\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"60.0321,-270.623 51.2412,-264.71 54.4255,-274.815 60.0321,-270.623\"/>\n",
-       "<text text-anchor=\"middle\" x=\"90.2285\" y=\"-285.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;4.00</text>\n",
-       "</g>\n",
-       "<!-- 4520854288backward -->\n",
-       "<g id=\"node9\" class=\"node\"><title>4520854288backward</title>\n",
-       "<ellipse fill=\"none\" stroke=\"black\" stroke-dasharray=\"5,2\" cx=\"110.647\" cy=\"-237.5\" rx=\"29.6295\" ry=\"18\"/>\n",
-       "<text text-anchor=\"middle\" x=\"110.647\" y=\"-234.5\" font-family=\"Times,serif\" font-size=\"10.00\">y2= 4.00</text>\n",
-       "</g>\n",
-       "<!-- 4520854624backward&#45;&gt;4520854288backward -->\n",
-       "<g id=\"edge12\" class=\"edge\"><title>4520854624backward&#45;&gt;4520854288backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" stroke-dasharray=\"5,2\" d=\"M109.157,-315.242C109.521,-296.527 109.999,-271.903 110.314,-255.657\"/>\n",
-       "</g>\n",
-       "<!-- 4520854672backward -->\n",
-       "<g id=\"node6\" class=\"node\"><title>4520854672backward</title>\n",
-       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M133,-420.5C133,-420.5 172.295,-420.5 172.295,-420.5 178.295,-420.5 184.295,-426.5 184.295,-432.5 184.295,-432.5 184.295,-462.5 184.295,-462.5 184.295,-468.5 178.295,-474.5 172.295,-474.5 172.295,-474.5 133,-474.5 133,-474.5 127,-474.5 121,-468.5 121,-462.5 121,-462.5 121,-432.5 121,-432.5 121,-426.5 127,-420.5 133,-420.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"152.647\" y=\"-462.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad= 2.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"121,-456.5 184.295,-456.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"152.647\" y=\"-444.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 8.50</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"121,-438.5 184.295,-438.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"152.647\" y=\"-426.5\" font-family=\"Times,serif\" font-size=\"10.00\">mse</text>\n",
-       "</g>\n",
-       "<!-- 4520854672backward&#45;&gt;4520854624backward -->\n",
-       "<g id=\"edge10\" class=\"edge\"><title>4520854672backward&#45;&gt;4520854624backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M141.431,-420.242C136.104,-407.772 129.656,-392.679 123.893,-379.189\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"126.991,-377.531 119.844,-369.71 120.554,-380.281 126.991,-377.531\"/>\n",
-       "<text text-anchor=\"middle\" x=\"147.647\" y=\"-390.8\" font-family=\"Times,serif\" font-size=\"14.00\"> 4.00</text>\n",
-       "</g>\n",
-       "<!-- 4520854480backward -->\n",
-       "<g id=\"node13\" class=\"node\"><title>4520854480backward</title>\n",
-       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M170,-315.5C170,-315.5 209.295,-315.5 209.295,-315.5 215.295,-315.5 221.295,-321.5 221.295,-327.5 221.295,-327.5 221.295,-357.5 221.295,-357.5 221.295,-363.5 215.295,-369.5 209.295,-369.5 209.295,-369.5 170,-369.5 170,-369.5 164,-369.5 158,-363.5 158,-357.5 158,-357.5 158,-327.5 158,-327.5 158,-321.5 164,-315.5 170,-315.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"189.647\" y=\"-357.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad= 2.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"158,-351.5 221.295,-351.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"189.647\" y=\"-339.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 1.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"158,-333.5 221.295,-333.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"189.647\" y=\"-321.5\" font-family=\"Times,serif\" font-size=\"10.00\">&#45;</text>\n",
-       "</g>\n",
-       "<!-- 4520854672backward&#45;&gt;4520854480backward -->\n",
-       "<g id=\"edge1\" class=\"edge\"><title>4520854672backward&#45;&gt;4520854480backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M162.08,-420.242C166.559,-407.772 171.981,-392.679 176.827,-379.189\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"180.145,-380.304 180.232,-369.71 173.558,-377.938 180.145,-380.304\"/>\n",
-       "<text text-anchor=\"middle\" x=\"187.647\" y=\"-390.8\" font-family=\"Times,serif\" font-size=\"14.00\"> 1.00</text>\n",
-       "</g>\n",
-       "<!-- 4520854240backward -->\n",
-       "<g id=\"node8\" class=\"node\"><title>4520854240backward</title>\n",
-       "<ellipse fill=\"none\" stroke=\"black\" stroke-dasharray=\"5,2\" cx=\"188.647\" cy=\"-237.5\" rx=\"29.6295\" ry=\"18\"/>\n",
-       "<text text-anchor=\"middle\" x=\"188.647\" y=\"-234.5\" font-family=\"Times,serif\" font-size=\"10.00\">y1= 1.00</text>\n",
-       "</g>\n",
-       "<!-- 4520853856backward -->\n",
-       "<g id=\"node10\" class=\"node\"><title>4520853856backward</title>\n",
-       "<ellipse fill=\"none\" stroke=\"black\" stroke-dasharray=\"5,2\" cx=\"257.647\" cy=\"-27.5\" rx=\"29.6295\" ry=\"18\"/>\n",
-       "<text text-anchor=\"middle\" x=\"257.647\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">x1= 1.50</text>\n",
-       "</g>\n",
-       "<!-- 4520854384backward -->\n",
-       "<g id=\"node11\" class=\"node\"><title>4520854384backward</title>\n",
-       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M248,-210.5C248,-210.5 287.295,-210.5 287.295,-210.5 293.295,-210.5 299.295,-216.5 299.295,-222.5 299.295,-222.5 299.295,-252.5 299.295,-252.5 299.295,-258.5 293.295,-264.5 287.295,-264.5 287.295,-264.5 248,-264.5 248,-264.5 242,-264.5 236,-258.5 236,-252.5 236,-252.5 236,-222.5 236,-222.5 236,-216.5 242,-210.5 248,-210.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"267.647\" y=\"-252.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=&#45;2.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"236,-246.5 299.295,-246.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"267.647\" y=\"-234.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"236,-228.5 299.295,-228.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"267.647\" y=\"-216.5\" font-family=\"Times,serif\" font-size=\"10.00\">+</text>\n",
-       "</g>\n",
-       "<!-- 4520854384backward&#45;&gt;4520854144backward -->\n",
-       "<g id=\"edge14\" class=\"edge\"><title>4520854384backward&#45;&gt;4520854144backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M241.39,-210.242C228.193,-197.046 212.059,-180.912 197.996,-166.849\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"200.403,-164.306 190.857,-159.71 195.453,-169.256 200.403,-164.306\"/>\n",
-       "<text text-anchor=\"middle\" x=\"236.229\" y=\"-180.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;1.00</text>\n",
-       "</g>\n",
-       "<!-- 4520853952backward -->\n",
-       "<g id=\"node12\" class=\"node\"><title>4520853952backward</title>\n",
-       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M238,-105.5C238,-105.5 277.295,-105.5 277.295,-105.5 283.295,-105.5 289.295,-111.5 289.295,-117.5 289.295,-117.5 289.295,-147.5 289.295,-147.5 289.295,-153.5 283.295,-159.5 277.295,-159.5 277.295,-159.5 238,-159.5 238,-159.5 232,-159.5 226,-153.5 226,-147.5 226,-147.5 226,-117.5 226,-117.5 226,-111.5 232,-105.5 238,-105.5\"/>\n",
-       "<text text-anchor=\"middle\" x=\"257.647\" y=\"-147.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=&#45;2.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"226,-141.5 289.295,-141.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"257.647\" y=\"-129.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
-       "<polyline fill=\"none\" stroke=\"black\" points=\"226,-123.5 289.295,-123.5 \"/>\n",
-       "<text text-anchor=\"middle\" x=\"257.647\" y=\"-111.5\" font-family=\"Times,serif\" font-size=\"10.00\">*</text>\n",
-       "</g>\n",
-       "<!-- 4520854384backward&#45;&gt;4520853952backward -->\n",
-       "<g id=\"edge4\" class=\"edge\"><title>4520854384backward&#45;&gt;4520853952backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M265.098,-210.242C263.911,-198.014 262.479,-183.264 261.189,-169.977\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"264.642,-169.325 260.192,-159.71 257.675,-170.001 264.642,-169.325\"/>\n",
-       "<text text-anchor=\"middle\" x=\"277.229\" y=\"-180.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;1.00</text>\n",
-       "</g>\n",
-       "<!-- 4520853952backward&#45;&gt;4520854096backward -->\n",
-       "<g id=\"edge13\" class=\"edge\"><title>4520853952backward&#45;&gt;4520854096backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M231.9,-105.242C219.078,-92.167 203.429,-76.2078 189.729,-62.2363\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"191.849,-59.3994 182.348,-54.7098 186.851,-64.3004 191.849,-59.3994\"/>\n",
-       "<text text-anchor=\"middle\" x=\"227.229\" y=\"-75.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;1.50</text>\n",
-       "</g>\n",
-       "<!-- 4520853952backward&#45;&gt;4520853856backward -->\n",
-       "<g id=\"edge8\" class=\"edge\"><title>4520853952backward&#45;&gt;4520853856backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" stroke-dasharray=\"5,2\" d=\"M257.647,-105.242C257.647,-86.5272 257.647,-61.9035 257.647,-45.6575\"/>\n",
-       "</g>\n",
-       "<!-- 4520854480backward&#45;&gt;4520854240backward -->\n",
-       "<g id=\"edge7\" class=\"edge\"><title>4520854480backward&#45;&gt;4520854240backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" stroke-dasharray=\"5,2\" d=\"M189.393,-315.242C189.211,-296.527 188.972,-271.903 188.814,-255.657\"/>\n",
-       "</g>\n",
-       "<!-- 4520854480backward&#45;&gt;4520854384backward -->\n",
-       "<g id=\"edge5\" class=\"edge\"><title>4520854480backward&#45;&gt;4520854384backward</title>\n",
-       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M209.532,-315.242C219.25,-302.409 231.072,-286.798 241.51,-273.014\"/>\n",
-       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"244.552,-274.795 247.799,-264.71 238.972,-270.569 244.552,-274.795\"/>\n",
-       "<text text-anchor=\"middle\" x=\"247.229\" y=\"-285.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;1.00</text>\n",
+       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-479 306.462,-479 306.462,4 -4,4\"/>\n",
+       "<!-- 140604051737088backward -->\n",
+       "<g id=\"node1\" class=\"node\"><title>140604051737088backward</title>\n",
+       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M16,-210.5C16,-210.5 55.2949,-210.5 55.2949,-210.5 61.2949,-210.5 67.2949,-216.5 67.2949,-222.5 67.2949,-222.5 67.2949,-252.5 67.2949,-252.5 67.2949,-258.5 61.2949,-264.5 55.2949,-264.5 55.2949,-264.5 16,-264.5 16,-264.5 10,-264.5 4,-258.5 4,-252.5 4,-252.5 4,-222.5 4,-222.5 4,-216.5 10,-210.5 16,-210.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"35.6475\" y=\"-252.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=&#45;2.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"4,-246.5 67.2949,-246.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"35.6475\" y=\"-234.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"4,-228.5 67.2949,-228.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"35.6475\" y=\"-216.5\" font-family=\"Times,serif\" font-size=\"10.00\">+</text>\n",
+       "</g>\n",
+       "<!-- 140604051736656backward -->\n",
+       "<g id=\"node3\" class=\"node\"><title>140604051736656backward</title>\n",
+       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M12,-105.5C12,-105.5 51.2949,-105.5 51.2949,-105.5 57.2949,-105.5 63.2949,-111.5 63.2949,-117.5 63.2949,-117.5 63.2949,-147.5 63.2949,-147.5 63.2949,-153.5 57.2949,-159.5 51.2949,-159.5 51.2949,-159.5 12,-159.5 12,-159.5 6,-159.5 0,-153.5 0,-147.5 0,-147.5 0,-117.5 0,-117.5 0,-111.5 6,-105.5 12,-105.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-147.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=&#45;2.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"0,-141.5 63.2949,-141.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-129.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"0,-123.5 63.2949,-123.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-111.5\" font-family=\"Times,serif\" font-size=\"10.00\">*</text>\n",
+       "</g>\n",
+       "<!-- 140604051737088backward&#45;&gt;140604051736656backward -->\n",
+       "<g id=\"edge7\" class=\"edge\"><title>140604051737088backward&#45;&gt;140604051736656backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M34.6277,-210.242C34.1529,-198.014 33.5801,-183.264 33.064,-169.977\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"36.5508,-169.566 32.6653,-159.71 29.5561,-169.838 36.5508,-169.566\"/>\n",
+       "<text text-anchor=\"middle\" x=\"49.2285\" y=\"-180.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;1.00</text>\n",
+       "</g>\n",
+       "<!-- 140604051736848backward -->\n",
+       "<g id=\"node10\" class=\"node\"><title>140604051736848backward</title>\n",
+       "<polygon fill=\"springgreen\" stroke=\"black\" stroke-width=\"2\" points=\"81.0283,-105.5 81.0283,-159.5 146.267,-159.5 146.267,-105.5 81.0283,-105.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"113.647\" y=\"-147.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=&#45;10.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"81.0283,-141.5 146.267,-141.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"113.647\" y=\"-129.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"81.0283,-123.5 146.267,-123.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"113.647\" y=\"-111.5\" font-family=\"Times,serif\" font-size=\"10.00\">b</text>\n",
+       "</g>\n",
+       "<!-- 140604051737088backward&#45;&gt;140604051736848backward -->\n",
+       "<g id=\"edge9\" class=\"edge\"><title>140604051737088backward&#45;&gt;140604051736848backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M55.532,-210.242C65.2502,-197.409 77.0724,-181.798 87.5103,-168.014\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"90.5524,-169.795 93.7993,-159.71 84.9719,-165.569 90.5524,-169.795\"/>\n",
+       "<text text-anchor=\"middle\" x=\"93.2285\" y=\"-180.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;1.00</text>\n",
+       "</g>\n",
+       "<!-- 140604051736608backward -->\n",
+       "<g id=\"node2\" class=\"node\"><title>140604051736608backward</title>\n",
+       "<ellipse fill=\"none\" stroke=\"black\" stroke-dasharray=\"5,2\" cx=\"31.6475\" cy=\"-27.5\" rx=\"29.6295\" ry=\"18\"/>\n",
+       "<text text-anchor=\"middle\" x=\"31.6475\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">x1= 1.50</text>\n",
+       "</g>\n",
+       "<!-- 140604051736656backward&#45;&gt;140604051736608backward -->\n",
+       "<g id=\"edge11\" class=\"edge\"><title>140604051736656backward&#45;&gt;140604051736608backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" stroke-dasharray=\"5,2\" d=\"M31.6475,-105.242C31.6475,-86.5272 31.6475,-61.9035 31.6475,-45.6575\"/>\n",
+       "</g>\n",
+       "<!-- 140604051736752backward -->\n",
+       "<g id=\"node6\" class=\"node\"><title>140604051736752backward</title>\n",
+       "<polygon fill=\"springgreen\" stroke=\"black\" stroke-width=\"2\" points=\"81.0283,-0.5 81.0283,-54.5 146.267,-54.5 146.267,-0.5 81.0283,-0.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"113.647\" y=\"-42.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=&#45;19.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"81.0283,-36.5 146.267,-36.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"113.647\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" stroke-width=\"2\" points=\"81.0283,-18.5 146.267,-18.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"113.647\" y=\"-6.5\" font-family=\"Times,serif\" font-size=\"10.00\">a</text>\n",
+       "</g>\n",
+       "<!-- 140604051736656backward&#45;&gt;140604051736752backward -->\n",
+       "<g id=\"edge10\" class=\"edge\"><title>140604051736656backward&#45;&gt;140604051736752backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M52.5517,-105.242C62.8647,-92.2881 75.4314,-76.503 86.4801,-62.6249\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"89.2912,-64.7133 92.7814,-54.7098 83.8147,-60.3534 89.2912,-64.7133\"/>\n",
+       "<text text-anchor=\"middle\" x=\"91.2285\" y=\"-75.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;1.50</text>\n",
+       "</g>\n",
+       "<!-- 140604051737184backward -->\n",
+       "<g id=\"node4\" class=\"node\"><title>140604051737184backward</title>\n",
+       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M94,-315.5C94,-315.5 133.295,-315.5 133.295,-315.5 139.295,-315.5 145.295,-321.5 145.295,-327.5 145.295,-327.5 145.295,-357.5 145.295,-357.5 145.295,-363.5 139.295,-369.5 133.295,-369.5 133.295,-369.5 94,-369.5 94,-369.5 88,-369.5 82,-363.5 82,-357.5 82,-357.5 82,-327.5 82,-327.5 82,-321.5 88,-315.5 94,-315.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"113.647\" y=\"-357.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad= 2.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"82,-351.5 145.295,-351.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"113.647\" y=\"-339.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 1.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"82,-333.5 145.295,-333.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"113.647\" y=\"-321.5\" font-family=\"Times,serif\" font-size=\"10.00\">&#45;</text>\n",
+       "</g>\n",
+       "<!-- 140604051737184backward&#45;&gt;140604051737088backward -->\n",
+       "<g id=\"edge2\" class=\"edge\"><title>140604051737184backward&#45;&gt;140604051737088backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M93.7629,-315.242C84.0447,-302.409 72.2225,-286.798 61.7847,-273.014\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"64.323,-270.569 55.4957,-264.71 58.7426,-274.795 64.323,-270.569\"/>\n",
+       "<text text-anchor=\"middle\" x=\"93.2285\" y=\"-285.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;1.00</text>\n",
+       "</g>\n",
+       "<!-- 140604051736944backward -->\n",
+       "<g id=\"node12\" class=\"node\"><title>140604051736944backward</title>\n",
+       "<ellipse fill=\"none\" stroke=\"black\" stroke-dasharray=\"5,2\" cx=\"114.647\" cy=\"-237.5\" rx=\"29.6295\" ry=\"18\"/>\n",
+       "<text text-anchor=\"middle\" x=\"114.647\" y=\"-234.5\" font-family=\"Times,serif\" font-size=\"10.00\">y1= 1.00</text>\n",
+       "</g>\n",
+       "<!-- 140604051737184backward&#45;&gt;140604051736944backward -->\n",
+       "<g id=\"edge5\" class=\"edge\"><title>140604051737184backward&#45;&gt;140604051736944backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" stroke-dasharray=\"5,2\" d=\"M113.902,-315.242C114.084,-296.527 114.323,-271.903 114.481,-255.657\"/>\n",
+       "</g>\n",
+       "<!-- 140604051737232backward -->\n",
+       "<g id=\"node5\" class=\"node\"><title>140604051737232backward</title>\n",
+       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M176,-105.5C176,-105.5 215.295,-105.5 215.295,-105.5 221.295,-105.5 227.295,-111.5 227.295,-117.5 227.295,-117.5 227.295,-147.5 227.295,-147.5 227.295,-153.5 221.295,-159.5 215.295,-159.5 215.295,-159.5 176,-159.5 176,-159.5 170,-159.5 164,-153.5 164,-147.5 164,-147.5 164,-117.5 164,-117.5 164,-111.5 170,-105.5 176,-105.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"195.647\" y=\"-147.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=&#45;8.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"164,-141.5 227.295,-141.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"195.647\" y=\"-129.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"164,-123.5 227.295,-123.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"195.647\" y=\"-111.5\" font-family=\"Times,serif\" font-size=\"10.00\">*</text>\n",
+       "</g>\n",
+       "<!-- 140604051737232backward&#45;&gt;140604051736752backward -->\n",
+       "<g id=\"edge1\" class=\"edge\"><title>140604051737232backward&#45;&gt;140604051736752backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M174.743,-105.242C164.43,-92.2881 151.863,-76.503 140.815,-62.6249\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"143.48,-60.3534 134.514,-54.7098 138.004,-64.7133 143.48,-60.3534\"/>\n",
+       "<text text-anchor=\"middle\" x=\"173.229\" y=\"-75.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;8.00</text>\n",
+       "</g>\n",
+       "<!-- 140604051736896backward -->\n",
+       "<g id=\"node11\" class=\"node\"><title>140604051736896backward</title>\n",
+       "<ellipse fill=\"none\" stroke=\"black\" stroke-dasharray=\"5,2\" cx=\"195.647\" cy=\"-27.5\" rx=\"29.6295\" ry=\"18\"/>\n",
+       "<text text-anchor=\"middle\" x=\"195.647\" y=\"-24.5\" font-family=\"Times,serif\" font-size=\"10.00\">x2= 2.00</text>\n",
+       "</g>\n",
+       "<!-- 140604051737232backward&#45;&gt;140604051736896backward -->\n",
+       "<g id=\"edge3\" class=\"edge\"><title>140604051737232backward&#45;&gt;140604051736896backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" stroke-dasharray=\"5,2\" d=\"M195.647,-105.242C195.647,-86.5272 195.647,-61.9035 195.647,-45.6575\"/>\n",
+       "</g>\n",
+       "<!-- 140604051737280backward -->\n",
+       "<g id=\"node7\" class=\"node\"><title>140604051737280backward</title>\n",
+       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M174,-210.5C174,-210.5 213.295,-210.5 213.295,-210.5 219.295,-210.5 225.295,-216.5 225.295,-222.5 225.295,-222.5 225.295,-252.5 225.295,-252.5 225.295,-258.5 219.295,-264.5 213.295,-264.5 213.295,-264.5 174,-264.5 174,-264.5 168,-264.5 162,-258.5 162,-252.5 162,-252.5 162,-222.5 162,-222.5 162,-216.5 168,-210.5 174,-210.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"193.647\" y=\"-252.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad=&#45;8.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"162,-246.5 225.295,-246.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"193.647\" y=\"-234.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 0.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"162,-228.5 225.295,-228.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"193.647\" y=\"-216.5\" font-family=\"Times,serif\" font-size=\"10.00\">+</text>\n",
+       "</g>\n",
+       "<!-- 140604051737280backward&#45;&gt;140604051737232backward -->\n",
+       "<g id=\"edge14\" class=\"edge\"><title>140604051737280backward&#45;&gt;140604051737232backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M194.157,-210.242C194.395,-198.014 194.681,-183.264 194.939,-169.977\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"198.444,-169.776 195.139,-159.71 191.445,-169.64 198.444,-169.776\"/>\n",
+       "<text text-anchor=\"middle\" x=\"209.229\" y=\"-180.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;4.00</text>\n",
+       "</g>\n",
+       "<!-- 140604051737280backward&#45;&gt;140604051736848backward -->\n",
+       "<g id=\"edge12\" class=\"edge\"><title>140604051737280backward&#45;&gt;140604051736848backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M173.253,-210.242C163.192,-197.288 150.931,-181.503 140.152,-167.625\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"142.903,-165.461 134.005,-159.71 137.375,-169.754 142.903,-165.461\"/>\n",
+       "<text text-anchor=\"middle\" x=\"172.229\" y=\"-180.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;4.00</text>\n",
+       "</g>\n",
+       "<!-- 140604050260704backward -->\n",
+       "<g id=\"node8\" class=\"node\"><title>140604050260704backward</title>\n",
+       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M175,-315.5C175,-315.5 214.295,-315.5 214.295,-315.5 220.295,-315.5 226.295,-321.5 226.295,-327.5 226.295,-327.5 226.295,-357.5 226.295,-357.5 226.295,-363.5 220.295,-369.5 214.295,-369.5 214.295,-369.5 175,-369.5 175,-369.5 169,-369.5 163,-363.5 163,-357.5 163,-357.5 163,-327.5 163,-327.5 163,-321.5 169,-315.5 175,-315.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"194.647\" y=\"-357.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad= 8.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"163,-351.5 226.295,-351.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"194.647\" y=\"-339.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 4.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"163,-333.5 226.295,-333.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"194.647\" y=\"-321.5\" font-family=\"Times,serif\" font-size=\"10.00\">&#45;</text>\n",
+       "</g>\n",
+       "<!-- 140604050260704backward&#45;&gt;140604051737280backward -->\n",
+       "<g id=\"edge4\" class=\"edge\"><title>140604050260704backward&#45;&gt;140604051737280backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M194.393,-315.242C194.274,-303.014 194.131,-288.264 194.002,-274.977\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"197.499,-274.675 193.902,-264.71 190.499,-274.743 197.499,-274.675\"/>\n",
+       "<text text-anchor=\"middle\" x=\"208.229\" y=\"-285.8\" font-family=\"Times,serif\" font-size=\"14.00\">&#45;4.00</text>\n",
+       "</g>\n",
+       "<!-- 140604051736992backward -->\n",
+       "<g id=\"node13\" class=\"node\"><title>140604051736992backward</title>\n",
+       "<ellipse fill=\"none\" stroke=\"black\" stroke-dasharray=\"5,2\" cx=\"272.647\" cy=\"-237.5\" rx=\"29.6295\" ry=\"18\"/>\n",
+       "<text text-anchor=\"middle\" x=\"272.647\" y=\"-234.5\" font-family=\"Times,serif\" font-size=\"10.00\">y2= 4.00</text>\n",
+       "</g>\n",
+       "<!-- 140604050260704backward&#45;&gt;140604051736992backward -->\n",
+       "<g id=\"edge8\" class=\"edge\"><title>140604050260704backward&#45;&gt;140604051736992backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" stroke-dasharray=\"5,2\" d=\"M214.532,-315.242C229.156,-295.931 248.544,-270.329 260.81,-254.131\"/>\n",
+       "</g>\n",
+       "<!-- 140604051737328backward -->\n",
+       "<g id=\"node9\" class=\"node\"><title>140604051737328backward</title>\n",
+       "<path fill=\"#f0f0f0\" stroke=\"black\" d=\"M138,-420.5C138,-420.5 177.295,-420.5 177.295,-420.5 183.295,-420.5 189.295,-426.5 189.295,-432.5 189.295,-432.5 189.295,-462.5 189.295,-462.5 189.295,-468.5 183.295,-474.5 177.295,-474.5 177.295,-474.5 138,-474.5 138,-474.5 132,-474.5 126,-468.5 126,-462.5 126,-462.5 126,-432.5 126,-432.5 126,-426.5 132,-420.5 138,-420.5\"/>\n",
+       "<text text-anchor=\"middle\" x=\"157.647\" y=\"-462.5\" font-family=\"Times,serif\" font-size=\"10.00\">grad= 2.00</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"126,-456.5 189.295,-456.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"157.647\" y=\"-444.5\" font-family=\"Times,serif\" font-size=\"10.00\">value= 8.50</text>\n",
+       "<polyline fill=\"none\" stroke=\"black\" points=\"126,-438.5 189.295,-438.5 \"/>\n",
+       "<text text-anchor=\"middle\" x=\"157.647\" y=\"-426.5\" font-family=\"Times,serif\" font-size=\"10.00\">mse</text>\n",
+       "</g>\n",
+       "<!-- 140604051737328backward&#45;&gt;140604051737184backward -->\n",
+       "<g id=\"edge13\" class=\"edge\"><title>140604051737328backward&#45;&gt;140604051737184backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M146.431,-420.242C141.104,-407.772 134.656,-392.679 128.893,-379.189\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"131.991,-377.531 124.844,-369.71 125.554,-380.281 131.991,-377.531\"/>\n",
+       "<text text-anchor=\"middle\" x=\"151.647\" y=\"-390.8\" font-family=\"Times,serif\" font-size=\"14.00\"> 1.00</text>\n",
+       "</g>\n",
+       "<!-- 140604051737328backward&#45;&gt;140604050260704backward -->\n",
+       "<g id=\"edge6\" class=\"edge\"><title>140604051737328backward&#45;&gt;140604050260704backward</title>\n",
+       "<path fill=\"none\" stroke=\"deepskyblue\" d=\"M167.08,-420.242C171.559,-407.772 176.981,-392.679 181.827,-379.189\"/>\n",
+       "<polygon fill=\"deepskyblue\" stroke=\"deepskyblue\" points=\"185.145,-380.304 185.232,-369.71 178.558,-377.938 185.145,-380.304\"/>\n",
+       "<text text-anchor=\"middle\" x=\"191.647\" y=\"-390.8\" font-family=\"Times,serif\" font-size=\"14.00\"> 4.00</text>\n",
        "</g>\n",
        "</g>\n",
        "</svg>\n"
       ],
       "text/plain": [
-       "<graphviz.graphs.Digraph at 0x10d5bb9d0>"
+       "<graphviz.graphs.Digraph at 0x7fe0ee8ec670>"
       ]
      },
      "execution_count": 4,

+ 1 - 0
ch07_autograd/parameter_freezing.ipynb

@@ -219,6 +219,7 @@
     }
    ],
    "source": [
+    "# 定义训练数据\n",
     "x1 = Scalar(1.5, label='x1', requires_grad=False)\n",
     "y1 = Scalar(1.0, label='y1', requires_grad=False)\n",
     "x2 = Scalar(2.0, label='x2', requires_grad=False)\n",

+ 48 - 44
ch07_autograd/utils.py

@@ -1,7 +1,7 @@
 # -*- coding: UTF-8 -*-
-"""
+'''
 此脚本用于定义Scalar类,以及相应的可视化工具
-"""
+'''
 
 
 from graphviz import Digraph
@@ -9,17 +9,18 @@ import math
 
 
 class Scalar:
+    
     def __init__(self, value, prevs=[], op=None, label='', requires_grad=True):
         # 节点的值
         self.value = value
         # 节点的标识(label)和对应的运算(op),用于作图
         self.label = label
         self.op = op
-        # 节点的前节点
+        # 节点的前节点,即当前节点是运算的结果,而前节点是参与运算的量
         self.prevs = prevs
-        # 是否需要计算该节点偏导数,即∂loss/∂self
+        # 是否需要计算该节点偏导数,即∂loss/∂self(loss表示最后的模型损失)
         self.requires_grad = requires_grad
-        # 存储该节点偏导数,即∂loss/∂self
+        # 该节点偏导数,即∂loss/∂self
         self.grad = 0.0
         # 如果该节点的prevs非空,存储所有的∂self/∂prev
         self.grad_wrt = dict()
@@ -30,9 +31,9 @@ class Scalar:
         return f'Scalar(value={self.value:.2f}, grad={self.grad:.2f})'
     
     def __add__(self, other):
-        """
+        '''
         定义加法,self + other将触发该函数
-        """
+        '''
         if not isinstance(other, Scalar):
             other = Scalar(other, requires_grad=False)
         # output = self + other
@@ -45,9 +46,9 @@ class Scalar:
         return output
     
     def __sub__(self, other):
-        """
+        '''
         定义减法,self - other将触发该函数
-        """
+        '''
         if not isinstance(other, Scalar):
             other = Scalar(other, requires_grad=False)
         # output = self - other
@@ -60,9 +61,9 @@ class Scalar:
         return output
     
     def __mul__(self, other):
-        """
+        '''
         定义乘法,self * other将触发该函数
-        """
+        '''
         if not isinstance(other, Scalar):
             other = Scalar(other, requires_grad=False)
         # output = self * other
@@ -75,10 +76,10 @@ class Scalar:
         return output
     
     def __pow__(self, other):
-        """
+        '''
         定义乘方,self**other将触发该函数
-        """
-        assert isinstance(other, (int, float)), 'support only int or float in the exponent'
+        '''
+        assert isinstance(other, (int, float))
         # output = self ** other
         output = Scalar(self.value ** other, [self], f'^{other}')
         output.requires_grad = self.requires_grad
@@ -87,9 +88,9 @@ class Scalar:
         return output
     
     def sigmoid(self):
-        """
+        '''
         定义sigmoid
-        """
+        '''
         s = 1 / (1 + math.exp(-1 * self.value))
         output = Scalar(s, [self], 'sigmoid')
         output.requires_grad = self.requires_grad
@@ -98,43 +99,45 @@ class Scalar:
         return output
     
     def __rsub__(self, other):
-        """
+        '''
         定义右减法,other - self将触发该函数
-        """
+        '''
         if not isinstance(other, Scalar):
             other = Scalar(other, requires_grad=False)
         output = Scalar(other.value - self.value, [self, other], '-')
         output.requires_grad = self.requires_grad or other.requires_grad
+        # 计算偏导数 ∂output/∂self = -1
         output.grad_wrt[self] = -1
+        # 计算偏导数 ∂output/∂other = 1
         output.grad_wrt[other] = 1
         return output
     
     def __radd__(self, other):
-        """
+        '''
         定义右加法,other + self将触发该函数
-        """
+        '''
         return self.__add__(other)
     
     def __rmul__(self, other):
-        """
+        '''
         定义右乘法,other * self将触发该函数
-        """
+        '''
         return self * other
     
     def backward(self, fn=None):
-        """
-        由当前节点出发,求解以当前节点为顶点的计算图中每个节点的梯度,i.e. ∂self/∂node
+        '''
+        由当前节点出发,求解以当前节点为顶点的计算图中每个节点的偏导数,i.e. ∂self/∂node
         参数
         ----
         fn :画图函数,如果该变量不等于None,则会返回向后传播每一步的计算的记录
         返回
         ----
         re :向后传播每一步的计算的记录
-        """
+        '''
         def _topological_order():
-            """
+            '''
             利用深度优先算法,返回计算图的拓扑排序(topological sorting)
-            """
+            '''
             def _add_prevs(node):
                 if node not in visited:
                     visited.add(node)
@@ -146,9 +149,9 @@ class Scalar:
             return ordered
 
         def _compute_grad_of_prevs(node):
-            """
+            '''
             由node节点出发,向后传播
-            """
+            '''
             # 作图需要,实际上对计算没有作用
             node.back_prop = dict()
             # 得到当前节点在计算图中的梯度。由于一个节点可以在多个计算图中出现,
@@ -157,8 +160,8 @@ class Scalar:
             # 使用node.grad记录节点的累积梯度
             node.grad += dnode
             for prev in node.prevs:
-                # 由于node节点的偏导数已经计算完成,可以向后传播
-                # 需要注意的是,向后传播到上游节点是累加关系
+                # 由于node节点的偏导数已经计算完成,可以向后扩散(反向传播
+                # 需要注意的是,向后扩散到上游节点是累加关系
                 grad_spread = dnode * node.grad_wrt[prev]
                 cg_grad[prev] = cg_grad.get(prev, 0.0) + grad_spread
                 node.back_prop[prev] = node.back_prop.get(prev, 0.0) + grad_spread
@@ -177,9 +180,9 @@ class Scalar:
 
 
 def _get_node_attr(node, direction='forward'):
-    """
+    '''
     节点的属性
-    """
+    '''
     node_type = _get_node_type(node)
     def _forward_attr():
         if node_type == 'param':
@@ -200,7 +203,8 @@ def _get_node_attr(node, direction='forward'):
         attr['label'] = attr['label'].replace('grad=None', f'grad={node.grad: .2f}')
         if not node.requires_grad:
             attr['style'] = 'dashed'
-        # 如果向后传播的梯度要么等于0,要么传给不需要梯度的节点,那么该节点用虚线表示
+        # 为了作图美观
+        # 如果向后扩散(反向传播)的梯度等于0,或者扩散给不需要梯度的节点,那么该节点用虚线表示
         grad_back = [v if k.requires_grad else 0 for (k, v) in node.back_prop.items()]
         if len(grad_back) > 0 and sum(grad_back) == 0:
             attr['style'] = 'dashed'
@@ -213,9 +217,9 @@ def _get_node_attr(node, direction='forward'):
     
     
 def _get_node_type(node):
-    """
+    '''
     决定节点的类型,计算节点、参数以及输入数据
-    """
+    '''
     if node.op is not None:
         return 'computation'
     if node.requires_grad:
@@ -224,9 +228,9 @@ def _get_node_type(node):
 
 
 def _trace(root):
-    """
+    '''
     遍历图中的所有点和边
-    """
+    '''
     nodes, edges = set(), set()
     def _build(v):
         if v not in nodes:
@@ -239,18 +243,18 @@ def _trace(root):
 
 
 def _draw_node(graph, node, direction='forward'):
-    """
+    '''
     画节点
-    """
+    '''
     node_attr = _get_node_attr(node, direction)
     uid = str(id(node)) + direction
     graph.node(name=uid, **node_attr)
 
 
 def _draw_edge(graph, n1, n2, direction='forward'):
-    """
+    '''
     画边
-    """
+    '''
     uid1 = str(id(n1)) + direction
     uid2 = str(id(n2)) + direction
     def _draw_back_edge():
@@ -275,7 +279,7 @@ def _draw_edge(graph, n1, n2, direction='forward'):
 
 
 def draw_graph(root, direction='forward'):
-    """
+    '''
     图形化展示由root为顶点的计算图
     参数
     ----
@@ -284,7 +288,7 @@ def draw_graph(root, direction='forward'):
     返回
     ----
     re :Digraph,计算图
-    """
+    '''
     nodes, edges = _trace(root)
     rankdir = 'BT' if direction == 'forward' else 'TB'
     graph = Digraph(format='svg', graph_attr={'rankdir': rankdir})