aboutsummaryrefslogtreecommitdiff
path: root/insane-shortest-paths.ipynb
diff options
context:
space:
mode:
authorSIPB2024-12-10 22:22:28 -0500
committerSIPB2024-12-10 22:22:28 -0500
commit95f0dcaca836cf2049bbc2f412a2ffb26cfbf9d0 (patch)
treea2984831405338ed7d1cbba6e2f0b2287b00a58f /insane-shortest-paths.ipynb
parent0e78a4196e4a8da98a8c66d80380e847f9a45302 (diff)
Commit everything
Diffstat (limited to 'insane-shortest-paths.ipynb')
-rw-r--r--insane-shortest-paths.ipynb1002
1 files changed, 547 insertions, 455 deletions
diff --git a/insane-shortest-paths.ipynb b/insane-shortest-paths.ipynb
index a3e58fb..ed97770 100644
--- a/insane-shortest-paths.ipynb
+++ b/insane-shortest-paths.ipynb
@@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": 45,
"execution_state": "idle",
"id": "86ce5f44-94f6-43b0-a0d1-091b8134ffb6",
"metadata": {},
@@ -11,7 +11,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Total number of parameters: 44352\n"
+ "Total number of parameters: 7072\n"
]
}
],
@@ -21,18 +21,15 @@
"import random\n",
"from collections import deque\n",
"\n",
- "# Set manual seeds for reproducibility\n",
"# torch.manual_seed(33)\n",
"# random.seed(33)\n",
"\n",
"# Configuration\n",
- "NVTXS = 16\n",
+ "NVTXS = 8\n",
"MAXDIST = NVTXS + 1\n",
"AVGDEG = 2\n",
"SEQLEN = NVTXS + 1\n",
"HIDDENDIM = 4 * NVTXS + 2\n",
- "\n",
- "# Start indices for different sections of the input data\n",
"START_REACH = NVTXS + 1\n",
"START_OUT = 2 * NVTXS + 1\n",
"START_SELF = 3 * NVTXS + 1\n",
@@ -102,11 +99,8 @@
" data = torch.stack(graphs)\n",
" labels = torch.tensor(distances, dtype=torch.float32, device=device)\n",
" return data, labels\n",
- "\n",
- "BIG = 20\n",
- "SUPABIG = 100\n",
- "MED = 10\n",
- "CURSE = 5\n",
+ " \n",
+ "BIG,SUPABIG,MED,CURSE = 12,30,7,5\n",
"\n",
"class SillyTransformer(nn.Module):\n",
" def __init__(self, device):\n",
@@ -196,451 +190,543 @@
" random_matrix = random.choice(random_list)\n",
" random_matrix.data = torch.randn_like(random_matrix)\n",
"\n",
- "optimizer = torch.optim.Adam(model.parameters(), lr=3e-5)\n",
+ "optimizer = torch.optim.Adam(model.parameters(), lr=1e-6)\n",
"loss_fn = nn.MSELoss()"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 47,
"execution_state": "idle",
"id": "a9dd76f4-96f2-47b5-9bb9-a32a1b478dd4",
"metadata": {},
"outputs": [
{
- "name": "stderr",
+ "name": "stdout",
"output_type": "stream",
"text": [
- "/tmp/ipykernel_15454/381745885.py:148: UserWarning: Attempting to use hipBLASLt on an unsupported architecture! Overriding blas backend to hipblas (Triggered internally at ../aten/src/ATen/Context.cpp:296.)\n",
- " ksrc = torch.matmul(src, K.unsqueeze(0).transpose(-2, -1))\n"
+ "Epoch [0/10000], Loss: 0.4030\n",
+ "Epoch [10/10000], Loss: 0.3534\n",
+ "Epoch [20/10000], Loss: 0.3482\n",
+ "Epoch [30/10000], Loss: 0.3803\n",
+ "Epoch [40/10000], Loss: 0.3565\n",
+ "Epoch [50/10000], Loss: 0.3746\n",
+ "Epoch [60/10000], Loss: 0.3738\n",
+ "Epoch [70/10000], Loss: 0.3184\n",
+ "Epoch [80/10000], Loss: 0.3618\n",
+ "Epoch [90/10000], Loss: 0.3509\n",
+ "Epoch [100/10000], Loss: 0.3325\n",
+ "Epoch [110/10000], Loss: 0.3196\n",
+ "Epoch [120/10000], Loss: 0.3198\n",
+ "Epoch [130/10000], Loss: 0.3047\n",
+ "Epoch [140/10000], Loss: 0.3318\n",
+ "Epoch [150/10000], Loss: 0.2962\n",
+ "Epoch [160/10000], Loss: 0.3227\n",
+ "Epoch [170/10000], Loss: 0.3037\n",
+ "Epoch [180/10000], Loss: 0.3056\n",
+ "Epoch [190/10000], Loss: 0.2926\n",
+ "Epoch [200/10000], Loss: 0.2875\n",
+ "Epoch [210/10000], Loss: 0.2778\n",
+ "Epoch [220/10000], Loss: 0.2771\n",
+ "Epoch [230/10000], Loss: 0.2859\n",
+ "Epoch [240/10000], Loss: 0.2520\n",
+ "Epoch [250/10000], Loss: 0.2974\n",
+ "Epoch [260/10000], Loss: 0.2615\n",
+ "Epoch [270/10000], Loss: 0.2589\n",
+ "Epoch [280/10000], Loss: 0.2376\n",
+ "Epoch [290/10000], Loss: 0.2455\n",
+ "Epoch [300/10000], Loss: 0.2594\n",
+ "Epoch [310/10000], Loss: 0.2397\n",
+ "Epoch [320/10000], Loss: 0.2433\n",
+ "Epoch [330/10000], Loss: 0.2434\n",
+ "Epoch [340/10000], Loss: 0.2549\n",
+ "Epoch [350/10000], Loss: 0.2190\n",
+ "Epoch [360/10000], Loss: 0.2415\n",
+ "Epoch [370/10000], Loss: 0.2392\n",
+ "Epoch [380/10000], Loss: 0.2123\n",
+ "Epoch [390/10000], Loss: 0.2555\n",
+ "Epoch [400/10000], Loss: 0.2274\n",
+ "Epoch [410/10000], Loss: 0.2227\n",
+ "Epoch [420/10000], Loss: 0.2207\n",
+ "Epoch [430/10000], Loss: 0.2249\n",
+ "Epoch [440/10000], Loss: 0.2331\n",
+ "Epoch [450/10000], Loss: 0.2155\n",
+ "Epoch [460/10000], Loss: 0.2313\n",
+ "Epoch [470/10000], Loss: 0.2363\n",
+ "Epoch [480/10000], Loss: 0.2311\n",
+ "Epoch [490/10000], Loss: 0.2117\n",
+ "Epoch [500/10000], Loss: 0.2094\n",
+ "Epoch [510/10000], Loss: 0.2217\n",
+ "Epoch [520/10000], Loss: 0.2094\n",
+ "Epoch [530/10000], Loss: 0.2054\n",
+ "Epoch [540/10000], Loss: 0.2094\n",
+ "Epoch [550/10000], Loss: 0.1928\n",
+ "Epoch [560/10000], Loss: 0.2073\n",
+ "Epoch [570/10000], Loss: 0.2034\n",
+ "Epoch [580/10000], Loss: 0.2261\n",
+ "Epoch [590/10000], Loss: 0.1980\n",
+ "Epoch [600/10000], Loss: 0.2031\n",
+ "Epoch [610/10000], Loss: 0.2049\n",
+ "Epoch [620/10000], Loss: 0.1951\n",
+ "Epoch [630/10000], Loss: 0.2012\n",
+ "Epoch [640/10000], Loss: 0.2006\n",
+ "Epoch [650/10000], Loss: 0.1909\n",
+ "Epoch [660/10000], Loss: 0.2079\n",
+ "Epoch [670/10000], Loss: 0.1896\n",
+ "Epoch [680/10000], Loss: 0.1930\n",
+ "Epoch [690/10000], Loss: 0.1852\n",
+ "Epoch [700/10000], Loss: 0.1879\n",
+ "Epoch [710/10000], Loss: 0.1957\n",
+ "Epoch [720/10000], Loss: 0.1922\n",
+ "Epoch [730/10000], Loss: 0.1952\n",
+ "Epoch [740/10000], Loss: 0.1932\n",
+ "Epoch [750/10000], Loss: 0.1937\n",
+ "Epoch [760/10000], Loss: 0.1909\n",
+ "Epoch [770/10000], Loss: 0.1811\n",
+ "Epoch [780/10000], Loss: 0.1784\n",
+ "Epoch [790/10000], Loss: 0.1765\n",
+ "Epoch [800/10000], Loss: 0.1725\n",
+ "Epoch [810/10000], Loss: 0.1711\n",
+ "Epoch [820/10000], Loss: 0.1913\n",
+ "Epoch [830/10000], Loss: 0.1795\n",
+ "Epoch [840/10000], Loss: 0.1721\n",
+ "Epoch [850/10000], Loss: 0.1716\n",
+ "Epoch [860/10000], Loss: 0.1808\n",
+ "Epoch [870/10000], Loss: 0.1842\n",
+ "Epoch [880/10000], Loss: 0.1605\n",
+ "Epoch [890/10000], Loss: 0.1767\n",
+ "Epoch [900/10000], Loss: 0.1724\n",
+ "Epoch [910/10000], Loss: 0.1687\n",
+ "Epoch [920/10000], Loss: 0.1662\n",
+ "Epoch [930/10000], Loss: 0.1783\n",
+ "Epoch [940/10000], Loss: 0.1801\n",
+ "Epoch [950/10000], Loss: 0.1731\n",
+ "Epoch [960/10000], Loss: 0.1670\n",
+ "Epoch [970/10000], Loss: 0.1626\n",
+ "Epoch [980/10000], Loss: 0.1687\n",
+ "Epoch [990/10000], Loss: 0.1548\n",
+ "Epoch [1000/10000], Loss: 0.1635\n",
+ "Epoch [1010/10000], Loss: 0.1692\n",
+ "Epoch [1020/10000], Loss: 0.1564\n",
+ "Epoch [1030/10000], Loss: 0.1635\n",
+ "Epoch [1040/10000], Loss: 0.1594\n",
+ "Epoch [1050/10000], Loss: 0.1605\n",
+ "Epoch [1060/10000], Loss: 0.1643\n",
+ "Epoch [1070/10000], Loss: 0.1619\n",
+ "Epoch [1080/10000], Loss: 0.1670\n",
+ "Epoch [1090/10000], Loss: 0.1602\n",
+ "Epoch [1100/10000], Loss: 0.1623\n",
+ "Epoch [1110/10000], Loss: 0.1625\n",
+ "Epoch [1120/10000], Loss: 0.1628\n",
+ "Epoch [1130/10000], Loss: 0.1542\n",
+ "Epoch [1140/10000], Loss: 0.1581\n",
+ "Epoch [1150/10000], Loss: 0.1667\n",
+ "Epoch [1160/10000], Loss: 0.1659\n",
+ "Epoch [1170/10000], Loss: 0.1515\n",
+ "Epoch [1180/10000], Loss: 0.1621\n",
+ "Epoch [1190/10000], Loss: 0.1620\n",
+ "Epoch [1200/10000], Loss: 0.1561\n",
+ "Epoch [1210/10000], Loss: 0.1584\n",
+ "Epoch [1220/10000], Loss: 0.1494\n",
+ "Epoch [1230/10000], Loss: 0.1625\n",
+ "Epoch [1240/10000], Loss: 0.1562\n",
+ "Epoch [1250/10000], Loss: 0.1560\n",
+ "Epoch [1260/10000], Loss: 0.1485\n",
+ "Epoch [1270/10000], Loss: 0.1491\n",
+ "Epoch [1280/10000], Loss: 0.1459\n",
+ "Epoch [1290/10000], Loss: 0.1521\n",
+ "Epoch [1300/10000], Loss: 0.1548\n",
+ "Epoch [1310/10000], Loss: 0.1527\n",
+ "Epoch [1320/10000], Loss: 0.1468\n",
+ "Epoch [1330/10000], Loss: 0.1465\n",
+ "Epoch [1340/10000], Loss: 0.1499\n",
+ "Epoch [1350/10000], Loss: 0.1423\n",
+ "Epoch [1360/10000], Loss: 0.1479\n",
+ "Epoch [1370/10000], Loss: 0.1544\n",
+ "Epoch [1380/10000], Loss: 0.1528\n",
+ "Epoch [1390/10000], Loss: 0.1450\n",
+ "Epoch [1400/10000], Loss: 0.1491\n",
+ "Epoch [1410/10000], Loss: 0.1430\n",
+ "Epoch [1420/10000], Loss: 0.1388\n",
+ "Epoch [1430/10000], Loss: 0.1387\n",
+ "Epoch [1440/10000], Loss: 0.1479\n",
+ "Epoch [1450/10000], Loss: 0.1378\n",
+ "Epoch [1460/10000], Loss: 0.1456\n",
+ "Epoch [1470/10000], Loss: 0.1418\n",
+ "Epoch [1480/10000], Loss: 0.1327\n",
+ "Epoch [1490/10000], Loss: 0.1418\n",
+ "Epoch [1500/10000], Loss: 0.1419\n",
+ "Epoch [1510/10000], Loss: 0.1322\n",
+ "Epoch [1520/10000], Loss: 0.1420\n",
+ "Epoch [1530/10000], Loss: 0.1405\n",
+ "Epoch [1540/10000], Loss: 0.1316\n",
+ "Epoch [1550/10000], Loss: 0.1314\n",
+ "Epoch [1560/10000], Loss: 0.1367\n",
+ "Epoch [1570/10000], Loss: 0.1345\n",
+ "Epoch [1580/10000], Loss: 0.1335\n",
+ "Epoch [1590/10000], Loss: 0.1371\n",
+ "Epoch [1600/10000], Loss: 0.1398\n",
+ "Epoch [1610/10000], Loss: 0.1316\n",
+ "Epoch [1620/10000], Loss: 0.1366\n",
+ "Epoch [1630/10000], Loss: 0.1347\n",
+ "Epoch [1640/10000], Loss: 0.1343\n",
+ "Epoch [1650/10000], Loss: 0.1297\n",
+ "Epoch [1660/10000], Loss: 0.1329\n",
+ "Epoch [1670/10000], Loss: 0.1342\n",
+ "Epoch [1680/10000], Loss: 0.1327\n",
+ "Epoch [1690/10000], Loss: 0.1301\n",
+ "Epoch [1700/10000], Loss: 0.1358\n",
+ "Epoch [1710/10000], Loss: 0.1292\n",
+ "Epoch [1720/10000], Loss: 0.1234\n",
+ "Epoch [1730/10000], Loss: 0.1244\n",
+ "Epoch [1740/10000], Loss: 0.1280\n",
+ "Epoch [1750/10000], Loss: 0.1277\n",
+ "Epoch [1760/10000], Loss: 0.1272\n",
+ "Epoch [1770/10000], Loss: 0.1267\n",
+ "Epoch [1780/10000], Loss: 0.1274\n",
+ "Epoch [1790/10000], Loss: 0.1208\n",
+ "Epoch [1800/10000], Loss: 0.1227\n",
+ "Epoch [1810/10000], Loss: 0.1185\n",
+ "Epoch [1820/10000], Loss: 0.1233\n",
+ "Epoch [1830/10000], Loss: 0.1268\n",
+ "Epoch [1840/10000], Loss: 0.1213\n",
+ "Epoch [1850/10000], Loss: 0.1167\n",
+ "Epoch [1860/10000], Loss: 0.1199\n",
+ "Epoch [1870/10000], Loss: 0.1213\n",
+ "Epoch [1880/10000], Loss: 0.1182\n",
+ "Epoch [1890/10000], Loss: 0.1177\n",
+ "Epoch [1900/10000], Loss: 0.1193\n",
+ "Epoch [1910/10000], Loss: 0.1166\n",
+ "Epoch [1920/10000], Loss: 0.1286\n",
+ "Epoch [1930/10000], Loss: 0.1201\n",
+ "Epoch [1940/10000], Loss: 0.1207\n",
+ "Epoch [1950/10000], Loss: 0.1253\n",
+ "Epoch [1960/10000], Loss: 0.1095\n",
+ "Epoch [1970/10000], Loss: 0.1168\n",
+ "Epoch [1980/10000], Loss: 0.1202\n",
+ "Epoch [1990/10000], Loss: 0.1193\n",
+ "Epoch [2000/10000], Loss: 0.1030\n",
+ "Epoch [2010/10000], Loss: 0.1196\n",
+ "Epoch [2020/10000], Loss: 0.1178\n",
+ "Epoch [2030/10000], Loss: 0.1162\n",
+ "Epoch [2040/10000], Loss: 0.1181\n",
+ "Epoch [2050/10000], Loss: 0.1083\n",
+ "Epoch [2060/10000], Loss: 0.1107\n",
+ "Epoch [2070/10000], Loss: 0.1101\n",
+ "Epoch [2080/10000], Loss: 0.1220\n",
+ "Epoch [2090/10000], Loss: 0.1143\n",
+ "Epoch [2100/10000], Loss: 0.1138\n",
+ "Epoch [2110/10000], Loss: 0.1162\n",
+ "Epoch [2120/10000], Loss: 0.1172\n",
+ "Epoch [2130/10000], Loss: 0.1067\n",
+ "Epoch [2140/10000], Loss: 0.1121\n",
+ "Epoch [2150/10000], Loss: 0.1150\n",
+ "Epoch [2160/10000], Loss: 0.1172\n",
+ "Epoch [2170/10000], Loss: 0.1084\n",
+ "Epoch [2180/10000], Loss: 0.1103\n",
+ "Epoch [2190/10000], Loss: 0.1059\n",
+ "Epoch [2200/10000], Loss: 0.1156\n",
+ "Epoch [2210/10000], Loss: 0.1053\n",
+ "Epoch [2220/10000], Loss: 0.1055\n",
+ "Epoch [2230/10000], Loss: 0.1160\n",
+ "Epoch [2240/10000], Loss: 0.1009\n",
+ "Epoch [2250/10000], Loss: 0.1030\n",
+ "Epoch [2260/10000], Loss: 0.1079\n",
+ "Epoch [2270/10000], Loss: 0.1008\n",
+ "Epoch [2280/10000], Loss: 0.1152\n",
+ "Epoch [2290/10000], Loss: 0.0997\n",
+ "Epoch [2300/10000], Loss: 0.1003\n",
+ "Epoch [2310/10000], Loss: 0.0990\n",
+ "Epoch [2320/10000], Loss: 0.1073\n",
+ "Epoch [2330/10000], Loss: 0.1062\n",
+ "Epoch [2340/10000], Loss: 0.0993\n",
+ "Epoch [2350/10000], Loss: 0.1045\n",
+ "Epoch [2360/10000], Loss: 0.1106\n",
+ "Epoch [2370/10000], Loss: 0.1167\n",
+ "Epoch [2380/10000], Loss: 0.1008\n",
+ "Epoch [2390/10000], Loss: 0.1025\n",
+ "Epoch [2400/10000], Loss: 0.0958\n",
+ "Epoch [2410/10000], Loss: 0.0966\n",
+ "Epoch [2420/10000], Loss: 0.1066\n",
+ "Epoch [2430/10000], Loss: 0.1135\n",
+ "Epoch [2440/10000], Loss: 0.1117\n",
+ "Epoch [2450/10000], Loss: 0.1046\n",
+ "Epoch [2460/10000], Loss: 0.1019\n",
+ "Epoch [2470/10000], Loss: 0.1012\n",
+ "Epoch [2480/10000], Loss: 0.0993\n",
+ "Epoch [2490/10000], Loss: 0.1014\n",
+ "Epoch [2500/10000], Loss: 0.1037\n",
+ "Epoch [2510/10000], Loss: 0.1085\n",
+ "Epoch [2520/10000], Loss: 0.1081\n",
+ "Epoch [2530/10000], Loss: 0.1021\n",
+ "Epoch [2540/10000], Loss: 0.0989\n",
+ "Epoch [2550/10000], Loss: 0.1006\n",
+ "Epoch [2560/10000], Loss: 0.0941\n",
+ "Epoch [2570/10000], Loss: 0.0911\n",
+ "Epoch [2580/10000], Loss: 0.1020\n",
+ "Epoch [2590/10000], Loss: 0.0937\n",
+ "Epoch [2600/10000], Loss: 0.1063\n",
+ "Epoch [2610/10000], Loss: 0.1030\n",
+ "Epoch [2620/10000], Loss: 0.0890\n",
+ "Epoch [2630/10000], Loss: 0.0973\n",
+ "Epoch [2640/10000], Loss: 0.0938\n",
+ "Epoch [2650/10000], Loss: 0.1019\n",
+ "Epoch [2660/10000], Loss: 0.1008\n",
+ "Epoch [2670/10000], Loss: 0.1037\n",
+ "Epoch [2680/10000], Loss: 0.0887\n",
+ "Epoch [2690/10000], Loss: 0.0953\n",
+ "Epoch [2700/10000], Loss: 0.0997\n",
+ "Epoch [2710/10000], Loss: 0.1033\n",
+ "Epoch [2720/10000], Loss: 0.0901\n",
+ "Epoch [2730/10000], Loss: 0.1019\n",
+ "Epoch [2740/10000], Loss: 0.0908\n",
+ "Epoch [2750/10000], Loss: 0.0960\n",
+ "Epoch [2760/10000], Loss: 0.0952\n",
+ "Epoch [2770/10000], Loss: 0.1047\n",
+ "Epoch [2780/10000], Loss: 0.0878\n",
+ "Epoch [2790/10000], Loss: 0.1007\n",
+ "Epoch [2800/10000], Loss: 0.0876\n",
+ "Epoch [2810/10000], Loss: 0.0936\n",
+ "Epoch [2820/10000], Loss: 0.0989\n",
+ "Epoch [2830/10000], Loss: 0.0906\n",
+ "Epoch [2840/10000], Loss: 0.0951\n",
+ "Epoch [2850/10000], Loss: 0.0913\n",
+ "Epoch [2860/10000], Loss: 0.0993\n",
+ "Epoch [2870/10000], Loss: 0.0904\n",
+ "Epoch [2880/10000], Loss: 0.0974\n",
+ "Epoch [2890/10000], Loss: 0.0882\n",
+ "Epoch [2900/10000], Loss: 0.0912\n",
+ "Epoch [2910/10000], Loss: 0.1034\n",
+ "Epoch [2920/10000], Loss: 0.0918\n",
+ "Epoch [2930/10000], Loss: 0.0898\n",
+ "Epoch [2940/10000], Loss: 0.0914\n",
+ "Epoch [2950/10000], Loss: 0.0858\n",
+ "Epoch [2960/10000], Loss: 0.0940\n",
+ "Epoch [2970/10000], Loss: 0.0834\n",
+ "Epoch [2980/10000], Loss: 0.0952\n",
+ "Epoch [2990/10000], Loss: 0.1028\n",
+ "Epoch [3000/10000], Loss: 0.1005\n",
+ "Epoch [3010/10000], Loss: 0.0724\n",
+ "Epoch [3020/10000], Loss: 0.1007\n",
+ "Epoch [3030/10000], Loss: 0.0883\n",
+ "Epoch [3040/10000], Loss: 0.0877\n",
+ "Epoch [3050/10000], Loss: 0.0902\n",
+ "Epoch [3060/10000], Loss: 0.0882\n",
+ "Epoch [3070/10000], Loss: 0.0935\n",
+ "Epoch [3080/10000], Loss: 0.1021\n",
+ "Epoch [3090/10000], Loss: 0.0936\n",
+ "Epoch [3100/10000], Loss: 0.0822\n",
+ "Epoch [3110/10000], Loss: 0.0839\n",
+ "Epoch [3120/10000], Loss: 0.0907\n",
+ "Epoch [3130/10000], Loss: 0.0872\n",
+ "Epoch [3140/10000], Loss: 0.0820\n",
+ "Epoch [3150/10000], Loss: 0.0804\n",
+ "Epoch [3160/10000], Loss: 0.0847\n",
+ "Epoch [3170/10000], Loss: 0.0791\n",
+ "Epoch [3180/10000], Loss: 0.0934\n",
+ "Epoch [3190/10000], Loss: 0.0854\n",
+ "Epoch [3200/10000], Loss: 0.0892\n",
+ "Epoch [3210/10000], Loss: 0.0869\n",
+ "Epoch [3220/10000], Loss: 0.0952\n",
+ "Epoch [3230/10000], Loss: 0.0943\n",
+ "Epoch [3240/10000], Loss: 0.0885\n",
+ "Epoch [3250/10000], Loss: 0.0763\n",
+ "Epoch [3260/10000], Loss: 0.0804\n",
+ "Epoch [3270/10000], Loss: 0.0832\n",
+ "Epoch [3280/10000], Loss: 0.0862\n",
+ "Epoch [3290/10000], Loss: 0.0826\n",
+ "Epoch [3300/10000], Loss: 0.0783\n",
+ "Epoch [3310/10000], Loss: 0.0882\n",
+ "Epoch [3320/10000], Loss: 0.0827\n",
+ "Epoch [3330/10000], Loss: 0.0819\n",
+ "Epoch [3340/10000], Loss: 0.0835\n",
+ "Epoch [3350/10000], Loss: 0.0885\n",
+ "Epoch [3360/10000], Loss: 0.0873\n",
+ "Epoch [3370/10000], Loss: 0.0872\n",
+ "Epoch [3380/10000], Loss: 0.0854\n",
+ "Epoch [3390/10000], Loss: 0.0862\n",
+ "Epoch [3400/10000], Loss: 0.0872\n",
+ "Epoch [3410/10000], Loss: 0.0908\n",
+ "Epoch [3420/10000], Loss: 0.0865\n",
+ "Epoch [3430/10000], Loss: 0.0842\n",
+ "Epoch [3440/10000], Loss: 0.0770\n",
+ "Epoch [3450/10000], Loss: 0.0866\n",
+ "Epoch [3460/10000], Loss: 0.0848\n",
+ "Epoch [3470/10000], Loss: 0.0885\n",
+ "Epoch [3480/10000], Loss: 0.0770\n",
+ "Epoch [3490/10000], Loss: 0.0871\n",
+ "Epoch [3500/10000], Loss: 0.0807\n",
+ "Epoch [3510/10000], Loss: 0.0751\n",
+ "Epoch [3520/10000], Loss: 0.0766\n",
+ "Epoch [3530/10000], Loss: 0.0763\n",
+ "Epoch [3540/10000], Loss: 0.0727\n",
+ "Epoch [3550/10000], Loss: 0.0829\n",
+ "Epoch [3560/10000], Loss: 0.0791\n",
+ "Epoch [3570/10000], Loss: 0.0770\n",
+ "Epoch [3580/10000], Loss: 0.0850\n",
+ "Epoch [3590/10000], Loss: 0.0774\n",
+ "Epoch [3600/10000], Loss: 0.0766\n",
+ "Epoch [3610/10000], Loss: 0.0726\n",
+ "Epoch [3620/10000], Loss: 0.0750\n",
+ "Epoch [3630/10000], Loss: 0.0723\n",
+ "Epoch [3640/10000], Loss: 0.0769\n",
+ "Epoch [3650/10000], Loss: 0.0825\n",
+ "Epoch [3660/10000], Loss: 0.0734\n",
+ "Epoch [3670/10000], Loss: 0.0700\n",
+ "Epoch [3680/10000], Loss: 0.0803\n",
+ "Epoch [3690/10000], Loss: 0.0784\n",
+ "Epoch [3700/10000], Loss: 0.0819\n",
+ "Epoch [3710/10000], Loss: 0.0697\n",
+ "Epoch [3720/10000], Loss: 0.0818\n",
+ "Epoch [3730/10000], Loss: 0.0698\n",
+ "Epoch [3740/10000], Loss: 0.0672\n",
+ "Epoch [3750/10000], Loss: 0.0778\n",
+ "Epoch [3760/10000], Loss: 0.0663\n",
+ "Epoch [3770/10000], Loss: 0.0721\n",
+ "Epoch [3780/10000], Loss: 0.0773\n",
+ "Epoch [3790/10000], Loss: 0.0671\n",
+ "Epoch [3800/10000], Loss: 0.0692\n",
+ "Epoch [3810/10000], Loss: 0.0719\n",
+ "Epoch [3820/10000], Loss: 0.0676\n",
+ "Epoch [3830/10000], Loss: 0.0747\n",
+ "Epoch [3840/10000], Loss: 0.0712\n",
+ "Epoch [3850/10000], Loss: 0.0696\n",
+ "Epoch [3860/10000], Loss: 0.0689\n",
+ "Epoch [3870/10000], Loss: 0.0797\n",
+ "Epoch [3880/10000], Loss: 0.0600\n",
+ "Epoch [3890/10000], Loss: 0.0755\n",
+ "Epoch [3900/10000], Loss: 0.0715\n",
+ "Epoch [3910/10000], Loss: 0.0741\n",
+ "Epoch [3920/10000], Loss: 0.0755\n",
+ "Epoch [3930/10000], Loss: 0.0634\n",
+ "Epoch [3940/10000], Loss: 0.0695\n",
+ "Epoch [3950/10000], Loss: 0.0682\n",
+ "Epoch [3960/10000], Loss: 0.0688\n",
+ "Epoch [3970/10000], Loss: 0.0794\n",
+ "Epoch [3980/10000], Loss: 0.0741\n",
+ "Epoch [3990/10000], Loss: 0.0751\n",
+ "Epoch [4000/10000], Loss: 0.0680\n",
+ "Epoch [4010/10000], Loss: 0.0723\n",
+ "Epoch [4020/10000], Loss: 0.0605\n",
+ "Epoch [4030/10000], Loss: 0.0654\n",
+ "Epoch [4040/10000], Loss: 0.0722\n",
+ "Epoch [4050/10000], Loss: 0.0748\n",
+ "Epoch [4060/10000], Loss: 0.0674\n",
+ "Epoch [4070/10000], Loss: 0.0652\n",
+ "Epoch [4080/10000], Loss: 0.0621\n",
+ "Epoch [4090/10000], Loss: 0.0638\n",
+ "Epoch [4100/10000], Loss: 0.0700\n",
+ "Epoch [4110/10000], Loss: 0.0682\n",
+ "Epoch [4120/10000], Loss: 0.0722\n",
+ "Epoch [4130/10000], Loss: 0.0689\n",
+ "Epoch [4140/10000], Loss: 0.0708\n",
+ "Epoch [4150/10000], Loss: 0.0624\n",
+ "Epoch [4160/10000], Loss: 0.0670\n",
+ "Epoch [4170/10000], Loss: 0.0706\n",
+ "Epoch [4180/10000], Loss: 0.0649\n",
+ "Epoch [4190/10000], Loss: 0.0571\n",
+ "Epoch [4200/10000], Loss: 0.0610\n",
+ "Epoch [4210/10000], Loss: 0.0668\n",
+ "Epoch [4220/10000], Loss: 0.0699\n",
+ "Epoch [4230/10000], Loss: 0.0606\n",
+ "Epoch [4240/10000], Loss: 0.0695\n",
+ "Epoch [4250/10000], Loss: 0.0627\n",
+ "Epoch [4260/10000], Loss: 0.0583\n",
+ "Epoch [4270/10000], Loss: 0.0583\n",
+ "Epoch [4280/10000], Loss: 0.0695\n",
+ "Epoch [4290/10000], Loss: 0.0615\n",
+ "Epoch [4300/10000], Loss: 0.0634\n",
+ "Epoch [4310/10000], Loss: 0.0678\n",
+ "Epoch [4320/10000], Loss: 0.0624\n",
+ "Epoch [4330/10000], Loss: 0.0684\n",
+ "Epoch [4340/10000], Loss: 0.0639\n",
+ "Epoch [4350/10000], Loss: 0.0642\n",
+ "Epoch [4360/10000], Loss: 0.0638\n",
+ "Epoch [4370/10000], Loss: 0.0575\n",
+ "Epoch [4380/10000], Loss: 0.0615\n",
+ "Epoch [4390/10000], Loss: 0.0763\n",
+ "Epoch [4400/10000], Loss: 0.0676\n",
+ "Epoch [4410/10000], Loss: 0.0716\n",
+ "Epoch [4420/10000], Loss: 0.0634\n",
+ "Epoch [4430/10000], Loss: 0.0600\n",
+ "Epoch [4440/10000], Loss: 0.0663\n",
+ "Epoch [4450/10000], Loss: 0.0662\n",
+ "Epoch [4460/10000], Loss: 0.0553\n",
+ "Epoch [4470/10000], Loss: 0.0603\n",
+ "Epoch [4480/10000], Loss: 0.0583\n",
+ "Epoch [4490/10000], Loss: 0.0590\n",
+ "Epoch [4500/10000], Loss: 0.0634\n",
+ "Epoch [4510/10000], Loss: 0.0639\n",
+ "Epoch [4520/10000], Loss: 0.0596\n",
+ "Epoch [4530/10000], Loss: 0.0670\n",
+ "Epoch [4540/10000], Loss: 0.0605\n",
+ "Epoch [4550/10000], Loss: 0.0548\n",
+ "Epoch [4560/10000], Loss: 0.0680\n",
+ "Epoch [4570/10000], Loss: 0.0663\n",
+ "Epoch [4580/10000], Loss: 0.0672\n",
+ "Epoch [4590/10000], Loss: 0.0727\n",
+ "Epoch [4600/10000], Loss: 0.0669\n",
+ "Epoch [4610/10000], Loss: 0.0651\n",
+ "Epoch [4620/10000], Loss: 0.0619\n",
+ "Epoch [4630/10000], Loss: 0.0664\n",
+ "Epoch [4640/10000], Loss: 0.0580\n",
+ "Epoch [4650/10000], Loss: 0.0690\n",
+ "Epoch [4660/10000], Loss: 0.0539\n",
+ "Epoch [4670/10000], Loss: 0.0584\n",
+ "Epoch [4680/10000], Loss: 0.0636\n",
+ "Epoch [4690/10000], Loss: 0.0631\n",
+ "Epoch [4700/10000], Loss: 0.0730\n",
+ "Epoch [4710/10000], Loss: 0.0631\n",
+ "Epoch [4720/10000], Loss: 0.0496\n",
+ "Epoch [4730/10000], Loss: 0.0663\n",
+ "Epoch [4740/10000], Loss: 0.0571\n",
+ "Epoch [4750/10000], Loss: 0.0634\n",
+ "Epoch [4760/10000], Loss: 0.0647\n",
+ "Epoch [4770/10000], Loss: 0.0679\n",
+ "Epoch [4780/10000], Loss: 0.0580\n",
+ "Epoch [4790/10000], Loss: 0.0614\n",
+ "Epoch [4800/10000], Loss: 0.0570\n",
+ "Epoch [4810/10000], Loss: 0.0679\n",
+ "Epoch [4820/10000], Loss: 0.0531\n",
+ "Epoch [4830/10000], Loss: 0.0569\n",
+ "Epoch [4840/10000], Loss: 0.0690\n",
+ "Epoch [4850/10000], Loss: 0.0675\n",
+ "Epoch [4860/10000], Loss: 0.0644\n",
+ "Epoch [4870/10000], Loss: 0.0585\n",
+ "Epoch [4880/10000], Loss: 0.0539\n",
+ "Epoch [4890/10000], Loss: 0.0619\n",
+ "Epoch [4900/10000], Loss: 0.0610\n",
+ "Epoch [4910/10000], Loss: 0.0623\n",
+ "Epoch [4920/10000], Loss: 0.0625\n",
+ "Epoch [4930/10000], Loss: 0.0591\n",
+ "Epoch [4940/10000], Loss: 0.0648\n",
+ "Epoch [4950/10000], Loss: 0.0549\n",
+ "Epoch [4960/10000], Loss: 0.0677\n",
+ "Epoch [4970/10000], Loss: 0.0737\n",
+ "Epoch [4980/10000], Loss: 0.0610\n",
+ "Epoch [4990/10000], Loss: 0.0603\n",
+ "Epoch [5000/10000], Loss: 0.0615\n",
+ "Epoch [5010/10000], Loss: 0.0562\n",
+ "Epoch [5020/10000], Loss: 0.0525\n",
+ "Epoch [5030/10000], Loss: 0.0663\n"
]
},
{
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Epoch [0/10000], Loss: 0.0025\n",
- "Epoch [10/10000], Loss: 6.4609\n",
- "Epoch [20/10000], Loss: 11.0729\n",
- "Epoch [30/10000], Loss: 10.3862\n",
- "Epoch [40/10000], Loss: 8.3659\n",
- "Epoch [50/10000], Loss: 8.4364\n",
- "Epoch [60/10000], Loss: 7.0110\n",
- "Epoch [70/10000], Loss: 6.2279\n",
- "Epoch [80/10000], Loss: 14.5876\n",
- "Epoch [90/10000], Loss: 13.5753\n",
- "Epoch [100/10000], Loss: 15.5835\n",
- "Epoch [110/10000], Loss: 14.3249\n",
- "Epoch [120/10000], Loss: 11.1069\n",
- "Epoch [130/10000], Loss: 11.6783\n",
- "Epoch [140/10000], Loss: 10.2477\n",
- "Epoch [150/10000], Loss: 10.8494\n",
- "Epoch [160/10000], Loss: 8.3007\n",
- "Epoch [170/10000], Loss: 6.8133\n",
- "Epoch [180/10000], Loss: 5.5992\n",
- "Epoch [190/10000], Loss: 6.9212\n",
- "Epoch [200/10000], Loss: 5.9311\n",
- "Epoch [210/10000], Loss: 6.0747\n",
- "Epoch [220/10000], Loss: 4.9251\n",
- "Epoch [230/10000], Loss: 3.9548\n",
- "Epoch [240/10000], Loss: 5.9888\n",
- "Epoch [250/10000], Loss: 4.9153\n",
- "Epoch [260/10000], Loss: 6.6282\n",
- "Epoch [270/10000], Loss: 4.7945\n",
- "Epoch [280/10000], Loss: 6.8866\n",
- "Epoch [290/10000], Loss: 5.7963\n",
- "Epoch [300/10000], Loss: 4.1406\n",
- "Epoch [310/10000], Loss: 5.8112\n",
- "Epoch [320/10000], Loss: 6.3739\n",
- "Epoch [330/10000], Loss: 4.7297\n",
- "Epoch [340/10000], Loss: 3.6125\n",
- "Epoch [350/10000], Loss: 4.7553\n",
- "Epoch [360/10000], Loss: 5.1536\n",
- "Epoch [370/10000], Loss: 3.3294\n",
- "Epoch [380/10000], Loss: 4.8955\n",
- "Epoch [390/10000], Loss: 5.0702\n",
- "Epoch [400/10000], Loss: 5.5217\n",
- "Epoch [410/10000], Loss: 4.0543\n",
- "Epoch [420/10000], Loss: 3.8583\n",
- "Epoch [430/10000], Loss: 4.4484\n",
- "Epoch [440/10000], Loss: 6.0914\n",
- "Epoch [450/10000], Loss: 5.3544\n",
- "Epoch [460/10000], Loss: 3.1850\n",
- "Epoch [470/10000], Loss: 4.5308\n",
- "Epoch [480/10000], Loss: 3.6213\n",
- "Epoch [490/10000], Loss: 3.3625\n",
- "Epoch [500/10000], Loss: 3.4060\n",
- "Epoch [510/10000], Loss: 3.2437\n",
- "Epoch [520/10000], Loss: 3.9425\n",
- "Epoch [530/10000], Loss: 3.4496\n",
- "Epoch [540/10000], Loss: 2.8899\n",
- "Epoch [550/10000], Loss: 2.5607\n",
- "Epoch [560/10000], Loss: 3.9549\n",
- "Epoch [570/10000], Loss: 4.4588\n",
- "Epoch [580/10000], Loss: 4.3738\n",
- "Epoch [590/10000], Loss: 3.3019\n",
- "Epoch [600/10000], Loss: 2.4798\n",
- "Epoch [610/10000], Loss: 6.1956\n",
- "Epoch [620/10000], Loss: 4.3365\n",
- "Epoch [630/10000], Loss: 4.9766\n",
- "Epoch [640/10000], Loss: 4.2719\n",
- "Epoch [650/10000], Loss: 5.0380\n",
- "Epoch [660/10000], Loss: 5.7970\n",
- "Epoch [670/10000], Loss: 5.8626\n",
- "Epoch [680/10000], Loss: 4.7593\n",
- "Epoch [690/10000], Loss: 5.7902\n",
- "Epoch [700/10000], Loss: 5.9829\n",
- "Epoch [710/10000], Loss: 6.7365\n",
- "Epoch [720/10000], Loss: 5.3005\n",
- "Epoch [730/10000], Loss: 5.8437\n",
- "Epoch [740/10000], Loss: 3.8711\n",
- "Epoch [750/10000], Loss: 5.0535\n",
- "Epoch [760/10000], Loss: 3.7943\n",
- "Epoch [770/10000], Loss: 4.5757\n",
- "Epoch [780/10000], Loss: 4.7215\n",
- "Epoch [790/10000], Loss: 4.4653\n",
- "Epoch [800/10000], Loss: 5.5769\n",
- "Epoch [810/10000], Loss: 5.0396\n",
- "Epoch [820/10000], Loss: 5.2878\n",
- "Epoch [830/10000], Loss: 5.4599\n",
- "Epoch [840/10000], Loss: 4.5172\n",
- "Epoch [850/10000], Loss: 4.8925\n",
- "Epoch [860/10000], Loss: 5.1588\n",
- "Epoch [870/10000], Loss: 5.8972\n",
- "Epoch [880/10000], Loss: 4.9056\n",
- "Epoch [890/10000], Loss: 4.8735\n",
- "Epoch [900/10000], Loss: 5.2677\n",
- "Epoch [910/10000], Loss: 4.3955\n",
- "Epoch [920/10000], Loss: 5.1297\n",
- "Epoch [930/10000], Loss: 4.2394\n",
- "Epoch [940/10000], Loss: 6.8890\n",
- "Epoch [950/10000], Loss: 5.1845\n",
- "Epoch [960/10000], Loss: 4.4620\n",
- "Epoch [970/10000], Loss: 5.1748\n",
- "Epoch [980/10000], Loss: 4.9878\n",
- "Epoch [990/10000], Loss: 3.9090\n",
- "Epoch [1000/10000], Loss: 3.6580\n",
- "Epoch [1010/10000], Loss: 3.5537\n",
- "Epoch [1020/10000], Loss: 4.5068\n",
- "Epoch [1030/10000], Loss: 3.2602\n",
- "Epoch [1040/10000], Loss: 3.7987\n",
- "Epoch [1050/10000], Loss: 3.3821\n",
- "Epoch [1060/10000], Loss: 3.9663\n",
- "Epoch [1070/10000], Loss: 3.8562\n",
- "Epoch [1080/10000], Loss: 3.7811\n",
- "Epoch [1090/10000], Loss: 4.0012\n",
- "Epoch [1100/10000], Loss: 4.2564\n",
- "Epoch [1110/10000], Loss: 3.2248\n",
- "Epoch [1120/10000], Loss: 3.7483\n",
- "Epoch [1130/10000], Loss: 3.0315\n",
- "Epoch [1140/10000], Loss: 3.3677\n",
- "Epoch [1150/10000], Loss: 3.5367\n",
- "Epoch [1160/10000], Loss: 2.7389\n",
- "Epoch [1170/10000], Loss: 3.0337\n",
- "Epoch [1180/10000], Loss: 2.2630\n",
- "Epoch [1190/10000], Loss: 1.8084\n",
- "Epoch [1200/10000], Loss: 3.3239\n",
- "Epoch [1210/10000], Loss: 4.1555\n",
- "Epoch [1220/10000], Loss: 2.8362\n",
- "Epoch [1230/10000], Loss: 3.1269\n",
- "Epoch [1240/10000], Loss: 2.2517\n",
- "Epoch [1250/10000], Loss: 2.9400\n",
- "Epoch [1260/10000], Loss: 2.5436\n",
- "Epoch [1270/10000], Loss: 2.6504\n",
- "Epoch [1280/10000], Loss: 2.9571\n",
- "Epoch [1290/10000], Loss: 2.4060\n",
- "Epoch [1300/10000], Loss: 2.6461\n",
- "Epoch [1310/10000], Loss: 2.4692\n",
- "Epoch [1320/10000], Loss: 2.0638\n",
- "Epoch [1330/10000], Loss: 3.0852\n",
- "Epoch [1340/10000], Loss: 2.3448\n",
- "Epoch [1350/10000], Loss: 2.6796\n",
- "Epoch [1360/10000], Loss: 2.0310\n",
- "Epoch [1370/10000], Loss: 1.8680\n",
- "Epoch [1380/10000], Loss: 2.1846\n",
- "Epoch [1390/10000], Loss: 2.3017\n",
- "Epoch [1400/10000], Loss: 1.6519\n",
- "Epoch [1410/10000], Loss: 1.6228\n",
- "Epoch [1420/10000], Loss: 1.4328\n",
- "Epoch [1430/10000], Loss: 1.5642\n",
- "Epoch [1440/10000], Loss: 1.8962\n",
- "Epoch [1450/10000], Loss: 1.4433\n",
- "Epoch [1460/10000], Loss: 2.1973\n",
- "Epoch [1470/10000], Loss: 1.8118\n",
- "Epoch [1480/10000], Loss: 1.7155\n",
- "Epoch [1490/10000], Loss: 2.7671\n",
- "Epoch [1500/10000], Loss: 2.4518\n",
- "Epoch [1510/10000], Loss: 1.0202\n",
- "Epoch [1520/10000], Loss: 2.2548\n",
- "Epoch [1530/10000], Loss: 1.4305\n",
- "Epoch [1540/10000], Loss: 2.1796\n",
- "Epoch [1550/10000], Loss: 1.7766\n",
- "Epoch [1560/10000], Loss: 2.0751\n",
- "Epoch [1570/10000], Loss: 1.6544\n",
- "Epoch [1580/10000], Loss: 2.8767\n",
- "Epoch [1590/10000], Loss: 2.2069\n",
- "Epoch [1600/10000], Loss: 1.5974\n",
- "Epoch [1610/10000], Loss: 2.0101\n",
- "Epoch [1620/10000], Loss: 1.9445\n",
- "Epoch [1630/10000], Loss: 2.3080\n",
- "Epoch [1640/10000], Loss: 1.2395\n",
- "Epoch [1650/10000], Loss: 1.2486\n",
- "Epoch [1660/10000], Loss: 1.3250\n",
- "Epoch [1670/10000], Loss: 1.1839\n",
- "Epoch [1680/10000], Loss: 2.0569\n",
- "Epoch [1690/10000], Loss: 2.3591\n",
- "Epoch [1700/10000], Loss: 1.4618\n",
- "Epoch [1710/10000], Loss: 1.3663\n",
- "Epoch [1720/10000], Loss: 0.7300\n",
- "Epoch [1730/10000], Loss: 2.6778\n",
- "Epoch [1740/10000], Loss: 2.2931\n",
- "Epoch [1750/10000], Loss: 1.4289\n",
- "Epoch [1760/10000], Loss: 1.1453\n",
- "Epoch [1770/10000], Loss: 1.0400\n",
- "Epoch [1780/10000], Loss: 1.3603\n",
- "Epoch [1790/10000], Loss: 1.5058\n",
- "Epoch [1800/10000], Loss: 1.2890\n",
- "Epoch [1810/10000], Loss: 1.1259\n",
- "Epoch [1820/10000], Loss: 1.3006\n",
- "Epoch [1830/10000], Loss: 1.4118\n",
- "Epoch [1840/10000], Loss: 1.6406\n",
- "Epoch [1850/10000], Loss: 1.3513\n",
- "Epoch [1860/10000], Loss: 1.2380\n",
- "Epoch [1870/10000], Loss: 1.4618\n",
- "Epoch [1880/10000], Loss: 2.8634\n",
- "Epoch [1890/10000], Loss: 2.4145\n",
- "Epoch [1900/10000], Loss: 2.1412\n",
- "Epoch [1910/10000], Loss: 2.7974\n",
- "Epoch [1920/10000], Loss: 2.3607\n",
- "Epoch [1930/10000], Loss: 2.1780\n",
- "Epoch [1940/10000], Loss: 2.1544\n",
- "Epoch [1950/10000], Loss: 1.1798\n",
- "Epoch [1960/10000], Loss: 2.0259\n",
- "Epoch [1970/10000], Loss: 8.5005\n",
- "Epoch [1980/10000], Loss: 7.2836\n",
- "Epoch [1990/10000], Loss: 5.1658\n",
- "Epoch [2000/10000], Loss: 4.4845\n",
- "Epoch [2010/10000], Loss: 3.2873\n",
- "Epoch [2020/10000], Loss: 3.9213\n",
- "Epoch [2030/10000], Loss: 3.4896\n",
- "Epoch [2040/10000], Loss: 4.8792\n",
- "Epoch [2050/10000], Loss: 3.8883\n",
- "Epoch [2060/10000], Loss: 4.8546\n",
- "Epoch [2070/10000], Loss: 3.5432\n",
- "Epoch [2080/10000], Loss: 4.3267\n",
- "Epoch [2090/10000], Loss: 3.4671\n",
- "Epoch [2100/10000], Loss: 5.4011\n",
- "Epoch [2110/10000], Loss: 5.8443\n",
- "Epoch [2120/10000], Loss: 2.8416\n",
- "Epoch [2130/10000], Loss: 5.1449\n",
- "Epoch [2140/10000], Loss: 5.6858\n",
- "Epoch [2150/10000], Loss: 5.1926\n",
- "Epoch [2160/10000], Loss: 4.5664\n",
- "Epoch [2170/10000], Loss: 4.3358\n",
- "Epoch [2180/10000], Loss: 4.5456\n",
- "Epoch [2190/10000], Loss: 3.5273\n",
- "Epoch [2200/10000], Loss: 6.8660\n",
- "Epoch [2210/10000], Loss: 3.4792\n",
- "Epoch [2220/10000], Loss: 3.4052\n",
- "Epoch [2230/10000], Loss: 2.8651\n",
- "Epoch [2240/10000], Loss: 2.1104\n",
- "Epoch [2250/10000], Loss: 2.1549\n",
- "Epoch [2260/10000], Loss: 1.8513\n",
- "Epoch [2270/10000], Loss: 2.8559\n",
- "Epoch [2280/10000], Loss: 1.3817\n",
- "Epoch [2290/10000], Loss: 1.4976\n",
- "Epoch [2300/10000], Loss: 1.7325\n",
- "Epoch [2310/10000], Loss: 1.5967\n",
- "Epoch [2320/10000], Loss: 0.8749\n",
- "Epoch [2330/10000], Loss: 1.5636\n",
- "Epoch [2340/10000], Loss: 1.5302\n",
- "Epoch [2350/10000], Loss: 0.7900\n",
- "Epoch [2360/10000], Loss: 1.0777\n",
- "Epoch [2370/10000], Loss: 0.6089\n",
- "Epoch [2380/10000], Loss: 1.2180\n",
- "Epoch [2390/10000], Loss: 1.3731\n",
- "Epoch [2400/10000], Loss: 1.1782\n",
- "Epoch [2410/10000], Loss: 0.9826\n",
- "Epoch [2420/10000], Loss: 1.8233\n",
- "Epoch [2430/10000], Loss: 0.8246\n",
- "Epoch [2440/10000], Loss: 0.7204\n",
- "Epoch [2450/10000], Loss: 1.2327\n",
- "Epoch [2460/10000], Loss: 1.2843\n",
- "Epoch [2470/10000], Loss: 1.1326\n",
- "Epoch [2480/10000], Loss: 1.1369\n",
- "Epoch [2490/10000], Loss: 1.0106\n",
- "Epoch [2500/10000], Loss: 1.4563\n",
- "Epoch [2510/10000], Loss: 1.0163\n",
- "Epoch [2520/10000], Loss: 0.3823\n",
- "Epoch [2530/10000], Loss: 0.8872\n",
- "Epoch [2540/10000], Loss: 0.4118\n",
- "Epoch [2550/10000], Loss: 0.4925\n",
- "Epoch [2560/10000], Loss: 0.1141\n",
- "Epoch [2570/10000], Loss: 0.5785\n",
- "Epoch [2580/10000], Loss: 0.5831\n",
- "Epoch [2590/10000], Loss: 0.0845\n",
- "Epoch [2600/10000], Loss: 0.5621\n",
- "Epoch [2610/10000], Loss: 1.0745\n",
- "Epoch [2620/10000], Loss: 0.2378\n",
- "Epoch [2630/10000], Loss: 0.6215\n",
- "Epoch [2640/10000], Loss: 0.7897\n",
- "Epoch [2650/10000], Loss: 0.9359\n",
- "Epoch [2660/10000], Loss: 0.5567\n",
- "Epoch [2670/10000], Loss: 4.0690\n",
- "Epoch [2680/10000], Loss: 3.3254\n",
- "Epoch [2690/10000], Loss: 3.3888\n",
- "Epoch [2700/10000], Loss: 3.7329\n",
- "Epoch [2710/10000], Loss: 2.9879\n",
- "Epoch [2720/10000], Loss: 2.6283\n",
- "Epoch [2730/10000], Loss: 2.4366\n",
- "Epoch [2740/10000], Loss: 2.8078\n",
- "Epoch [2750/10000], Loss: 1.2757\n",
- "Epoch [2760/10000], Loss: 1.0685\n",
- "Epoch [2770/10000], Loss: 2.2750\n",
- "Epoch [2780/10000], Loss: 1.9740\n",
- "Epoch [2790/10000], Loss: 1.4824\n",
- "Epoch [2800/10000], Loss: 1.1974\n",
- "Epoch [2810/10000], Loss: 1.6074\n",
- "Epoch [2820/10000], Loss: 1.2541\n",
- "Epoch [2830/10000], Loss: 1.7665\n",
- "Epoch [2840/10000], Loss: 1.9748\n",
- "Epoch [2850/10000], Loss: 1.9842\n",
- "Epoch [2860/10000], Loss: 2.5544\n",
- "Epoch [2870/10000], Loss: 1.6564\n",
- "Epoch [2880/10000], Loss: 1.0362\n",
- "Epoch [2890/10000], Loss: 1.3166\n",
- "Epoch [2900/10000], Loss: 2.4819\n",
- "Epoch [2910/10000], Loss: 1.1353\n",
- "Epoch [2920/10000], Loss: 1.6106\n",
- "Epoch [2930/10000], Loss: 2.1840\n",
- "Epoch [2940/10000], Loss: 1.4362\n",
- "Epoch [2950/10000], Loss: 0.9568\n",
- "Epoch [2960/10000], Loss: 1.8224\n",
- "Epoch [2970/10000], Loss: 1.2919\n",
- "Epoch [2980/10000], Loss: 1.1351\n",
- "Epoch [2990/10000], Loss: 0.7588\n",
- "Epoch [3000/10000], Loss: 1.2207\n",
- "Epoch [3010/10000], Loss: 1.3446\n",
- "Epoch [3020/10000], Loss: 1.1581\n",
- "Epoch [3030/10000], Loss: 1.0448\n",
- "Epoch [3040/10000], Loss: 2.0898\n",
- "Epoch [3050/10000], Loss: 1.1978\n",
- "Epoch [3060/10000], Loss: 1.2886\n",
- "Epoch [3070/10000], Loss: 1.0066\n",
- "Epoch [3080/10000], Loss: 1.5037\n",
- "Epoch [3090/10000], Loss: 0.6185\n",
- "Epoch [3100/10000], Loss: 0.9835\n",
- "Epoch [3110/10000], Loss: 0.6671\n",
- "Epoch [3120/10000], Loss: 0.6967\n",
- "Epoch [3130/10000], Loss: 1.0013\n",
- "Epoch [3140/10000], Loss: 1.4123\n",
- "Epoch [3150/10000], Loss: 1.8096\n",
- "Epoch [3160/10000], Loss: 1.1270\n",
- "Epoch [3170/10000], Loss: 1.9781\n",
- "Epoch [3180/10000], Loss: 1.0191\n",
- "Epoch [3190/10000], Loss: 2.4403\n",
- "Epoch [3200/10000], Loss: 0.8882\n",
- "Epoch [3210/10000], Loss: 1.0005\n",
- "Epoch [3220/10000], Loss: 0.5002\n",
- "Epoch [3230/10000], Loss: 1.2351\n",
- "Epoch [3240/10000], Loss: 0.8264\n",
- "Epoch [3250/10000], Loss: 0.7881\n",
- "Epoch [3260/10000], Loss: 1.4120\n",
- "Epoch [3270/10000], Loss: 0.3342\n",
- "Epoch [3280/10000], Loss: 1.3266\n",
- "Epoch [3290/10000], Loss: 1.7115\n",
- "Epoch [3300/10000], Loss: 1.0647\n",
- "Epoch [3310/10000], Loss: 0.4623\n",
- "Epoch [3320/10000], Loss: 1.2075\n",
- "Epoch [3330/10000], Loss: 0.4555\n",
- "Epoch [3340/10000], Loss: 0.8706\n",
- "Epoch [3350/10000], Loss: 0.9383\n",
- "Epoch [3360/10000], Loss: 0.7436\n",
- "Epoch [3370/10000], Loss: 0.8466\n",
- "Epoch [3380/10000], Loss: 0.8379\n",
- "Epoch [3390/10000], Loss: 0.6832\n",
- "Epoch [3400/10000], Loss: 1.0414\n",
- "Epoch [3410/10000], Loss: 0.5256\n",
- "Epoch [3420/10000], Loss: 1.2059\n",
- "Epoch [3430/10000], Loss: 0.7949\n",
- "Epoch [3440/10000], Loss: 0.5962\n",
- "Epoch [3450/10000], Loss: 0.8650\n",
- "Epoch [3460/10000], Loss: 0.8154\n",
- "Epoch [3470/10000], Loss: 0.4271\n",
- "Epoch [3480/10000], Loss: 0.5725\n",
- "Epoch [3490/10000], Loss: 1.0792\n",
- "Epoch [3500/10000], Loss: 0.5633\n",
- "Epoch [3510/10000], Loss: 0.2986\n",
- "Epoch [3520/10000], Loss: 0.3941\n",
- "Epoch [3530/10000], Loss: 1.0033\n",
- "Epoch [3540/10000], Loss: 0.1960\n",
- "Epoch [3550/10000], Loss: 0.9863\n",
- "Epoch [3560/10000], Loss: 0.4395\n",
- "Epoch [3570/10000], Loss: 0.9612\n",
- "Epoch [3580/10000], Loss: 2.4734\n",
- "Epoch [3590/10000], Loss: 5.5539\n",
- "Epoch [3600/10000], Loss: 3.7807\n",
- "Epoch [3610/10000], Loss: 4.0435\n",
- "Epoch [3620/10000], Loss: 4.1143\n",
- "Epoch [3630/10000], Loss: 3.3714\n",
- "Epoch [3640/10000], Loss: 3.3396\n",
- "Epoch [3650/10000], Loss: 4.2713\n",
- "Epoch [3660/10000], Loss: 2.2012\n",
- "Epoch [3670/10000], Loss: 1.7168\n",
- "Epoch [3680/10000], Loss: 2.2133\n",
- "Epoch [3690/10000], Loss: 2.7070\n",
- "Epoch [3700/10000], Loss: 3.3160\n",
- "Epoch [3710/10000], Loss: 3.6073\n",
- "Epoch [3720/10000], Loss: 2.2879\n",
- "Epoch [3730/10000], Loss: 2.8893\n",
- "Epoch [3740/10000], Loss: 2.7971\n",
- "Epoch [3750/10000], Loss: 1.7426\n",
- "Epoch [3760/10000], Loss: 2.7662\n",
- "Epoch [3770/10000], Loss: 2.1203\n",
- "Epoch [3780/10000], Loss: 3.8798\n",
- "Epoch [3790/10000], Loss: 2.6662\n",
- "Epoch [3800/10000], Loss: 1.8491\n",
- "Epoch [3810/10000], Loss: 1.5527\n",
- "Epoch [3820/10000], Loss: 4.1708\n",
- "Epoch [3830/10000], Loss: 1.6162\n",
- "Epoch [3840/10000], Loss: 2.6064\n",
- "Epoch [3850/10000], Loss: 1.9516\n",
- "Epoch [3860/10000], Loss: 2.1771\n",
- "Epoch [3870/10000], Loss: 2.3933\n",
- "Epoch [3880/10000], Loss: 1.8314\n",
- "Epoch [3890/10000], Loss: 3.2097\n",
- "Epoch [3900/10000], Loss: 1.8215\n",
- "Epoch [3910/10000], Loss: 2.1805\n",
- "Epoch [3920/10000], Loss: 1.6260\n",
- "Epoch [3930/10000], Loss: 1.5388\n",
- "Epoch [3940/10000], Loss: 1.4422\n",
- "Epoch [3950/10000], Loss: 1.2274\n",
- "Epoch [3960/10000], Loss: 2.1992\n",
- "Epoch [3970/10000], Loss: 1.3654\n",
- "Epoch [3980/10000], Loss: 1.5024\n",
- "Epoch [3990/10000], Loss: 1.9630\n",
- "Epoch [4000/10000], Loss: 1.7742\n",
- "Epoch [4010/10000], Loss: 1.9968\n",
- "Epoch [4020/10000], Loss: 2.2213\n",
- "Epoch [4030/10000], Loss: 2.1302\n",
- "Epoch [4040/10000], Loss: 2.3094\n",
- "Epoch [4050/10000], Loss: 2.3253\n",
- "Epoch [4060/10000], Loss: 2.2924\n",
- "Epoch [4070/10000], Loss: 0.9917\n",
- "Epoch [4080/10000], Loss: 1.8697\n",
- "Epoch [4090/10000], Loss: 1.4888\n",
- "Epoch [4100/10000], Loss: 0.6206\n",
- "Epoch [4110/10000], Loss: 0.9877\n",
- "Epoch [4120/10000], Loss: 1.2839\n",
- "Epoch [4130/10000], Loss: 0.4944\n",
- "Epoch [4140/10000], Loss: 0.6533\n",
- "Epoch [4150/10000], Loss: 0.4354\n",
- "Epoch [4160/10000], Loss: 0.4216\n"
+ "ename": "KeyboardInterrupt",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
+ "Cell \u001b[0;32mIn[47], line 7\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m epoch \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(num_epochs):\n\u001b[1;32m 6\u001b[0m model\u001b[38;5;241m.\u001b[39mtrain()\n\u001b[0;32m----> 7\u001b[0m data, labels \u001b[38;5;241m=\u001b[39m \u001b[43mmkbatch\u001b[49m\u001b[43m(\u001b[49m\u001b[43mbatch_size\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 8\u001b[0m outputs \u001b[38;5;241m=\u001b[39m model(data)\n\u001b[1;32m 9\u001b[0m loss \u001b[38;5;241m=\u001b[39m loss_fn(outputs, labels)\n",
+ "Cell \u001b[0;32mIn[45], line 78\u001b[0m, in \u001b[0;36mmkbatch\u001b[0;34m(size)\u001b[0m\n\u001b[1;32m 75\u001b[0m distances \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m 77\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m _ \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(size):\n\u001b[0;32m---> 78\u001b[0m data, adj_list \u001b[38;5;241m=\u001b[39m \u001b[43mrandom_graph\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdevice\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 79\u001b[0m dist \u001b[38;5;241m=\u001b[39m SSSP(adj_list)\n\u001b[1;32m 80\u001b[0m graphs\u001b[38;5;241m.\u001b[39mappend(data)\n",
+ "Cell \u001b[0;32mIn[45], line 48\u001b[0m, in \u001b[0;36mrandom_graph\u001b[0;34m(device)\u001b[0m\n\u001b[1;32m 46\u001b[0m data[v, NVTXS \u001b[38;5;241m+\u001b[39m u] \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n\u001b[1;32m 47\u001b[0m data[u, NVTXS \u001b[38;5;241m+\u001b[39m v] \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n\u001b[0;32m---> 48\u001b[0m \u001b[43madj_list\u001b[49m\u001b[43m[\u001b[49m\u001b[43mu\u001b[49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43madd\u001b[49m\u001b[43m(\u001b[49m\u001b[43mv\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 49\u001b[0m adj_list[v]\u001b[38;5;241m.\u001b[39madd(u)\n\u001b[1;32m 51\u001b[0m \u001b[38;5;66;03m# Set flags\u001b[39;00m\n",
+ "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
]
}
],
"source": [
- "# destroy_rand_weights(model)\n",
+ "destroy_rand_weights(model)\n",
"num_epochs = 10000\n",
"batch_size = 1<<9\n",
"train_err = []\n",
@@ -659,21 +745,20 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": 48,
"execution_state": "idle",
"id": "dcbdebf6-5c9f-4491-a442-9271d2ba5696",
"metadata": {},
"outputs": [
{
- "ename": "NameError",
- "evalue": "name 'plt' is not defined",
- "output_type": "error",
- "traceback": [
- "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
- "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
- "Cell \u001b[0;32mIn[3], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mplt\u001b[49m\u001b[38;5;241m.\u001b[39msuptitle(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mMSE vs Epochs\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 2\u001b[0m plt\u001b[38;5;241m.\u001b[39mplot(train_err, label\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mTrain\u001b[39m\u001b[38;5;124m'\u001b[39m, color\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mblue\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 3\u001b[0m plt\u001b[38;5;241m.\u001b[39mxlabel(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mEpochs\u001b[39m\u001b[38;5;124m'\u001b[39m)\n",
- "\u001b[0;31mNameError\u001b[0m: name 'plt' is not defined"
- ]
+ "data": {
+ "image/png": "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iuVv3rw5jh8/juTkZM2nT58+eO6555CcnFxiq82VK1dw8+ZN+Pj4GPV+iIiIyDIo/gosJiYGUVFRaN++PTp27Ih58+YhJycH0dHRAIBhw4ahbt26iI+Ph6OjI1q3bq1zfs2aNQFAk56dnY0ZM2ZgwIAB8Pb2xvnz5zFlyhQ0btwYYWFhCtwhERERmRvFA6DIyEjcuHED06ZNQ0pKCgIDA5GQkKDpGH3p0qXHjuUvzNbWFseOHcPKlStx584d+Pr6okePHpg5cyZfcxERERFgDvMAmaPMzEy4ubkhIyODo8CIiIgsRHl+v81iKQwiIiIiU2IARERERFaHARARERFZHQZAREREZHUYABEREZHVYQBEREREVocBkInduwdw4gEiIiJlMQAyoRs3gOrVAT3LkREREZEJMQAyoW++kd+7dildEyIiIuvGAIiIiIisDgMgIiIisjoMgIiIiMjqMAAiIiIiq8MAiIiIiKwOAyAiIiKyOgyATIgTIBIREZkHBkBERERkdRgAERERkdVhAERERERWhwEQERERWR0GQERERGR1GAARERGR1WEAZEIcBk9ERGQeGAARERGR1WEARERERFaHARARERFZHQZAREREZHUYABEREZHVYQBEREREVocBkEL++kvpGhAREVkvBkAKadQIuH1b6VoQERFZJwZACmrcWOkaEBERWScGQCZ0967u/q1bStWEiIjIuplFALRo0SL4+/vD0dERwcHBOHDgQJnOW79+PVQqFfr166eTLoTAtGnT4OPjAycnJ4SGhuLs2bNGqn3ZzZundA2IiIgI5hAAbdiwATExMYiLi8ORI0fQrl07hIWFIS0trdTzLl68iEmTJqFz587Fjs2ZMwfz58/HkiVLsH//ftSoUQNhYWG4f/++Ee/k8WwUf9pEREQEcwiA5s6di9deew3R0dFo2bIllixZgurVq2PZsmUlnpOfn48hQ4ZgxowZCAgI0DkmhMC8efPwzjvvoG/fvmjbti1WrVqFa9euYcuWLSa4o5KpVIpenoiIiB5RNADKy8vD4cOHERoaqq2QjQ1CQ0ORlJRU4nn//ve/4enpiREjRhQ7duHCBaSkpOiU6ebmhuDg4BLLzM3NRWZmps7HGNgCREREZB4U/UlOT09Hfn4+vLy8dNK9vLyQkpKi95zffvsNX375JZYuXar3eMF55SkzPj4ebm5u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3dJc/+TJk9ixYwdOnTqFxYsXw8PDw8RPgYgqxChrzBMRVVJUVJSwtbUVNWrU0Pm8//77QgghAIhRo0bpnBMcHCxGjx4thBDi888/F+7u7iI7O1tz/Pvvvxc2NjYiJSVFCCGEr6+vePvtt0usAwDxzjvvaPazs7MFALFjxw4hhBC9e/cW0dHRBr5zIjIF9gEiIrP13HPPYfHixTpptWrV0myHhIToHAsJCUFycjIA4NSpU2jXrh1q1KihOf70009DrVbjzJkzUKlUuHbtGrp161ZqHdq2bavZrlGjBlxdXZGWlgYAGD16NAYMGIAjR46gR48e6NevH5566qlK3jURmQIDICIyWzVq1Cj2SspQnJycypSvWrVqOvsqlQpqtRoAEBERgb///hvbt2/Hzp070a1bN4wdOxYffvihUepMRIbDPkBEZLH27dtXbL9FixYAgBYtWuD3339HTk6O5vjevXthY2ODZs2awcXFBf7+/khMTKxUHerUqYOoqCisWbMG8+bNw+eff16p8ojINNgCRERmKzc3FykpKTppdnZ2mo7GGzduRPv27fHMM8/gq6++woEDB/Dll18CAIYMGYK4uDhERUVh+vTpuHHjBsaPH4+hQ4fCy8sLADB9+nSMGjUKnp6eiIiIQFZWFvbu3Yvx48eXqX7Tpk1DUFAQWrVqhdzcXGzbtk0TgBGReWMARERmKyEhAT4+PjppzZo1w+nTp4FHI7TWr1+PMWPGwMfHB+vWrUPLli0BANWrV8cPP/yAN954Ax06dED16tUxYMAAzJ07V1NWVFQU7t+/j48//hiTJk2Ch4cHBg4cWOb62dvbIzY2FhcvXoSTkxM6d+6M9evXG+z+ich4VEKOdCAisigqlQqbN29Gv379lK4KEVkg9gEiIiIiq8MAiIiIiKwO+wARkUXi23siqgy2ABEREZHVYQBEREREVocBEBEREVkdBkBERERkdRgAERERkdVhAERERERWhwEQERERWR0GQERERGR1/h+D2qqc9L0DcQAAAABJRU5ErkJggg==",
+ "text/plain": [
+ "<Figure size 640x480 with 1 Axes>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
}
],
"source": [
@@ -686,14 +771,14 @@
},
{
"cell_type": "code",
- "execution_count": 12,
+ "execution_count": 52,
"execution_state": "idle",
"id": "30893731-9991-4df9-b6c6-380010569ee1",
"metadata": {},
"outputs": [
{
"data": {
- "image/png": "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JKN169b24yQZXl5exo4dOxze3717dyMsLMz4448/HMY7depkWK1W+zWYOHGiIcn4/PPP7cecPXvWqFSpkiHJWLFihX38318vy5cvNyQZffr0yRH/P693QECAw/eVmTH+25kzZwxJRps2bS57jGEYxoMPPmhIMtLS0nI912zZ34f/dLnzy+v37IEDBwxJxowZM3LM8e+fVa+99prD1+TVNGrUyKhXr16O8RUrVhiSrrgFBATYj3fmaz+v319XOhdJhq+vr8O+d99915BkhIaG2v87GYZhDB06NMc8ucUQHx9vWCwW49ChQ/axLl26GJKMZ5991j5ms9mMVq1aGT4+PsbJkycd5lizZo0hyfjss89yzA8gdyzjgal8fX1zXV6SV1988YXuvvtulSpVSn/88Yd9i4mJUVZWllauXFngGP39/e3/Pn/+vP744w/7cpVNmzblOD67ypXt2WeflSR7S7h58+bJZrOpY8eODjGHhoaqcuXKWrFixWVjCQoK0tmzZ5WQkODUOdx3330qU6aMPvvsM/vY6dOnlZCQoIcffthh/t9//10bNmxwav6QkBD98ssvevrpp3X69GlNmzZNjz76qMqVK6eXX37Z/if1zZs368CBA+rXr1+Ov178s1rv7DXPlpCQoDNnzuiRRx5xuLbFihVTw4YN7df2+PHj2rJli7p06SKr1Wp///3336/q1avn+bx3796tsmXLqmzZsqpWrZomT56sVq1a5Vjmcs899zjMaxiG5s6dq9atW8swDIdYY2NjlZqaaj/P7777TmFhYerQoYP9/SVKlLBXqa9k7ty5slgsGjFiRI59V/rryLWM8c8//5QklSxZ8orHZe9PS0u76pzOutr3rJlOnTqlUqVKXXb/8OHDlZCQkGNr1qyZw3F5/dpXAb6//q1p06YOS6kaNmwoSWrfvr3Df8/s8d9++y3XGM6ePas//vhDd955pwzD0ObNm3N8Vu/eve3/zv5L04ULF7R06VKH47KvpStbIAOejmU8MNWNN95YoJs39+3bp61bt172z+QnTpwoQHR/S0lJ0ahRo/Tpp5/mmC81NTXH8ZUrV3Z4XbFiRXl5ednXrO7bt0+GYeQ4LtuVbrJ85pln9Pnnn6tFixa68cYb1axZM3Xs2FHNmze/4jl4e3urffv2mjNnjjIyMuTr66t58+YpMzPTIdkfPHiwli5dqttvv12VKlVSs2bN9Oijj+quu+664vySFBYWpqlTp+qdd97Rvn37tGTJEo0bN07Dhw9XWFiYnnzySf3666+SdNU/rzt7zbPt27dPuvTLTW4CAwMlSYcOHZJy+W8lSVWqVMlzwlOhQgW99957slgs8vPzU+XKlVWuXLkcx0VFRTm8PnnypM6cOaPp06dr+vTpuc6dfd6HDh1SpUqVciTnVapUuWp8v/76q8LDwxUcHJyn83FHjNlJYXbSfzl5/aUgP672PWu2K60vr1WrVq7r+T/++GOH13n92lcBvr/+LTIy0uF19i/OERERuY6fPn3aPnb48GENHz5cX3/9tcN4bjF4eXnluDH7lltukS7dT/FP2dfyar/MAvh/JPsw1T+rO3mRlZXl8Npms+n+++/XoEGDcj0++38IBdGxY0etWbNGAwcOVJ06dXTDDTfIZrOpefPmeboJ+N//07HZbLJYLFq0aJGKFSuW4/grtagsV66ctmzZoiVLlmjRokVatGiRZsyYoccff1wffvjhFePo1KmT3n33XS1atEht27bV559/rqpVq6p27dr2Y6pVq6Y9e/bom2++0eLFizV37ly98847Gj58uEaNGnXVc80+31tuuUW33HKLWrVqpcqVK2v27Nl68skn8/R+FeCaZ+/76KOPFBoammO/t7drf6QFBATk6cbKf3+dZ8f52GOPXfYeh1tvvdVFUebPtYrRarUqLCxMW7duveJxW7du1Y033mhPWi+XzP37Z0R+/HtuMz+rdOnSOZLd/HDma7+gP9Oy5fbz60rj2Yl4VlaW7r//fqWkpGjw4MGqWrWqAgICdPToUXXt2rVAzRWyr2X2PQYAro5kH25RqlSpHA9yuXDhgo4fP+4wVrFiRaWnp7usk8W/nT59WsuWLdOoUaM0fPhw+3h2FS03+/btc6jk7t+/Xzabzf7n7ooVK8owDEVFReXrlxEfHx+1bt1arVu3ls1m0zPPPKN3331Xw4YNu2Kf7saNGyssLEyfffaZGjVqpOXLl+vFF1/McVxAQIAefvhhPfzww7pw4YLatWunV155RUOHDnW6XeTNN9+sUqVK2f+7Zd8YuX379sv+N8vPNc+WPX+5cuWu+DWRfTNkbnPu2bPnqp9TUGXLllXJkiWVlZV11a/d8uXLa/v27TIMwyHpzEucFStW1JIlS5SSknLF6n5uyey1ilGSHnjgAb333ntavXq1GjVqlGP/qlWrdPDgQT311FP2sdx+Rugff7W52vn909W+Z7OXhvz78/LzWf9WtWpVzZ0716n35CavX/vOfH+ZVR3ftm2b9u7dqw8//FCPP/64ffxyyxNtNpt+++03h5+Xe/fulS79de2fDhw4IPEMF8AprNmHW1SsWDHHevvp06fnqKR17NhRa9eu1ZIlS3LMcebMGV28eLFAcWRXqP79Z/YrdfmZMmWKw+vJkydLklq0aCFd6thRrFgxjRo1Kse8hmFcsb3kv/d5eXnZq6tXa3Po5eWlDh06aOHChfroo4908eJFhyU8uc3v4+Oj6tWryzAMZWZmXnbu9evX6+zZsznGf/75Z506dcq+nOO2225TVFSUJk6cmCNxyr4W+bnm2WJjYxUYGKixY8fmGm92O8ywsDDVqVNHH374ocOSgYSEBO3cufOqn1NQxYoVU/v27TV37lxt3779snFKUsuWLXXs2DGHJ6lmt6m8mvbt28swjFz/KvPP6xsQEJDjv8e1ilGSBg4cKH9/fz311FM5vgZTUlL09NNPq0SJEvZWkLr0MyI1NdXhLwLHjx/PtX1qbuf3T1f7ng0MDFSZMmVy/Ex65513cv0s5fKLweVER0fr9OnTDuvZ8yOvX/vOfH85ey55lVsMhmFcsYXw22+/7XDs22+/reLFi6tp06YOxyUmJspqtapGjRoujRnwZFT24RZPPvmknn76abVv317333+/fvnlFy1ZsiTHn2YHDhyor7/+Wg888IC6du2qevXq6ezZs9q2bZu+/PJLHTx48Kp/zj158qTGjBmTYzwqKkpxcXFq3Lixxo8fr8zMTN144436/vvv7dWj3Bw4cEAPPvigmjdvrrVr1+rjjz/Wo48+al8uU7FiRY0ZM0ZDhw7VwYMH1bZtW5UsWVIHDhzQ/Pnz1bNnT4e+9/++LikpKbrvvvt000036dChQ5o8ebLq1KmTp0rWww8/rMmTJ2vEiBGqVatWjvc0a9ZMoaGhuuuuuxQSEqJdu3bp7bffVqtWra64Vvqjjz7S7Nmz9dBDD6levXry8fHRrl279MEHH8jPz8/+/AQvLy9NnTpVrVu3Vp06ddStWzeFhYVp9+7d2rFjh5YsWaLAwECnr3m2wMBATZ06VZ07d9Ztt92mTp06qWzZsjp8+LC+/fZb3XXXXfakIT4+Xq1atVKjRo30xBNPKCUlxf6MgfT09Kt+VkG9+uqrWrFihRo2bKgePXqoevXqSklJ0aZNm7R06VKlpKRIknr06KG3335bjz/+uBITExUWFqaPPvooTw+fu/fee9W5c2dNmjRJ+/btsy/TWLVqle699177TY/16tXT0qVLNWHCBIWHhysqKkoNGza8JjHq0pr5Dz/8UHFxcapVq1aOJ+j+8ccf+uSTTxxaZnbq1EmDBw/WQw89pD59+tjbTN5yyy057rm43Pllu9r3rC5977366qt68sknVb9+fa1cudJeXf73Z0nSiy++qE6dOql48eJq3bq1PXH+t1atWsnb21tLly7N0w3Nl5PXr31nvr+cPZe8qlq1qipWrKjnn39eR48eVWBgoObOnXvZ5Ux+fn5avHixunTpooYNG2rRokX69ttv9cILL+S4XyshIUGtW7dmzT7gDHe3A4JnuFzrzcu1eczKyjIGDx5slClTxihRooQRGxtr7N+/P0frTeNSy7mhQ4calSpVMnx8fIwyZcoYd955p/H6668bFy5cuGJc2e0/c9uaNm1qGIZh/P7778ZDDz1kBAUFGVar1fjPf/5jHDt2LEfLvew2fjt37jQ6dOhglCxZ0ihVqpTRu3dv46+//srx2XPnzjUaNWpkBAQEGAEBAUbVqlWNXr16GXv27LEf8+/2gl9++aXRrFkzo1y5coaPj48RGRlpPPXUU8bx48ev+t/AuNSyLiIiwpBkjBkzJsf+d99912jcuLFRunRpw9fX16hYsaIxcOBAIzU19Yrzbt261Rg4cKBx2223GcHBwYa3t7cRFhZm/Oc//zE2bdqU4/jVq1cb999/v1GyZEkjICDAuPXWW43Jkyfb9+f1mv+79Wa2FStWGLGxsYbVajX8/PyMihUrGl27djU2btzocNzcuXONatWqGb6+vkb16tWNefPmXbal47/lpW2rcalFYa9evXLdl5ycbPTq1cuIiIgwihcvboSGhhpNmzY1pk+f7nDcoUOHjAcffNAoUaKEUaZMGaNv377G4sWLr9p607jU7vS1114zqlatavj4+Bhly5Y1WrRoYSQmJtqP2b17t9G4cWPD39/fkOTwPebqGK9k69atxiOPPGKEhYXZP+uRRx4xtm3bluvx33//vVGzZk3Dx8fHqFKlivHxxx/n2nrzcufnzPfsuXPnjO7duxtW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zyO/nE7269Spo7feekvHjh3TBx98oOPHj6tRo0aqWbOmJkyYoJMnT5oTKQAAADxK9pp9szZnpKena8uWLdqyZYsk6cCBA9qyZYsOHz6szMxMdejQQRs3btTs2bOVlZWlpKQkJSUl6cKFC5KkatWqqXnz5urRo4d+/vln/fTTT+rdu7c6derktk48KshDtby9vdWuXTt98cUXGjdunPbv36/nn39eERERevzxx3X8+HHXRgoAAACYZOPGjapbt67q1q0rSRowYIDq1q2r4cOH6+jRo/r666/1+++/q06dOgoLC7Nva9assc8xe/ZsVa1aVU2bNlXLli3VqFEjTZ8+3Y1nlY81+9k2btyoDz74QJ9++qkCAgL0/PPPq3v37vr99981atQotWnThuU9AAAAuCzDxDX7zlb2mzRpois9fioPj6ZScHCw5syZ49Tnms3pZH/ChAmaMWOG9uzZo5YtW2rWrFlq2bKlvLz+/iNBVFSUZs6cqQoVKpgRLwAAAIA8cjrZnzp1qp544gl17dpVYWFhuR5Trlw5vf/++66IDwAAAB7KkJSHgnm+50Y+kv19+/Zd9RgfHx916dIlvzEBAAAAcIE83aB7+PBhpyY9evRofuMBAADAdcImi6kb8pjsN2jQQE899ZQ2bNhw2WNSU1P13nvvqWbNmpo7d64rYwQAAACQD3laxrNz50698soruv/+++Xn56d69eopPDxcfn5+On36tHbu3KkdO3botttu0/jx49WyZUvzIwcAAECRlp9++M7MjTxW9kuXLq0JEybo+PHjevvtt1W5cmX98ccf9vX7cXFxSkxM1Nq1a0n0AQAAgELCqRt0/f391aFDB3Xo0MG8iAAAAHBdsBkWWUyqwJvVv7+oyfcTdAEAAAAUbvl+gi4AAABQEIZhYp99Gu1LVPYBAAAAz0VlHwAAAG5BNx7zOV3ZX7lypS5evJhj/OLFi1q5cqWr4gIAAABQQE4n+/fee69SUlJyjKempuree+91VVwAAADwcNmVfbM25CPZNwxDFkvOi3fq1CkFBAQ4NdfKlSvVunVrhYeHy2KxaMGCBTk+a/jw4QoLC5O/v79iYmLsvf2zpaSkKC4uToGBgQoKClL37t2Vnp7u7GkBAAAAHifPa/bbtWsnSbJYLOratat8fX3t+7KysrR161bdeeedTn342bNnVbt2bT3xxBP2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De7OO+/U9OnTtXfvXt1yyy365ZdftHr1avtapQMHDigpKUkxMTH291itVjVs2FBr165Vp06dXBoPAAAAYKZ77733ir31ly9f7tR8Tif7N910k3755Rd99tln+uWXX5Senq7u3bsrLi5O/v7+zk53RUOGDFFaWpqqVq2qYsWKKSsrS6+88ori4uIkSUlJSZKkkJAQh/eFhITY9+UmIyNDGRkZ9tfZzwsAAAAA3KlOnToOrzMzM7VlyxZt375dXbp0cXo+p5P9lStX6s4771RcXJw96dal3vsrV65U48aNnQ7icj7//HPNnj1bc+bMUY0aNbRlyxb169dP4eHh+TrZbPHx8Ro1apTL4gQAAIDzLCZ2zSmaXfalN998M9fxkSNH5uuZVk6v2b/33nuVkpKSYzw1NVX33nuv0wFcycCBAzVkyBB16tRJtWrVUufOndW/f3/Fx8dLkkJDQyVJycnJDu9LTk6278vN0KFDlZqaat+OHDni0rgBAAAAV3rsscf0wQcfOP0+p5N9wzByXUd06tQpBQQEOB3AlZw7d05eXo4hFitWTDabTZIUFRWl0NBQLVu2zL4/LS1N69evV3R09GXn9fX1VWBgoMMGAACAa4wn6ObZ2rVr89VpMs/LeNq1aydd6r7TtWtX+fr62vdlZWVp69atLn20ryS1bt1ar7zyiiIjI1WjRg1t3rxZEyZM0BNPPGGPpV+/fhozZowqV65sb70ZHh6utm3bujQWAAAAuBitN3PIzrmzGYah48ePa+PGjRo2bJjT8+U52bdarfYPLFmypMPNuD4+Prrjjjtc/gTdyZMna9iwYXrmmWd04sQJhYeH66mnntLw4cPtxwwaNEhnz55Vz549debMGTVq1EiLFy+mxz4AAACKnOycO5uXl5eqVKmi0aNHq1mzZk7PZzH++TjaPBg1apQGDhyoEiVKOP1hhVVaWpqsVquaqI28LcXz8A4AAICi46KRqR/0lVJTUwvF8uXs3Kv82FfkZVKB1nb+vA698GKhOWd3cbobz+OPP66jR4+qcuXKDuP79u1T8eLFVaFCBVfGBwAAAFx3EhMTtWvXLklSjRo1VLdu3XzN4/QNul27dtWaNWtyjK9fv15du3bNVxAAAAC4/lgMc7ei6MSJE7rvvvvUoEED9enTR3369FG9evXUtGlTnTx50un5nE72N2/erLvuuivH+B133KEtW7Y4HQAAAACAvz377LP6888/tWPHDqWkpCglJUXbt29XWlqa+vTp4/R8Ti/jsVgs+vPPP3OMp6amKisry+kAAAAAcJ2iG08Oixcv1tKlS1WtWjX7WPXq1TVlypR83aDrdGW/cePGio+Pd0jss7KyFB8fr0aNGjkdAAAAAIC/2Ww2FS+es2FM8eLF7c+acobTlf1x48apcePGqlKliu6++25J0qpVq5SWlqbly5c7HQAAAACuU1T2c7jvvvvUt29fffLJJwoPD5ckHT16VP3791fTpk2dns/pyn716tW1detWdezYUSdOnNCff/6pxx9/XLt371bNmjWdDgAAAADA395++22lpaWpQoUKqlixoipWrKioqCilpaVp8uTJTs/ndGVfksLDwzV27Nj8vBUAAACQZG7XnKLajSciIkKbNm3S0qVLtXv3bklStWrVFBMTk6/58pTsb926VTVr1pSXl5e2bt16xWNvvfXWfAUCAAAAXK+WL1+u3r17a926dQoMDNT999+v+++/X7rUCKdGjRqaNm2afRl9XuUp2a9Tp46SkpJUrlw51alTRxaLRbk9eNdisdCRBwAAAHljWP7ezJq7CJk4caJ69OiR69N+rVarnnrqKU2YMMGcZP/AgQMqW7as/d8AAAAAXOeXX37RuHHjLru/WbNmev31152eN0/Jfvny5XP9NwAAAJBvdOOxS05OzrXlZjZvb+98PUE3T8n+119/necJH3zwQaeDAAAAAK5nN954o7Zv365KlSrlun/r1q0KCwtzet48Jftt27Z1eP3vNfsWy/+viWLNPgAAAPKCbjz/r2XLlho2bJiaN28uPz8/h31//fWXRowYoQceeMDpefPUZ99ms9m377//XnXq1NGiRYt05swZnTlzRt99951uu+02LV682OkAAAAAgOvdSy+9pJSUFN1yyy0aP368vvrqK3311VcaN26cqlSpopSUFL344otOz+v0Q7X69eunt956S7GxsQoMDFRgYKBiY2M1YcIE9enTx+kAAAAAcJ0yTN6ckJWVpWHDhikqKkr+/v6qWLGiXn75ZYfVLIZhaPjw4QoLC5O/v79iYmK0b98+l1yKkJAQrVmzRjVr1tTQoUP10EMP6aGHHtILL7ygmjVravXq1QoJCXF6XqcfqvXrr78qKCgox7jVatXBgwedDgAAAABwt3Hj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la9kf+PGjfr88891+PBhXbhwwWHfvHnzXBUbAAAAgAJw+qFan376qe68807t2rVL8+fPV2Zmpnbs2KHly5fLarWaEyUAAAA8TnY3HrM25CPZHzt2rN58800tXLhQPj4+euutt7R792517NiRVpwAAABAIeJ0sv/rr7+qVatWkiQfHx+dPXtWFotF/fv31/Tp082IEQAAAJ7IMHlz0tGjR/XYY4+pdOnS8vf3V61atbRx48b/D9cwNHz4cIWFhcnf318xMTHat2+fa6+Jizmd7JcqVUp//vmnJOnGG2/U9u3bJUlnzpzRuXPnXB8hAAAAYLLTp0/rrrvuUvHixbVo0SLt3LlTb7zxhkqVKmU/Zvz48Zo0aZKmTZum9evXKyAgQLGxsTp//rxbY78Sp2/Qbdy4sRISElSrVi395z//Ud++fbV8+XIlJCSoadOm5kQJAAAAj1OYnqA7btw4RUREaMaMGfaxqKgo+78Nw9DEiRP10ksvqU2bNpKkWbNmKSQkRAsWLFCnTp1cF7wLOV3Zf/vtt+0n8+KLL2rAgAFKTk5W+/bt9f7775sRIwAAAGCqr7/+WvXr19d//vMflStXTnXr1tV7771n33/gwAElJSUpJibGPma1WtWwYUOtXbvWTVFfndOV/eDgYPu/vby8NGTIEFfHBAAAgOvBNXiCblpamsOwr6+vfH19cxz+22+/aerUqRowYIBeeOEFbdiwQX369JGPj4+6dOmipKQkSVJISIjD+0JCQuz7CiOnK/vfffedlixZkmP8+++/16JFi1wVFwAAAFBgERERslqt9i0+Pj7X42w2m2677TaNHTtWdevWVc+ePdWjRw9NmzbtmsfsSk4n+0OGDFFWVlaOcZvNRpUfAAAAeXYt+uwfOXJEqamp9m3o0KG5xhIWFqbq1as7jFWrVk2HDx+WJIWGhkqSkpOTHY5JTk627yuMnE729+3bl+NCSFLVqlW1f/9+V8UFAAAAFFhgYKDDltsSHkm66667tGfPHoexvXv3qnz58tKlm3VDQ0O1bNky+/60tDStX79e0dHRJp9F/jmd7FutVv322285xvfv36+AgABXxQUAAABPV4j67Pfv31/r1q3T2LFjtX//fs2ZM0fTp09Xr169JEkWi0X9+vXTmDFj9PXXX2vbtm16/PHHFR4errZt25pzfVzA6WS/TZs26tevn379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",
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAvQAAAJOCAYAAADYjZMFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABSyElEQVR4nO3deXQUZfb/8U8nkA5bwhpCICSArLIT4YvIJgFkG1FH2ZQAgqMTFI2ooEBYlLiBuCCrAjoy4AY6giAkLIOCIAiCCrIKAyQBWRICJNBdvz+E/hkTIB27ekm/X+fUOemnq566VXr05ubWUxbDMAwBAAAA8EkBng4AAAAAQOGR0AMAAAA+jIQeAAAA8GEk9AAAAIAPI6EHAAAAfBgJPQAAAODDSOgBAAAAH0ZCDwAAAPgwEnoAAADAh5HQA/Bpe/fuVZcuXRQaGiqLxaKlS5e6dP5Dhw7JYrFo/vz5Lp3Xl3Xo0EEdOnTwdBgAgCtI6AH8Zfv379c//vEP1axZU8HBwQoJCVGbNm30+uuv68KFC6aeOy4uTjt37tQLL7yg999/XzExMaaez50GDRoki8WikJCQfO/j3r17ZbFYZLFY9Oqrrzo9/7FjxzR+/Hht377dRREDADyhmKcDAODbli1bpnvvvVdWq1UDBw5Uw4YNlZOTow0bNuipp57Sjz/+qNmzZ5ty7gsXLmjjxo167rnnNHz4cFPOERUVpQsXLqh48eKmzH8jxYoV0/nz5/Wf//xH9913X67vPvjgAwUHB+vixYuFmvvYsWOaMGGCoqOj1bRp0wIf99VXXxXqfAAAc5DQAyi0gwcPqm/fvoqKilJKSoqqVKni+C4+Pl779u3TsmXLTDv/iRMnJElly5Y17RwWi0XBwcGmzX8jVqtVbdq00b///e88Cf3ChQvVo0cPffLJJ26J5fz58ypZsqSCgoLccj4AQMHQcgOg0F5++WWdO3dO77zzTq5k/qqbbrpJI0aMcHy+fPmyJk2apFq1aslqtSo6OlrPPvussrOzcx0XHR2tnj17asOGDWrZsqWCg4NVs2ZNvffee459xo8fr6ioKEnSU089JYvFoujoaOlKq8rVn/9o/PjxslgsucZWrVql2267TWXLllXp0qVVt25dPfvss47vr9VDn5KSorZt26pUqVIqW7as7rzzTv3888/5nm/fvn0aNGiQypYtq9DQUA0ePFjnz58v8H3u37+/vvzyS505c8YxtmXLFu3du1f9+/fPs/+pU6c0cuRINWrUSKVLl1ZISIi6deumHTt2OPZZu3atbrnlFknS4MGDHa07V6+zQ4cOatiwobZu3ap27dqpZMmSjvvy5x76uLg4BQcH57n+rl27qly5cjp27FiBrxUA4DwSegCF9p///Ec1a9bUrbfeWqD9hw4dqnHjxql58+Z67bXX1L59eyUlJalv37559t23b5/+/ve/q3PnzpoyZYrKlSunQYMG6ccff5Qk3X333XrttdckSf369dP777+vadOmORX/jz/+qJ49eyo7O1sTJ07UlClT9Le//U1ff/31dY9bvXq1unbtqvT0dI0fP14JCQn65ptv1KZNGx06dCjP/vfdd58yMzOVlJSk++67T/Pnz9eECRMKHOfdd98ti8WiTz/91DG2cOFC1atXT82bN8+z/4EDB7R06VL17NlTU6dO1VNPPaWdO3eqffv2juS6fv36mjhxoiTpoYce0vvvv6/3339f7dq1c8zz22+/qVu3bmratKmmTZumjh075hvf66+/rkqVKikuLk42m02SNGvWLH311Vd68803FRERUeBrBQAUggEAhXD27FlDknHnnXcWaP/t27cbkoyhQ4fmGh85cqQhyUhJSXGMRUVFGZKM9evXO8bS09MNq9VqPPnkk46xgwcPGpKMV155JdeccXFxRlRUVJ4YEhMTjT/+Z++1114zJBknTpy4ZtxXzzFv3jzHWNOmTY2wsDDjt99+c4zt2LHDCAgIMAYOHJjnfEOGDMk151133WVUqFDhmuf843WUKlXKMAzD+Pvf/2506tTJMAzDsNlsRnh4uDFhwoR878HFixcNm82W5zqsVqsxceJEx9iWLVvyXNtV7du3NyQZM2fOzPe79u3b5xpbuXKlIcl4/vnnjQMHDhilS5c2evfufcNrBAD8dVToARRKRkaGJKlMmTIF2n/58uWSpISEhFzjTz75pHTl4do/atCggdq2bev4XKlSJdWtW1cHDhz4y7FfdbX3/rPPPpPdbi/QMcePH9f27ds1aNAglS9f3jHeuHFjde7c2XGdf/Twww/n+ty2bVv99ttvjntYEP3799fatWuVmpqqlJQUpaam5ttuoyt99wEBv//n3Waz6bfffnO0E23btq3A57RarRo8eHCB9u3SpYv+8Y9/aOLEibr77rsVHBysWbNmFfhcAIDCI6EHUCghISGSpMzMzALt/+uvvyogIEA33XRTrvHw8HCVLVtWv/76a67x6tWr55mjXLlyOn369F+K+4/69OmjNm3aaOjQoapcubL69u2rDz/88LrJ/dU469atm+e7+vXr6+TJk8rKyso1/udrKVeunCQ5dS3du3dXmTJltHjxYn3wwQe65ZZb8tzLq+x2u1577TXVrl1bVqtVFStWVKVKlfTDDz/o7NmzBT5n1apVnXoA9tVXX1X58uW1fft2vfHGGwoLCyvwsQCAwiOhB1AoISEhioiI0K5du5w67s8PpV5LYGBgvuOGYRT6HFf7u68qUaKE1q9fr9WrV+uBBx7QDz/8oD59+qhz58559v0r/sq1XGW1WnX33XdrwYIFWrJkyTWr85I0efJkJSQkqF27dvrXv/6llStXatWqVbr55psL/JcIXbk/zvj++++Vnp4uSdq5c6dTxwIACo+EHkCh9ezZU/v379fGjRtvuG9UVJTsdrv27t2bazwtLU1nzpxxrFjjCuXKlcu1IsxVf/4rgCQFBASoU6dOmjp1qn766Se98MILSklJ0Zo1a655HZK0Z8+ePN/t3r1bFStWVKlSpVxyHX/Wv39/ff/998rMzMz3QeKrPv74Y3Xs2FHvvPOO+vbtqy5duig2NjbPPSnoL1cFkZWVpcGDB6tBgwZ66KGH9PLLL2vLli0umx8AcG0k9AAK7emnn1apUqU0dOhQpaWl5fl+//79ev3116UrLSOS8qxEM3XqVElSjx49XBZXrVq1dPbsWf3www+OsePHj2vJkiW59jt16lSeY6++YOnPS2leVaVKFTVt2lQLFizIlSDv2rVLX331leM6zdCxY0dNmjRJb731lsLDw6+5X2BgYJ7q/0cffaSjR4/mGrv6i0d+v/w465lnntHhw4e1YMECTZ06VdHR0YqLi7vmfQQAuA4vlgJQaLVq1dLChQvVp08f1a9fP9ebYr/55ht99NFHGjRokCSpSZMmiouL0+zZs3XmzBm1b99emzdv1oIFC9S7d+9rLolYGH379tUzzzyju+66S4899pjOnz+vGTNmqE6dOrkeCp04caLWr1+vHj16KCoqSunp6Xr77bdVrVo13Xbbbdec/5VXXlG3bt3UunVrPfjgg7pw4YLefPNNhYaGavz48S67jj8LCAjQ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p7Zt2+qpp57Sq6++qqCgIOnKLwV/9PXXX+vtt99W9+7dJUlHjhzRyZMnnYqrcePGWrBggS5dupQn8a9cubIiIiJ04MABDRgwwKl5AQDei4QeQJFw++2365VXXtF7772n1q1b61//+pd27drlaKcpU6aMRo4cqSeeeEJ2u1233Xabzp49q6+//lohISHX7R8/f/68UlNTdfnyZf3vf//TkiVL9Nprr+mRRx5Rx44d8z1m3LhxatGihW6++WZlZ2friy++UP369SVJYWFhKlGihFasWKFq1aopODhYoaGhql27tt5//33FxMQoIyNDTz311HUr7vkZPny43nzzTfXt21ejR49WaGioNm3apJYtW6pu3bqaMGGCHnvsMYWGhuqOO+5Qdna2vvvuO50+fVoJCQlOnQsA4B1Y5QZAkdC1a1eNHTtWTz/9tG655RZlZmZq4MCBufaZNGmSxo4dq6SkJNWvX1933HGHli1b5lhG8lrmzJmjKlWqqFatWrr77rv1008/afHixddd7jEoKEijR49W48aN1a5dOwUGBmrRokWSpGLFiumNN97QrFmzFBERoTvvvFOS9M477+j06dNq3ry5HnjgAT322GMKCwtz6j5UqFBBKSkpOnfunNq3b68WLVpozpw5jmr90KFDNXfuXM2bN0+NGjVS+/btNX/+/BveAwCA97IYf246BQAAAOAzqNADAAAAPoyEHgAAAPBhJPQAAACADyOhBwAAAHwYCT0AAADgw0joAQAAAB9GQg8AAAD4MBJ6AAAAwIeR0AMAAAA+jIQeAAAA8GEk9AAAAIAPI6EHAAAAfNj/A5Vw+hJb4IT1AAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 800x600 with 2 Axes>"
]
@@ -715,29 +800,36 @@
"y = output.detach().to(torch.float16).cpu().numpy().flatten()\n",
"\n",
"# Define the number of vertices and number of bins per dimension\n",
- "bins_y = 10 * NVTXS # 10 * nvtxs for y-bin size\n",
+ "bins_y = 5 * NVTXS # 10 * nvtxs for y-bin size\n",
"\n",
"# Initialize the 2D array (matrix) to store the counts\n",
- "count_matrix = np.zeros((NVTXS, bins_y), dtype=int)\n",
+ "count_matrix = np.zeros((NVTXS, bins_y), dtype=float)\n",
"\n",
"# Process the data: Map x to rows and floor(y*10) to columns\n",
"for xi, yi in zip(x, y):\n",
" row = int(xi) # Use integer value of x for row index\n",
- " col = int(np.floor(yi * 10)) # Map y values to column by flooring and scaling by 10\n",
+ " col = int(np.floor(yi * 5)) # Map y values to column by flooring and scaling by 10\n",
" if 0 <= row < NVTXS and 0 <= col < bins_y: # Ensure valid indices\n",
" count_matrix[row, col] += 1\n",
"\n",
"# Transpose the matrix\n",
"count_matrix = count_matrix.T\n",
"\n",
+ "# column_sums = count_matrix.sum(axis=0) # Sum of each column\n",
+ "# count_matrix = np.divide(count_matrix, column_sums, where=column_sums >.001) # Avoid division by zero\n",
+ "for i in range(count_matrix.shape[1]):\n",
+ " if np.sum(count_matrix[:,i])>1:\n",
+ " count_matrix[:,i] = count_matrix[:,i] / np.sum(count_matrix[:,i])\n",
+ " \n",
"# Plot the heatmap\n",
"plt.figure(figsize=(8, 6))\n",
"plt.imshow(count_matrix, cmap='viridis', origin='lower', interpolation='nearest', aspect='auto')\n",
"\n",
"# Set the labels and title\n",
- "plt.ylabel('Scaled Predicted Output (y)')\n",
- "plt.xlabel('True Labels (x)')\n",
- "plt.title('True Labels vs Scaled Predicted Output (Heatmap)')\n",
+ "plt.ylabel('Predicted Distance')\n",
+ "plt.yticks([i*5 for i in range(8)], [i for i in range(8)])\n",
+ "plt.xlabel('True Distance')\n",
+ "plt.title('Confusion Matrix')\n",
"\n",
"# Add a colorbar for reference\n",
"plt.colorbar(label='Count')\n",