File size: 241,849 Bytes
6950504 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 |
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "982e76f5",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:26:50.558870Z",
"iopub.status.busy": "2024-02-29T18:26:50.558154Z",
"iopub.status.idle": "2024-02-29T18:26:50.590106Z",
"shell.execute_reply": "2024-02-29T18:26:50.589458Z"
},
"papermill": {
"duration": 0.046189,
"end_time": "2024-02-29T18:26:50.591955",
"exception": false,
"start_time": "2024-02-29T18:26:50.545766",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"import joblib\n",
"\n",
"#joblib.parallel_backend(\"threading\")"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "675f0b41",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:26:50.617349Z",
"iopub.status.busy": "2024-02-29T18:26:50.616718Z",
"iopub.status.idle": "2024-02-29T18:26:50.624173Z",
"shell.execute_reply": "2024-02-29T18:26:50.623371Z"
},
"papermill": {
"duration": 0.022172,
"end_time": "2024-02-29T18:26:50.626060",
"exception": false,
"start_time": "2024-02-29T18:26:50.603888",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"'\\n%cd /kaggle/working\\n#!git clone https://github.com/R-N/ml-utility-loss\\n%cd ml-utility-loss\\n!git pull\\n#!pip install .\\n!pip install . --no-deps --force-reinstall --upgrade\\n#'"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\"\"\"\n",
"%cd /kaggle/working\n",
"#!git clone https://github.com/R-N/ml-utility-loss\n",
"%cd ml-utility-loss\n",
"!git pull\n",
"#!pip install .\n",
"!pip install . --no-deps --force-reinstall --upgrade\n",
"#\"\"\""
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "5ae30f5c",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:26:50.649180Z",
"iopub.status.busy": "2024-02-29T18:26:50.648911Z",
"iopub.status.idle": "2024-02-29T18:26:50.653522Z",
"shell.execute_reply": "2024-02-29T18:26:50.652094Z"
},
"papermill": {
"duration": 0.019003,
"end_time": "2024-02-29T18:26:50.655938",
"exception": false,
"start_time": "2024-02-29T18:26:50.636935",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"plt.rcParams['figure.figsize'] = [3,3]"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "9f42c810",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:26:50.679562Z",
"iopub.status.busy": "2024-02-29T18:26:50.679302Z",
"iopub.status.idle": "2024-02-29T18:26:50.683027Z",
"shell.execute_reply": "2024-02-29T18:26:50.682249Z"
},
"executionInfo": {
"elapsed": 678,
"status": "ok",
"timestamp": 1696841022168,
"user": {
"displayName": "Rizqi Nur",
"userId": "09644007964068789560"
},
"user_tz": -420
},
"id": "ns5hFcVL2yvs",
"papermill": {
"duration": 0.01756,
"end_time": "2024-02-29T18:26:50.684861",
"exception": false,
"start_time": "2024-02-29T18:26:50.667301",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"datasets = [\n",
" \"insurance\",\n",
" \"treatment\",\n",
" \"contraceptive\"\n",
"]\n",
"\n",
"study_dir = \"./\""
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "85d0c8ce",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:26:50.707664Z",
"iopub.status.busy": "2024-02-29T18:26:50.707390Z",
"iopub.status.idle": "2024-02-29T18:26:50.712716Z",
"shell.execute_reply": "2024-02-29T18:26:50.711943Z"
},
"papermill": {
"duration": 0.018823,
"end_time": "2024-02-29T18:26:50.714583",
"exception": false,
"start_time": "2024-02-29T18:26:50.695760",
"status": "completed"
},
"tags": [
"parameters"
]
},
"outputs": [],
"source": [
"#Parameters\n",
"import os\n",
"\n",
"path_prefix = \"../../../../\"\n",
"\n",
"dataset_dir = os.path.join(path_prefix, \"ml-utility-loss/datasets\")\n",
"dataset_name = \"treatment\"\n",
"model_name=\"ml_utility_2\"\n",
"models = [\"tvae\", \"realtabformer\", \"lct_gan\", \"tab_ddpm_concat\"]\n",
"single_model = \"lct_gan\"\n",
"random_seed = 42\n",
"gp = True\n",
"gp_multiply = True\n",
"folder = \"eval\"\n",
"debug = False\n",
"path = None\n",
"param_index = 0\n",
"allow_same_prediction = False"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "1800468a",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:26:50.739163Z",
"iopub.status.busy": "2024-02-29T18:26:50.738835Z",
"iopub.status.idle": "2024-02-29T18:26:50.744203Z",
"shell.execute_reply": "2024-02-29T18:26:50.743458Z"
},
"papermill": {
"duration": 0.019989,
"end_time": "2024-02-29T18:26:50.746255",
"exception": false,
"start_time": "2024-02-29T18:26:50.726266",
"status": "completed"
},
"tags": [
"injected-parameters"
]
},
"outputs": [],
"source": [
"# Parameters\n",
"dataset = \"insurance\"\n",
"dataset_name = \"insurance\"\n",
"single_model = \"tab_ddpm_concat\"\n",
"gp = False\n",
"gp_multiply = False\n",
"random_seed = 4\n",
"debug = False\n",
"folder = \"eval\"\n",
"path_prefix = \"../../../../\"\n",
"path = \"eval/insurance/tab_ddpm_concat/4\"\n",
"param_index = 2\n",
"allow_same_prediction = True\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "bd7c02d6",
"metadata": {
"papermill": {
"duration": 0.010925,
"end_time": "2024-02-29T18:26:50.768318",
"exception": false,
"start_time": "2024-02-29T18:26:50.757393",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 7,
"id": "5f45b1d0",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:26:50.791282Z",
"iopub.status.busy": "2024-02-29T18:26:50.791016Z",
"iopub.status.idle": "2024-02-29T18:26:50.799559Z",
"shell.execute_reply": "2024-02-29T18:26:50.798806Z"
},
"executionInfo": {
"elapsed": 7,
"status": "ok",
"timestamp": 1696841022169,
"user": {
"displayName": "Rizqi Nur",
"userId": "09644007964068789560"
},
"user_tz": -420
},
"id": "UdvXYv3c3LXy",
"papermill": {
"duration": 0.022153,
"end_time": "2024-02-29T18:26:50.801373",
"exception": false,
"start_time": "2024-02-29T18:26:50.779220",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/kaggle/working\n",
"/kaggle/working/eval/insurance/tab_ddpm_concat/4\n"
]
}
],
"source": [
"from pathlib import Path\n",
"import os\n",
"\n",
"%cd /kaggle/working/\n",
"\n",
"if path is None:\n",
" path = os.path.join(folder, dataset_name, single_model, random_seed)\n",
"Path(path).mkdir(parents=True, exist_ok=True)\n",
"\n",
"%cd {path}"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "f85bf540",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:26:50.825158Z",
"iopub.status.busy": "2024-02-29T18:26:50.824897Z",
"iopub.status.idle": "2024-02-29T18:26:52.939311Z",
"shell.execute_reply": "2024-02-29T18:26:52.938380Z"
},
"papermill": {
"duration": 2.128694,
"end_time": "2024-02-29T18:26:52.941418",
"exception": false,
"start_time": "2024-02-29T18:26:50.812724",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Set seed to <function seed at 0x7a58ca31a320>\n"
]
}
],
"source": [
"from ml_utility_loss.util import seed\n",
"if single_model:\n",
" model_name=f\"{model_name}_{single_model}\"\n",
"if random_seed is not None:\n",
" seed(random_seed)\n",
" print(\"Set seed to\", seed)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "8489feae",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:26:52.968131Z",
"iopub.status.busy": "2024-02-29T18:26:52.967214Z",
"iopub.status.idle": "2024-02-29T18:26:52.979057Z",
"shell.execute_reply": "2024-02-29T18:26:52.978209Z"
},
"papermill": {
"duration": 0.027034,
"end_time": "2024-02-29T18:26:52.981011",
"exception": false,
"start_time": "2024-02-29T18:26:52.953977",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import json\n",
"import os\n",
"\n",
"df = pd.read_csv(os.path.join(dataset_dir, f\"{dataset_name}.csv\"))\n",
"with open(os.path.join(dataset_dir, f\"{dataset_name}.json\")) as f:\n",
" info = json.load(f)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "debcc684",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:26:53.005698Z",
"iopub.status.busy": "2024-02-29T18:26:53.005020Z",
"iopub.status.idle": "2024-02-29T18:26:53.011733Z",
"shell.execute_reply": "2024-02-29T18:26:53.010953Z"
},
"executionInfo": {
"elapsed": 6,
"status": "ok",
"timestamp": 1696841022169,
"user": {
"displayName": "Rizqi Nur",
"userId": "09644007964068789560"
},
"user_tz": -420
},
"id": "Vrl2QkoV3o_8",
"papermill": {
"duration": 0.021252,
"end_time": "2024-02-29T18:26:53.013739",
"exception": false,
"start_time": "2024-02-29T18:26:52.992487",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"task = info[\"task\"]\n",
"target = info[\"target\"]\n",
"cat_features = info[\"cat_features\"]\n",
"mixed_features = info[\"mixed_features\"]\n",
"longtail_features = info[\"longtail_features\"]\n",
"integer_features = info[\"integer_features\"]\n",
"\n",
"test = df.sample(frac=0.2, random_state=42)\n",
"train = df[~df.index.isin(test.index)]"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "7538184a",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:26:53.037402Z",
"iopub.status.busy": "2024-02-29T18:26:53.037158Z",
"iopub.status.idle": "2024-02-29T18:26:53.136345Z",
"shell.execute_reply": "2024-02-29T18:26:53.135661Z"
},
"executionInfo": {
"elapsed": 6,
"status": "ok",
"timestamp": 1696841022169,
"user": {
"displayName": "Rizqi Nur",
"userId": "09644007964068789560"
},
"user_tz": -420
},
"id": "TilUuFk9vqMb",
"papermill": {
"duration": 0.113075,
"end_time": "2024-02-29T18:26:53.138309",
"exception": false,
"start_time": "2024-02-29T18:26:53.025234",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"import ml_utility_loss.synthesizers.tab_ddpm.params as TAB_DDPM_PARAMS\n",
"import ml_utility_loss.synthesizers.lct_gan.params as LCT_GAN_PARAMS\n",
"import ml_utility_loss.synthesizers.realtabformer.params as RTF_PARAMS\n",
"from ml_utility_loss.synthesizers.realtabformer.params.default import GPT2_PARAMS, REALTABFORMER_PARAMS\n",
"from ml_utility_loss.util import filter_dict_2, filter_dict\n",
"\n",
"tab_ddpm_params = getattr(TAB_DDPM_PARAMS, dataset_name).BEST\n",
"lct_gan_params = getattr(LCT_GAN_PARAMS, dataset_name).BEST\n",
"lct_ae_params = filter_dict_2(lct_gan_params, LCT_GAN_PARAMS.default.AE_PARAMS)\n",
"rtf_params = getattr(RTF_PARAMS, dataset_name).BEST\n",
"rtf_params = filter_dict(rtf_params, REALTABFORMER_PARAMS)\n",
"\n",
"lct_ae_embedding_size=lct_gan_params[\"embedding_size\"]\n",
"tab_ddpm_normalization=\"quantile\"\n",
"tab_ddpm_cat_encoding=tab_ddpm_params[\"cat_encoding\"]\n",
"#tab_ddpm_cat_encoding=\"one-hot\"\n",
"tab_ddpm_y_policy=\"default\"\n",
"tab_ddpm_is_y_cond=True"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "cca61838",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:26:53.163865Z",
"iopub.status.busy": "2024-02-29T18:26:53.163568Z",
"iopub.status.idle": "2024-02-29T18:26:57.713583Z",
"shell.execute_reply": "2024-02-29T18:26:57.712809Z"
},
"executionInfo": {
"elapsed": 3113,
"status": "ok",
"timestamp": 1696841025277,
"user": {
"displayName": "Rizqi Nur",
"userId": "09644007964068789560"
},
"user_tz": -420
},
"id": "7Abt8nStvr9Z",
"papermill": {
"duration": 4.565534,
"end_time": "2024-02-29T18:26:57.715908",
"exception": false,
"start_time": "2024-02-29T18:26:53.150374",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"2024-02-29 18:26:55.362648: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:9261] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n",
"2024-02-29 18:26:55.362701: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:607] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n",
"2024-02-29 18:26:55.364282: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1515] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n"
]
}
],
"source": [
"from ml_utility_loss.loss_learning.estimator.pipeline import load_lct_ae\n",
"\n",
"lct_ae = load_lct_ae(\n",
" dataset_name=dataset_name,\n",
" model_dir=os.path.join(path_prefix, \"ml-utility-loss/models\"),\n",
" model_name=\"lct_ae\",\n",
" df_name=\"df\",\n",
")\n",
"lct_ae = None"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "6f83b7b6",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:26:57.741084Z",
"iopub.status.busy": "2024-02-29T18:26:57.740440Z",
"iopub.status.idle": "2024-02-29T18:26:57.747224Z",
"shell.execute_reply": "2024-02-29T18:26:57.746357Z"
},
"papermill": {
"duration": 0.021021,
"end_time": "2024-02-29T18:26:57.749183",
"exception": false,
"start_time": "2024-02-29T18:26:57.728162",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"from ml_utility_loss.loss_learning.estimator.pipeline import load_rtf_embed\n",
"\n",
"rtf_embed = load_rtf_embed(\n",
" dataset_name=dataset_name,\n",
" model_dir=os.path.join(path_prefix, \"ml-utility-loss/models\"),\n",
" model_name=\"realtabformer\",\n",
" df_name=\"df\",\n",
" ckpt_type=\"best-disc-model\"\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "0026de74",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:26:57.774557Z",
"iopub.status.busy": "2024-02-29T18:26:57.774285Z",
"iopub.status.idle": "2024-02-29T18:27:05.763239Z",
"shell.execute_reply": "2024-02-29T18:27:05.762279Z"
},
"executionInfo": {
"elapsed": 20137,
"status": "ok",
"timestamp": 1696841045408,
"user": {
"displayName": "Rizqi Nur",
"userId": "09644007964068789560"
},
"user_tz": -420
},
"id": "tbaguWxAvtPi",
"papermill": {
"duration": 8.004862,
"end_time": "2024-02-29T18:27:05.766044",
"exception": false,
"start_time": "2024-02-29T18:26:57.761182",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n",
" warnings.warn(\n",
"/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n",
" warnings.warn(\n",
"/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:119: ConvergenceWarning: Number of distinct clusters (6) found smaller than n_clusters (10). Possibly due to duplicate points in X.\n",
" .fit(X)\n",
"/opt/conda/lib/python3.10/site-packages/sklearn/mixture/_base.py:274: ConvergenceWarning: Initialization 1 did not converge. Try different init parameters, or increase max_iter, tol or check for degenerate data.\n",
" warnings.warn(\n",
"100%|██████████| 1/1 [00:00<00:00, 2.95it/s]\n",
"/opt/conda/lib/python3.10/site-packages/sklearn/preprocessing/_encoders.py:868: FutureWarning: `sparse` was renamed to `sparse_output` in version 1.2 and will be removed in 1.4. `sparse_output` is ignored unless you leave `sparse` to its default value.\n",
" warnings.warn(\n"
]
}
],
"source": [
"from ml_utility_loss.loss_learning.estimator.preprocessing import DataPreprocessor\n",
"\n",
"preprocessor = DataPreprocessor(\n",
" task,\n",
" target=target,\n",
" cat_features=cat_features,\n",
" mixed_features=mixed_features,\n",
" longtail_features=longtail_features,\n",
" integer_features=integer_features,\n",
" lct_ae_embedding_size=lct_ae_embedding_size,\n",
" lct_ae_params=lct_ae_params,\n",
" lct_ae=lct_ae,\n",
" tab_ddpm_normalization=tab_ddpm_normalization,\n",
" tab_ddpm_cat_encoding=tab_ddpm_cat_encoding,\n",
" tab_ddpm_y_policy=tab_ddpm_y_policy,\n",
" tab_ddpm_is_y_cond=tab_ddpm_is_y_cond,\n",
" realtabformer_embedding=rtf_embed,\n",
" realtabformer_params=rtf_params,\n",
")\n",
"preprocessor.fit(df)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "a9c9b110",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"execution": {
"iopub.execute_input": "2024-02-29T18:27:05.793951Z",
"iopub.status.busy": "2024-02-29T18:27:05.793616Z",
"iopub.status.idle": "2024-02-29T18:27:05.800096Z",
"shell.execute_reply": "2024-02-29T18:27:05.799321Z"
},
"executionInfo": {
"elapsed": 13,
"status": "ok",
"timestamp": 1696841045411,
"user": {
"displayName": "Rizqi Nur",
"userId": "09644007964068789560"
},
"user_tz": -420
},
"id": "OxUH_GBEv2qK",
"outputId": "76464c90-3baf-4bdc-a955-6f4fddc16b9c",
"papermill": {
"duration": 0.022395,
"end_time": "2024-02-29T18:27:05.801957",
"exception": false,
"start_time": "2024-02-29T18:27:05.779562",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"{'tvae': 36,\n",
" 'realtabformer': (19, 551, Embedding(551, 800), True),\n",
" 'lct_gan': 29,\n",
" 'tab_ddpm_concat': 12}"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"preprocessor.adapter_sizes"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "3cb9ed90",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:27:05.827106Z",
"iopub.status.busy": "2024-02-29T18:27:05.826850Z",
"iopub.status.idle": "2024-02-29T18:27:05.831397Z",
"shell.execute_reply": "2024-02-29T18:27:05.830675Z"
},
"papermill": {
"duration": 0.019112,
"end_time": "2024-02-29T18:27:05.833194",
"exception": false,
"start_time": "2024-02-29T18:27:05.814082",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"from ml_utility_loss.loss_learning.estimator.pipeline import load_dataset_3_factory\n",
"\n",
"datasetsn = load_dataset_3_factory(\n",
" dataset_dir=os.path.join(path_prefix, \"ml-utility-loss/\"),\n",
" dataset_name=dataset_name,\n",
" preprocessor=preprocessor,\n",
" cache_dir=path_prefix,\n",
")\n"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "ad1eb833",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:27:05.858118Z",
"iopub.status.busy": "2024-02-29T18:27:05.857860Z",
"iopub.status.idle": "2024-02-29T18:27:05.888185Z",
"shell.execute_reply": "2024-02-29T18:27:05.887355Z"
},
"papermill": {
"duration": 0.044834,
"end_time": "2024-02-29T18:27:05.889997",
"exception": false,
"start_time": "2024-02-29T18:27:05.845163",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Caching in ../../../../insurance/_cache_test/tab_ddpm_concat/all inf False\n"
]
}
],
"source": [
"from ml_utility_loss.loss_learning.estimator.pipeline import load_dataset\n",
"\n",
"test_set = load_dataset(\n",
" dataset_dir=os.path.join(path_prefix, \"ml-utility-loss/\", \"datasets_5\", dataset_name),\n",
" preprocessor=preprocessor,\n",
" cache_dir=os.path.join(path_prefix, dataset_name, \"_cache_test\"),\n",
" start=200,\n",
" #stop=600,\n",
" val=False,\n",
" ratio=0,\n",
" drop_first_column=True,\n",
" model=single_model,\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "14ff8b40",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:27:05.917077Z",
"iopub.status.busy": "2024-02-29T18:27:05.916535Z",
"iopub.status.idle": "2024-02-29T18:27:06.229267Z",
"shell.execute_reply": "2024-02-29T18:27:06.228385Z"
},
"executionInfo": {
"elapsed": 588,
"status": "ok",
"timestamp": 1696841049215,
"user": {
"displayName": "Rizqi Nur",
"userId": "09644007964068789560"
},
"user_tz": -420
},
"id": "NgahtU1q9uLO",
"papermill": {
"duration": 0.328598,
"end_time": "2024-02-29T18:27:06.231292",
"exception": false,
"start_time": "2024-02-29T18:27:05.902694",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"{'Body': 'twin_encoder',\n",
" 'loss_balancer_meta': True,\n",
" 'loss_balancer_log': False,\n",
" 'loss_balancer_lbtw': False,\n",
" 'pma_skip_small': False,\n",
" 'isab_skip_small': False,\n",
" 'layer_norm': False,\n",
" 'pma_layer_norm': False,\n",
" 'attn_residual': True,\n",
" 'tf_n_layers_dec': False,\n",
" 'tf_isab_rank': 0,\n",
" 'tf_layer_norm': False,\n",
" 'tf_pma_start': -1,\n",
" 'head_n_seeds': 0,\n",
" 'tf_pma_low': 16,\n",
" 'dropout': 0,\n",
" 'combine_mode': 'diff_left',\n",
" 'tf_isab_mode': 'separate',\n",
" 'grad_loss_fn': <function torch.nn.functional.l1_loss(input: torch.Tensor, target: torch.Tensor, size_average: Optional[bool] = None, reduce: Optional[bool] = None, reduction: str = 'mean') -> torch.Tensor>,\n",
" 'single_model': True,\n",
" 'bias': True,\n",
" 'bias_final': True,\n",
" 'pma_ffn_mode': 'shared',\n",
" 'patience': 10,\n",
" 'inds_init_mode': 'fixnorm',\n",
" 'grad_clip': 0.77,\n",
" 'head_final_mul': 'identity',\n",
" 'gradient_penalty_mode': {'gradient_penalty': False,\n",
" 'calc_grad_m': False,\n",
" 'avg_non_role_model_m': False,\n",
" 'inverse_avg_non_role_model_m': False},\n",
" 'synth_data': 2,\n",
" 'dataset_size': 2048,\n",
" 'batch_size': 8,\n",
" 'epochs': 100,\n",
" 'n_warmup_steps': 100,\n",
" 'Optim': torch_optimizer.diffgrad.DiffGrad,\n",
" 'loss_balancer_beta': 0.75,\n",
" 'loss_balancer_r': 0.95,\n",
" 'fixed_role_model': 'tab_ddpm_concat',\n",
" 'd_model': 256,\n",
" 'attn_activation': torch.nn.modules.activation.LeakyReLU,\n",
" 'tf_d_inner': 512,\n",
" 'tf_n_layers_enc': 4,\n",
" 'tf_n_head': 64,\n",
" 'tf_activation': torch.nn.modules.activation.ReLU6,\n",
" 'tf_activation_final': ml_utility_loss.activations.LeakyHardsigmoid,\n",
" 'ada_d_hid': 1024,\n",
" 'ada_n_layers': 7,\n",
" 'ada_activation': torch.nn.modules.activation.ReLU,\n",
" 'ada_activation_final': torch.nn.modules.activation.Softsign,\n",
" 'head_d_hid': 128,\n",
" 'head_n_layers': 9,\n",
" 'head_n_head': 64,\n",
" 'head_activation': torch.nn.modules.activation.RReLU,\n",
" 'head_activation_final': torch.nn.modules.activation.Softsign,\n",
" 'models': ['tab_ddpm_concat'],\n",
" 'max_seconds': 3600,\n",
" 'tf_lora': False,\n",
" 'tf_num_inds': 32,\n",
" 'ada_n_seeds': 0,\n",
" 'gradient_penalty_kwargs': {'mag_loss': True,\n",
" 'mse_mag': False,\n",
" 'mag_corr': False,\n",
" 'seq_mag': False,\n",
" 'cos_loss': False,\n",
" 'mag_corr_kwargs': {'only_sign': False},\n",
" 'cos_loss_kwargs': {'only_sign': True, 'cos_matrix': False},\n",
" 'mse_mag_kwargs': {'target': 0.1, 'multiply': False}}}"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import ml_utility_loss.loss_learning.estimator.params2 as PARAMS\n",
"from ml_utility_loss.tuning import map_parameters\n",
"from ml_utility_loss.loss_learning.estimator.params.default import update_param_space, update_param_space_2\n",
"import wandb\n",
"\n",
"#\"\"\"\n",
"param_space = {\n",
" **getattr(PARAMS, dataset_name).PARAM_SPACE,\n",
"}\n",
"params = {\n",
" **getattr(PARAMS, dataset_name).BESTS[param_index],\n",
"}\n",
"if gp:\n",
" params[\"gradient_penalty_mode\"] = \"ALL\"\n",
" params[\"mse_mag\"] = True\n",
" if gp_multiply:\n",
" params[\"mse_mag_multiply\"] = True\n",
" params[\"mse_mag_target\"] = 1.0\n",
" else:\n",
" params[\"mse_mag_multiply\"] = False\n",
" params[\"mse_mag_target\"] = 0.1\n",
"else:\n",
" params[\"gradient_penalty_mode\"] = \"NONE\"\n",
" params[\"mse_mag\"] = False\n",
"params[\"single_model\"] = False\n",
"if models:\n",
" params[\"models\"] = models\n",
"if single_model:\n",
" params[\"fixed_role_model\"] = single_model\n",
" params[\"single_model\"] = True\n",
" params[\"models\"] = [single_model]\n",
"if params[\"fixed_role_model\"] == \"realtabformer\" and dataset_name == \"treatment\":\n",
" params[\"batch_size\"] = 2\n",
"params[\"max_seconds\"] = 3600\n",
"params[\"patience\"] = 10\n",
"params[\"epochs\"] = 100\n",
"if debug:\n",
" params[\"epochs\"] = 2\n",
"with open(\"params.json\", \"w\") as f:\n",
" json.dump(params, f)\n",
"params = map_parameters(params, param_space=param_space)\n",
"params"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "a48bd9e9",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:27:06.257693Z",
"iopub.status.busy": "2024-02-29T18:27:06.257389Z",
"iopub.status.idle": "2024-02-29T18:27:06.330588Z",
"shell.execute_reply": "2024-02-29T18:27:06.329733Z"
},
"papermill": {
"duration": 0.088632,
"end_time": "2024-02-29T18:27:06.332688",
"exception": false,
"start_time": "2024-02-29T18:27:06.244056",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"load_dataset_3_factory 2\n",
"Caching in ../../../../insurance/_cache/tab_ddpm_concat/all inf False\n",
"Splitting without random!\n",
"Split with reverse index!\n",
"../../../../ml-utility-loss/datasets_2/insurance [80, 20]\n",
"Caching in ../../../../insurance/_cache4/tab_ddpm_concat/all inf False\n",
"Splitting without random!\n",
"Split with reverse index!\n",
"../../../../ml-utility-loss/datasets_4/insurance [80, 20]\n",
"Caching in ../../../../insurance/_cache5/tab_ddpm_concat/all inf False\n",
"Splitting without random!\n",
"Split with reverse index!\n",
"../../../../ml-utility-loss/datasets_5/insurance [160, 40]\n",
"[320, 80]\n",
"[320, 80]\n"
]
}
],
"source": [
"train_set, val_set = datasetsn(model=params[\"fixed_role_model\"], synth_data=params[\"synth_data\"])"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "2fcb1418",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"execution": {
"iopub.execute_input": "2024-02-29T18:27:06.361058Z",
"iopub.status.busy": "2024-02-29T18:27:06.360443Z",
"iopub.status.idle": "2024-02-29T18:27:06.783264Z",
"shell.execute_reply": "2024-02-29T18:27:06.782352Z"
},
"executionInfo": {
"elapsed": 396850,
"status": "error",
"timestamp": 1696841446059,
"user": {
"displayName": "Rizqi Nur",
"userId": "09644007964068789560"
},
"user_tz": -420
},
"id": "_bt1MQc5kpSk",
"outputId": "01c1d3e5-ac64-461d-835a-b76f4a66e6d6",
"papermill": {
"duration": 0.439025,
"end_time": "2024-02-29T18:27:06.785332",
"exception": false,
"start_time": "2024-02-29T18:27:06.346307",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Creating model of type <class 'ml_utility_loss.loss_learning.estimator.model.models.TwinEncoder'>\n",
"[*] Embedding False True\n",
"['tab_ddpm_concat'] 1\n"
]
}
],
"source": [
"from ml_utility_loss.loss_learning.estimator.model.pipeline import remove_non_model_params\n",
"from ml_utility_loss.loss_learning.estimator.pipeline import create_model\n",
"from ml_utility_loss.util import filter_dict, clear_memory\n",
"\n",
"clear_memory()\n",
"\n",
"params2 = remove_non_model_params(params)\n",
"adapters = filter_dict(preprocessor.adapter_sizes, params[\"models\"])\n",
"\n",
"model = create_model(\n",
" adapters=adapters,\n",
" #Body=\"twin_encoder\",\n",
" **params2,\n",
")\n",
"#cf.apply_weight_standardization(model, n_last_layers_ignore=0)\n",
"print(model.models, len(model.adapters))"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "938f94fc",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:27:06.814758Z",
"iopub.status.busy": "2024-02-29T18:27:06.813947Z",
"iopub.status.idle": "2024-02-29T18:27:06.818524Z",
"shell.execute_reply": "2024-02-29T18:27:06.817759Z"
},
"papermill": {
"duration": 0.021262,
"end_time": "2024-02-29T18:27:06.820462",
"exception": false,
"start_time": "2024-02-29T18:27:06.799200",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"study_name=f\"{model_name}_{dataset_name}\""
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "12fb613e",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:27:06.848255Z",
"iopub.status.busy": "2024-02-29T18:27:06.847981Z",
"iopub.status.idle": "2024-02-29T18:27:06.854747Z",
"shell.execute_reply": "2024-02-29T18:27:06.853941Z"
},
"papermill": {
"duration": 0.02231,
"end_time": "2024-02-29T18:27:06.856576",
"exception": false,
"start_time": "2024-02-29T18:27:06.834266",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"9613953"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def count_parameters(model):\n",
" return sum(p.numel() for p in model.parameters() if p.requires_grad)\n",
"\n",
"count_parameters(model)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "bd386e57",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:27:06.882937Z",
"iopub.status.busy": "2024-02-29T18:27:06.882671Z",
"iopub.status.idle": "2024-02-29T18:27:06.968606Z",
"shell.execute_reply": "2024-02-29T18:27:06.967758Z"
},
"papermill": {
"duration": 0.101194,
"end_time": "2024-02-29T18:27:06.970459",
"exception": false,
"start_time": "2024-02-29T18:27:06.869265",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"========================================================================================================================\n",
"Layer (type:depth-idx) Output Shape Param #\n",
"========================================================================================================================\n",
"MLUtilitySingle [2, 1071, 12] --\n",
"├─Adapter: 1-1 [2, 1071, 12] --\n",
"│ └─Sequential: 2-1 [2, 1071, 256] --\n",
"│ │ └─FeedForward: 3-1 [2, 1071, 1024] --\n",
"│ │ │ └─Linear: 4-1 [2, 1071, 1024] 13,312\n",
"│ │ │ └─ReLU: 4-2 [2, 1071, 1024] --\n",
"│ │ └─FeedForward: 3-2 [2, 1071, 1024] --\n",
"│ │ │ └─Linear: 4-3 [2, 1071, 1024] 1,049,600\n",
"│ │ │ └─ReLU: 4-4 [2, 1071, 1024] --\n",
"│ │ └─FeedForward: 3-3 [2, 1071, 1024] --\n",
"│ │ │ └─Linear: 4-5 [2, 1071, 1024] 1,049,600\n",
"│ │ │ └─ReLU: 4-6 [2, 1071, 1024] --\n",
"│ │ └─FeedForward: 3-4 [2, 1071, 1024] --\n",
"│ │ │ └─Linear: 4-7 [2, 1071, 1024] 1,049,600\n",
"│ │ │ └─ReLU: 4-8 [2, 1071, 1024] --\n",
"│ │ └─FeedForward: 3-5 [2, 1071, 1024] --\n",
"│ │ │ └─Linear: 4-9 [2, 1071, 1024] 1,049,600\n",
"│ │ │ └─ReLU: 4-10 [2, 1071, 1024] --\n",
"│ │ └─FeedForward: 3-6 [2, 1071, 1024] --\n",
"│ │ │ └─Linear: 4-11 [2, 1071, 1024] 1,049,600\n",
"│ │ │ └─ReLU: 4-12 [2, 1071, 1024] --\n",
"│ │ └─FeedForward: 3-7 [2, 1071, 256] --\n",
"│ │ │ └─Linear: 4-13 [2, 1071, 256] 262,400\n",
"│ │ │ └─Softsign: 4-14 [2, 1071, 256] --\n",
"├─Adapter: 1-2 [2, 267, 12] (recursive)\n",
"│ └─Sequential: 2-2 [2, 267, 256] (recursive)\n",
"│ │ └─FeedForward: 3-8 [2, 267, 1024] (recursive)\n",
"│ │ │ └─Linear: 4-15 [2, 267, 1024] (recursive)\n",
"│ │ │ └─ReLU: 4-16 [2, 267, 1024] --\n",
"│ │ └─FeedForward: 3-9 [2, 267, 1024] (recursive)\n",
"│ │ │ └─Linear: 4-17 [2, 267, 1024] (recursive)\n",
"│ │ │ └─ReLU: 4-18 [2, 267, 1024] --\n",
"│ │ └─FeedForward: 3-10 [2, 267, 1024] (recursive)\n",
"│ │ │ └─Linear: 4-19 [2, 267, 1024] (recursive)\n",
"│ │ │ └─ReLU: 4-20 [2, 267, 1024] --\n",
"│ │ └─FeedForward: 3-11 [2, 267, 1024] (recursive)\n",
"│ │ │ └─Linear: 4-21 [2, 267, 1024] (recursive)\n",
"│ │ │ └─ReLU: 4-22 [2, 267, 1024] --\n",
"│ │ └─FeedForward: 3-12 [2, 267, 1024] (recursive)\n",
"│ │ │ └─Linear: 4-23 [2, 267, 1024] (recursive)\n",
"│ │ │ └─ReLU: 4-24 [2, 267, 1024] --\n",
"│ │ └─FeedForward: 3-13 [2, 267, 1024] (recursive)\n",
"│ │ │ └─Linear: 4-25 [2, 267, 1024] (recursive)\n",
"│ │ │ └─ReLU: 4-26 [2, 267, 1024] --\n",
"│ │ └─FeedForward: 3-14 [2, 267, 256] (recursive)\n",
"│ │ │ └─Linear: 4-27 [2, 267, 256] (recursive)\n",
"│ │ │ └─Softsign: 4-28 [2, 267, 256] --\n",
"├─TwinEncoder: 1-3 [2, 4096] --\n",
"│ └─Encoder: 2-3 [2, 16, 256] --\n",
"│ │ └─ModuleList: 3-16 -- (recursive)\n",
"│ │ │ └─EncoderLayer: 4-29 [2, 1071, 256] --\n",
"│ │ │ │ └─SimpleInducedSetAttention: 5-1 [2, 1071, 256] --\n",
"│ │ │ │ │ └─TensorInductionPoint: 6-1 [2, 32, 256] 8,192\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-2 [2, 32, 256] --\n",
"│ │ │ │ │ │ └─Linear: 7-1 [2, 32, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-2 [2, 1071, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-3 [2, 1071, 256] 65,536\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-4 [2, 64, 32, 4] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-1 [2, 64, 32, 1071] --\n",
"│ │ │ │ │ │ └─Linear: 7-5 [2, 32, 256] 65,792\n",
"│ │ │ │ │ │ └─LeakyReLU: 7-6 [2, 32, 256] --\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-3 [2, 1071, 256] --\n",
"│ │ │ │ │ │ └─Linear: 7-7 [2, 1071, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-8 [2, 32, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-9 [2, 32, 256] 65,536\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-10 [2, 64, 1071, 4] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-2 [2, 64, 1071, 32] --\n",
"│ │ │ │ │ │ └─Linear: 7-11 [2, 1071, 256] 65,792\n",
"│ │ │ │ │ │ └─LeakyReLU: 7-12 [2, 1071, 256] --\n",
"│ │ │ │ └─DoubleFeedForward: 5-2 [2, 1071, 256] --\n",
"│ │ │ │ │ └─Linear: 6-4 [2, 1071, 512] 131,584\n",
"│ │ │ │ │ └─ReLU6: 6-5 [2, 1071, 512] --\n",
"│ │ │ │ │ └─Linear: 6-6 [2, 1071, 256] 131,328\n",
"│ │ │ └─EncoderLayer: 4-30 [2, 1071, 256] --\n",
"│ │ │ │ └─SimpleInducedSetAttention: 5-3 [2, 1071, 256] --\n",
"│ │ │ │ │ └─TensorInductionPoint: 6-7 [2, 32, 256] 8,192\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-8 [2, 32, 256] --\n",
"│ │ │ │ │ │ └─Linear: 7-13 [2, 32, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-14 [2, 1071, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-15 [2, 1071, 256] 65,536\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-16 [2, 64, 32, 4] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-3 [2, 64, 32, 1071] --\n",
"│ │ │ │ │ │ └─Linear: 7-17 [2, 32, 256] 65,792\n",
"│ │ │ │ │ │ └─LeakyReLU: 7-18 [2, 32, 256] --\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-9 [2, 1071, 256] --\n",
"│ │ │ │ │ │ └─Linear: 7-19 [2, 1071, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-20 [2, 32, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-21 [2, 32, 256] 65,536\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-22 [2, 64, 1071, 4] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-4 [2, 64, 1071, 32] --\n",
"│ │ │ │ │ │ └─Linear: 7-23 [2, 1071, 256] 65,792\n",
"│ │ │ │ │ │ └─LeakyReLU: 7-24 [2, 1071, 256] --\n",
"│ │ │ │ └─DoubleFeedForward: 5-4 [2, 1071, 256] --\n",
"│ │ │ │ │ └─Linear: 6-10 [2, 1071, 512] 131,584\n",
"│ │ │ │ │ └─ReLU6: 6-11 [2, 1071, 512] --\n",
"│ │ │ │ │ └─Linear: 6-12 [2, 1071, 256] 131,328\n",
"│ │ │ └─EncoderLayer: 4-31 [2, 1071, 256] --\n",
"│ │ │ │ └─SimpleInducedSetAttention: 5-5 [2, 1071, 256] --\n",
"│ │ │ │ │ └─TensorInductionPoint: 6-13 [2, 32, 256] 8,192\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-14 [2, 32, 256] --\n",
"│ │ │ │ │ │ └─Linear: 7-25 [2, 32, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-26 [2, 1071, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-27 [2, 1071, 256] 65,536\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-28 [2, 64, 32, 4] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-5 [2, 64, 32, 1071] --\n",
"│ │ │ │ │ │ └─Linear: 7-29 [2, 32, 256] 65,792\n",
"│ │ │ │ │ │ └─LeakyReLU: 7-30 [2, 32, 256] --\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-15 [2, 1071, 256] --\n",
"│ │ │ │ │ │ └─Linear: 7-31 [2, 1071, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-32 [2, 32, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-33 [2, 32, 256] 65,536\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-34 [2, 64, 1071, 4] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-6 [2, 64, 1071, 32] --\n",
"│ │ │ │ │ │ └─Linear: 7-35 [2, 1071, 256] 65,792\n",
"│ │ │ │ │ │ └─LeakyReLU: 7-36 [2, 1071, 256] --\n",
"│ │ │ │ └─DoubleFeedForward: 5-6 [2, 1071, 256] --\n",
"│ │ │ │ │ └─Linear: 6-16 [2, 1071, 512] 131,584\n",
"│ │ │ │ │ └─ReLU6: 6-17 [2, 1071, 512] --\n",
"│ │ │ │ │ └─Linear: 6-18 [2, 1071, 256] 131,328\n",
"│ │ │ └─EncoderLayer: 4-32 [2, 16, 256] --\n",
"│ │ │ │ └─SimpleInducedSetAttention: 5-7 [2, 1071, 256] --\n",
"│ │ │ │ │ └─TensorInductionPoint: 6-19 [2, 32, 256] 8,192\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-20 [2, 32, 256] --\n",
"│ │ │ │ │ │ └─Linear: 7-37 [2, 32, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-38 [2, 1071, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-39 [2, 1071, 256] 65,536\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-40 [2, 64, 32, 4] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-7 [2, 64, 32, 1071] --\n",
"│ │ │ │ │ │ └─Linear: 7-41 [2, 32, 256] 65,792\n",
"│ │ │ │ │ │ └─LeakyReLU: 7-42 [2, 32, 256] --\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-21 [2, 1071, 256] --\n",
"│ │ │ │ │ │ └─Linear: 7-43 [2, 1071, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-44 [2, 32, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-45 [2, 32, 256] 65,536\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-46 [2, 64, 1071, 4] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-8 [2, 64, 1071, 32] --\n",
"│ │ │ │ │ │ └─Linear: 7-47 [2, 1071, 256] 65,792\n",
"│ │ │ │ │ │ └─LeakyReLU: 7-48 [2, 1071, 256] --\n",
"│ │ │ │ └─DoubleFeedForward: 5-8 [2, 1071, 256] --\n",
"│ │ │ │ │ └─Linear: 6-22 [2, 1071, 512] 131,584\n",
"│ │ │ │ │ └─LeakyHardsigmoid: 6-23 [2, 1071, 512] --\n",
"│ │ │ │ │ └─Linear: 6-24 [2, 1071, 256] 131,328\n",
"│ │ │ │ └─PoolingByMultiheadAttention: 5-9 [2, 16, 256] --\n",
"│ │ │ │ │ └─TensorInductionPoint: 6-25 [2, 16, 256] 4,096\n",
"│ │ │ │ │ └─SimpleMultiHeadAttention: 6-26 [2, 16, 256] --\n",
"│ │ │ │ │ │ └─Linear: 7-49 [2, 16, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-50 [2, 1071, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-51 [2, 1071, 256] 65,536\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-52 [2, 64, 16, 4] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-9 [2, 64, 16, 1071] --\n",
"│ │ │ │ │ │ └─Linear: 7-53 [2, 16, 256] 65,792\n",
"│ │ │ │ │ │ └─LeakyReLU: 7-54 [2, 16, 256] --\n",
"│ │ │ │ └─DoubleFeedForward: 5-10 [2, 16, 256] (recursive)\n",
"│ │ │ │ │ └─Linear: 6-27 [2, 16, 512] (recursive)\n",
"│ │ │ │ │ └─LeakyHardsigmoid: 6-28 [2, 16, 512] --\n",
"│ │ │ │ │ └─Linear: 6-29 [2, 16, 256] (recursive)\n",
"│ └─Encoder: 2-4 [2, 16, 256] (recursive)\n",
"│ │ └─ModuleList: 3-16 -- (recursive)\n",
"│ │ │ └─EncoderLayer: 4-33 [2, 267, 256] (recursive)\n",
"│ │ │ │ └─SimpleInducedSetAttention: 5-11 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ └─TensorInductionPoint: 6-30 [2, 32, 256] (recursive)\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-31 [2, 32, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-55 [2, 32, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-56 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-57 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-58 [2, 64, 32, 4] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-10 [2, 64, 32, 267] --\n",
"│ │ │ │ │ │ └─Linear: 7-59 [2, 32, 256] (recursive)\n",
"│ │ │ │ │ │ └─LeakyReLU: 7-60 [2, 32, 256] --\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-32 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-61 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-62 [2, 32, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-63 [2, 32, 256] (recursive)\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-64 [2, 64, 267, 4] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-11 [2, 64, 267, 32] --\n",
"│ │ │ │ │ │ └─Linear: 7-65 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ │ └─LeakyReLU: 7-66 [2, 267, 256] --\n",
"│ │ │ │ └─DoubleFeedForward: 5-12 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ └─Linear: 6-33 [2, 267, 512] (recursive)\n",
"│ │ │ │ │ └─ReLU6: 6-34 [2, 267, 512] --\n",
"│ │ │ │ │ └─Linear: 6-35 [2, 267, 256] (recursive)\n",
"│ │ │ └─EncoderLayer: 4-34 [2, 267, 256] (recursive)\n",
"│ │ │ │ └─SimpleInducedSetAttention: 5-13 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ └─TensorInductionPoint: 6-36 [2, 32, 256] (recursive)\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-37 [2, 32, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-67 [2, 32, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-68 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-69 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-70 [2, 64, 32, 4] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-12 [2, 64, 32, 267] --\n",
"│ │ │ │ │ │ └─Linear: 7-71 [2, 32, 256] (recursive)\n",
"│ │ │ │ │ │ └─LeakyReLU: 7-72 [2, 32, 256] --\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-38 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-73 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-74 [2, 32, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-75 [2, 32, 256] (recursive)\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-76 [2, 64, 267, 4] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-13 [2, 64, 267, 32] --\n",
"│ │ │ │ │ │ └─Linear: 7-77 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ │ └─LeakyReLU: 7-78 [2, 267, 256] --\n",
"│ │ │ │ └─DoubleFeedForward: 5-14 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ └─Linear: 6-39 [2, 267, 512] (recursive)\n",
"│ │ │ │ │ └─ReLU6: 6-40 [2, 267, 512] --\n",
"│ │ │ │ │ └─Linear: 6-41 [2, 267, 256] (recursive)\n",
"│ │ │ └─EncoderLayer: 4-35 [2, 267, 256] (recursive)\n",
"│ │ │ │ └─SimpleInducedSetAttention: 5-15 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ └─TensorInductionPoint: 6-42 [2, 32, 256] (recursive)\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-43 [2, 32, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-79 [2, 32, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-80 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-81 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-82 [2, 64, 32, 4] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-14 [2, 64, 32, 267] --\n",
"│ │ │ │ │ │ └─Linear: 7-83 [2, 32, 256] (recursive)\n",
"│ │ │ │ │ │ └─LeakyReLU: 7-84 [2, 32, 256] --\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-44 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-85 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-86 [2, 32, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-87 [2, 32, 256] (recursive)\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-88 [2, 64, 267, 4] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-15 [2, 64, 267, 32] --\n",
"│ │ │ │ │ │ └─Linear: 7-89 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ │ └─LeakyReLU: 7-90 [2, 267, 256] --\n",
"│ │ │ │ └─DoubleFeedForward: 5-16 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ └─Linear: 6-45 [2, 267, 512] (recursive)\n",
"│ │ │ │ │ └─ReLU6: 6-46 [2, 267, 512] --\n",
"│ │ │ │ │ └─Linear: 6-47 [2, 267, 256] (recursive)\n",
"│ │ │ └─EncoderLayer: 4-36 [2, 16, 256] (recursive)\n",
"│ │ │ │ └─SimpleInducedSetAttention: 5-17 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ └─TensorInductionPoint: 6-48 [2, 32, 256] (recursive)\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-49 [2, 32, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-91 [2, 32, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-92 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-93 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-94 [2, 64, 32, 4] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-16 [2, 64, 32, 267] --\n",
"│ │ │ │ │ │ └─Linear: 7-95 [2, 32, 256] (recursive)\n",
"│ │ │ │ │ │ └─LeakyReLU: 7-96 [2, 32, 256] --\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-50 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-97 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-98 [2, 32, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-99 [2, 32, 256] (recursive)\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-100 [2, 64, 267, 4] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-17 [2, 64, 267, 32] --\n",
"│ │ │ │ │ │ └─Linear: 7-101 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ │ └─LeakyReLU: 7-102 [2, 267, 256] --\n",
"│ │ │ │ └─DoubleFeedForward: 5-18 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ └─Linear: 6-51 [2, 267, 512] (recursive)\n",
"│ │ │ │ │ └─LeakyHardsigmoid: 6-52 [2, 267, 512] --\n",
"│ │ │ │ │ └─Linear: 6-53 [2, 267, 256] (recursive)\n",
"│ │ │ │ └─PoolingByMultiheadAttention: 5-19 [2, 16, 256] (recursive)\n",
"│ │ │ │ │ └─TensorInductionPoint: 6-54 [2, 16, 256] (recursive)\n",
"│ │ │ │ │ └─SimpleMultiHeadAttention: 6-55 [2, 16, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-103 [2, 16, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-104 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-105 [2, 267, 256] (recursive)\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-106 [2, 64, 16, 4] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-18 [2, 64, 16, 267] --\n",
"│ │ │ │ │ │ └─Linear: 7-107 [2, 16, 256] (recursive)\n",
"│ │ │ │ │ │ └─LeakyReLU: 7-108 [2, 16, 256] --\n",
"│ │ │ │ └─DoubleFeedForward: 5-20 [2, 16, 256] (recursive)\n",
"│ │ │ │ │ └─Linear: 6-56 [2, 16, 512] (recursive)\n",
"│ │ │ │ │ └─LeakyHardsigmoid: 6-57 [2, 16, 512] --\n",
"│ │ │ │ │ └─Linear: 6-58 [2, 16, 256] (recursive)\n",
"├─Head: 1-4 [2] --\n",
"│ └─Sequential: 2-5 [2, 1] --\n",
"│ │ └─FeedForward: 3-17 [2, 128] --\n",
"│ │ │ └─Linear: 4-37 [2, 128] 524,416\n",
"│ │ │ └─RReLU: 4-38 [2, 128] --\n",
"│ │ └─FeedForward: 3-18 [2, 128] --\n",
"│ │ │ └─Linear: 4-39 [2, 128] 16,512\n",
"│ │ │ └─RReLU: 4-40 [2, 128] --\n",
"│ │ └─FeedForward: 3-19 [2, 128] --\n",
"│ │ │ └─Linear: 4-41 [2, 128] 16,512\n",
"│ │ │ └─RReLU: 4-42 [2, 128] --\n",
"│ │ └─FeedForward: 3-20 [2, 128] --\n",
"│ │ │ └─Linear: 4-43 [2, 128] 16,512\n",
"│ │ │ └─RReLU: 4-44 [2, 128] --\n",
"│ │ └─FeedForward: 3-21 [2, 128] --\n",
"│ │ │ └─Linear: 4-45 [2, 128] 16,512\n",
"│ │ │ └─RReLU: 4-46 [2, 128] --\n",
"│ │ └─FeedForward: 3-22 [2, 128] --\n",
"│ │ │ └─Linear: 4-47 [2, 128] 16,512\n",
"│ │ │ └─RReLU: 4-48 [2, 128] --\n",
"│ │ └─FeedForward: 3-23 [2, 128] --\n",
"│ │ │ └─Linear: 4-49 [2, 128] 16,512\n",
"│ │ │ └─RReLU: 4-50 [2, 128] --\n",
"│ │ └─FeedForward: 3-24 [2, 128] --\n",
"│ │ │ └─Linear: 4-51 [2, 128] 16,512\n",
"│ │ │ └─RReLU: 4-52 [2, 128] --\n",
"│ │ └─FeedForward: 3-25 [2, 1] --\n",
"│ │ │ └─Linear: 4-53 [2, 1] 129\n",
"│ │ │ └─Softsign: 4-54 [2, 1] --\n",
"========================================================================================================================\n",
"Total params: 9,613,953\n",
"Trainable params: 9,613,953\n",
"Non-trainable params: 0\n",
"Total mult-adds (M): 38.08\n",
"========================================================================================================================\n",
"Input size (MB): 0.13\n",
"Forward/backward pass size (MB): 307.47\n",
"Params size (MB): 38.46\n",
"Estimated Total Size (MB): 346.05\n",
"========================================================================================================================"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from torchinfo import summary\n",
"\n",
"role_model = params[\"fixed_role_model\"]\n",
"s = train_set[0][role_model]\n",
"summary(model[role_model], input_size=((2, *s[0].shape), (2, *s[1].shape)), depth=9) # 8 max"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "0f42c4d1",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:27:07.000684Z",
"iopub.status.busy": "2024-02-29T18:27:07.000395Z",
"iopub.status.idle": "2024-02-29T18:42:55.818307Z",
"shell.execute_reply": "2024-02-29T18:42:55.817254Z"
},
"papermill": {
"duration": 948.852675,
"end_time": "2024-02-29T18:42:55.837260",
"exception": false,
"start_time": "2024-02-29T18:27:06.984585",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[34m\u001b[1mwandb\u001b[0m: Tracking run with wandb version 0.16.3\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: W&B syncing is set to \u001b[1m`offline`\u001b[0m in this directory. \n",
"\u001b[34m\u001b[1mwandb\u001b[0m: Run \u001b[1m`wandb online`\u001b[0m or set \u001b[1mWANDB_MODE=online\u001b[0m to enable cloud syncing.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"g_loss_mul 0.1\n",
"Epoch 0\n",
"Train loss {'avg_role_model_loss': 0.0265493107464863, 'avg_role_model_std_loss': 9.705848431753656, 'avg_role_model_mean_pred_loss': 0.0019637997826472465, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.0265493107464863, 'n_size': 320, 'n_batch': 40, 'duration': 39.08715486526489, 'duration_batch': 0.9771788716316223, 'duration_size': 0.12214735895395279, 'avg_pred_std': 0.04609664692543447}\n",
"Val loss {'avg_role_model_loss': 0.012864274116873275, 'avg_role_model_std_loss': 8.93672634124523, 'avg_role_model_mean_pred_loss': 3.463389237516879e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.012864274116873275, 'n_size': 80, 'n_batch': 10, 'duration': 8.234524965286255, 'duration_batch': 0.8234524965286255, 'duration_size': 0.10293156206607819, 'avg_pred_std': 0.023089123656973243}\n",
"Epoch 1\n",
"Train loss {'avg_role_model_loss': 0.013430703204357996, 'avg_role_model_std_loss': 10.238072396071818, 'avg_role_model_mean_pred_loss': 0.0001760885078965657, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.013430703204357996, 'n_size': 320, 'n_batch': 40, 'duration': 38.923088788986206, 'duration_batch': 0.9730772197246551, 'duration_size': 0.12163465246558189, 'avg_pred_std': 0.027457697270438074}\n",
"Val loss {'avg_role_model_loss': 0.01386686596670188, 'avg_role_model_std_loss': 9.424022936335371, 'avg_role_model_mean_pred_loss': 5.71949209714262e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.01386686596670188, 'n_size': 80, 'n_batch': 10, 'duration': 8.236119270324707, 'duration_batch': 0.8236119270324707, 'duration_size': 0.10295149087905883, 'avg_pred_std': 0.019944945629686118}\n",
"Epoch 2\n",
"Train loss {'avg_role_model_loss': 0.013098158335196786, 'avg_role_model_std_loss': 6.953670260656827, 'avg_role_model_mean_pred_loss': 7.627181049958409e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.013098158335196786, 'n_size': 320, 'n_batch': 40, 'duration': 38.896809816360474, 'duration_batch': 0.9724202454090118, 'duration_size': 0.12155253067612648, 'avg_pred_std': 0.03701225146651268}\n",
"Val loss {'avg_role_model_loss': 0.011231413613131735, 'avg_role_model_std_loss': 4.642900250397725, 'avg_role_model_mean_pred_loss': 1.232088975626766e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.011231413613131735, 'n_size': 80, 'n_batch': 10, 'duration': 8.272239923477173, 'duration_batch': 0.8272239923477173, 'duration_size': 0.10340299904346466, 'avg_pred_std': 0.031016640178859235}\n",
"Epoch 3\n",
"Train loss {'avg_role_model_loss': 0.013012661421089432, 'avg_role_model_std_loss': 6.77741541211999, 'avg_role_model_mean_pred_loss': 0.00014677781123761946, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.013012661421089432, 'n_size': 320, 'n_batch': 40, 'duration': 39.03108096122742, 'duration_batch': 0.9757770240306854, 'duration_size': 0.12197212800383568, 'avg_pred_std': 0.040795679786242545}\n",
"Val loss {'avg_role_model_loss': 0.010680149483960122, 'avg_role_model_std_loss': 5.439762359634369, 'avg_role_model_mean_pred_loss': 8.51207419643174e-06, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.010680149483960122, 'n_size': 80, 'n_batch': 10, 'duration': 8.236795425415039, 'duration_batch': 0.8236795425415039, 'duration_size': 0.10295994281768799, 'avg_pred_std': 0.02782872337847948}\n",
"Epoch 4\n",
"Train loss {'avg_role_model_loss': 0.012592662169481628, 'avg_role_model_std_loss': 6.8064604322151805, 'avg_role_model_mean_pred_loss': 0.00012719917820476213, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.012592662169481628, 'n_size': 320, 'n_batch': 40, 'duration': 38.966336727142334, 'duration_batch': 0.9741584181785583, 'duration_size': 0.12176980227231979, 'avg_pred_std': 0.03671876427251845}\n",
"Val loss {'avg_role_model_loss': 0.012881963208201341, 'avg_role_model_std_loss': 16.157494982505522, 'avg_role_model_mean_pred_loss': 0.00010115250418607502, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.012881963208201341, 'n_size': 80, 'n_batch': 10, 'duration': 8.331452369689941, 'duration_batch': 0.8331452369689941, 'duration_size': 0.10414315462112426, 'avg_pred_std': 0.012491705431602895}\n",
"Epoch 5\n",
"Train loss {'avg_role_model_loss': 0.013670370759791694, 'avg_role_model_std_loss': 10.748200260194086, 'avg_role_model_mean_pred_loss': 0.0001568969438597634, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.013670370759791694, 'n_size': 320, 'n_batch': 40, 'duration': 38.94208788871765, 'duration_batch': 0.9735521972179413, 'duration_size': 0.12169402465224266, 'avg_pred_std': 0.029897483938839287}\n",
"Val loss {'avg_role_model_loss': 0.014085652580251917, 'avg_role_model_std_loss': 22.363185199221174, 'avg_role_model_mean_pred_loss': 0.00020219407759825003, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.014085652580251917, 'n_size': 80, 'n_batch': 10, 'duration': 8.2787184715271, 'duration_batch': 0.82787184715271, 'duration_size': 0.10348398089408875, 'avg_pred_std': 0.009641142934560776}\n",
"Epoch 6\n",
"Train loss {'avg_role_model_loss': 0.014017040852922946, 'avg_role_model_std_loss': 10.649183725507465, 'avg_role_model_mean_pred_loss': 0.00013577813718335108, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.014017040852922946, 'n_size': 320, 'n_batch': 40, 'duration': 38.94879508018494, 'duration_batch': 0.9737198770046234, 'duration_size': 0.12171498462557792, 'avg_pred_std': 0.028363983915187418}\n",
"Val loss {'avg_role_model_loss': 0.01068424858385697, 'avg_role_model_std_loss': 3.8434145080467714, 'avg_role_model_mean_pred_loss': 1.0552424407705985e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.01068424858385697, 'n_size': 80, 'n_batch': 10, 'duration': 8.305310726165771, 'duration_batch': 0.8305310726165771, 'duration_size': 0.10381638407707214, 'avg_pred_std': 0.03533868733793497}\n",
"Epoch 7\n",
"Train loss {'avg_role_model_loss': 0.011766438081394881, 'avg_role_model_std_loss': 8.660977102358947, 'avg_role_model_mean_pred_loss': 8.090821406305792e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.011766438081394881, 'n_size': 320, 'n_batch': 40, 'duration': 38.78416681289673, 'duration_batch': 0.9696041703224182, 'duration_size': 0.12120052129030227, 'avg_pred_std': 0.04158601735252887}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Val loss {'avg_role_model_loss': 0.012133054883452132, 'avg_role_model_std_loss': 20.211999930033198, 'avg_role_model_mean_pred_loss': 2.2262640635517526e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.012133054883452132, 'n_size': 80, 'n_batch': 10, 'duration': 8.369733810424805, 'duration_batch': 0.8369733810424804, 'duration_size': 0.10462167263031005, 'avg_pred_std': 0.010681234044022858}\n",
"Epoch 8\n",
"Train loss {'avg_role_model_loss': 0.012191647826693953, 'avg_role_model_std_loss': 7.005204355998285, 'avg_role_model_mean_pred_loss': 9.821474643096905e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.012191647826693953, 'n_size': 320, 'n_batch': 40, 'duration': 38.88823890686035, 'duration_batch': 0.9722059726715088, 'duration_size': 0.1215257465839386, 'avg_pred_std': 0.03872000898700208}\n",
"Val loss {'avg_role_model_loss': 0.014966235030442476, 'avg_role_model_std_loss': 9.767283525761012, 'avg_role_model_mean_pred_loss': 0.0001517352883070089, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.014966235030442476, 'n_size': 80, 'n_batch': 10, 'duration': 8.22826075553894, 'duration_batch': 0.8228260755538941, 'duration_size': 0.10285325944423676, 'avg_pred_std': 0.01799462023191154}\n",
"Epoch 9\n",
"Train loss {'avg_role_model_loss': 0.012526353562134319, 'avg_role_model_std_loss': 6.590273188782885, 'avg_role_model_mean_pred_loss': 7.7691583878714e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.012526353562134319, 'n_size': 320, 'n_batch': 40, 'duration': 38.93899869918823, 'duration_batch': 0.9734749674797059, 'duration_size': 0.12168437093496323, 'avg_pred_std': 0.03674360387958586}\n",
"Val loss {'avg_role_model_loss': 0.012331876624375581, 'avg_role_model_std_loss': 18.443907407086634, 'avg_role_model_mean_pred_loss': 6.805989072731223e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.012331876624375581, 'n_size': 80, 'n_batch': 10, 'duration': 8.421772003173828, 'duration_batch': 0.8421772003173829, 'duration_size': 0.10527215003967286, 'avg_pred_std': 0.01039172657765448}\n",
"Epoch 10\n",
"Train loss {'avg_role_model_loss': 0.012064280622871593, 'avg_role_model_std_loss': 9.317451603279006, 'avg_role_model_mean_pred_loss': 3.690295125249321e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.012064280622871593, 'n_size': 320, 'n_batch': 40, 'duration': 39.005112171173096, 'duration_batch': 0.9751278042793274, 'duration_size': 0.12189097553491593, 'avg_pred_std': 0.0359303968725726}\n",
"Val loss {'avg_role_model_loss': 0.01261272220290266, 'avg_role_model_std_loss': 10.194672084533522, 'avg_role_model_mean_pred_loss': 5.446935015456234e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.01261272220290266, 'n_size': 80, 'n_batch': 10, 'duration': 8.333169937133789, 'duration_batch': 0.8333169937133789, 'duration_size': 0.10416462421417236, 'avg_pred_std': 0.01722581619396806}\n",
"Epoch 11\n",
"Train loss {'avg_role_model_loss': 0.012482693148194812, 'avg_role_model_std_loss': 8.178162423045615, 'avg_role_model_mean_pred_loss': 9.780007754767173e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.012482693148194812, 'n_size': 320, 'n_batch': 40, 'duration': 38.96896147727966, 'duration_batch': 0.9742240369319916, 'duration_size': 0.12177800461649894, 'avg_pred_std': 0.03824995262548327}\n",
"Val loss {'avg_role_model_loss': 0.012514100689440966, 'avg_role_model_std_loss': 19.314230701327325, 'avg_role_model_mean_pred_loss': 7.543949816977147e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.012514100689440966, 'n_size': 80, 'n_batch': 10, 'duration': 8.239241361618042, 'duration_batch': 0.8239241361618042, 'duration_size': 0.10299051702022552, 'avg_pred_std': 0.009454242698848248}\n",
"Epoch 12\n",
"Train loss {'avg_role_model_loss': 0.01332451379566919, 'avg_role_model_std_loss': 10.310542043212262, 'avg_role_model_mean_pred_loss': 0.0003665929893701819, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.01332451379566919, 'n_size': 320, 'n_batch': 40, 'duration': 39.00809144973755, 'duration_batch': 0.9752022862434387, 'duration_size': 0.12190028578042984, 'avg_pred_std': 0.027350465022027492}\n",
"Val loss {'avg_role_model_loss': 0.010987071882118471, 'avg_role_model_std_loss': 4.729085849918556, 'avg_role_model_mean_pred_loss': 8.189743033426566e-06, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.010987071882118471, 'n_size': 80, 'n_batch': 10, 'duration': 8.261511325836182, 'duration_batch': 0.8261511325836182, 'duration_size': 0.10326889157295227, 'avg_pred_std': 0.03069485481828451}\n",
"Epoch 13\n",
"Train loss {'avg_role_model_loss': 0.013592794616124592, 'avg_role_model_std_loss': 7.457387926033698, 'avg_role_model_mean_pred_loss': 0.000220215535729551, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.013592794616124592, 'n_size': 320, 'n_batch': 40, 'duration': 38.93746519088745, 'duration_batch': 0.9734366297721863, 'duration_size': 0.12167957872152328, 'avg_pred_std': 0.03546805907972157}\n",
"Val loss {'avg_role_model_loss': 0.011548876191955059, 'avg_role_model_std_loss': 6.165951245542237, 'avg_role_model_mean_pred_loss': 1.5450504935188292e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.011548876191955059, 'n_size': 80, 'n_batch': 10, 'duration': 8.323935985565186, 'duration_batch': 0.8323935985565185, 'duration_size': 0.10404919981956481, 'avg_pred_std': 0.026838560402393342}\n",
"Epoch 14\n",
"Train loss {'avg_role_model_loss': 0.013447031378746033, 'avg_role_model_std_loss': 8.19890535405798, 'avg_role_model_mean_pred_loss': 0.00016373289685844838, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.013447031378746033, 'n_size': 320, 'n_batch': 40, 'duration': 38.8496150970459, 'duration_batch': 0.9712403774261474, 'duration_size': 0.12140504717826843, 'avg_pred_std': 0.029747568373568355}\n",
"Val loss {'avg_role_model_loss': 0.011828925088047981, 'avg_role_model_std_loss': 5.351523938098455, 'avg_role_model_mean_pred_loss': 2.9337766557091526e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.011828925088047981, 'n_size': 80, 'n_batch': 10, 'duration': 8.288572311401367, 'duration_batch': 0.8288572311401368, 'duration_size': 0.1036071538925171, 'avg_pred_std': 0.0307698548771441}\n",
"Epoch 15\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train loss {'avg_role_model_loss': 0.01384369531297125, 'avg_role_model_std_loss': 8.665561918970889, 'avg_role_model_mean_pred_loss': 0.00016956335028766033, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.01384369531297125, 'n_size': 320, 'n_batch': 40, 'duration': 38.970547676086426, 'duration_batch': 0.9742636919021607, 'duration_size': 0.12178296148777008, 'avg_pred_std': 0.03315324831055477}\n",
"Val loss {'avg_role_model_loss': 0.01150583740673028, 'avg_role_model_std_loss': 6.560287872780464, 'avg_role_model_mean_pred_loss': 1.5260961676233363e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.01150583740673028, 'n_size': 80, 'n_batch': 10, 'duration': 8.322679042816162, 'duration_batch': 0.8322679042816162, 'duration_size': 0.10403348803520203, 'avg_pred_std': 0.0259027692489326}\n",
"Epoch 16\n",
"Train loss {'avg_role_model_loss': 0.012172109389211982, 'avg_role_model_std_loss': 7.0008499470219245, 'avg_role_model_mean_pred_loss': 7.735751830111326e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.012172109389211982, 'n_size': 320, 'n_batch': 40, 'duration': 39.07010316848755, 'duration_batch': 0.9767525792121887, 'duration_size': 0.12209407240152359, 'avg_pred_std': 0.03525363316293806}\n",
"Val loss {'avg_role_model_loss': 0.012191956081369425, 'avg_role_model_std_loss': 7.897130101547532, 'avg_role_model_mean_pred_loss': 2.3637969795231585e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.012191956081369425, 'n_size': 80, 'n_batch': 10, 'duration': 8.288463592529297, 'duration_batch': 0.8288463592529297, 'duration_size': 0.10360579490661621, 'avg_pred_std': 0.022672764584422113}\n",
"Epoch 17\n",
"Train loss {'avg_role_model_loss': 0.012383807837613859, 'avg_role_model_std_loss': 4.774037581340053, 'avg_role_model_mean_pred_loss': 0.00011500121783720729, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.012383807837613859, 'n_size': 320, 'n_batch': 40, 'duration': 38.94200682640076, 'duration_batch': 0.9735501706600189, 'duration_size': 0.12169377133250237, 'avg_pred_std': 0.04339534998871386}\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[34m\u001b[1mwandb\u001b[0m: \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Val loss {'avg_role_model_loss': 0.012275835702894256, 'avg_role_model_std_loss': 9.627914267603774, 'avg_role_model_mean_pred_loss': 4.899254280417153e-05, 'avg_role_model_g_mag_loss': 0.0, 'avg_role_model_g_cos_loss': 0.0, 'avg_non_role_model_g_mag_loss': 0.0, 'avg_non_role_model_g_cos_loss': 0.0, 'avg_non_role_model_embed_loss': 0.0, 'avg_loss': 0.012275835702894256, 'n_size': 80, 'n_batch': 10, 'duration': 8.323761701583862, 'duration_batch': 0.8323761701583863, 'duration_size': 0.10404702126979828, 'avg_pred_std': 0.018597377510741354}\n",
"Stopped False\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[34m\u001b[1mwandb\u001b[0m: \n",
"\u001b[34m\u001b[1mwandb\u001b[0m: Run history:\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_loss_test ▅▆▂▁▅▇▁▃█▄▄▄▂▂▃▂▃▄\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_loss_train █▂▂▂▁▂▂▁▁▁▁▁▂▂▂▂▁▁\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_embed_loss_test ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_embed_loss_train ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_cos_loss_test ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_cos_loss_train ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_mag_loss_test ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_mag_loss_train ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_pred_std_test ▅▄▇▆▂▁█▁▃▁▃▁▇▆▇▅▅▃\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_pred_std_train █▁▅▆▄▂▁▆▅▅▄▅▁▄▂▃▄▇\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_cos_loss_test ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_cos_loss_train ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_mag_loss_test ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_mag_loss_train ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_loss_test ▅▆▂▁▅▇▁▃█▄▄▄▂▂▃▂▃▄\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_loss_train █▂▂▂▁▂▂▁▁▁▁▁▂▂▂▂▁▁\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_mean_pred_loss_test ▂▃▁▁▄█▁▂▆▃▃▃▁▁▂▁▂▂\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_mean_pred_loss_train █▂▁▁▁▁▁▁▁▁▁▁▂▂▁▁▁▁\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_std_loss_test ▃▃▁▂▆█▁▇▃▇▃▇▁▂▂▂▃▃\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_std_loss_train ▇▇▄▃▃██▆▄▃▆▅▇▄▅▆▄▁\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: duration_batch_test ▁▁▃▁▅▃▄▆▁█▅▁▂▄▃▄▃▄\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: duration_batch_train █▄▄▇▅▅▅▁▃▅▆▅▆▅▃▅█▅\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: duration_size_test ▁▁▃▁▅▃▄▆▁█▅▁▂▄▃▄▃▄\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: duration_size_train █▄▄▇▅▅▅▁▃▅▆▅▆▅▃▅█▅\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: duration_test ▁▁▃▁▅▃▄▆▁█▅▁▂▄▃▄▃▄\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: duration_train █▄▄▇▅▅▅▁▃▅▆▅▆▅▃▅█▅\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: n_batch_test ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: n_batch_train ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: n_size_test ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: n_size_train ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: \n",
"\u001b[34m\u001b[1mwandb\u001b[0m: Run summary:\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_loss_test 0.01228\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_loss_train 0.01238\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_embed_loss_test 0.0\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_embed_loss_train 0.0\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_cos_loss_test 0.0\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_cos_loss_train 0.0\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_mag_loss_test 0.0\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_non_role_model_g_mag_loss_train 0.0\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_pred_std_test 0.0186\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_pred_std_train 0.0434\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_cos_loss_test 0.0\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_cos_loss_train 0.0\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_mag_loss_test 0.0\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_g_mag_loss_train 0.0\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_loss_test 0.01228\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_loss_train 0.01238\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_mean_pred_loss_test 5e-05\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_mean_pred_loss_train 0.00012\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_std_loss_test 9.62791\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: avg_role_model_std_loss_train 4.77404\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: duration_batch_test 0.83238\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: duration_batch_train 0.97355\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: duration_size_test 0.10405\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: duration_size_train 0.12169\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: duration_test 8.32376\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: duration_train 38.94201\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: n_batch_test 10\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: n_batch_train 40\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: n_size_test 80\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: n_size_train 320\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: \n",
"\u001b[34m\u001b[1mwandb\u001b[0m: You can sync this run to the cloud by running:\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[1mwandb sync /kaggle/working/eval/insurance/tab_ddpm_concat/4/wandb/offline-run-20240229_182708-etiddam5\u001b[0m\n",
"\u001b[34m\u001b[1mwandb\u001b[0m: Find logs at: \u001b[35m\u001b[1m./wandb/offline-run-20240229_182708-etiddam5/logs\u001b[0m\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Eval loss {'role_model': 'tab_ddpm_concat', 'n_size': 399, 'n_batch': 50, 'role_model_metrics': {'avg_loss': 0.01993635216760531, 'avg_g_mag_loss': 0.6526490935406888, 'avg_g_cos_loss': 4.4486220484027385e-08, 'pred_duration': 0.8737220764160156, 'grad_duration': 0.5640714168548584, 'total_duration': 1.437793493270874, 'pred_std': 0.053181204944849014, 'std_loss': 0.7849577069282532, 'mean_pred_loss': 1.8548063962953165e-05, 'pred_rmse': 0.141196146607399, 'pred_mae': 0.0972040668129921, 'pred_mape': 0.7692168354988098, 'grad_rmse': 0.28230687975883484, 'grad_mae': 0.19419056177139282, 'grad_mape': 0.9970712065696716}, 'non_role_model_metrics': {'avg_loss': 0, 'avg_g_mag_loss': 0, 'avg_g_cos_loss': 0, 'avg_pred_duration': 0, 'avg_grad_duration': 0, 'avg_total_duration': 0, 'avg_pred_std': 0, 'avg_std_loss': 0, 'avg_mean_pred_loss': 0}, 'avg_metrics': {'avg_loss': 0.01993635216760531, 'avg_g_mag_loss': 0.6526490935406888, 'avg_g_cos_loss': 4.4486220484027385e-08, 'avg_pred_duration': 0.8737220764160156, 'avg_grad_duration': 0.5640714168548584, 'avg_total_duration': 1.437793493270874, 'avg_pred_std': 0.053181204944849014, 'avg_std_loss': 0.7849577069282532, 'avg_mean_pred_loss': 1.8548063962953165e-05}, 'min_metrics': {'avg_loss': 0.01993635216760531, 'avg_g_mag_loss': 0.6526490935406888, 'avg_g_cos_loss': 4.4486220484027385e-08, 'pred_duration': 0.8737220764160156, 'grad_duration': 0.5640714168548584, 'total_duration': 1.437793493270874, 'pred_std': 0.053181204944849014, 'std_loss': 0.7849577069282532, 'mean_pred_loss': 1.8548063962953165e-05, 'pred_rmse': 0.141196146607399, 'pred_mae': 0.0972040668129921, 'pred_mape': 0.7692168354988098, 'grad_rmse': 0.28230687975883484, 'grad_mae': 0.19419056177139282, 'grad_mape': 0.9970712065696716}, 'model_metrics': {'tab_ddpm_concat': {'avg_loss': 0.01993635216760531, 'avg_g_mag_loss': 0.6526490935406888, 'avg_g_cos_loss': 4.4486220484027385e-08, 'pred_duration': 0.8737220764160156, 'grad_duration': 0.5640714168548584, 'total_duration': 1.437793493270874, 'pred_std': 0.053181204944849014, 'std_loss': 0.7849577069282532, 'mean_pred_loss': 1.8548063962953165e-05, 'pred_rmse': 0.141196146607399, 'pred_mae': 0.0972040668129921, 'pred_mape': 0.7692168354988098, 'grad_rmse': 0.28230687975883484, 'grad_mae': 0.19419056177139282, 'grad_mape': 0.9970712065696716}}}\n"
]
}
],
"source": [
"import torch\n",
"from ml_utility_loss.loss_learning.estimator.pipeline import train, train_2\n",
"from ml_utility_loss.loss_learning.estimator.process_simple import train_epoch, eval as _eval\n",
"from ml_utility_loss.params import GradientPenaltyMode\n",
"from ml_utility_loss.util import clear_memory\n",
"import time\n",
"#torch.autograd.set_detect_anomaly(True)\n",
"\n",
"clear_memory()\n",
"\n",
"opt = params[\"Optim\"](model.parameters())\n",
"loss = train_2(\n",
" [train_set, val_set, test_set],\n",
" preprocessor=preprocessor,\n",
" whole_model=model,\n",
" optim=opt,\n",
" log_dir=\"logs\",\n",
" checkpoint_dir=\"checkpoints\",\n",
" verbose=True,\n",
" allow_same_prediction=allow_same_prediction,\n",
" wandb=wandb,\n",
" study_name=study_name,\n",
" **params\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "9b514a07",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:42:55.875215Z",
"iopub.status.busy": "2024-02-29T18:42:55.874907Z",
"iopub.status.idle": "2024-02-29T18:42:55.879007Z",
"shell.execute_reply": "2024-02-29T18:42:55.878119Z"
},
"papermill": {
"duration": 0.025079,
"end_time": "2024-02-29T18:42:55.880936",
"exception": false,
"start_time": "2024-02-29T18:42:55.855857",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"model = loss[\"whole_model\"]\n",
"opt = loss[\"optim\"]"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "331a49e1",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:42:55.915833Z",
"iopub.status.busy": "2024-02-29T18:42:55.915549Z",
"iopub.status.idle": "2024-02-29T18:42:55.991917Z",
"shell.execute_reply": "2024-02-29T18:42:55.990964Z"
},
"papermill": {
"duration": 0.096139,
"end_time": "2024-02-29T18:42:55.994052",
"exception": false,
"start_time": "2024-02-29T18:42:55.897913",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"import torch\n",
"from copy import deepcopy\n",
"\n",
"torch.save(deepcopy(model.state_dict()), \"model.pt\")\n",
"#torch.save(deepcopy(opt.state_dict()), \"optim.pt\")"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "123b4b17",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:42:56.032185Z",
"iopub.status.busy": "2024-02-29T18:42:56.031896Z",
"iopub.status.idle": "2024-02-29T18:42:56.328976Z",
"shell.execute_reply": "2024-02-29T18:42:56.328057Z"
},
"papermill": {
"duration": 0.319257,
"end_time": "2024-02-29T18:42:56.331162",
"exception": false,
"start_time": "2024-02-29T18:42:56.011905",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"<Axes: >"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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MJGRkWzbto1u3bqxbt26et3vRpEFSEhIYNy4cdx3332sX7+elJQU/vnPf950YeHvQ2KVStXgkWCksNURV4OwyR7brcjFixdJS0vjjTfeYOjQoXTt2pW//vrLyObBBx+kpKSEzZs3s2LFCsaNG2co69y5MxUVFaSkpBjOnThxolIdtaVr167s37+foqIiw7k//vgDKysrOnfubDjXp08fZs+eza5du+jRowcrVqwwlAUGBjJz5ky2bNnCww8/zLJly256X7VabdjvezN27dqFv78///znP+nXrx+dOnUyLF40NaSw1REXe8WXTQrbrYmbmxvu7u588sknnDhxgm3bthEdHW1k06JFC6KiopgzZw5Hjx5l7NixhrIuXboQHh7O1KlTSUxMJCUlhalTp2Jvb1+nvY7jxo3Dzs6OiRMncujQIbZv385zzz3H+PHj8fLyIj09ndmzZ5OQkMCZM2fYsmULx48fp2vXrly9epUZM2awY8cOzpw5wx9//MHevXuN5uCqIyAggMLCQuLj48nLy6O4uLha206dOpGRkcHKlSs5efIk77//fr17hQ2FFLY6oh+KSifdWxMrKytWrlxJUlISPXr0YObMmbz33nuV7MaNG8f+/fsZOHAgbdu2NSr76quv8PLyYtCgQTz00EOGFUI7OzuT2+Pg4MAvv/zCpUuXuOOOO3jkkUcYOnQoH3zwgaH82LFjjBo1isDAQKZOncr06dOZNm0a1tbWXLx4kQkTJhAYGMjo0aMZMWIE8+fPv+l9+/fvzzPPPMOYMWNo1aoVCxYsqNZ25MiRzJw5kxkzZtC7d2927drFnDlzTH7WxkAlTHX+acYUFBTg4uJCfn7+TSdEP9l5krc3HuOhPq3595jejdPAJkhJSQnp6em0a9euTl/o5sS5c+fw8/Nj69atDB061NLNuWWp7jNlyvdTrorWEVfDUFT22G5Xtm3bRmFhIUFBQWRlZfHqq68SEBDAoEGDLN202x45FK0jroahqJxju10pLy/n9ddfp3v37jz00EO0atXK4Kz7zTff4OjoWOXRvXv3RmvjiBEjqm3H22+/3WjtaGzqJGxLly4lICAAOzs7QkNDSUxMrNF+zZo1dOnSBTs7O4KCgti4caOhrLy8nFmzZhEUFESLFi3w9fVlwoQJZGZmGtUREBBg2PahP9555x0jmwMHDjBw4EDs7Ozw8/Orcb6gvrhei8mWL/3YblsiIiI4dOgQxcXF5OTksG7dOvz9/QFlPio1NbXK48bPf0Pz2WefVduOZ555ptHa0egIE1m5cqVQq9Xiiy++EIcPHxZTpkwRrq6uIicnp0r7P/74Q1hbW4sFCxaII0eOiDfeeEPY2tqKgwcPCiGEuHz5sggPDxerVq0Sx44dEwkJCSIkJEQEBwcb1ePv7y/efPNNkZWVZTgKCwsN5fn5+cLLy0uMGzdOHDp0SHz77bfC3t5efPzxx7V+tvz8fAGI/Pz8m9qmZRcI/1nrRe/5v9S6/ubI1atXxZEjR8TVq1ct3RRJM6G6z5Qp30+ThS0kJERMnz7d8LtWqxW+vr4iNja2SvvRo0eLyMhIo3OhoaFi2rRp1d4jMTFRAOLMmTOGc/7+/uLf//53tdf897//FW5ubqK0tNRwbtasWaJz587VXlNSUiLy8/MNx9mzZ2v9xuUUXBX+s9aLdq+tF1qt7qb2zRUpbBJzYw5hM2koWlZWRlJSEuHh4YZzVlZWhIeHk5CQUOU1CQkJRvagdOGrswcM0Qb+HifqnXfewd3dnT59+vDee+9RUXE9skZCQgKDBg0ySioSERFBWlpatU6TsbGxuLi4GA4/P79q2/R39BvfdQKulMgIHxJJU8IkYcvLy0Or1eLl5WV03svLi+zs7Cqvyc7ONsm+pKSEWbNmMXbsWKMl3eeff56VK1eyfft2pk2bxttvv2208ba6++jLqmL27Nnk5+cbjrNnz1bz5JXRR/gAuHxVroxKJE2JJuXuUV5ezujRoxFC8OGHHxqV3egV3rNnT9RqNdOmTSM2NhaNRlOn+2k0mjpfC0pSl+Kyq/wlI3xIJE0Kk3psHh4eWFtbk5OTY3Q+JyenyrAnAN7e3rWy14vamTNniIuLu6kDXmhoKBUVFZw+fbrG++jLGgL9cFT6skkkTQuThE2tVhMcHGwU01yn0xEfH09YWFiV14SFhVWKgR4XF2dkrxe148ePs3Xr1lqFFk5NTcXKygpPT0/DfXbu3GkUmTMuLo7OnTvXOZTMzdD7skmXD0ldaI7JXJoKJvuxRUdH8+mnn/Lll19y9OhR/vGPf1BUVMSkSZMAJaro7NmzDfYvvPACmzdvZtGiRRw7dox58+axb98+ZsyYASii9sgjj7Bv3z6++eYbtFot2dnZZGdnG8KhJCQksHjxYvbv38+pU6f45ptvmDlzJk888YRBtB5//HHUajWTJ0/m8OHDrFq1iv/85z+VNjabE0N+0SLZY5Pcmpg7mQsoIcdVKhWXL182a72mYPIc25gxY7hw4QJz584lOzub3r17s3nzZsNEfUZGBlZW1/Wyf//+rFixgjfeeIPXX3+dTp068cMPP9CjRw8Azp8/z08//QRQKW3X9u3bufvuu9FoNKxcuZJ58+ZRWlpKu3btmDlzppFoubi4sGXLFqZPn05wcDAeHh7MnTvXEKu9IZD5RSWSJkoDuaLckpjiJyOEEO9uOir8Z60XMT8eauCWNV0q+RzpdEKUFlrm0JnmT7hp0yZx1113CRcXF9GyZUsRGRkpTpw4IYQQIiwsTLz66qtG9rm5ucLGxkb8+uuvQgghMjMzxX333Sfs7OxEQECA+Oabb27qb3kjgFi3bp3h9wMHDoh77rlH2NnZiZYtW4opU6aIK1euGMq3b98u7rjjDuHg4CBcXFxE//79xenTp4UQQqSmpoq7775bODo6CicnJ9G3b1+xd+/eGu+/fft2ARgdMTExQgjFx/Oll14Svr6+wsHBQYSEhIjt27cbrj19+rS4//77haurq3BwcBDdunUTGzZsEOnp6ZXqnDhxYq3eDz3m8GNrUquitxr6oahcPLiB8mJ429cy9349E9Qtbm53DZnMpfpkLjNmzODIkSOsXLkSX19f1q1bx/Dhwzl48CCdOnVi+vTplJWVsXPnTlq0aMGRI0dwdHTEz8+P77//nlGjRpGWloazszP29vZ1ek/qgxS2eiCHorc2MplL1clcMjIyWLZsGRkZGfj6Kv+kXn75ZTZv3syyZct4++23ycjIYNSoUYZQ6e3btzdc37JlSwA8PT3NPn9XW6Sw1QNXexkevBK2DkrPyVL3NgGZzKVqDh48iFarJTAw0Oh8aWmpwWPh+eef5x//+AdbtmwhPDycUaNG0bNnzzrdryGQYYvqgVsLORSthEqlDActcchkLmZJ5lJYWIi1tTVJSUlG0UCOHj3Kf/7zHwCefvppTp06xfjx4zl48CD9+vVjyZIlZnvW+iKFrR4YemxyKHrLIZO5KFSVzKVPnz5otVpyc3Pp2LGj0XHjkNXPz49nnnmGtWvX8tJLL/Hpp58a6gRqnSSmIZDCVg9cbnDQ1elkhPVbCZnMRaGqZC6BgYGMGzeOCRMmsHbtWtLT00lMTCQ2NpYNGzYA8OKLL/LLL7+Qnp5OcnIy27dvN9zP398flUrF+vXruXDhAoWFhSa/H/XGpHXYZo6p7h6l5VrhP2u98J+1XvxVVHrzC5oht3LYori4ONG1a1eh0WhEz549xY4dOyq5YGzcuFEAYtCgQZWuz8zMFCNGjBAajUb4+/uLFStWCE9PT/HRRx/V6v5/v1dN7h7Z2dkiKipK+Pj4CLVaLfz9/cXcuXOFVqsVpaWl4rHHHhN+fn5CrVYLX19fMWPGjFr/TZ555hnh7u5u5O5RVlYm5s6dKwICAoStra3w8fERDz30kDhw4IAQQogZM2aIDh06CI1GI1q1aiXGjx8v8vLyDHW++eabwtvbW6hUKou4e8hkLjdgSrIIPd3nbqaoTMuOl+8mwKP2rgbNBZnM5ToymYt5kMlcmgCuDmqKyq7KebbbEJnMpeki59jqiavML3rbIpO5NF1kj62eGCJ8SF+2246IiAgiIiKqLBs5ciShoaFVlt1sR4A5+eyzz7h69WqVZXpH2uaIFLZ6IvOLSqrCyckJJycnSzeD1q1bW7oJFkEOReuJzC+qINegJObCHJ8lKWz15HYPNmltreR90HvrSyT1pbi4GKjfkF0OReuJfih6uy4e2NjY4ODgwIULF7C1tTWKxSeRmIIQguLiYnJzc3F1dTX806wLUtjqib7HdrtuhFepVPj4+JCens6ZM2cs3RxJM8DV1bXeeUqksNUTV31Mttt0KArK3sBOnTrJ4aik3tja2tarp6ZHCls9ud5ju72/1FZWVrf9zgNJ00FOiNQTt9t8KCqRNEWksNUTl2uLBwUl5WhlhA+JpEkgha2e6JMmCwEFt/E8m0TSlJDCVk/UNlY4apSpytt5AUEiaUrUSdiWLl1KQEAAdnZ2hIaGkpiYWKP9mjVr6NKlC3Z2dgQFBbFx40ZDWXl5ObNmzSIoKIgWLVrg6+vLhAkTyMy8Hjf/9OnTTJ48mXbt2mFvb0+HDh2IiYkxWoU7ffo0KpWq0qEPndyQuNjLBQSJpClhsrCtWrWK6OhoYmJiSE5OplevXkRERFSbdmzXrl2MHTuWyZMnk5KSQlRUFFFRURw6dAhQvIyTk5OZM2cOycnJrF27lrS0NEaOHGmo49ixY+h0Oj7++GMOHz7Mv//9bz766CNef/31SvfbunUrWVlZhiM4ONjURzSZ292XTSJpcpgU2lIIERISIqZPn274XavVCl9fXxEbG1ul/ejRo0VkZKTRudDQUDFt2rRq75GYmCgAcebMmWptFixYINq1a2f4XZ+oNSUlpZZPoiSFzc/PNxxnz541KYKunnGf7hb+s9aLtclnTbpOIpHUHlMi6JrUYysrKyMpKYnw8HDDOSsrK8LDw0lISKjymoSEBCN7UMK9VGcPkJ+fj0qlqjEnYX5+fpVhV0aOHImnpycDBgzgp59+qvF5YmNjcXFxMRx+fn412leHi+yxSSRNCpOELS8vD61Wi5eXl9F5Ly8vsrOzq7wmOzvbJPuSkhJmzZrF2LFjqw3/e+LECZYsWcK0adMM5xwdHVm0aBFr1qxhw4YNDBgwgKioqBrFbfbs2eTn5xuOs2fPVmtbE/psVbd7hA+JpKnQpHYelJeXM3r0aIQQfPjhh1XanD9/nuHDh/Poo48yZcoUw3kPDw+jLEN33HEHmZmZvPfee0bzdTei0WjQaDT1brfbtW1V+XLxQCJpEpjUY/Pw8MDa2pqcnByj8zk5OdVuWvX29q6VvV7Uzpw5Q1xcXJW9tczMTO655x769+/PJ598ctP2hoaGcuLEiZva1RfD4oF095BImgQmCZtarSY4OJj4+HjDOZ1OR3x8PGFhYVVeExYWZmQPEBcXZ2SvF7Xjx4+zdetW3N3dK9Vz/vx57r77boKDg1m2bFmtwuOkpqbi4+NT28erMy5yKCqRNClMHopGR0czceJE+vXrR0hICIsXL6aoqIhJkyYBMGHCBFq3bk1sbCwAL7zwAoMHD2bRokVERkaycuVK9u3bZ+hxlZeX88gjj5CcnMz69evRarWG+beWLVuiVqsNoubv78/ChQu5cOGCoT36nt+XX36JWq2mT58+AKxdu5YvvviCzz77rB5vT+2QQ1GJpIlRl2XXJUuWiLZt2wq1Wi1CQkLE7t27DWWDBw+ulCB19erVIjAwUKjVatG9e3exYcMGQ5neTaOqY/v27UIIIZYtW1atjZ7ly5eLrl27CgcHB+Hs7CxCQkLEmjVrTHouUxMm69mbflH4z1ovBi3YZtJ1Eomk9siEyXWkLgmTAU7kXiH8/+3E2c6GA/OqzlokkUjqhynfT7lX1Azog00WlFTICB8SSRNACpsZ0C8egIzwIZE0BaSwmQFb6+sRPm7XpC4SSVNCCpuZkL5sEknTQQqbmTDkF5W+bBKJxZHCZiZu9/yiEklTQgqbmZAx2SSSpoMUNjMh59gkkqaDFDYzoR+KyvDgEonlkcJmJuRQVCJpOkhhMxP63QdyKCqRWB4pbGbCVWaqkkiaDFLYzIRbCzkUlUiaClLYzISLXDyQSJoMUtjMhH7xoKCkggqtzsKtkUhub6SwmQnXGyN8lFRYsCUSiUQKm5mwsbbC6VqEDzkclUgsixQ2M6JPnCyTukgklkUKmxkxJHW5KntsEoklkcJmRuTuA4mkaSCFzYzI/KISSdNACpsZkflFJZKmQZ2EbenSpQQEBGBnZ0doaCiJiYk12q9Zs4YuXbpgZ2dHUFAQGzduNJSVl5cza9YsgoKCaNGiBb6+vkyYMIHMzEyjOi5dusS4ceNwdnbG1dWVyZMnU1hYaGRz4MABBg4ciJ2dHX5+fixYsKAuj1dnZOgiiaRpYLKwrVq1iujoaGJiYkhOTqZXr15ERESQm5tbpf2uXbsYO3YskydPJiUlhaioKKKiojh06BAAxcXFJCcnM2fOHJKTk1m7di1paWmMHDnSqJ5x48Zx+PBh4uLiWL9+PTt37mTq1KmG8oKCAoYNG4a/vz9JSUm89957zJs3z5BxvjGQQ1GJpIlgajbmkJAQMX36dMPvWq1W+Pr6itjY2CrtR48eLSIjI43OhYaGimnTplV7j8TERAGIM2fOCCGEOHLkiADE3r17DTabNm0SKpVKnD9/XgghxH//+1/h5uYmSktLDTazZs0SnTt3rvY+JSUlIj8/33CcPXu2Tpng9Xy376zwn7VePPHZ7jpdL5FIqseUTPAm9djKyspISkoiPDzccM7Kyorw8HASEhKqvCYhIcHIHiAiIqJae4D8/HxUKhWurq6GOlxdXenXr5/BJjw8HCsrK/bs2WOwGTRoEGq12ug+aWlp/PXXX1XeJzY2FhcXF8Ph5+dX8xtwEwwJXeRQVCKxKCYJW15eHlqtFi8vL6PzXl5eZGdnV3lNdna2SfYlJSXMmjWLsWPHGtLYZ2dn4+npaWRnY2NDy5YtDfVUdx99WVXMnj2b/Px8w3H27Nkq7WqLq8FBVy4eSCSWxMbSDbiR8vJyRo8ejRCCDz/8sMHvp9Fo0Gg0ZqvPEGxSzrFJJBbFpB6bh4cH1tbW5OTkGJ3PycnB29u7ymu8vb1rZa8XtTNnzhAXF2forenr+PviREVFBZcuXTLUU9199GWNgX4j/BUZ4UMisSgmCZtarSY4OJj4+HjDOZ1OR3x8PGFhYVVeExYWZmQPEBcXZ2SvF7Xjx4+zdetW3N3dK9Vx+fJlkpKSDOe2bduGTqcjNDTUYLNz507Ky6/3luLi4ujcuTNubm6mPGadcbkhwoecZ5NILIipKxMrV64UGo1GLF++XBw5ckRMnTpVuLq6iuzsbCGEEOPHjxevvfaawf6PP/4QNjY2YuHCheLo0aMiJiZG2NraioMHDwohhCgrKxMjR44Ubdq0EampqSIrK8tw3LjCOXz4cNGnTx+xZ88e8fvvv4tOnTqJsWPHGsovX74svLy8xPjx48WhQ4fEypUrhYODg/j4449r/WymrLpUR4+YzcJ/1npxIvdKneuQSCSVMeX7abKwCSHEkiVLRNu2bYVarRYhISFi9+7r7g2DBw8WEydONLJfvXq1CAwMFGq1WnTv3l1s2LDBUJaeni6AKo/t27cb7C5evCjGjh0rHB0dhbOzs5g0aZK4csVYPPbv3y8GDBggNBqNaN26tXjnnXdMei5zCNuAd+OF/6z1Yt/pS3WuQyKRVMaU76dKCCEs1VtsahQUFODi4kJ+fr7RHJ8pPLDkdw6ez+fzif0Y2tXr5hdIJJJaYcr3U+4VNTMywodEYnmksJkZmV9UIrE8UtjMjMwvKpFYHilsZsZNDkUlEosjhc3MuMihqERicaSwmRk5FJVILI8UNjPj1kIORSUSSyOFzcy42OuHorLHJpFYCilsZsbgx1Yke2wSiaWQwmZm9AldrpRWUC4jfEgkFkEKm5lxtrse4q5AroxKJBZBCpuZsbG2wumauMmkLhKJZZDC1gAY8ovKBQSJxCJIYWsA5EZ4icSySGFrAGR+UYnEskhhawDcDEld5FBUIrEEUtgaAJlfVCKxLFLYGgBXe5lfVCKxJFLYGgCZX1QisSxS2BoAORSVSCyLFLYGQC9scigqkVgGKWwNgByKSiSWpU7CtnTpUgICArCzsyM0NJTExMQa7desWUOXLl2ws7MjKCiIjRs3GpWvXbuWYcOG4e7ujkqlIjU11aj89OnTqFSqKo81a9YY7KoqX7lyZV0esV7oFw/ypbBJJBbBZGFbtWoV0dHRxMTEkJycTK9evYiIiCA3N7dK+127djF27FgmT55MSkoKUVFRREVFcejQIYNNUVERAwYM4N13362yDj8/P7KysoyO+fPn4+joyIgRI4xsly1bZmQXFRVl6iPWG1cZ4UMisSymZmMOCQkR06dPN/yu1WqFr6+viI2NrdJ+9OjRIjIy0uhcaGiomDZtWiVbfVb4lJSUm7ajd+/e4qmnnjI6B4h169bd/CGqwRyZ4IUQokKrE/6z1gv/WevFhSsl9apLIpEomPL9NKnHVlZWRlJSEuHh4YZzVlZWhIeHk5CQUOU1CQkJRvYAERER1drXhqSkJFJTU5k8eXKlsunTp+Ph4UFISAhffPEFooZE96WlpRQUFBgd5sDaSmUIXyTn2SSSxsfm5ibXycvLQ6vV4uXlZXTey8uLY8eOVXlNdnZ2lfbZ2dkmNvU6n3/+OV27dqV///5G5998802GDBmCg4MDW7Zs4dlnn6WwsJDnn3++ynpiY2OZP39+ndtRE64OagpKKuS2KonEApgkbE2Bq1evsmLFCubMmVOp7MZzffr0oaioiPfee69aYZs9ezbR0dGG3wsKCvDz8zNLO90cbMm4JHtsEoklMGko6uHhgbW1NTk5OUbnc3Jy8Pb2rvIab29vk+xvxnfffUdxcTETJky4qW1oaCjnzp2jtLS0ynKNRoOzs7PRYS70+UWlL5tE0viYJGxqtZrg4GDi4+MN53Q6HfHx8YSFhVV5TVhYmJE9QFxcXLX2N+Pzzz9n5MiRtGrV6qa2qampuLm5odFo6nSv+mBw+ZC7DySSRsfkoWh0dDQTJ06kX79+hISEsHjxYoqKipg0aRIAEyZMoHXr1sTGxgLwwgsvMHjwYBYtWkRkZCQrV65k3759fPLJJ4Y6L126REZGBpmZmQCkpaUBSm/vxp7diRMn2LlzZyU/OICff/6ZnJwc7rzzTuzs7IiLi+Ptt9/m5ZdfNvURzYKbDDYpkViOuiy7LlmyRLRt21ao1WoREhIidu/ebSgbPHiwmDhxopH96tWrRWBgoFCr1aJ79+5iw4YNRuXLli0TQKUjJibGyG727NnCz89PaLXaSm3atGmT6N27t3B0dBQtWrQQvXr1Eh999FGVttVhLncPIYRYtCVN+M9aL15fe6DedUkkEtO+nyohavCHuM0oKCjAxcWF/Pz8es+3ffF7Om+uP0JkTx+WPt7XTC2USG5fTPl+yr2iDYRbC7mtSiKxFFLYGghXe7kqKpFYCilsDYSLXDyQSCyGFLYG4npuUSlsEkljI4WtgdD7sRWWVlBWISN8SCSNiRS2BsLZ3haVSnkte20SSeMiha2BUCJ86HcfyAUEiaQxkcLWgFzPfSB7bBJJYyKFrQHRz7PJlVGJpHGRwtaAXE/qIoeiEkljIoWtAXGVvmwSiUWQwtaAGIaicvFAImlUpLA1IDK/qERiGaSwNSByKCqRWAYpbA2IQdjkUFQiaVSksDUgcigqkVgGKWwNiPRjk0gsgxS2BkT6sUkklkEKWwOiT+hSVKaVET4kkkZEClsD4mR3PcKHXECQSBoPKWwNiFGEDznPJpE0GlLYGhhDflEZk00iaTTqJGxLly4lICAAOzs7QkNDSUxMrNF+zZo1dOnSBTs7O4KCgiolPF67di3Dhg3D3d0dlUpFampqpTruvvtuVCqV0fHMM88Y2WRkZBAZGYmDgwOenp688sorVFRU1OURzYbLtQWEv4rkUFQiaSxMFrZVq1YRHR1NTEwMycnJ9OrVi4iICHJzc6u037VrF2PHjmXy5MmkpKQQFRVFVFQUhw4dMtgUFRUxYMAA3n333RrvPWXKFLKysgzHggULDGVarZbIyEjKysrYtWsXX375JcuXL2fu3LmmPqJZub5fVPbYJJJGw9RszCEhIWL69OmG37VarfD19RWxsbFV2o8ePVpERkYanQsNDRXTpk2rZJueni4AkZKSUqls8ODB4oUXXqi2XRs3bhRWVlYiOzvbcO7DDz8Uzs7OorS09CZPpWDOTPB6Xvg2WfjPWi8++fWk2eqUSG5HTPl+mtRjKysrIykpifDwcMM5KysrwsPDSUhIqPKahIQEI3uAiIiIau1r4ptvvsHDw4MePXowe/ZsiouLje4TFBSEl5eX0X0KCgo4fPhwlfWVlpZSUFBgdJgbvS+bzC/aQOi08L9H4OuHldcSCWBjinFeXh5ardZIPAC8vLw4duxYlddkZ2dXaZ+dnW1SQx9//HH8/f3x9fXlwIEDzJo1i7S0NNauXVvjffRlVREbG8v8+fNNaoepuMihaMOSsRtOxCmv03+FDkMs2x5Jk8AkYbMkU6dONbwOCgrCx8eHoUOHcvLkSTp06FCnOmfPnk10dLTh94KCAvz8/Ord1hvRr4pKd48G4sgP118fWCOFTQKYuHjg4eGBtbU1OTk5RudzcnLw9vau8hpvb2+T7GtLaGgoACdOnKjxPvqyqtBoNDg7Oxsd5kYORRsQnQ6O/HT996M/Q1lx9faS2waThE2tVhMcHEx8fLzhnE6nIz4+nrCwsCqvCQsLM7IHiIuLq9a+tuhdQnx8fAz3OXjwoNHqbFxcHM7OznTr1q1e96oPMiZbA3J2NxRmg8YZXNpC2RX4c5OlWyVpApg8FI2OjmbixIn069ePkJAQFi9eTFFREZMmTQJgwoQJtG7dmtjYWABeeOEFBg8ezKJFi4iMjGTlypXs27ePTz75xFDnpUuXyMjIIDMzE4C0tDRA6Wl5e3tz8uRJVqxYwX333Ye7uzsHDhxg5syZDBo0iJ49ewIwbNgwunXrxvjx41mwYAHZ2dm88cYbTJ8+HY1GU793qR7oe2wyaXIDcPgH5Wfn+8ClNfy2SBmO9hhl0WZJmgB1WXZdsmSJaNu2rVCr1SIkJETs3r3bUDZ48GAxceJEI/vVq1eLwMBAoVarRffu3cWGDRuMypctWyaASkdMTIwQQoiMjAwxaNAg0bJlS6HRaETHjh3FK6+8UmnZ9/Tp02LEiBHC3t5eeHh4iJdeekmUl5fX+rkawt0j/UKh8J+1XnSds8lsdUqEEFqtEAs7CxHjLMSxjULkHFVez28pRGGepVsnaQBM+X6qhBDCgrrapCgoKMDFxYX8/HyzzbflF5fT680tAKT9azgaG2uz1HvbcyYBlg1XhqGvnAAbDXw0ELIPQOQiuONpS7dQYmZM+X7KvaINjJOdjSHChxyOmpEjPyo/O49QRA2g52jl54E1lmmTpMkgha2BsbJSXfdlkwsI5kGnuy5s3aKun+8xClApiwp/nbFEyyRNBClsjYCbzH1gXs7thSuZoHYy9ltz9oV2g5TXB2Wv7XZGClsjcL3H1gx82c4lwdXLlm2D3im38wiwtTMuMwxHV4OcPr5tkcLWCDQbX7ZdS+CzIfDDs7Uy1+kEu09dZPepi+Zrg9Ew9MHK5V0fAGsN5KUpCwmS25JbZkvVrYxhKHorhwdP/w3iYpTXJ7YqHv5qhypNT14oZG3yOdYlnyczvwSAdc/2p09bt/q34/w+KDgPakfoOLRyuZ2L0pM78oPSa/PpVf97Sm45pLA1Ai72ttyhOoZdbilQt32tFqUgE76bBOJa9AxtKZzZBZ2uR225XFzGzwey+D7pHKlnL1eq4quEM+YRNr1TbuBwsLWv2qbnaEXYDn0P974JVtLFpq6UVegQiFvOTUkKWyMQdmUL8zRvUnZYA5H3gL0ZvuCNRUUZrJ4IRRfAqwd4dlUm5k/GU95+CDvSLvB90jm2HculTKtk4rK2UjE4sBWj+rahlZOG0R8nsOFAFv+M7IqHYz12gdw4DO0eVb1dx3vBzhWuZMHp36D93XW/523KyQuFfJ1whu+SzuFib8v65wbg1kJt6WbVGilsDc3R9dx74i0A1KJU+WIGP2nZNpnCln/CuUTQuMCYrxGZ+1EdXENu6iaG7x3CpRtCnnfzcebhvq15sHdrWjldF7BebVzYfy6fVXvPMv2ejnVvy/kkKDh3bRgaXr2djVoRvqTlik+bFLZaodUJth3L5auE0/x2PM9wvrC0gve3HSfmge4WbJ1pyMWDhuTUDvhuElZCyznhoZw7sNqiTTKJA6sh8dqe3oc/4bTOizFxdmiFCs+SdDRFWXg4apgysB2bXhjIxhcG8vTA9kaiBvDEnf4ArNiTgVZXj5VK/WpoYET1w1A9PccoP4/+BOVX637P24C/isr46NeTDFqwnSlf7eO343moVBDe1YvXRnQB4OuEM5y6UGjhltYe2WNrKM7uhW8fB20ZF9oM47GTkezUvIjVmT/g8llwNW/cN7OTfQh+el55PehVLrUZwpP//YPTF3Uc0HSkD8dZNugKHSOGYGNd8//HB3r58n8bj3L+8lW2Hcvl3m5eNdpXiRDXQxTd6JRbHX53gosf5J+FPzdD94dMv2cTJfdKCb+mXeDXPy+QU1BCgHsLOng60qGVI+1btaBtSwdsb/I3ATh0Pp+vEk7zY2ompdcSers62DLmDj+eCPXHr6WyOJSYfoltx3J5Z9MxPpnQr0GfzVxIYWsIsg/BN6OgvAja30PWoA84d2IfKaruBItDcOg7GDDT0q2snquXYfV4qLgKHYZQctcrPP35Xk5fLKaNmz2deo2E3YvoUpgI1tNvWp2drTVj+vnx8c5TfJVwum7Cdj4Z8jPAtgV0uvfm9lZWEPQI/P5vZTh6CwtbhVZHytnL7EjLZUfaBQ5nGoew33v6L6PfbaxU+Ls7XBM6Rzq0uiZ8Ho7Yq63ZdCiLrxLOkHTm+nXdfZ2Z2D+Akb18sbM1Xih4/b4u/PrnBbYcySHh5EXCOrg33MOaCSls5ubiSfj6ISjJhzYh8Ng3uFxRitZW9CfY+hDiwGpUTVXYdDpY9wxcOgUubdE99Bkz1xwkOeMyznY2LJ90B44lLWD3ImWordPWatXxiTv9+eS3U/x2PI9TFwpp38rRtHYdWaf8rM0wVE/PMYqwHd8CxZfAoaVp97QguQUl7PjzAr+mXeC34xcoKDFOI9mzjQt3B7aig6cjp/OKOXmhkFN5hZzMLeJquZaTF4o4eaEIMA6+qraxouxa78zWWsV9QT5MCAugb1tXVPpNzX+jo6cTj4e05evdZ/jXhiP8PGMAVlZV2zYVpLCZk/zz8FUUFOUqK4jjVoO6BR6OFdhaq/i5/A7mWn2BJvcI3/60kQED7jZ095sMv/8/JVijtQZGf0nsrzlsOpSN2tqKTyb0o6OnE2iDlcWEksuQmQJtbj488WvpwD2dPdl2LJf/7c5g7gMmBP8UAg7XYjX073h2Ba8gyDmoLNr0m1T7ay3A/rOX2XIku8pemauDLYM6teLuzq0YFNiq2tVlnU6QXVCiCN2FIk5eKDS8zsovoaxCh5ezhnGh/jwW4oenk12V9fydF8M78UPKeQ5nFrA25TyPBLep9/M2JFLYzEVRHnwdpQyXWraH8esMbh0tNDZ89VQoX+8+za9pfRim2kt+4goG7hL0betKVJ/WRAb54F4fVwhzcHIbbPuX8jpyIV+eacmnvykZvt57tCd3tr82BLG2gfaDlYn5E/G1EjaA8WH+bDuWy5qks7wcEYiDupYfv0z9MNRBceUwhZ6PQtxBZSGkiQqbEIL/F/cnS7adMDqv75Xd3cWTXm1csa5FL8nKSoWvqz2+rvYM7NTKqKywtILs/BL83Ws3B3cj7o4aZgzpSOymY7z3yzHuC/Ku/d/PAshVUXNQkg//exjy/gTn1jDhR3D0NDIJ6+DOf8cFM2CUMif1qCYBa5WO5IzLzP3xMCFvx/PkskR+SDlPUakFstdfPgvfTQYE9J1AnF0E839WRO2ViM482Lu1sb1+8/nJbbW+xeBOrWjb0oErJRX8mJpZ+7bpnXI7Dat2t0O19HgEUEHGLricYdq1jUCFVses7w8YRO2+IG/+3+he7HsjnJ9mDCB6WGf6tnWrlajdDEeNDR09HU0WNT0T+wfg19KenIJSPtl5qt7taUiksNWXsmJY8Rhk7QcHDxj/A7i2rdbcodsI0Ljgrs1j3xMOzLm/Gz3buKDVCXakXeDFVan0+9dWnv82hV8OZ5OWfYVLRWXo6uMmcTPKS5TFgquXwKc3B4L+yXPfJqMTMDbEj2fvrmK3hH4707m9irDXAisrFU/cqbw3XyWcoVYxToW47uZhyjBUj0trCBigvD74nenXNyDFZRVM/TqJ1fvOYaWC2IeD+O+4YB7u26Z+jswNhJ2tNa8N7wrAx7+eIvvadrmmSNPtS94KVJTB6glKb0DjDOPXQqvAmq+xtYNuIyHla9xO/sDkkUuYPKAdJy8U8lNqJj+mnuf0xWJ+2p/JT/uv92psrFS0bKGmlZMGD0flUF4r51o5avBw0hDg3gK1jYn/rzbPUubK7N3IjPiEp/53kJJyHYMDW/HWgz2qnlR2bQvuneDicTj1q/JMtWB0Pz8WbfmTo1kFJGf8RbD/TSb0M1OUnpaNvdJjqws9Rys7EA6sVlajq5kkb0wuFZXx1PK9pJ69jMbGig8e71u31eJG5r4gb4L93Ug68xcLt6Sx8NGmuRdXCltd0Wlh3TQlWa+NPTxuwobrnqMh5WtlQvu+hWCjoUMrR2beG8iL4Z3Yfy6fH1PP88eJPHKvlHK5uJwKnSD3Sim5V0prrNrDUc2EsADGhbat3Zxd8teKhz4qiu7/mPHfZ5FXWEY3H2eWjutbs49ax6GKsJ2Mr7WwuTqoGdnLlzVJ5/gq4czNhU2/hSpwGKhb1Ooeleg6Eja8BBeOQs4h8A6qWz1m4uylYiZ+kcipvCJcHWz5fGK/m78PTQSVSsUbkV156L+7+D75HE/2D6BHaxdLN6sSUtjqghCwfiYcXgtWtjDmf+BvQjpB/wHKXFzBecUVoesDhiKVSkVvP1d6+7kazpVV6LhUVMaFK6XkFZZyobDU8DqvsIy8K8q5nPwS8grL+H9xf7J0+wke7tuGyQPa0dGzGteKzFTlCw9UDJ7NpN+dOXnhEj4udiybdAeOmpt8PDoMgT0fwYltyntSy57QhLAA1iSdY+PBLN6I7FZpp4KBG4ehtXHKrQ57V2XT/NGflF6bBYXt0Pl8Ji3fy4UrpbR2tefLp0Kq//s0Ufq0dePB3r78mJrJ/204yoopodW6ilgKKWx1YWsMJH8JKisY9alRlItaYWWlhLHe9T4cWGUkbFWhtrHC28UOb5eal+bLtTo2Hszis9/SOXg+n28TM/g2MYMhXTx5emA7wtq7X/8ACgE/vwDaUkSnCF7KCicxPRsnjQ3LJt2Bl3Mt3AACBoC1WlmxvHgSPGq3DzSojQu9/VxJPXuZVXszmDGkU9WGWfvhr9NKjzgwolZ1V0vP0YqwHfwOwucrf4NG5vfjeTzzvyQKSyvo4u3El0+F1O59boK8EtGZTYeySTh1ka1H67ibpAGRiwd1waeX0lN74D9192jXR3r98xezRaS1tbbiwd6t+WnGXayaeif3dvNCpYJtx3J5/NM93L/kd9alnFMcNM/ugaxUsLHjA+eZ/HggGxsrFR+ND6aLdy0zdKlbQNs7ldcn42u2/RsTwpT9o9/syaDiWlSQSuh7a53urfswVE+nYUqstiuZcOb3+tVVB35MPc+k5YkUllZwZ/uWrH4m7JYVNYA2bg48PaAdAG9vPGpw+m0q1EnYli5dSkBAAHZ2doSGhpKYmFij/Zo1a+jSpQt2dnYEBQWxceNGo/K1a9cybNgw3N2VHoU+y7ueS5cu8dxzz9G5c2fs7e1p27Ytzz//PPn5xqtxKpWq0rFy5cq6PGLN9BgFzyVB3wl1r8OrB3h2A22Z0pMwIyqVitD27nw6oR/x0YMZf6c/drZWHM4sYOaq/QxcsI3jPy8C4KT3CBb9cQmAd0b15K6OHqbdrA5uHwD3BfnQsoWarPwSth7NrWwgxHU3j7qshv4dG831iLuNHIjg052neGFlKuVaQWRPH758KgRnO9tGbUND8I+7O+DhqCY9r4hv9jSt5DkmC9uqVauIjo4mJiaG5ORkevXqRUREBLm5VXw4gV27djF27FgmT55MSkoKUVFRREVFcejQIYNNUVERAwYM4N13362yjszMTDIzM1m4cCGHDh1i+fLlbN68mcmTJ1eyXbZsGVlZWYYjKirK1EesHW7+9btepYKgR5XXDfhFa9/KkbeiepDw2lBeiehMKycNoiCbgFylh/VCeojyc2inunmTd7jm9pH+m7JKXEvsbK0Z3U8JBPD17tOVDbIPwF/pYGMHneo5DNWjj/hx5CfFxeVmCAE5h2HnQlh2H3w6FFY9ARtfVbZq7V+lrAjnHYfSypEvdDrBv9Yf4f82HgVg0l0BLHmszy0XtLE6nOxsib63MwCLtx5vUjk9TE6YHBoayh133MEHH3wAgE6nw8/Pj+eee47XXnutkv2YMWMoKipi/fr1hnN33nknvXv35qOPPjKyPX36NO3atSMlJYXevXvX2I41a9bwxBNPUFRUhI2NMlWoUqlYt25dncWsIRIm18jlDFgcBKhg5mHF56qBKa3QcnLV63Q7/hGJus6MLothVN82LHy0Z90mgHU6WNRZ2UY28efrWaJqwdlLxQx6bztCwNbowcaT6FvnK9u7utwPj31jeruqaav23z2wvnKer/z+Rev+oxnSxdP4uctL4PTvSkSQP39R5g9ri8YZnHzA2Qetow/rsj14LeMOKrBh9oguTB3UvslNsteXCq2OyPd/Jy3nCpMHtGPO/SZslTMRU76fJi0elJWVkZSUxOzZsw3nrKysCA8PJyEhocprEhISiI6ONjoXERHBDz/8YMqtK6F/OL2o6Zk+fTpPP/007du355lnnmHSpEnVfphKS0spLb3uPlFQUFClXYPh2hba9lf84A59B3e90OC31FBBt8zvAXAaNIO3nYJ4JLhN3b9wVlbKcPTASmV7lQnC5tfSgaFdPNl6NJf/7T7DvJHXAhkaOeXWPypHUWkFW45k80NKJv0v92Wa9Xk8T//I5OPt6dHamZf6uzKYFKyO/wIntytRWfTY2CmBKgMjoEUrKMhS5umMfmZBWSGUFihHXhrWwCPABdsH8X74bR7q07T3VtYVG2sr/hnZlQlfJPJVwmmeuNOfdh6mz4cKIcwq+iYJW15eHlqtFi8v4xUQLy8vjh07VuU12dnZVdpnZ2eb2FTjdrz11ltMnTrV6Pybb77JkCFDcHBwYMuWLTz77LMUFhby/PPPV1lPbGws8+fPr3M7zELP0YqwHVjTKMLG4XVKmG8nX7reM5au1maY69EL28ltcK9p7+f4sAC2Hs3l+6RzvBLRmRYaG8g+qEQXsdbUeTW0XKvj9+N5/JB6ni2Hc7haruRryFbdxTTrnwm3SeUVq7XcdSGF3j+fNL7YyUe5b+AIRahrsY0rNy+Pn37bx579h3Eqy6WrVQZTbDYyzXYjVq1fr9Mz3CoMClQ25+9Iu8A7m47y8fib7x3+q6iM5Iy/SM74i6Qzf6HVCdY8099sbbrl3D0KCgqIjIykW7duzJs3z6hszpw5htd9+vShqKiI9957r1phmz17tlFvsqCgAD+/Rg4A2e1B2PiKEoEi5wh4NVxXHoA9Hys/73gKzCFqcH0BIfsAFOZW2idbEwM7ehDg7sDpi8X8kHqecaH+151yO90LGqda1yWEIDnjMj+mnmf9gSyjsOUB7g482Ls1UX3uhtVfY5N7mOmq7+BaJ2G/rj3x2r6ccLuL4UMjiOzpW6v9mYfO5/PF7+n8fCCTcq0AuuDv3pde/QOoSNdhc2Kz4iv45PomseOhofjnfV357XgevxzOYfepi9cDJqDMNZ64UEjSGUXEUs/k8VdeDu6qAjxU+XiSj52qnKLSEOUfmxkwqRYPDw+sra3JyTGO8ZSTk4O3t3eV13h7e5tkXxNXrlxh+PDhODk5sW7dOmxta/5ihoaG8tZbb1FaWopGU9kJVKPRVHm+UXFoqbgipG2Ag6vBa17D3evcPiVShrUa+j5pvnodW4F3T0XYTm6HXmNqfamyf9Sff204ytcJZ3j8Dj9UJjrlns4rYm3yOX5IzSTjUrHhvIejmvt7+hLVpzW92rhcH+oMfhV++afithMYQb7fPcTvL2HZH+lcyatg48pUFscf57khHXmgp2+l3Rc6nWB7Wi6f/ZZOwg05U0MCWjJ5YDvCu3opotj9PVi6U3Ev2b8Seo+t9ftyq9HJy4nH7vBj1Z5T/PTDt7TsbktO1jmuXMxEeyUHF+1leqvyCVfl05ICrO2Mp/a1ahdUtgvM1h6ThE2tVhMcHEx8fLxhgl6n0xEfH8+MGTOqvCYsLIz4+HhefPFFw7m4uDjCwkzw1EfpTUVERKDRaPjpp5+ws7u5D1Bqaipubm6WF6+b0fPRa8L2HQyZ23DOo/reWo9HFDEyJx2GXBO2bSYJG8CjwX4s3JLGsewrHEpJIOjiCWUY2nl4tdcIIdh35i8+2XmKrUdzDEnfHdTWRHT3JqpPa+7q4F71lrDuUUYuJC5A9L0weUA7vtx1ms9/T+fUhSJmrtrPf7YeZ/o9HYnq05oKreD75HN88Xs6p/KUeThrKxWRQT5MHtCOXjfsFgGUOdTBr8LWeUpSnMCIWyrYpam81M+Gsanz6VFwEhLAaNd0VQvB9i2V3n2LVlg7egECQxe6npjc74uOjmbixIn069ePkJAQFi9eTFFREZMmKbGuJkyYQOvWrYmNjQXghRdeYPDgwSxatIjIyEhWrlzJvn37+OSTTwx1Xrp0iYyMDDIzlU3faWlpgNLb8/b2pqCggGHDhlFcXMz//vc/CgoKDBP9rVq1wtramp9//pmcnBzuvPNO7OzsiIuL4+233+bll1+u3zvUGAQOV1bU8s/C2d3gb765BgNXcpT5NYDQqTXb1oWOQ+GPxYqw6XQmibOLgy0P9mrNqn1nubrj/12rL7zKYWiFVscvh3P45LdT7L8hf+ndnVvxUJ/W3NvNq85xwlzsbXl+aCcm3RXA17vP8OnOU5y+WMwr3x3gP/HHKSyt4HJxOQBOdjY8HtKWif0D8HWtIaJv2AzFLeTCUYifrzh1N0cOrKbl+pm0VBVSIBw4Zt0JlaMnDi19cPdsQytvP6ydPJV/qC08oYWH+aZCqkLUgSVLloi2bdsKtVotQkJCxO7duw1lgwcPFhMnTjSyX716tQgMDBRqtVp0795dbNiwwah82bJlAkWujY6YmBghhBDbt2+vshwQ6enpQgghNm3aJHr37i0cHR1FixYtRK9evcRHH30ktFptrZ8rPz9fACI/P78ub0v9WPesEDHOQvz0fMPUvz1Wqf/T8Iapv7xUiH/5KPfI3G/y5QfPXRYTZ78lRIyz0M1zFeLsPqPywpJysez3U2LAu/HCf9Z64T9rvej0z43ite8PiOM5V8z1FJXu+fGvJ0TwW1sM9xzwbrz44vdT4kpJee0rOv2H8r7EOAuRsadB2moxSq4IsfaZ68/3+XBRdvFMg9zKlO+nyX5szZlG92O7kVM74KsHlUS/Lx9XcmOai4oyWNwDCnNg1OdKkpOGYMUYxf8rfJ7pyWpKCriwoC+tdBdIbv0EfacsBZTY/18mnOZ/uzPIv6r0ltwcbBkfFsCEMP9GiVt2tUzL5sNZOGpsGdLFs25BH3+YDqn/U3acTP1ViUJ8q5O1H757Ci6eUPZND3oVBr3SYM/WYH5skgYkYCA4ekNhthIKqUuk+eo++pMiao7eSgifhqLDEEXYTm4zXdji59NKd4EzOk9m5kbyYWYBy/5I58fUTEOG+QB3ByYPbM8jfdtgr2487317tXX9/dDufVOZR805pERE6V/1nHSDIYRy77OJykJPm351X6UVQnmGuLnKlkAnXyUYhD6gZxNACltTwcpa6UklfKBE/DCnsO25tsOj31Pm7Qn+Hf32qozdUFZU+43rZ3bB3s8AeNvmWc5cEdz3/m+G4n7+bkwZ1P76auOtSAt3Rdx+eg62v60sXrg0sNNu+VVlq5t+F0XBuetlLm2hx8PKvmfvoNqLXNFF+PFZpU6AzvfBg0ub3KKIFLamRM/RirClbVbCbduZIYDf+WQlfLeVLQQ/Wf/6asK9g7ISeDlD2ZZUG+fa8qvw47XeS9+JdLa7j1+2nUClguHdvXl6YHuC/d0att2NRe8nIOV/SmSVza8pcfzMTUEWHP9FEbJTO6D8uvsLNvbQOliJ6pKfoSz2/LFYiYTcY5QidK06V193+k5YO1XZaWGtgWH/gpApTdI/TwpbU8K7J3h0hrw0OPoz9Hmi/nUmXlt97vEwODVwzCyVShmOJi1XhqO1EbZf34VLJxVv/3vf5Dm1Mx08HenVxpWAOmzNadJYWcH9/4aPBip/3z9/qX+cOZ1OEao/f1F6UVmpxuXObZR7dB6hDBVt7ZV/Jn/+Aoe+VwKdXjwOv76jHF5B13pyD4NbgFKHtkIp27kQEOARCI98YfFIxDUhFw9uwKKLB3p2LoRtb0G7wTCxnuGMCi/Av6+FRnp6G7QJNk8ba+LIT0piGPdO8Ny+mm0zU+HTISC08Ni30OW+hm9fU2DLG7BridK7fXaP6Zm3QIkm8tsiSF2hzMsaUCnzZ/otYV7da+5RlRRA2iZF5E7Gg+6GDGmt+ylD5qPrFTckgD7jYcS79Y+PVwfk4sGtTNCjirCl74SCTHD2rXtdycsVUWsd3DiiBkq+UZW10gu4nFF9xi5tOfw0QxG17g/fPqIGMPg1OLROeX9+WwhD59b+WiGUkPS/vKFswgdQOyo95cDhyi4WU5yv7ZwVh+peY6D4ktKTPPS9kvzm/D7lAMXP8v5/N9yKupmRwtbUcPMHvzuV/5CHvof+z9WtHm057P1ceR0yzXztuxl2LtDmDqX9J+KrT1K8631ls7u9G4ww31aaWwKNo9LrWTUO/nhfiRNX09yWntxjsOkV5Z8eKEPFe99UBM3GDG4vDi0heKJyXMlR9uweXqfUff+/oWW7+t+jkZChwZsiPc0QgPLoz8okbwtP80SgNYWbRdW98CfsuBZUdPi75t/edSvQJVIZKurKYX001DQjVHpF2dv60V2KqNnYwd2vK8PYbg+aR9T+jpOXskPlqU0w4YdbStRAClvTpPvDYGWj7L3MTKlbHfpFg36TGuaDXxP6ZMqnflUmnm9Ep1NcHrSl0PHe67kfbjdUKqXXZmN/fZP83xFCCWe1pJ+yWq6rgM6RMH0P3D1LyVErqRIpbE0Rh5bXw2F/MRx2vKOsZNWWrP2QkaCIY3A1Q8GGxLePsoOiNB/OJxmX7ftcGaaqHZXhTRN0FWg03PwVgQJlQaH40vWynCOw/H5Y+7SyOODWDh5fA2NXXF+tlFSLFLamyn0LlN0IFSWwIxY+CFHmPGqziL3nWm+t24Pg7NOw7awKK2sl6iwYD0cvZyiRLkDZduXayLHvmiJ3TodWXaA4T9kkX5IPm2fDRwOUnpyNPdzzBjy7W0kaLakVUtiaKi5tlBwCjy5XfJHyM2D1BPhqJOQerf66ootwcI3yOvSZRmlqleiHo/q0fPok02WF0DYM+lVOxHNbYqOGyGsRTZKWw5Jg2P1fZbW4y/0wIxEGvyKHnSYiha0po1IpMf9nJCobjK01yuTxh3fBpllV5yNN/lKZv/LpraxOWgr99qrzSXD1L2Wb2ImtyjOMXGKRhMVNloC7oPc45XXRBWjZAZ74XkliU527jKRG5KfrVkDdAob8UxG4Lvcr/833fARL+kLSl6BT4vmjrbju4hE6zbLzVy6tlSGW0CkBNDdfy2B292vgUU3m99uZYf9SxO3eN+HZBCUenaTOyJ0HN9Akdh7UhpPbYNNrytYrUHpn972nuHesngAO7jDziOWHL5tnK8MqKxtlRc+7J0zZ1rABBiXNFlO+n7LHdivSYQj84w+IiFU8wrNS4fN74ecXlfLgSZYXNbg+HNVVKLsRHvxAipqkUZDCdqtibQthz8JzSdc2y6vg6iVFQPo9ZenWKfj3V+bUQEkt6NPLsu2R3DbILVW3Oo6eSjysfk/B74sVMWmEjPK1Qu0AI95Rtk4NnmXp1khuI+Qc2w3cMnNsEsltiJxjk0gktzVS2CQSSbNDCptEIml21EnYli5dSkBAAHZ2doSGhpKYmFij/Zo1a+jSpQt2dnYEBQWxceNGo/K1a9cybNgw3N3dUalUpKamVqqjpKSE6dOn4+7ujqOjI6NGjSInJ8fIJiMjg8jISBwcHPD09OSVV16hoqKiUl0SiaR5Y7KwrVq1iujoaGJiYkhOTqZXr15ERESQm5tbpf2uXbsYO3YskydPJiUlhaioKKKiojh06JDBpqioiAEDBvDuu+9We9+ZM2fy888/s2bNGn799VcyMzN5+OGHDeVarZbIyEjKysrYtWsXX375JcuXL2fuXBOik0okkuaBqdmYQ0JCxPTp0w2/a7Va4evrK2JjY6u0Hz16tIiMjDQ6FxoaKqZNm1bJNj09XQAiJSXF6Pzly5eFra2tWLNmjeHc0aNHBSASEhKEEEJs3LhRWFlZiezsbIPNhx9+KJydnUVpaWmtns2imeAlEkmNmPL9NKnHVlZWRlJSEuHh1/exWVlZER4eTkJCQpXXJCQkGNkDREREVGtfFUlJSZSXlxvV06VLF9q2bWuoJyEhgaCgILy8rmdiioiIoKCggMOHD1dZb2lpKQUFBUaHRCK59THJQTcvLw+tVmskHgBeXl4cO3asymuys7OrtM/Ozq7Svro61Go1rq6u1dZT3X30ZVURGxvL/PnzK52XAieRND3030tRC9fb23rnwezZs4mOjjb8fv78ebp164afnwyAKJE0Va5cuYKLS83JxE0SNg8PD6ytrSutRubk5ODt7V3lNd7e3ibZV1dHWVkZly9fNuq13ViPt7d3pdVZ/X2ru5dGo0GjuZ4PwNHRkbNnz+Lk5ITqJiF/CgoK8PPz4+zZs7fVLgX53PK5LYUQgitXruDre/OUlCYJm1qtJjg4mPj4eKKiogDQ6XTEx8czY8aMKq8JCwsjPj6eF1980XAuLi6OsLCwWt83ODgYW1tb4uPjGTVqFABpaWlkZGQY6gkLC+P//u//yM3NxdPT03AfZ2dnunXrVqv7WFlZ0aZNm1q3C8DZ2dnif3BLIJ/79qKpPPfNemoGTF2ZWLlypdBoNGL58uXiyJEjYurUqcLV1dWwGjl+/Hjx2muvGez/+OMPYWNjIxYuXCiOHj0qYmJihK2trTh48KDB5uLFiyIlJUVs2LBBAGLlypUiJSVFZGVlGWyeeeYZ0bZtW7Ft2zaxb98+ERYWJsLCwgzlFRUVokePHmLYsGEiNTVVbN68WbRq1UrMnj3b1EesFbfrCqp8bvnctwImC5sQQixZskS0bdtWqNVqERISInbv3m0oGzx4sJg4caKR/erVq0VgYKBQq9Wie/fuYsOGDUbly5YtE0ClIyYmxmBz9epV8eyzzwo3Nzfh4OAgHnroISPhE0KI06dPixEjRgh7e3vh4eEhXnrpJVFeXl6XR7wpt+ofvL7I55bPfStQJ2GTCFFSUiJiYmJESUmJpZvSqMjnls99KyDDFkkkkmaH3AQvkUiaHVLYJBJJs0MKm0QiaXZIYZNIJM0OKWwSiaTZIYWtDpgaaPNWZ968eahUKqOjS5culm5Wg7Bz504eeOABfH19UalU/PDDD0blQgjmzp2Lj48P9vb2hIeHc/z4ccs01ozc7LmffPLJSp+B4cOHW6axtUAKm4mYGmizudC9e3eysrIMx++//27pJjUIRUVF9OrVi6VLl1ZZvmDBAt5//30++ugj9uzZQ4sWLYiIiKCkpKSRW2pebvbcAMOHDzf6DHz77beN2EITsbAf3S2HqYE2mwMxMTGiV69elm5GowOIdevWGX7X6XTC29tbvPfee4Zzly9fFhqNRnz77bcWaGHD8PfnFkKIiRMnigcffNAi7akLssdmAnUJtNlcOH78OL6+vrRv355x48aRkZFh6SY1Ounp6WRnZxv9/V1cXAgNDW32f3+AHTt24OnpSefOnfnHP/7BxYsXLd2kapHCZgI1Bdo0JXDmrUZoaCjLly9n8+bNfPjhh6SnpzNw4ECuXLli6aY1Kvq/8e329wdlGPrVV18RHx/Pu+++y6+//sqIESPQarWWblqV3NaBJiW1Y8SIEYbXPXv2JDQ0FH9/f1avXs3kyZMt2DJJY/HYY48ZXgcFBdGzZ086dOjAjh07GDp0qAVbVjWyx2YCdQm02RxxdXUlMDCQEydOWLopjYr+b3y7//0B2rdvj4eHR5P9DEhhM4EbA23q0QfaNCVw5q1OYWEhJ0+exMfHx9JNaVTatWuHt7e30d+/oKCAPXv23FZ/f4Bz585x8eLFJvsZkENRE4mOjmbixIn069ePkJAQFi9eTFFREZMmTbJ00xqMl19+mQceeAB/f38yMzOJiYnB2tqasWPHWrppZqewsNCoF5Kenk5qaiotW7akbdu2vPjii/zrX/+iU6dOtGvXjjlz5uDr62uIKH2rUtNzt2zZkvnz5zNq1Ci8vb05efIkr776Kh07diQiIsKCra4BSy/L3orUFGizOTJmzBjh4+Mj1Gq1aN26tRgzZow4ceKEpZvVIGzfvr3KoKf64Kk6nU7MmTNHeHl5CY1GI4YOHSrS0tIs22gzUNNzFxcXi2HDholWrVoJW1tb4e/vL6ZMmWKUw7epIeOxSSSSZoecY5NIJM0OKWwSiaTZIYVNIpE0O6SwSSSSZocUNolE0uyQwiaRSJodUtgkEkmzQwqbRCJpdkhhk0gkzQ4pbBKJpNkhhU0ikTQ7/j82gHfFNvw8sAAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 300x300 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"history = loss[\"history\"]\n",
"history.to_csv(\"history.csv\")\n",
"history[[\"avg_loss_train\", \"avg_loss_test\"]].plot()"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "2586ba0a",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:42:56.370376Z",
"iopub.status.busy": "2024-02-29T18:42:56.370066Z",
"iopub.status.idle": "2024-02-29T18:43:43.371513Z",
"shell.execute_reply": "2024-02-29T18:43:43.370520Z"
},
"papermill": {
"duration": 47.023831,
"end_time": "2024-02-29T18:43:43.374040",
"exception": false,
"start_time": "2024-02-29T18:42:56.350209",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"\n",
"from ml_utility_loss.loss_learning.estimator.pipeline import eval\n",
"#eval_loss = loss[\"eval_loss\"]\n",
"\n",
"batch_size = params[\"batch_size_low\"] if \"batch_size_low\" in params else params[\"batch_size\"]\n",
"\n",
"eval_loss = eval(\n",
" test_set, model,\n",
" batch_size=batch_size,\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "187137f6",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:43:43.414397Z",
"iopub.status.busy": "2024-02-29T18:43:43.413556Z",
"iopub.status.idle": "2024-02-29T18:43:43.433770Z",
"shell.execute_reply": "2024-02-29T18:43:43.432945Z"
},
"papermill": {
"duration": 0.042663,
"end_time": "2024-02-29T18:43:43.435796",
"exception": false,
"start_time": "2024-02-29T18:43:43.393133",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>avg_g_cos_loss</th>\n",
" <th>avg_g_mag_loss</th>\n",
" <th>avg_loss</th>\n",
" <th>grad_duration</th>\n",
" <th>grad_mae</th>\n",
" <th>grad_mape</th>\n",
" <th>grad_rmse</th>\n",
" <th>mean_pred_loss</th>\n",
" <th>pred_duration</th>\n",
" <th>pred_mae</th>\n",
" <th>pred_mape</th>\n",
" <th>pred_rmse</th>\n",
" <th>pred_std</th>\n",
" <th>std_loss</th>\n",
" <th>total_duration</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>tab_ddpm_concat</th>\n",
" <td>5.952382e-08</td>\n",
" <td>0.609263</td>\n",
" <td>0.019936</td>\n",
" <td>0.559148</td>\n",
" <td>0.194191</td>\n",
" <td>0.997071</td>\n",
" <td>0.282307</td>\n",
" <td>0.000019</td>\n",
" <td>0.876673</td>\n",
" <td>0.097204</td>\n",
" <td>0.769236</td>\n",
" <td>0.141196</td>\n",
" <td>0.053181</td>\n",
" <td>0.784962</td>\n",
" <td>1.435821</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" avg_g_cos_loss avg_g_mag_loss avg_loss grad_duration \\\n",
"tab_ddpm_concat 5.952382e-08 0.609263 0.019936 0.559148 \n",
"\n",
" grad_mae grad_mape grad_rmse mean_pred_loss \\\n",
"tab_ddpm_concat 0.194191 0.997071 0.282307 0.000019 \n",
"\n",
" pred_duration pred_mae pred_mape pred_rmse pred_std \\\n",
"tab_ddpm_concat 0.876673 0.097204 0.769236 0.141196 0.053181 \n",
"\n",
" std_loss total_duration \n",
"tab_ddpm_concat 0.784962 1.435821 "
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"\n",
"metrics = pd.DataFrame(eval_loss[\"model_metrics\"]).T\n",
"metrics.to_csv(\"eval.csv\")\n",
"metrics"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "123d305b",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:43:43.475408Z",
"iopub.status.busy": "2024-02-29T18:43:43.474824Z",
"iopub.status.idle": "2024-02-29T18:43:43.909232Z",
"shell.execute_reply": "2024-02-29T18:43:43.908268Z"
},
"papermill": {
"duration": 0.456458,
"end_time": "2024-02-29T18:43:43.911370",
"exception": false,
"start_time": "2024-02-29T18:43:43.454912",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"from ml_utility_loss.util import clear_memory\n",
"clear_memory()"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "a3eecc2a",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:43:43.951744Z",
"iopub.status.busy": "2024-02-29T18:43:43.950961Z",
"iopub.status.idle": "2024-02-29T18:44:32.670044Z",
"shell.execute_reply": "2024-02-29T18:44:32.669005Z"
},
"papermill": {
"duration": 48.741699,
"end_time": "2024-02-29T18:44:32.672417",
"exception": false,
"start_time": "2024-02-29T18:43:43.930718",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Caching in ../../../../insurance/_cache_test/tab_ddpm_concat/all inf False\n"
]
}
],
"source": [
"#\"\"\"\n",
"from ml_utility_loss.loss_learning.estimator.process import pred, pred_2\n",
"from ml_utility_loss.util import stack_samples\n",
"\n",
"#samples = test_set[list(range(len(test_set)))]\n",
"#y = {m: pred(model[m], s) for m, s in samples.items()}\n",
"y = pred_2(model, test_set, batch_size=batch_size)\n",
"#\"\"\""
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "6ab51db8",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:44:32.713356Z",
"iopub.status.busy": "2024-02-29T18:44:32.713056Z",
"iopub.status.idle": "2024-02-29T18:44:32.730203Z",
"shell.execute_reply": "2024-02-29T18:44:32.729517Z"
},
"papermill": {
"duration": 0.038975,
"end_time": "2024-02-29T18:44:32.732107",
"exception": false,
"start_time": "2024-02-29T18:44:32.693132",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"import os\n",
"import pandas as pd\n",
"from ml_utility_loss.util import transpose_dict\n",
"\n",
"os.makedirs(\"pred\", exist_ok=True)\n",
"y2 = transpose_dict(y)\n",
"for k, v in y2.items():\n",
" df = pd.DataFrame(v)\n",
" df.to_csv(f\"pred/{k}.csv\")"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "d81a30f1",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:44:32.769055Z",
"iopub.status.busy": "2024-02-29T18:44:32.768530Z",
"iopub.status.idle": "2024-02-29T18:44:32.773631Z",
"shell.execute_reply": "2024-02-29T18:44:32.772799Z"
},
"papermill": {
"duration": 0.025757,
"end_time": "2024-02-29T18:44:32.775758",
"exception": false,
"start_time": "2024-02-29T18:44:32.750001",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'tab_ddpm_concat': 0.05795487974159697}\n"
]
}
],
"source": [
"print({k: sum(v[\"pred\"])/len(v[\"pred\"]) for k, v in y.items()})"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "3b3ff322",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:44:32.813941Z",
"iopub.status.busy": "2024-02-29T18:44:32.813678Z",
"iopub.status.idle": "2024-02-29T18:44:33.119654Z",
"shell.execute_reply": "2024-02-29T18:44:33.118662Z"
},
"papermill": {
"duration": 0.327687,
"end_time": "2024-02-29T18:44:33.121766",
"exception": false,
"start_time": "2024-02-29T18:44:32.794079",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 300x300 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from ml_utility_loss.loss_learning.visualization import plot_pred_density_2\n",
"\n",
"_ = plot_pred_density_2(y)"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "e79e4b0f",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:44:33.160005Z",
"iopub.status.busy": "2024-02-29T18:44:33.159736Z",
"iopub.status.idle": "2024-02-29T18:44:33.460975Z",
"shell.execute_reply": "2024-02-29T18:44:33.460154Z"
},
"papermill": {
"duration": 0.322423,
"end_time": "2024-02-29T18:44:33.462943",
"exception": false,
"start_time": "2024-02-29T18:44:33.140520",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 300x300 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from ml_utility_loss.loss_learning.visualization import plot_density_3\n",
"\n",
"_ = plot_density_3(y2[\"pred\"], next(iter(y2[\"y\"].values())))"
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "745adde1",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:44:33.503100Z",
"iopub.status.busy": "2024-02-29T18:44:33.502818Z",
"iopub.status.idle": "2024-02-29T18:44:33.729512Z",
"shell.execute_reply": "2024-02-29T18:44:33.728656Z"
},
"papermill": {
"duration": 0.248914,
"end_time": "2024-02-29T18:44:33.731368",
"exception": false,
"start_time": "2024-02-29T18:44:33.482454",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 300x300 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from ml_utility_loss.loss_learning.visualization import plot_box_3\n",
"\n",
"_ = plot_box_3(y2[\"pred\"], next(iter(y2[\"y\"].values())))"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "eabe1bab",
"metadata": {
"execution": {
"iopub.execute_input": "2024-02-29T18:44:33.772296Z",
"iopub.status.busy": "2024-02-29T18:44:33.772018Z",
"iopub.status.idle": "2024-02-29T18:44:34.042778Z",
"shell.execute_reply": "2024-02-29T18:44:34.041888Z"
},
"papermill": {
"duration": 0.293553,
"end_time": "2024-02-29T18:44:34.044775",
"exception": false,
"start_time": "2024-02-29T18:44:33.751222",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 300x300 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#\"\"\"\n",
"from ml_utility_loss.loss_learning.visualization import plot_grad, plot_grad_2, plot_grad_3\n",
"import matplotlib.pyplot as plt\n",
"\n",
"#plot_grad_2(y, model.models)\n",
"for m in model.models:\n",
" ym = y[m]\n",
" fig, ax = plt.subplots()\n",
" plot_grad_3(ym[\"error\"], ym[\"grad\"], name=f\"{m}_grad\", fig=fig, ax=ax)\n",
"#\"\"\""
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "54c0e9f3",
"metadata": {
"papermill": {
"duration": 0.019946,
"end_time": "2024-02-29T18:44:34.084886",
"exception": false,
"start_time": "2024-02-29T18:44:34.064940",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": []
}
],
"metadata": {
"accelerator": "GPU",
"celltoolbar": "Tags",
"colab": {
"authorship_tag": "ABX9TyOOVfelovKP9fLGU7SvvRie",
"gpuType": "T4",
"mount_file_id": "17POSGAvge8y9DW9WGs2jLkibaRjToayg",
"provenance": []
},
"kaggle": {
"accelerator": "gpu",
"dataSources": [],
"dockerImageVersionId": 30648,
"isGpuEnabled": true,
"isInternetEnabled": true,
"language": "python",
"sourceType": "notebook"
},
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.0"
},
"papermill": {
"default_parameters": {},
"duration": 1067.648958,
"end_time": "2024-02-29T18:44:36.826930",
"environment_variables": {},
"exception": null,
"input_path": "eval/insurance/tab_ddpm_concat/4/mlu-eval.ipynb",
"output_path": "eval/insurance/tab_ddpm_concat/4/mlu-eval.ipynb",
"parameters": {
"allow_same_prediction": true,
"dataset": "insurance",
"dataset_name": "insurance",
"debug": false,
"folder": "eval",
"gp": false,
"gp_multiply": false,
"param_index": 2,
"path": "eval/insurance/tab_ddpm_concat/4",
"path_prefix": "../../../../",
"random_seed": 4,
"single_model": "tab_ddpm_concat"
},
"start_time": "2024-02-29T18:26:49.177972",
"version": "2.5.0"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 5
}
|