799 lines
84 KiB
Plaintext
799 lines
84 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 97,
|
|
"id": "f4f2d2a2",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import math\n",
|
|
"import numpy as np\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"%matplotlib inline"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 98,
|
|
"id": "9c8f8dea",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def f(x):\n",
|
|
" return 3*x**2 - 4*x + 5\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 99,
|
|
"id": "1d19cfef",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"20.0"
|
|
]
|
|
},
|
|
"execution_count": 99,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"f(3.0)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 100,
|
|
"id": "a42cab47",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[<matplotlib.lines.Line2D at 0x72b9b1b9c4d0>]"
|
|
]
|
|
},
|
|
"execution_count": 100,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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ERERt6MRFBEREXE7KigiIiLidlRQRERExO0YstS91K+CggIWLlxIYmIiAwcONDqOV9u5cye7du0iISGB7t27n3ERIjk3GzZsID09nVatWtGxY0ej43i9376XGzduTLdu3fS9XE/y8vJYvHgxzZo1o1+/fkbHMZQKig+49957mT9/PkOHDlVBcZG0tDTuvfde8vLyaNWqFVu2bCE8PJz58+eTnJxsdDyPVl5ezo033sjq1avp3r07q1ev5rrrrmPatGn60HSBLVu2MH78ePLz80lJSWHz5s1ERUUxf/78M27oKs5x55138t1333H99df7fEHR324v95///Ifs7Gyuuuoqo6N4tcLCQl5//XV27NjBV199xa5du2jQoAH333+/0dE83htvvMHatWvZtGkTixYtYuXKlcyePZsZM2YYHc0rFRYW8uabb7J9+/aa7+XQ0FAefPBBo6N5vbfeeouSkhIGDRpkdBS3oILixdLS0nj++eeZMWOG/qXpYn379qVv3741vw4MDGT48OGkpqYaF8pLfPzxx4wePZrGjRsD0K5dO4YOHcrHH39scDLv1L9/f3r37l3za4vFou/lepCamsrf/vY3PvzwQ+0vd4I+tbxUaWkpo0eP5rXXXqNZs2ZGx/FJS5Ys0VyJC1RVVcX27dtPeh87derEli1bDErle/S97FpFRUWMHj2aKVOm1BRx0RwUj7F161a2bt16xnMGDx5MfHw8AI8++ihdunTh1ltvrY94Xumzzz474/NxcXFcdtllp3zuX//6Fz/++CM///yzK6L5jKKiIux2O9HR0bWOx8TEkJ+fb0woH/Pmm2+yfPlyli9fbnQUr/XQQw8xcOBAbrjhBqOjuBUVFA+xY8cO5s2bd8ZzOnbsSHx8PKtWrWLatGlMmTKl5kP20KFDQPWH7vDhwwkLC3N1ZI93tve7bdu2pywoM2fOZMKECUybNo3+/fu7KJ1v+G3J76KiolrHi4qKCAoKMiKST5kxYwZPPvkkH330EX369DE6jlf66aefmDVrFm+//XbNz+vs7GysViufffYZ1113HcHBwQanNIYKiocYOXIkI0eOrNO5FouFG264gaVLl9YcO3z4MFD9oTt48GAVlDo42wjKqcyaNYtx48bx3//+l7Fjx7oglW8JDg4mISGBgwcP1jqenp6uu6Nc7JNPPuHuu+9m2rRp3HzzzUbH8VrBwcGMGDGCH374oebYkSNHCAwMZN68eVx55ZU+W1C0F4+PGDFiBHD2UQE5f7Nnz2bs2LFMnTqVcePGGR3Ha9xzzz2sW7eO9evX4+fnR2lpKSkpKdx111289NJLRsfzSjNnzmTcuHG8//77KtoGGDJkCFFRUef1jyRvohEUESf48ccfufXWW7n66qsJCgqq9YNl9OjRmpV/AZ577jl69uzJiBEjuPrqq5k1axYWi4UJEyYYHc0rLV68mNtuu41rr70Wf3//Wt/LGkmR+qSC4iMuuugioyN4tZKSEm688Ubg5FGqUaNGqaBcgKZNm7Jx40beffddVq1axeWXX84DDzxw0sRZcY6ysrKay8m//15WQakfgwYNIiQkxOgYhtMlHhEREXE7WgdFRERE3I4KioiIiLgdFRQRERFxOyooIiIi4nZUUERERMTtqKCIiIiI21FBEREREbejgiIiIiJuRwVFRERE3I4KioiIiLgdFRQRERFxOyooIiIi4nb+Py4FRuAXs6i8AAAAAElFTkSuQmCC",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"xs = np.arange(-5, 5, 0.25)\n",
|
|
"ys = f(xs)\n",
|
|
"ys\n",
|
|
"plt.plot(xs,ys)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 101,
|
|
"id": "1b26be77",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"2.999378523327323e-06"
|
|
]
|
|
},
|
|
"execution_count": 101,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"h = 0.000001\n",
|
|
"x = 2/3\n",
|
|
"(f(x + h) - f(x)) / h\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 102,
|
|
"id": "c7cdad3f",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"4.0\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"a = 2.0\n",
|
|
"b = -3.0\n",
|
|
"c = 10.0\n",
|
|
"d = a*b + c\n",
|
|
"print(d)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 103,
|
|
"id": "d5df3e7c",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"d1 4.0\n",
|
|
"d2 4.0001\n",
|
|
"slope 0.9999999999976694\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"h = 0.0001\n",
|
|
"\n",
|
|
"a = 2.0\n",
|
|
"b = -3.0\n",
|
|
"c = 10.0\n",
|
|
"\n",
|
|
"d1 = a*b + c\n",
|
|
"c += h\n",
|
|
"d2 = a*b + c\n",
|
|
"\n",
|
|
"print('d1', d1)\n",
|
|
"print('d2', d2)\n",
|
|
"print('slope', (d2 - d1)/h )"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 104,
|
|
"id": "6590bbdb",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"Value(data=-8.0, label=L)"
|
|
]
|
|
},
|
|
"execution_count": 104,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"class Value:\n",
|
|
" def __init__(self, data, _children=(), _op='', label=''):\n",
|
|
" self.data = data\n",
|
|
" self.grad = 0.0\n",
|
|
" self._prev = set(_children)\n",
|
|
" self._op = _op\n",
|
|
" self.label = label\n",
|
|
" def __repr__(self):\n",
|
|
" return f\"Value(data={self.data}, label={self.label})\"\n",
|
|
" \n",
|
|
" def __add__(self, other):\n",
|
|
" out = Value(self.data + other.data, (self, other), '+')\n",
|
|
" return out\n",
|
|
" \n",
|
|
" def __mul__(self, other):\n",
|
|
" out = Value(self.data * other.data, (self, other), '*')\n",
|
|
" return out\n",
|
|
" \n",
|
|
" def tanh(self):\n",
|
|
" x = self.data\n",
|
|
" t = (math.exp(2*x) - 1)/(math.exp(2*x) + 1)\n",
|
|
" out = Value(t,(self, ), 'tanh')\n",
|
|
" return out\n",
|
|
" \n",
|
|
"a = Value(2.0, label='a')\n",
|
|
"b = Value(-3.0, label='b')\n",
|
|
"c = Value(10.0, label='c')\n",
|
|
"e = a*b; e.label = 'e'\n",
|
|
"d = e + c; d.label = 'd'\n",
|
|
"f = Value(-2, label='f')\n",
|
|
"L = d * f; L.label='L'\n",
|
|
"L\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 105,
|
|
"id": "f26da122",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"{Value(data=-6.0, label=e), Value(data=10.0, label=c)}"
|
|
]
|
|
},
|
|
"execution_count": 105,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"d._prev"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 106,
|
|
"id": "9a7974dd",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"'+'"
|
|
]
|
|
},
|
|
"execution_count": 106,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"d._op"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 107,
|
|
"id": "8faed65a",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from graphviz import Digraph\n",
|
|
"\n",
|
|
"def trace(root):\n",
|
|
" nodes, edges, = set(), set()\n",
|
|
" def build(v):\n",
|
|
" if v not in nodes:\n",
|
|
" nodes.add(v)\n",
|
|
" for child in v._prev:\n",
|
|
" edges.add((child, v))\n",
|
|
" build(child)\n",
|
|
" build(root)\n",
|
|
" return nodes, edges\n",
|
|
"\n",
|
|
"def draw_dot(root):\n",
|
|
" dot = Digraph(format='svg', graph_attr={'rankdir': 'LR'})\n",
|
|
"\n",
|
|
" nodes, edges = trace(root)\n",
|
|
" for n in nodes:\n",
|
|
" uid = str(id(n))\n",
|
|
" dot.node(name = uid, label = \"{ %s | data %.4f | grad %.4f }\" % (n.label , n.data, n.grad), shape = 'record')\n",
|
|
" if n._op:\n",
|
|
" dot.node(name = uid + n._op, label = n._op)\n",
|
|
" dot.edge(uid + n._op, uid)\n",
|
|
"\n",
|
|
" for n1, n2 in edges:\n",
|
|
" dot.edge(str(id(n1)), str(id(n2)) + n2._op)\n",
|
|
"\n",
|
|
" return dot"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 108,
|
|
"id": "4d927ae3",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/svg+xml": [
|
|
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
|
|
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
|
|
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
|
|
"<!-- Generated by graphviz version 14.1.2 (0)\n",
|
|
" -->\n",
|
|
"<!-- Pages: 1 -->\n",
|
|
"<svg width=\"1321pt\" height=\"154pt\"\n",
|
|
" viewBox=\"0.00 0.00 1321.00 154.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
|
|
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 150)\">\n",
|
|
"<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-150 1317.25,-150 1317.25,4 -4,4\"/>\n",
|
|
"<!-- 126141924041744 -->\n",
|
|
"<g id=\"node1\" class=\"node\">\n",
|
|
"<title>126141924041744</title>\n",
|
|
"<polygon fill=\"none\" stroke=\"black\" points=\"1079.25,-81.5 1079.25,-117.5 1313.25,-117.5 1313.25,-81.5 1079.25,-81.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1091.75\" y=\"-95.2\" font-family=\"Times,serif\" font-size=\"14.00\">L</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"1104.25,-82.25 1104.25,-117.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1157.25\" y=\"-95.2\" font-family=\"Times,serif\" font-size=\"14.00\">data -8.0000</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"1210.25,-82.25 1210.25,-117.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1261.75\" y=\"-95.2\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
|
|
"</g>\n",
|
|
"<!-- 126141924041744* -->\n",
|
|
"<g id=\"node2\" class=\"node\">\n",
|
|
"<title>126141924041744*</title>\n",
|
|
"<ellipse fill=\"none\" stroke=\"black\" cx=\"1016.25\" cy=\"-99.5\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1016.25\" y=\"-94.83\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
|
|
"</g>\n",
|
|
"<!-- 126141924041744*->126141924041744 -->\n",
|
|
"<g id=\"edge1\" class=\"edge\">\n",
|
|
"<title>126141924041744*->126141924041744</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M1043.51,-99.5C1050.59,-99.5 1058.73,-99.5 1067.5,-99.5\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"1067.4,-103 1077.4,-99.5 1067.4,-96 1067.4,-103\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 126141876310608 -->\n",
|
|
"<g id=\"node3\" class=\"node\">\n",
|
|
"<title>126141876310608</title>\n",
|
|
"<polygon fill=\"none\" stroke=\"black\" points=\"2.62,-55.5 2.62,-91.5 231.38,-91.5 231.38,-55.5 2.62,-55.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"14.75\" y=\"-69.2\" font-family=\"Times,serif\" font-size=\"14.00\">a</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"26.88,-56.25 26.88,-91.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"77.62\" y=\"-69.2\" font-family=\"Times,serif\" font-size=\"14.00\">data 2.0000</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"128.38,-56.25 128.38,-91.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"179.88\" y=\"-69.2\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
|
|
"</g>\n",
|
|
"<!-- 126141876285328* -->\n",
|
|
"<g id=\"node8\" class=\"node\">\n",
|
|
"<title>126141876285328*</title>\n",
|
|
"<ellipse fill=\"none\" stroke=\"black\" cx=\"297\" cy=\"-45.5\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"297\" y=\"-40.83\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
|
|
"</g>\n",
|
|
"<!-- 126141876310608->126141876285328* -->\n",
|
|
"<g id=\"edge5\" class=\"edge\">\n",
|
|
"<title>126141876310608->126141876285328*</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M231.74,-55.61C241.46,-54.08 250.76,-52.62 259.11,-51.3\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"259.41,-54.8 268.74,-49.79 258.32,-47.88 259.41,-54.8\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 126141876501200 -->\n",
|
|
"<g id=\"node4\" class=\"node\">\n",
|
|
"<title>126141876501200</title>\n",
|
|
"<polygon fill=\"none\" stroke=\"black\" points=\"360,-82.5 360,-118.5 597,-118.5 597,-82.5 360,-82.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"371.75\" y=\"-96.2\" font-family=\"Times,serif\" font-size=\"14.00\">c</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"383.5,-83.25 383.5,-118.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"438.75\" y=\"-96.2\" font-family=\"Times,serif\" font-size=\"14.00\">data 10.0000</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"494,-83.25 494,-118.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"545.5\" y=\"-96.2\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
|
|
"</g>\n",
|
|
"<!-- 126141874669008+ -->\n",
|
|
"<g id=\"node10\" class=\"node\">\n",
|
|
"<title>126141874669008+</title>\n",
|
|
"<ellipse fill=\"none\" stroke=\"black\" cx=\"660\" cy=\"-72.5\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"660\" y=\"-67.83\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
|
|
"</g>\n",
|
|
"<!-- 126141876501200->126141874669008+ -->\n",
|
|
"<g id=\"edge4\" class=\"edge\">\n",
|
|
"<title>126141876501200->126141874669008+</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M597.48,-82.1C606.21,-80.73 614.54,-79.43 622.1,-78.26\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"622.44,-81.74 631.79,-76.75 621.37,-74.83 622.44,-81.74\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 126141924189584 -->\n",
|
|
"<g id=\"node5\" class=\"node\">\n",
|
|
"<title>126141924189584</title>\n",
|
|
"<polygon fill=\"none\" stroke=\"black\" points=\"0,-0.5 0,-36.5 234,-36.5 234,-0.5 0,-0.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"12.5\" y=\"-14.2\" font-family=\"Times,serif\" font-size=\"14.00\">b</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"25,-1.25 25,-36.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"78\" y=\"-14.2\" font-family=\"Times,serif\" font-size=\"14.00\">data -3.0000</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"131,-1.25 131,-36.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"182.5\" y=\"-14.2\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
|
|
"</g>\n",
|
|
"<!-- 126141924189584->126141876285328* -->\n",
|
|
"<g id=\"edge6\" class=\"edge\">\n",
|
|
"<title>126141924189584->126141876285328*</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M234.24,-36.13C242.99,-37.46 251.34,-38.73 258.93,-39.88\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"258.24,-43.31 268.66,-41.35 259.29,-36.39 258.24,-43.31\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 126141877335312 -->\n",
|
|
"<g id=\"node6\" class=\"node\">\n",
|
|
"<title>126141877335312</title>\n",
|
|
"<polygon fill=\"none\" stroke=\"black\" points=\"723,-109.5 723,-145.5 953.25,-145.5 953.25,-109.5 723,-109.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"733.62\" y=\"-123.2\" font-family=\"Times,serif\" font-size=\"14.00\">f</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"744.25,-110.25 744.25,-145.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"797.25\" y=\"-123.2\" font-family=\"Times,serif\" font-size=\"14.00\">data -2.0000</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"850.25,-110.25 850.25,-145.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"901.75\" y=\"-123.2\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
|
|
"</g>\n",
|
|
"<!-- 126141877335312->126141924041744* -->\n",
|
|
"<g id=\"edge8\" class=\"edge\">\n",
|
|
"<title>126141877335312->126141924041744*</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M953.65,-109.29C962.36,-107.91 970.69,-106.58 978.25,-105.38\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"978.62,-108.87 987.95,-103.84 977.53,-101.95 978.62,-108.87\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 126141876285328 -->\n",
|
|
"<g id=\"node7\" class=\"node\">\n",
|
|
"<title>126141876285328</title>\n",
|
|
"<polygon fill=\"none\" stroke=\"black\" points=\"361.88,-27.5 361.88,-63.5 595.12,-63.5 595.12,-27.5 361.88,-27.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"374\" y=\"-41.2\" font-family=\"Times,serif\" font-size=\"14.00\">e</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"386.12,-28.25 386.12,-63.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"439.12\" y=\"-41.2\" font-family=\"Times,serif\" font-size=\"14.00\">data -6.0000</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"492.12,-28.25 492.12,-63.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"543.62\" y=\"-41.2\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
|
|
"</g>\n",
|
|
"<!-- 126141876285328->126141874669008+ -->\n",
|
|
"<g id=\"edge7\" class=\"edge\">\n",
|
|
"<title>126141876285328->126141874669008+</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M595.46,-62.94C604.91,-64.36 613.94,-65.72 622.06,-66.94\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"621.37,-70.38 631.78,-68.41 622.41,-63.46 621.37,-70.38\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 126141876285328*->126141876285328 -->\n",
|
|
"<g id=\"edge2\" class=\"edge\">\n",
|
|
"<title>126141876285328*->126141876285328</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M324.49,-45.5C332.06,-45.5 340.85,-45.5 350.32,-45.5\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"350.2,-49 360.2,-45.5 350.2,-42 350.2,-49\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 126141874669008 -->\n",
|
|
"<g id=\"node9\" class=\"node\">\n",
|
|
"<title>126141874669008</title>\n",
|
|
"<polygon fill=\"none\" stroke=\"black\" points=\"723.38,-54.5 723.38,-90.5 952.88,-90.5 952.88,-54.5 723.38,-54.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"735.88\" y=\"-68.2\" font-family=\"Times,serif\" font-size=\"14.00\">d</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"748.38,-55.25 748.38,-90.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"799.12\" y=\"-68.2\" font-family=\"Times,serif\" font-size=\"14.00\">data 4.0000</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"849.88,-55.25 849.88,-90.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"901.38\" y=\"-68.2\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
|
|
"</g>\n",
|
|
"<!-- 126141874669008->126141924041744* -->\n",
|
|
"<g id=\"edge9\" class=\"edge\">\n",
|
|
"<title>126141874669008->126141924041744*</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M953.15,-89.98C962.01,-91.34 970.48,-92.64 978.16,-93.81\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"977.61,-97.27 988.02,-95.33 978.67,-90.35 977.61,-97.27\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 126141874669008+->126141874669008 -->\n",
|
|
"<g id=\"edge3\" class=\"edge\">\n",
|
|
"<title>126141874669008+->126141874669008</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M687.37,-72.5C694.6,-72.5 702.95,-72.5 711.92,-72.5\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"711.64,-76 721.64,-72.5 711.64,-69 711.64,-76\"/>\n",
|
|
"</g>\n",
|
|
"</g>\n",
|
|
"</svg>\n"
|
|
],
|
|
"text/plain": [
|
|
"<graphviz.graphs.Digraph at 0x72b9b1baaa50>"
|
|
]
|
|
},
|
|
"execution_count": 108,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"draw_dot(L)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 109,
|
|
"id": "e90d223b",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"L.grad = 1\n",
|
|
"d.grad = -2\n",
|
|
"f.grad = 4\n",
|
|
"c.grad = -2\n",
|
|
"e.grad = -2\n",
|
|
"a.grad = -2 * -3\n",
|
|
"b.grad = -2 * 2"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 110,
|
|
"id": "6ab7eaf0",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"plt.plot(np.arange(-5,5,0.2), np.tanh(np.arange(-5,5,0.2))); plt.grid()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 111,
|
|
"id": "068a1321",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/svg+xml": [
|
|
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
|
|
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
|
|
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
|
|
"<!-- Generated by graphviz version 14.1.2 (0)\n",
|
|
" -->\n",
|
|
"<!-- Pages: 1 -->\n",
|
|
"<svg width=\"1836pt\" height=\"210pt\"\n",
|
|
" viewBox=\"0.00 0.00 1836.00 210.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
|
|
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 206)\">\n",
|
|
"<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-206 1831.94,-206 1831.94,4 -4,4\"/>\n",
|
|
"<!-- 126141876313552 -->\n",
|
|
"<g id=\"node1\" class=\"node\">\n",
|
|
"<title>126141876313552</title>\n",
|
|
"<polygon fill=\"none\" stroke=\"black\" points=\"2.25,-165.5 2.25,-201.5 243.75,-201.5 243.75,-165.5 2.25,-165.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"20.75\" y=\"-179.2\" font-family=\"Times,serif\" font-size=\"14.00\">w2</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"39.25,-166.25 39.25,-201.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"90\" y=\"-179.2\" font-family=\"Times,serif\" font-size=\"14.00\">data 1.0000</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"140.75,-166.25 140.75,-201.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"192.25\" y=\"-179.2\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
|
|
"</g>\n",
|
|
"<!-- 126141879716304* -->\n",
|
|
"<g id=\"node15\" class=\"node\">\n",
|
|
"<title>126141879716304*</title>\n",
|
|
"<ellipse fill=\"none\" stroke=\"black\" cx=\"309\" cy=\"-128.5\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"309\" y=\"-123.83\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
|
|
"</g>\n",
|
|
"<!-- 126141876313552->126141879716304* -->\n",
|
|
"<g id=\"edge11\" class=\"edge\">\n",
|
|
"<title>126141876313552->126141879716304*</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M216.81,-165.07C226.74,-162.47 236.63,-159.61 246,-156.5 256.18,-153.12 266.94,-148.61 276.59,-144.2\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"277.99,-147.41 285.55,-139.98 275.01,-141.08 277.99,-147.41\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 126141874625040 -->\n",
|
|
"<g id=\"node2\" class=\"node\">\n",
|
|
"<title>126141874625040</title>\n",
|
|
"<polygon fill=\"none\" stroke=\"black\" points=\"372,-55.5 372,-91.5 642,-91.5 642,-55.5 372,-55.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"402.5\" y=\"-69.2\" font-family=\"Times,serif\" font-size=\"14.00\">x1*w1</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"433,-56.25 433,-91.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"486\" y=\"-69.2\" font-family=\"Times,serif\" font-size=\"14.00\">data -6.0000</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"539,-56.25 539,-91.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"590.5\" y=\"-69.2\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
|
|
"</g>\n",
|
|
"<!-- 126141874678672+ -->\n",
|
|
"<g id=\"node13\" class=\"node\">\n",
|
|
"<title>126141874678672+</title>\n",
|
|
"<ellipse fill=\"none\" stroke=\"black\" cx=\"705\" cy=\"-100.5\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"705\" y=\"-95.83\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
|
|
"</g>\n",
|
|
"<!-- 126141874625040->126141874678672+ -->\n",
|
|
"<g id=\"edge9\" class=\"edge\">\n",
|
|
"<title>126141874625040->126141874678672+</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M642.25,-91.99C651.05,-93.21 659.4,-94.36 666.95,-95.4\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"666.21,-98.83 676.6,-96.73 667.17,-91.89 666.21,-98.83\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 126141874625040* -->\n",
|
|
"<g id=\"node3\" class=\"node\">\n",
|
|
"<title>126141874625040*</title>\n",
|
|
"<ellipse fill=\"none\" stroke=\"black\" cx=\"309\" cy=\"-73.5\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"309\" y=\"-68.83\" font-family=\"Times,serif\" font-size=\"14.00\">*</text>\n",
|
|
"</g>\n",
|
|
"<!-- 126141874625040*->126141874625040 -->\n",
|
|
"<g id=\"edge1\" class=\"edge\">\n",
|
|
"<title>126141874625040*->126141874625040</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M336.43,-73.5C343.41,-73.5 351.46,-73.5 360.17,-73.5\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"360.02,-77 370.02,-73.5 360.02,-70 360.02,-77\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 126141874680400 -->\n",
|
|
"<g id=\"node4\" class=\"node\">\n",
|
|
"<title>126141874680400</title>\n",
|
|
"<polygon fill=\"none\" stroke=\"black\" points=\"1230,-54.5 1230,-90.5 1459.5,-90.5 1459.5,-54.5 1230,-54.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1242.5\" y=\"-68.2\" font-family=\"Times,serif\" font-size=\"14.00\">n</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"1255,-55.25 1255,-90.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1305.75\" y=\"-68.2\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.8814</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"1356.5,-55.25 1356.5,-90.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1408\" y=\"-68.2\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
|
|
"</g>\n",
|
|
"<!-- 126141874672208tanh -->\n",
|
|
"<g id=\"node7\" class=\"node\">\n",
|
|
"<title>126141874672208tanh</title>\n",
|
|
"<ellipse fill=\"none\" stroke=\"black\" cx=\"1529.35\" cy=\"-72.5\" rx=\"33.85\" ry=\"18\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1529.35\" y=\"-67.83\" font-family=\"Times,serif\" font-size=\"14.00\">tanh</text>\n",
|
|
"</g>\n",
|
|
"<!-- 126141874680400->126141874672208tanh -->\n",
|
|
"<g id=\"edge8\" class=\"edge\">\n",
|
|
"<title>126141874680400->126141874672208tanh</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M1459.83,-72.5C1468.26,-72.5 1476.4,-72.5 1483.96,-72.5\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"1483.79,-76 1493.79,-72.5 1483.79,-69 1483.79,-76\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 126141874680400+ -->\n",
|
|
"<g id=\"node5\" class=\"node\">\n",
|
|
"<title>126141874680400+</title>\n",
|
|
"<ellipse fill=\"none\" stroke=\"black\" cx=\"1167\" cy=\"-72.5\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1167\" y=\"-67.83\" font-family=\"Times,serif\" font-size=\"14.00\">+</text>\n",
|
|
"</g>\n",
|
|
"<!-- 126141874680400+->126141874680400 -->\n",
|
|
"<g id=\"edge2\" class=\"edge\">\n",
|
|
"<title>126141874680400+->126141874680400</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M1194.31,-72.5C1201.38,-72.5 1209.52,-72.5 1218.27,-72.5\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"1218.14,-76 1228.14,-72.5 1218.14,-69 1218.14,-76\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 126141874672208 -->\n",
|
|
"<g id=\"node6\" class=\"node\">\n",
|
|
"<title>126141874672208</title>\n",
|
|
"<polygon fill=\"none\" stroke=\"black\" points=\"1599.19,-54.5 1599.19,-90.5 1827.94,-90.5 1827.94,-54.5 1599.19,-54.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1611.32\" y=\"-68.2\" font-family=\"Times,serif\" font-size=\"14.00\">o</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"1623.44,-55.25 1623.44,-90.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1674.19\" y=\"-68.2\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.7071</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"1724.94,-55.25 1724.94,-90.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1776.44\" y=\"-68.2\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
|
|
"</g>\n",
|
|
"<!-- 126141874672208tanh->126141874672208 -->\n",
|
|
"<g id=\"edge3\" class=\"edge\">\n",
|
|
"<title>126141874672208tanh->126141874672208</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M1563.35,-72.5C1570.7,-72.5 1578.92,-72.5 1587.63,-72.5\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"1587.36,-76 1597.36,-72.5 1587.36,-69 1587.36,-76\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 126141876285392 -->\n",
|
|
"<g id=\"node8\" class=\"node\">\n",
|
|
"<title>126141876285392</title>\n",
|
|
"<polygon fill=\"none\" stroke=\"black\" points=\"4.12,-110.5 4.12,-146.5 241.88,-146.5 241.88,-110.5 4.12,-110.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"20.75\" y=\"-124.2\" font-family=\"Times,serif\" font-size=\"14.00\">x2</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"37.38,-111.25 37.38,-146.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"88.12\" y=\"-124.2\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.0000</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"138.88,-111.25 138.88,-146.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"190.38\" y=\"-124.2\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
|
|
"</g>\n",
|
|
"<!-- 126141876285392->126141879716304* -->\n",
|
|
"<g id=\"edge14\" class=\"edge\">\n",
|
|
"<title>126141876285392->126141879716304*</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M242.35,-128.5C252.31,-128.5 261.82,-128.5 270.35,-128.5\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"270.2,-132 280.2,-128.5 270.2,-125 270.2,-132\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 126141876317968 -->\n",
|
|
"<g id=\"node9\" class=\"node\">\n",
|
|
"<title>126141876317968</title>\n",
|
|
"<polygon fill=\"none\" stroke=\"black\" points=\"4.12,-55.5 4.12,-91.5 241.88,-91.5 241.88,-55.5 4.12,-55.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"20.75\" y=\"-69.2\" font-family=\"Times,serif\" font-size=\"14.00\">x1</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"37.38,-56.25 37.38,-91.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"88.12\" y=\"-69.2\" font-family=\"Times,serif\" font-size=\"14.00\">data 2.0000</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"138.88,-56.25 138.88,-91.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"190.38\" y=\"-69.2\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
|
|
"</g>\n",
|
|
"<!-- 126141876317968->126141874625040* -->\n",
|
|
"<g id=\"edge13\" class=\"edge\">\n",
|
|
"<title>126141876317968->126141874625040*</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M242.35,-73.5C252.31,-73.5 261.82,-73.5 270.35,-73.5\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"270.2,-77 280.2,-73.5 270.2,-70 270.2,-77\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 126141926027024 -->\n",
|
|
"<g id=\"node10\" class=\"node\">\n",
|
|
"<title>126141926027024</title>\n",
|
|
"<polygon fill=\"none\" stroke=\"black\" points=\"821.25,-27.5 821.25,-63.5 1050.75,-63.5 1050.75,-27.5 821.25,-27.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"833.75\" y=\"-41.2\" font-family=\"Times,serif\" font-size=\"14.00\">b</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"846.25,-28.25 846.25,-63.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"897\" y=\"-41.2\" font-family=\"Times,serif\" font-size=\"14.00\">data 6.8814</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"947.75,-28.25 947.75,-63.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"999.25\" y=\"-41.2\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
|
|
"</g>\n",
|
|
"<!-- 126141926027024->126141874680400+ -->\n",
|
|
"<g id=\"edge12\" class=\"edge\">\n",
|
|
"<title>126141926027024->126141874680400+</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M1051.16,-58.96C1079.33,-62.28 1107.53,-65.61 1128.93,-68.13\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"1128.24,-71.57 1138.58,-69.27 1129.06,-64.62 1128.24,-71.57\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 126141877464976 -->\n",
|
|
"<g id=\"node11\" class=\"node\">\n",
|
|
"<title>126141877464976</title>\n",
|
|
"<polygon fill=\"none\" stroke=\"black\" points=\"0,-0.5 0,-36.5 246,-36.5 246,-0.5 0,-0.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"18.5\" y=\"-14.2\" font-family=\"Times,serif\" font-size=\"14.00\">w1</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"37,-1.25 37,-36.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"90\" y=\"-14.2\" font-family=\"Times,serif\" font-size=\"14.00\">data -3.0000</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"143,-1.25 143,-36.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"194.5\" y=\"-14.2\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
|
|
"</g>\n",
|
|
"<!-- 126141877464976->126141874625040* -->\n",
|
|
"<g id=\"edge10\" class=\"edge\">\n",
|
|
"<title>126141877464976->126141874625040*</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M216.81,-36.93C226.74,-39.53 236.63,-42.39 246,-45.5 256.18,-48.88 266.94,-53.39 276.59,-57.8\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"275.01,-60.92 285.55,-62.02 277.99,-54.59 275.01,-60.92\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 126141874678672 -->\n",
|
|
"<g id=\"node12\" class=\"node\">\n",
|
|
"<title>126141874678672</title>\n",
|
|
"<polygon fill=\"none\" stroke=\"black\" points=\"768,-82.5 768,-118.5 1104,-118.5 1104,-82.5 768,-82.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"831.5\" y=\"-96.2\" font-family=\"Times,serif\" font-size=\"14.00\">x1*w1 + x2*w2</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"895,-83.25 895,-118.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"948\" y=\"-96.2\" font-family=\"Times,serif\" font-size=\"14.00\">data -6.0000</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"1001,-83.25 1001,-118.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"1052.5\" y=\"-96.2\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
|
|
"</g>\n",
|
|
"<!-- 126141874678672->126141874680400+ -->\n",
|
|
"<g id=\"edge6\" class=\"edge\">\n",
|
|
"<title>126141874678672->126141874680400+</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M1088.15,-82.02C1103.05,-80.2 1117.02,-78.49 1128.9,-77.04\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"1129.04,-80.55 1138.54,-75.86 1128.19,-73.6 1129.04,-80.55\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 126141874678672+->126141874678672 -->\n",
|
|
"<g id=\"edge4\" class=\"edge\">\n",
|
|
"<title>126141874678672+->126141874678672</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M732.27,-100.5C739.21,-100.5 747.24,-100.5 756.03,-100.5\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"756.02,-104 766.02,-100.5 756.02,-97 756.02,-104\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 126141879716304 -->\n",
|
|
"<g id=\"node14\" class=\"node\">\n",
|
|
"<title>126141879716304</title>\n",
|
|
"<polygon fill=\"none\" stroke=\"black\" points=\"374.25,-110.5 374.25,-146.5 639.75,-146.5 639.75,-110.5 374.25,-110.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"404.75\" y=\"-124.2\" font-family=\"Times,serif\" font-size=\"14.00\">x2*w2</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"435.25,-111.25 435.25,-146.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"486\" y=\"-124.2\" font-family=\"Times,serif\" font-size=\"14.00\">data 0.0000</text>\n",
|
|
"<polyline fill=\"none\" stroke=\"black\" points=\"536.75,-111.25 536.75,-146.5\"/>\n",
|
|
"<text xml:space=\"preserve\" text-anchor=\"middle\" x=\"588.25\" y=\"-124.2\" font-family=\"Times,serif\" font-size=\"14.00\">grad 0.0000</text>\n",
|
|
"</g>\n",
|
|
"<!-- 126141879716304->126141874678672+ -->\n",
|
|
"<g id=\"edge7\" class=\"edge\">\n",
|
|
"<title>126141879716304->126141874678672+</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M637.37,-110.02C647.88,-108.52 657.85,-107.09 666.73,-105.82\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"667.19,-109.29 676.6,-104.41 666.2,-102.36 667.19,-109.29\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 126141879716304*->126141879716304 -->\n",
|
|
"<g id=\"edge5\" class=\"edge\">\n",
|
|
"<title>126141879716304*->126141879716304</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M336.43,-128.5C344.1,-128.5 353.05,-128.5 362.77,-128.5\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"362.51,-132 372.51,-128.5 362.51,-125 362.51,-132\"/>\n",
|
|
"</g>\n",
|
|
"</g>\n",
|
|
"</svg>\n"
|
|
],
|
|
"text/plain": [
|
|
"<graphviz.graphs.Digraph at 0x72b9b1d73d10>"
|
|
]
|
|
},
|
|
"execution_count": 111,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"x1 = Value(2.0, label='x1')\n",
|
|
"x2 = Value(0.0, label='x2')\n",
|
|
"\n",
|
|
"w1 = Value(-3.0, label='w1')\n",
|
|
"w2 = Value(1.0, label='w2')\n",
|
|
"\n",
|
|
"b = Value(6.8813735870195432, label='b')\n",
|
|
"\n",
|
|
"x1w1 = x1*w1; x1w1.label = 'x1*w1'\n",
|
|
"x2w2 = x2*w2; x2w2.label = 'x2*w2'\n",
|
|
"\n",
|
|
"x1w1x2w2 = x1w1 + x2w2; x1w1x2w2.label = 'x1*w1 + x2*w2'\n",
|
|
"\n",
|
|
"n = x1w1x2w2 + b; n.label = 'n'\n",
|
|
"o = n.tanh(); o.label = 'o'\n",
|
|
"draw_dot(o)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "33caf2d4",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": ".venv (3.11.15.final.0)",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.11.15"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|