File size: 216,093 Bytes
83586b8 |
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 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 |
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "982e76f5",
"metadata": {
"execution": {
"iopub.execute_input": "2024-03-22T16:54:38.420949Z",
"iopub.status.busy": "2024-03-22T16:54:38.420627Z",
"iopub.status.idle": "2024-03-22T16:54:38.453783Z",
"shell.execute_reply": "2024-03-22T16:54:38.452888Z"
},
"papermill": {
"duration": 0.04789,
"end_time": "2024-03-22T16:54:38.455806",
"exception": false,
"start_time": "2024-03-22T16:54:38.407916",
"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-03-22T16:54:38.481275Z",
"iopub.status.busy": "2024-03-22T16:54:38.480905Z",
"iopub.status.idle": "2024-03-22T16:54:38.487727Z",
"shell.execute_reply": "2024-03-22T16:54:38.486854Z"
},
"papermill": {
"duration": 0.021698,
"end_time": "2024-03-22T16:54:38.489673",
"exception": false,
"start_time": "2024-03-22T16:54:38.467975",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"'\\n%cd /kaggle/working\\n#!git clone https://github.com/R-N/ml-utility-loss --depth=1 --single-branch --branch=main\\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 --depth=1 --single-branch --branch=main\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-03-22T16:54:38.512890Z",
"iopub.status.busy": "2024-03-22T16:54:38.512651Z",
"iopub.status.idle": "2024-03-22T16:54:38.516571Z",
"shell.execute_reply": "2024-03-22T16:54:38.515766Z"
},
"papermill": {
"duration": 0.017861,
"end_time": "2024-03-22T16:54:38.518464",
"exception": false,
"start_time": "2024-03-22T16:54:38.500603",
"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-03-22T16:54:38.541803Z",
"iopub.status.busy": "2024-03-22T16:54:38.541370Z",
"iopub.status.idle": "2024-03-22T16:54:38.545217Z",
"shell.execute_reply": "2024-03-22T16:54:38.544371Z"
},
"executionInfo": {
"elapsed": 678,
"status": "ok",
"timestamp": 1696841022168,
"user": {
"displayName": "Rizqi Nur",
"userId": "09644007964068789560"
},
"user_tz": -420
},
"id": "ns5hFcVL2yvs",
"papermill": {
"duration": 0.017736,
"end_time": "2024-03-22T16:54:38.547270",
"exception": false,
"start_time": "2024-03-22T16:54:38.529534",
"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-03-22T16:54:38.571177Z",
"iopub.status.busy": "2024-03-22T16:54:38.570870Z",
"iopub.status.idle": "2024-03-22T16:54:38.576291Z",
"shell.execute_reply": "2024-03-22T16:54:38.575410Z"
},
"papermill": {
"duration": 0.019685,
"end_time": "2024-03-22T16:54:38.578251",
"exception": false,
"start_time": "2024-03-22T16:54:38.558566",
"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 = True\n",
"log_wandb = False"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "e2d3d897",
"metadata": {
"execution": {
"iopub.execute_input": "2024-03-22T16:54:38.603452Z",
"iopub.status.busy": "2024-03-22T16:54:38.603196Z",
"iopub.status.idle": "2024-03-22T16:54:38.608013Z",
"shell.execute_reply": "2024-03-22T16:54:38.607193Z"
},
"papermill": {
"duration": 0.019844,
"end_time": "2024-03-22T16:54:38.609908",
"exception": false,
"start_time": "2024-03-22T16:54:38.590064",
"status": "completed"
},
"tags": [
"injected-parameters"
]
},
"outputs": [],
"source": [
"# Parameters\n",
"dataset = \"contraceptive\"\n",
"dataset_name = \"contraceptive\"\n",
"single_model = \"tvae\"\n",
"gp = False\n",
"gp_multiply = False\n",
"random_seed = 42\n",
"debug = False\n",
"folder = \"eval\"\n",
"path_prefix = \"../../../../\"\n",
"path = \"eval/contraceptive/tvae/42\"\n",
"param_index = 0\n",
"allow_same_prediction = True\n",
"log_wandb = False\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "bd7c02d6",
"metadata": {
"papermill": {
"duration": 0.011211,
"end_time": "2024-03-22T16:54:38.632439",
"exception": false,
"start_time": "2024-03-22T16:54:38.621228",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 7,
"id": "5f45b1d0",
"metadata": {
"execution": {
"iopub.execute_input": "2024-03-22T16:54:38.655861Z",
"iopub.status.busy": "2024-03-22T16:54:38.655594Z",
"iopub.status.idle": "2024-03-22T16:54:38.664480Z",
"shell.execute_reply": "2024-03-22T16:54:38.663684Z"
},
"executionInfo": {
"elapsed": 7,
"status": "ok",
"timestamp": 1696841022169,
"user": {
"displayName": "Rizqi Nur",
"userId": "09644007964068789560"
},
"user_tz": -420
},
"id": "UdvXYv3c3LXy",
"papermill": {
"duration": 0.022742,
"end_time": "2024-03-22T16:54:38.666331",
"exception": false,
"start_time": "2024-03-22T16:54:38.643589",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/kaggle/working\n",
"/kaggle/working/eval/contraceptive/tvae/42\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-03-22T16:54:38.690470Z",
"iopub.status.busy": "2024-03-22T16:54:38.690185Z",
"iopub.status.idle": "2024-03-22T16:54:40.726590Z",
"shell.execute_reply": "2024-03-22T16:54:40.725650Z"
},
"papermill": {
"duration": 2.050871,
"end_time": "2024-03-22T16:54:40.728604",
"exception": false,
"start_time": "2024-03-22T16:54:38.677733",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Set seed to <function seed at 0x7c41c3d1b370>\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-03-22T16:54:40.760710Z",
"iopub.status.busy": "2024-03-22T16:54:40.760306Z",
"iopub.status.idle": "2024-03-22T16:54:40.772850Z",
"shell.execute_reply": "2024-03-22T16:54:40.771812Z"
},
"papermill": {
"duration": 0.03277,
"end_time": "2024-03-22T16:54:40.774761",
"exception": false,
"start_time": "2024-03-22T16:54:40.741991",
"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-03-22T16:54:40.799242Z",
"iopub.status.busy": "2024-03-22T16:54:40.798929Z",
"iopub.status.idle": "2024-03-22T16:54:40.806026Z",
"shell.execute_reply": "2024-03-22T16:54:40.805321Z"
},
"executionInfo": {
"elapsed": 6,
"status": "ok",
"timestamp": 1696841022169,
"user": {
"displayName": "Rizqi Nur",
"userId": "09644007964068789560"
},
"user_tz": -420
},
"id": "Vrl2QkoV3o_8",
"papermill": {
"duration": 0.021718,
"end_time": "2024-03-22T16:54:40.808141",
"exception": false,
"start_time": "2024-03-22T16:54:40.786423",
"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-03-22T16:54:40.833629Z",
"iopub.status.busy": "2024-03-22T16:54:40.833384Z",
"iopub.status.idle": "2024-03-22T16:54:40.928573Z",
"shell.execute_reply": "2024-03-22T16:54:40.927760Z"
},
"executionInfo": {
"elapsed": 6,
"status": "ok",
"timestamp": 1696841022169,
"user": {
"displayName": "Rizqi Nur",
"userId": "09644007964068789560"
},
"user_tz": -420
},
"id": "TilUuFk9vqMb",
"papermill": {
"duration": 0.110635,
"end_time": "2024-03-22T16:54:40.930702",
"exception": false,
"start_time": "2024-03-22T16:54:40.820067",
"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-03-22T16:54:40.958708Z",
"iopub.status.busy": "2024-03-22T16:54:40.958059Z",
"iopub.status.idle": "2024-03-22T16:54:45.689430Z",
"shell.execute_reply": "2024-03-22T16:54:45.688570Z"
},
"executionInfo": {
"elapsed": 3113,
"status": "ok",
"timestamp": 1696841025277,
"user": {
"displayName": "Rizqi Nur",
"userId": "09644007964068789560"
},
"user_tz": -420
},
"id": "7Abt8nStvr9Z",
"papermill": {
"duration": 4.747577,
"end_time": "2024-03-22T16:54:45.691899",
"exception": false,
"start_time": "2024-03-22T16:54:40.944322",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"2024-03-22 16:54:43.265606: 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-03-22 16:54:43.265666: 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-03-22 16:54:43.267291: 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-03-22T16:54:45.718090Z",
"iopub.status.busy": "2024-03-22T16:54:45.716978Z",
"iopub.status.idle": "2024-03-22T16:54:45.722995Z",
"shell.execute_reply": "2024-03-22T16:54:45.722101Z"
},
"papermill": {
"duration": 0.020744,
"end_time": "2024-03-22T16:54:45.725071",
"exception": false,
"start_time": "2024-03-22T16:54:45.704327",
"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-03-22T16:54:45.751786Z",
"iopub.status.busy": "2024-03-22T16:54:45.751472Z",
"iopub.status.idle": "2024-03-22T16:54:54.134274Z",
"shell.execute_reply": "2024-03-22T16:54:54.133246Z"
},
"executionInfo": {
"elapsed": 20137,
"status": "ok",
"timestamp": 1696841045408,
"user": {
"displayName": "Rizqi Nur",
"userId": "09644007964068789560"
},
"user_tz": -420
},
"id": "tbaguWxAvtPi",
"papermill": {
"duration": 8.399093,
"end_time": "2024-03-22T16:54:54.136682",
"exception": false,
"start_time": "2024-03-22T16:54:45.737589",
"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:119: ConvergenceWarning: Number of distinct clusters (4) 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:119: ConvergenceWarning: Number of distinct clusters (4) found smaller than n_clusters (10). Possibly due to duplicate points in X.\n",
" .fit(X)\n"
]
},
{
"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:119: ConvergenceWarning: Number of distinct clusters (4) found smaller than n_clusters (10). Possibly due to duplicate points in X.\n",
" .fit(X)\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-03-22T16:54:54.164061Z",
"iopub.status.busy": "2024-03-22T16:54:54.163711Z",
"iopub.status.idle": "2024-03-22T16:54:54.171531Z",
"shell.execute_reply": "2024-03-22T16:54:54.170687Z"
},
"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.023874,
"end_time": "2024-03-22T16:54:54.173518",
"exception": false,
"start_time": "2024-03-22T16:54:54.149644",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"{'tvae': 46,\n",
" 'realtabformer': (24, 72, Embedding(72, 672), True),\n",
" 'lct_gan': 40,\n",
" 'tab_ddpm_concat': 10}"
]
},
"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-03-22T16:54:54.198629Z",
"iopub.status.busy": "2024-03-22T16:54:54.198356Z",
"iopub.status.idle": "2024-03-22T16:54:54.203955Z",
"shell.execute_reply": "2024-03-22T16:54:54.203117Z"
},
"papermill": {
"duration": 0.020638,
"end_time": "2024-03-22T16:54:54.205880",
"exception": false,
"start_time": "2024-03-22T16:54:54.185242",
"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-03-22T16:54:54.230490Z",
"iopub.status.busy": "2024-03-22T16:54:54.230224Z",
"iopub.status.idle": "2024-03-22T17:02:21.663470Z",
"shell.execute_reply": "2024-03-22T17:02:21.662503Z"
},
"papermill": {
"duration": 447.460222,
"end_time": "2024-03-22T17:02:21.677822",
"exception": false,
"start_time": "2024-03-22T16:54:54.217600",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Caching in ../../../../contraceptive/_cache_aug_test/tvae/all inf False\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"../../../../ml-utility-loss/aug_test/contraceptive [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n",
"Caching in ../../../../contraceptive/_cache_bs_test/tvae/all inf False\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"../../../../ml-utility-loss/bs_test/contraceptive [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n",
"Caching in ../../../../contraceptive/_cache_synth_test/tvae/all inf False\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"../../../../ml-utility-loss/synthetics/contraceptive [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n",
"1050\n"
]
}
],
"source": [
"from ml_utility_loss.loss_learning.estimator.pipeline import load_dataset_4\n",
"\n",
"test_set = load_dataset_4(\n",
" dataset_dir=os.path.join(path_prefix, \"ml-utility-loss/\"),\n",
" dataset_name=dataset_name,\n",
" preprocessor=preprocessor,\n",
" model=single_model,\n",
" cache_dir=path_prefix,\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "14ff8b40",
"metadata": {
"execution": {
"iopub.execute_input": "2024-03-22T17:02:21.706111Z",
"iopub.status.busy": "2024-03-22T17:02:21.705309Z",
"iopub.status.idle": "2024-03-22T17:02:22.031100Z",
"shell.execute_reply": "2024-03-22T17:02:22.030076Z"
},
"executionInfo": {
"elapsed": 588,
"status": "ok",
"timestamp": 1696841049215,
"user": {
"displayName": "Rizqi Nur",
"userId": "09644007964068789560"
},
"user_tz": -420
},
"id": "NgahtU1q9uLO",
"papermill": {
"duration": 0.342422,
"end_time": "2024-03-22T17:02:22.033338",
"exception": false,
"start_time": "2024-03-22T17:02:21.690916",
"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': 'none',\n",
" 'patience': 10,\n",
" 'inds_init_mode': 'fixnorm',\n",
" 'grad_clip': 0.73,\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",
" 'bias_lr_mul': 1.0,\n",
" 'bias_weight_decay': 0.05,\n",
" 'head_activation': torch.nn.modules.activation.Softsign,\n",
" 'loss_balancer_beta': 0.67,\n",
" 'loss_balancer_r': 0.943,\n",
" 'tf_activation': torch.nn.modules.activation.Tanh,\n",
" 'dataset_size': 2048,\n",
" 'batch_size': 4,\n",
" 'epochs': 100,\n",
" 'lr_mul': 0.09,\n",
" 'n_warmup_steps': 100,\n",
" 'Optim': functools.partial(<class 'torch.optim.adamw.AdamW'>, amsgrad=True),\n",
" 'fixed_role_model': 'tvae',\n",
" 'd_model': 256,\n",
" 'attn_activation': torch.nn.modules.activation.PReLU,\n",
" 'tf_d_inner': 512,\n",
" 'tf_n_layers_enc': 3,\n",
" 'tf_n_head': 32,\n",
" 'tf_activation_final': ml_utility_loss.activations.LeakyHardtanh,\n",
" 'ada_d_hid': 1024,\n",
" 'ada_n_layers': 9,\n",
" 'ada_activation': torch.nn.modules.activation.Softsign,\n",
" 'ada_activation_final': ml_utility_loss.activations.LeakyHardsigmoid,\n",
" 'head_d_hid': 256,\n",
" 'head_n_layers': 9,\n",
" 'head_n_head': 32,\n",
" 'head_activation_final': ml_utility_loss.activations.LeakyHardsigmoid,\n",
" 'models': ['tvae'],\n",
" 'max_seconds': 3600,\n",
" 'tf_lora': False,\n",
" 'tf_num_inds': 128,\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.65, 'multiply': True, 'forgive_over': True}}}"
]
},
"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-03-22T17:02:22.061219Z",
"iopub.status.busy": "2024-03-22T17:02:22.060881Z",
"iopub.status.idle": "2024-03-22T17:12:00.661298Z",
"shell.execute_reply": "2024-03-22T17:12:00.660201Z"
},
"papermill": {
"duration": 578.632009,
"end_time": "2024-03-22T17:12:00.678673",
"exception": false,
"start_time": "2024-03-22T17:02:22.046664",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Caching in ../../../../contraceptive/_cache_aug_train/tvae/all inf False\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"split df ratio is 0\n",
"../../../../ml-utility-loss/aug_train/contraceptive [400, 0]\n",
"Caching in ../../../../contraceptive/_cache_aug_val/tvae/all inf False\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"split df ratio is 1\n",
"../../../../ml-utility-loss/aug_val/contraceptive [0, 200]\n",
"Caching in ../../../../contraceptive/_cache_bs_train/tvae/all inf False\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"split df ratio is 0\n",
"../../../../ml-utility-loss/bs_train/contraceptive [100, 0]\n",
"Caching in ../../../../contraceptive/_cache_bs_val/tvae/all inf False\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"split df ratio is 1\n",
"../../../../ml-utility-loss/bs_val/contraceptive [0, 50]\n",
"Caching in ../../../../contraceptive/_cache_synth/tvae/all inf False\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Splitting without random!\n",
"Split with reverse index!\n",
"../../../../ml-utility-loss/synthetics/contraceptive [400, 200]\n",
"[900, 450]\n",
"[900, 450]\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-03-22T17:12:00.708438Z",
"iopub.status.busy": "2024-03-22T17:12:00.708106Z",
"iopub.status.idle": "2024-03-22T17:12:01.197733Z",
"shell.execute_reply": "2024-03-22T17:12:01.196772Z"
},
"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.506346,
"end_time": "2024-03-22T17:12:01.199915",
"exception": false,
"start_time": "2024-03-22T17:12:00.693569",
"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"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[*] Embedding False True\n",
"['tvae'] 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-03-22T17:12:01.229980Z",
"iopub.status.busy": "2024-03-22T17:12:01.229573Z",
"iopub.status.idle": "2024-03-22T17:12:01.234682Z",
"shell.execute_reply": "2024-03-22T17:12:01.233844Z"
},
"papermill": {
"duration": 0.022181,
"end_time": "2024-03-22T17:12:01.236594",
"exception": false,
"start_time": "2024-03-22T17:12:01.214413",
"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-03-22T17:12:01.264684Z",
"iopub.status.busy": "2024-03-22T17:12:01.264409Z",
"iopub.status.idle": "2024-03-22T17:12:01.271364Z",
"shell.execute_reply": "2024-03-22T17:12:01.270425Z"
},
"papermill": {
"duration": 0.023683,
"end_time": "2024-03-22T17:12:01.273479",
"exception": false,
"start_time": "2024-03-22T17:12:01.249796",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"11895304"
]
},
"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-03-22T17:12:01.303569Z",
"iopub.status.busy": "2024-03-22T17:12:01.302995Z",
"iopub.status.idle": "2024-03-22T17:12:01.383209Z",
"shell.execute_reply": "2024-03-22T17:12:01.382160Z"
},
"papermill": {
"duration": 0.096944,
"end_time": "2024-03-22T17:12:01.385367",
"exception": false,
"start_time": "2024-03-22T17:12:01.288423",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"========================================================================================================================\n",
"Layer (type:depth-idx) Output Shape Param #\n",
"========================================================================================================================\n",
"MLUtilitySingle [2, 1179, 46] --\n",
"├─Adapter: 1-1 [2, 1179, 46] --\n",
"│ └─Sequential: 2-1 [2, 1179, 256] --\n",
"│ │ └─FeedForward: 3-1 [2, 1179, 1024] --\n",
"│ │ │ └─Linear: 4-1 [2, 1179, 1024] 48,128\n",
"│ │ │ └─Softsign: 4-2 [2, 1179, 1024] --\n",
"│ │ └─FeedForward: 3-2 [2, 1179, 1024] --\n",
"│ │ │ └─Linear: 4-3 [2, 1179, 1024] 1,049,600\n",
"│ │ │ └─Softsign: 4-4 [2, 1179, 1024] --\n",
"│ │ └─FeedForward: 3-3 [2, 1179, 1024] --\n",
"│ │ │ └─Linear: 4-5 [2, 1179, 1024] 1,049,600\n",
"│ │ │ └─Softsign: 4-6 [2, 1179, 1024] --\n",
"│ │ └─FeedForward: 3-4 [2, 1179, 1024] --\n",
"│ │ │ └─Linear: 4-7 [2, 1179, 1024] 1,049,600\n",
"│ │ │ └─Softsign: 4-8 [2, 1179, 1024] --\n",
"│ │ └─FeedForward: 3-5 [2, 1179, 1024] --\n",
"│ │ │ └─Linear: 4-9 [2, 1179, 1024] 1,049,600\n",
"│ │ │ └─Softsign: 4-10 [2, 1179, 1024] --\n",
"│ │ └─FeedForward: 3-6 [2, 1179, 1024] --\n",
"│ │ │ └─Linear: 4-11 [2, 1179, 1024] 1,049,600\n",
"│ │ │ └─Softsign: 4-12 [2, 1179, 1024] --\n",
"│ │ └─FeedForward: 3-7 [2, 1179, 1024] --\n",
"│ │ │ └─Linear: 4-13 [2, 1179, 1024] 1,049,600\n",
"│ │ │ └─Softsign: 4-14 [2, 1179, 1024] --\n",
"│ │ └─FeedForward: 3-8 [2, 1179, 1024] --\n",
"│ │ │ └─Linear: 4-15 [2, 1179, 1024] 1,049,600\n",
"│ │ │ └─Softsign: 4-16 [2, 1179, 1024] --\n",
"│ │ └─FeedForward: 3-9 [2, 1179, 256] --\n",
"│ │ │ └─Linear: 4-17 [2, 1179, 256] 262,400\n",
"│ │ │ └─LeakyHardsigmoid: 4-18 [2, 1179, 256] --\n",
"├─Adapter: 1-2 [2, 294, 46] (recursive)\n",
"│ └─Sequential: 2-2 [2, 294, 256] (recursive)\n",
"│ │ └─FeedForward: 3-10 [2, 294, 1024] (recursive)\n",
"│ │ │ └─Linear: 4-19 [2, 294, 1024] (recursive)\n",
"│ │ │ └─Softsign: 4-20 [2, 294, 1024] --\n",
"│ │ └─FeedForward: 3-11 [2, 294, 1024] (recursive)\n",
"│ │ │ └─Linear: 4-21 [2, 294, 1024] (recursive)\n",
"│ │ │ └─Softsign: 4-22 [2, 294, 1024] --\n",
"│ │ └─FeedForward: 3-12 [2, 294, 1024] (recursive)\n",
"│ │ │ └─Linear: 4-23 [2, 294, 1024] (recursive)\n",
"│ │ │ └─Softsign: 4-24 [2, 294, 1024] --\n",
"│ │ └─FeedForward: 3-13 [2, 294, 1024] (recursive)\n",
"│ │ │ └─Linear: 4-25 [2, 294, 1024] (recursive)\n",
"│ │ │ └─Softsign: 4-26 [2, 294, 1024] --\n",
"│ │ └─FeedForward: 3-14 [2, 294, 1024] (recursive)\n",
"│ │ │ └─Linear: 4-27 [2, 294, 1024] (recursive)\n",
"│ │ │ └─Softsign: 4-28 [2, 294, 1024] --\n",
"│ │ └─FeedForward: 3-15 [2, 294, 1024] (recursive)\n",
"│ │ │ └─Linear: 4-29 [2, 294, 1024] (recursive)\n",
"│ │ │ └─Softsign: 4-30 [2, 294, 1024] --\n",
"│ │ └─FeedForward: 3-16 [2, 294, 1024] (recursive)\n",
"│ │ │ └─Linear: 4-31 [2, 294, 1024] (recursive)\n",
"│ │ │ └─Softsign: 4-32 [2, 294, 1024] --\n",
"│ │ └─FeedForward: 3-17 [2, 294, 1024] (recursive)\n",
"│ │ │ └─Linear: 4-33 [2, 294, 1024] (recursive)\n",
"│ │ │ └─Softsign: 4-34 [2, 294, 1024] --\n",
"│ │ └─FeedForward: 3-18 [2, 294, 256] (recursive)\n",
"│ │ │ └─Linear: 4-35 [2, 294, 256] (recursive)\n",
"│ │ │ └─LeakyHardsigmoid: 4-36 [2, 294, 256] --\n",
"├─TwinEncoder: 1-3 [2, 4096] --\n",
"│ └─Encoder: 2-3 [2, 16, 256] --\n",
"│ │ └─ModuleList: 3-20 -- (recursive)\n",
"│ │ │ └─EncoderLayer: 4-37 [2, 1179, 256] --\n",
"│ │ │ │ └─SimpleInducedSetAttention: 5-1 [2, 1179, 256] --\n",
"│ │ │ │ │ └─TensorInductionPoint: 6-1 [2, 128, 256] 32,768\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-2 [2, 128, 256] --\n",
"│ │ │ │ │ │ └─Linear: 7-1 [2, 128, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-2 [2, 1179, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-3 [2, 1179, 256] 65,536\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-4 [2, 32, 128, 8] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-1 [2, 32, 128, 1179] --\n",
"│ │ │ │ │ │ └─Linear: 7-5 [2, 128, 256] 65,792\n",
"│ │ │ │ │ │ └─PReLU: 7-6 [2, 128, 256] 1\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-3 [2, 1179, 256] --\n",
"│ │ │ │ │ │ └─Linear: 7-7 [2, 1179, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-8 [2, 128, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-9 [2, 128, 256] 65,536\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-10 [2, 32, 1179, 8] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-2 [2, 32, 1179, 128] --\n",
"│ │ │ │ │ │ └─Linear: 7-11 [2, 1179, 256] 65,792\n",
"│ │ │ │ │ │ └─PReLU: 7-12 [2, 1179, 256] 1\n",
"│ │ │ │ └─DoubleFeedForward: 5-2 [2, 1179, 256] --\n",
"│ │ │ │ │ └─Linear: 6-4 [2, 1179, 512] 131,584\n",
"│ │ │ │ │ └─Tanh: 6-5 [2, 1179, 512] --\n",
"│ │ │ │ │ └─Linear: 6-6 [2, 1179, 256] 131,328\n",
"│ │ │ └─EncoderLayer: 4-38 [2, 1179, 256] --\n",
"│ │ │ │ └─SimpleInducedSetAttention: 5-3 [2, 1179, 256] --\n",
"│ │ │ │ │ └─TensorInductionPoint: 6-7 [2, 128, 256] 32,768\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-8 [2, 128, 256] --\n",
"│ │ │ │ │ │ └─Linear: 7-13 [2, 128, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-14 [2, 1179, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-15 [2, 1179, 256] 65,536\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-16 [2, 32, 128, 8] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-3 [2, 32, 128, 1179] --\n",
"│ │ │ │ │ │ └─Linear: 7-17 [2, 128, 256] 65,792\n",
"│ │ │ │ │ │ └─PReLU: 7-18 [2, 128, 256] 1\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-9 [2, 1179, 256] --\n",
"│ │ │ │ │ │ └─Linear: 7-19 [2, 1179, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-20 [2, 128, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-21 [2, 128, 256] 65,536\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-22 [2, 32, 1179, 8] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-4 [2, 32, 1179, 128] --\n",
"│ │ │ │ │ │ └─Linear: 7-23 [2, 1179, 256] 65,792\n",
"│ │ │ │ │ │ └─PReLU: 7-24 [2, 1179, 256] 1\n",
"│ │ │ │ └─DoubleFeedForward: 5-4 [2, 1179, 256] --\n",
"│ │ │ │ │ └─Linear: 6-10 [2, 1179, 512] 131,584\n",
"│ │ │ │ │ └─Tanh: 6-11 [2, 1179, 512] --\n",
"│ │ │ │ │ └─Linear: 6-12 [2, 1179, 256] 131,328\n",
"│ │ │ └─EncoderLayer: 4-39 [2, 16, 256] --\n",
"│ │ │ │ └─SimpleInducedSetAttention: 5-5 [2, 1179, 256] --\n",
"│ │ │ │ │ └─TensorInductionPoint: 6-13 [2, 128, 256] 32,768\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-14 [2, 128, 256] --\n",
"│ │ │ │ │ │ └─Linear: 7-25 [2, 128, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-26 [2, 1179, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-27 [2, 1179, 256] 65,536\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-28 [2, 32, 128, 8] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-5 [2, 32, 128, 1179] --\n",
"│ │ │ │ │ │ └─Linear: 7-29 [2, 128, 256] 65,792\n",
"│ │ │ │ │ │ └─PReLU: 7-30 [2, 128, 256] 1\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-15 [2, 1179, 256] --\n",
"│ │ │ │ │ │ └─Linear: 7-31 [2, 1179, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-32 [2, 128, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-33 [2, 128, 256] 65,536\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-34 [2, 32, 1179, 8] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-6 [2, 32, 1179, 128] --\n",
"│ │ │ │ │ │ └─Linear: 7-35 [2, 1179, 256] 65,792\n",
"│ │ │ │ │ │ └─PReLU: 7-36 [2, 1179, 256] 1\n",
"│ │ │ │ └─DoubleFeedForward: 5-6 [2, 1179, 256] --\n",
"│ │ │ │ │ └─Linear: 6-16 [2, 1179, 512] 131,584\n",
"│ │ │ │ │ └─LeakyHardtanh: 6-17 [2, 1179, 512] --\n",
"│ │ │ │ │ └─Linear: 6-18 [2, 1179, 256] 131,328\n",
"│ │ │ │ └─PoolingByMultiheadAttention: 5-7 [2, 16, 256] --\n",
"│ │ │ │ │ └─TensorInductionPoint: 6-19 [2, 16, 256] 4,096\n",
"│ │ │ │ │ └─SimpleMultiHeadAttention: 6-20 [2, 16, 256] --\n",
"│ │ │ │ │ │ └─Linear: 7-37 [2, 16, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-38 [2, 1179, 256] 65,536\n",
"│ │ │ │ │ │ └─Linear: 7-39 [2, 1179, 256] 65,536\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-40 [2, 32, 16, 8] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-7 [2, 32, 16, 1179] --\n",
"│ │ │ │ │ │ └─Linear: 7-41 [2, 16, 256] 65,792\n",
"│ │ │ │ │ │ └─PReLU: 7-42 [2, 16, 256] 1\n",
"│ └─Encoder: 2-4 [2, 16, 256] (recursive)\n",
"│ │ └─ModuleList: 3-20 -- (recursive)\n",
"│ │ │ └─EncoderLayer: 4-40 [2, 294, 256] (recursive)\n",
"│ │ │ │ └─SimpleInducedSetAttention: 5-8 [2, 294, 256] (recursive)\n",
"│ │ │ │ │ └─TensorInductionPoint: 6-21 [2, 128, 256] (recursive)\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-22 [2, 128, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-43 [2, 128, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-44 [2, 294, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-45 [2, 294, 256] (recursive)\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-46 [2, 32, 128, 8] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-8 [2, 32, 128, 294] --\n",
"│ │ │ │ │ │ └─Linear: 7-47 [2, 128, 256] (recursive)\n",
"│ │ │ │ │ │ └─PReLU: 7-48 [2, 128, 256] (recursive)\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-23 [2, 294, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-49 [2, 294, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-50 [2, 128, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-51 [2, 128, 256] (recursive)\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-52 [2, 32, 294, 8] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-9 [2, 32, 294, 128] --\n",
"│ │ │ │ │ │ └─Linear: 7-53 [2, 294, 256] (recursive)\n",
"│ │ │ │ │ │ └─PReLU: 7-54 [2, 294, 256] (recursive)\n",
"│ │ │ │ └─DoubleFeedForward: 5-9 [2, 294, 256] (recursive)\n",
"│ │ │ │ │ └─Linear: 6-24 [2, 294, 512] (recursive)\n",
"│ │ │ │ │ └─Tanh: 6-25 [2, 294, 512] --\n",
"│ │ │ │ │ └─Linear: 6-26 [2, 294, 256] (recursive)\n",
"│ │ │ └─EncoderLayer: 4-41 [2, 294, 256] (recursive)\n",
"│ │ │ │ └─SimpleInducedSetAttention: 5-10 [2, 294, 256] (recursive)\n",
"│ │ │ │ │ └─TensorInductionPoint: 6-27 [2, 128, 256] (recursive)\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-28 [2, 128, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-55 [2, 128, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-56 [2, 294, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-57 [2, 294, 256] (recursive)\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-58 [2, 32, 128, 8] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-10 [2, 32, 128, 294] --\n",
"│ │ │ │ │ │ └─Linear: 7-59 [2, 128, 256] (recursive)\n",
"│ │ │ │ │ │ └─PReLU: 7-60 [2, 128, 256] (recursive)\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-29 [2, 294, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-61 [2, 294, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-62 [2, 128, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-63 [2, 128, 256] (recursive)\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-64 [2, 32, 294, 8] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-11 [2, 32, 294, 128] --\n",
"│ │ │ │ │ │ └─Linear: 7-65 [2, 294, 256] (recursive)\n",
"│ │ │ │ │ │ └─PReLU: 7-66 [2, 294, 256] (recursive)\n",
"│ │ │ │ └─DoubleFeedForward: 5-11 [2, 294, 256] (recursive)\n",
"│ │ │ │ │ └─Linear: 6-30 [2, 294, 512] (recursive)\n",
"│ │ │ │ │ └─Tanh: 6-31 [2, 294, 512] --\n",
"│ │ │ │ │ └─Linear: 6-32 [2, 294, 256] (recursive)\n",
"│ │ │ └─EncoderLayer: 4-42 [2, 16, 256] (recursive)\n",
"│ │ │ │ └─SimpleInducedSetAttention: 5-12 [2, 294, 256] (recursive)\n",
"│ │ │ │ │ └─TensorInductionPoint: 6-33 [2, 128, 256] (recursive)\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-34 [2, 128, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-67 [2, 128, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-68 [2, 294, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-69 [2, 294, 256] (recursive)\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-70 [2, 32, 128, 8] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-12 [2, 32, 128, 294] --\n",
"│ │ │ │ │ │ └─Linear: 7-71 [2, 128, 256] (recursive)\n",
"│ │ │ │ │ │ └─PReLU: 7-72 [2, 128, 256] (recursive)\n",
"│ │ │ │ │ └─MultiHeadAttention: 6-35 [2, 294, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-73 [2, 294, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-74 [2, 128, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-75 [2, 128, 256] (recursive)\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-76 [2, 32, 294, 8] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-13 [2, 32, 294, 128] --\n",
"│ │ │ │ │ │ └─Linear: 7-77 [2, 294, 256] (recursive)\n",
"│ │ │ │ │ │ └─PReLU: 7-78 [2, 294, 256] (recursive)\n",
"│ │ │ │ └─DoubleFeedForward: 5-13 [2, 294, 256] (recursive)\n",
"│ │ │ │ │ └─Linear: 6-36 [2, 294, 512] (recursive)\n",
"│ │ │ │ │ └─LeakyHardtanh: 6-37 [2, 294, 512] --\n",
"│ │ │ │ │ └─Linear: 6-38 [2, 294, 256] (recursive)\n",
"│ │ │ │ └─PoolingByMultiheadAttention: 5-14 [2, 16, 256] (recursive)\n",
"│ │ │ │ │ └─TensorInductionPoint: 6-39 [2, 16, 256] (recursive)\n",
"│ │ │ │ │ └─SimpleMultiHeadAttention: 6-40 [2, 16, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-79 [2, 16, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-80 [2, 294, 256] (recursive)\n",
"│ │ │ │ │ │ └─Linear: 7-81 [2, 294, 256] (recursive)\n",
"│ │ │ │ │ │ └─ScaledDotProductAttention: 7-82 [2, 32, 16, 8] --\n",
"│ │ │ │ │ │ │ └─Softmax: 8-14 [2, 32, 16, 294] --\n",
"│ │ │ │ │ │ └─Linear: 7-83 [2, 16, 256] (recursive)\n",
"│ │ │ │ │ │ └─PReLU: 7-84 [2, 16, 256] (recursive)\n",
"├─Head: 1-4 [2] --\n",
"│ └─Sequential: 2-5 [2, 1] --\n",
"│ │ └─FeedForward: 3-21 [2, 256] --\n",
"│ │ │ └─Linear: 4-43 [2, 256] 1,048,832\n",
"│ │ │ └─Softsign: 4-44 [2, 256] --\n",
"│ │ └─FeedForward: 3-22 [2, 256] --\n",
"│ │ │ └─Linear: 4-45 [2, 256] 65,792\n",
"│ │ │ └─Softsign: 4-46 [2, 256] --\n",
"│ │ └─FeedForward: 3-23 [2, 256] --\n",
"│ │ │ └─Linear: 4-47 [2, 256] 65,792\n",
"│ │ │ └─Softsign: 4-48 [2, 256] --\n",
"│ │ └─FeedForward: 3-24 [2, 256] --\n",
"│ │ │ └─Linear: 4-49 [2, 256] 65,792\n",
"│ │ │ └─Softsign: 4-50 [2, 256] --\n",
"│ │ └─FeedForward: 3-25 [2, 256] --\n",
"│ │ │ └─Linear: 4-51 [2, 256] 65,792\n",
"│ │ │ └─Softsign: 4-52 [2, 256] --\n",
"│ │ └─FeedForward: 3-26 [2, 256] --\n",
"│ │ │ └─Linear: 4-53 [2, 256] 65,792\n",
"│ │ │ └─Softsign: 4-54 [2, 256] --\n",
"│ │ └─FeedForward: 3-27 [2, 256] --\n",
"│ │ │ └─Linear: 4-55 [2, 256] 65,792\n",
"│ │ │ └─Softsign: 4-56 [2, 256] --\n",
"│ │ └─FeedForward: 3-28 [2, 256] --\n",
"│ │ │ └─Linear: 4-57 [2, 256] 65,792\n",
"│ │ │ └─Softsign: 4-58 [2, 256] --\n",
"│ │ └─FeedForward: 3-29 [2, 1] --\n",
"│ │ │ └─Linear: 4-59 [2, 1] 257\n",
"│ │ │ └─LeakyHardsigmoid: 4-60 [2, 1] --\n",
"========================================================================================================================\n",
"Total params: 11,895,304\n",
"Trainable params: 11,895,304\n",
"Non-trainable params: 0\n",
"Total mult-adds (M): 44.15\n",
"========================================================================================================================\n",
"Input size (MB): 0.54\n",
"Forward/backward pass size (MB): 375.40\n",
"Params size (MB): 47.58\n",
"Estimated Total Size (MB): 423.53\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-03-22T17:12:01.417191Z",
"iopub.status.busy": "2024-03-22T17:12:01.416837Z",
"iopub.status.idle": "2024-03-22T18:16:21.301787Z",
"shell.execute_reply": "2024-03-22T18:16:21.300655Z"
},
"papermill": {
"duration": 3859.922538,
"end_time": "2024-03-22T18:16:21.323259",
"exception": false,
"start_time": "2024-03-22T17:12:01.400721",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3 datasets [900, 450, 1050]\n",
"Creating model of type <class 'ml_utility_loss.loss_learning.estimator.model.models.TwinEncoder'>\n",
"[*] Embedding False True\n",
"g_loss_mul 0.1\n",
"Epoch 0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train loss {'avg_role_model_loss': 0.020646917774962883, 'avg_role_model_std_loss': 0.7029616862738138, 'avg_role_model_mean_pred_loss': 0.0014198488189189598, '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.020646917774962883, 'n_size': 900, 'n_batch': 225, 'duration': 211.21505284309387, 'duration_batch': 0.9387335681915283, 'duration_size': 0.23468339204788208, 'avg_pred_std': 0.12668553197549448}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Val loss {'avg_role_model_loss': 0.00800067097414285, 'avg_role_model_std_loss': 0.8323721770502058, 'avg_role_model_mean_pred_loss': 0.00025833536566152146, '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.00800067097414285, 'n_size': 450, 'n_batch': 113, 'duration': 91.81465721130371, 'duration_batch': 0.8125190903655196, 'duration_size': 0.20403257158067492, 'avg_pred_std': 0.07484065717399384}\n",
"Epoch 1\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train loss {'avg_role_model_loss': 0.007335189075060447, 'avg_role_model_std_loss': 0.5605360431658958, 'avg_role_model_mean_pred_loss': 0.00016509135985034204, '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.007335189075060447, 'n_size': 900, 'n_batch': 225, 'duration': 211.18131518363953, 'duration_batch': 0.9385836230383979, 'duration_size': 0.23464590575959948, 'avg_pred_std': 0.09665914196934965}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Val loss {'avg_role_model_loss': 0.005770373049502572, 'avg_role_model_std_loss': 1.328719814272311, 'avg_role_model_mean_pred_loss': 0.0001455103024895009, '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.005770373049502572, 'n_size': 450, 'n_batch': 113, 'duration': 92.31423711776733, 'duration_batch': 0.8169401514846667, 'duration_size': 0.20514274915059408, 'avg_pred_std': 0.06159803802889269}\n",
"Epoch 2\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train loss {'avg_role_model_loss': 0.004101434572932905, 'avg_role_model_std_loss': 0.40740934907574267, 'avg_role_model_mean_pred_loss': 4.4437185304309564e-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.004101434572932905, 'n_size': 900, 'n_batch': 225, 'duration': 211.43363165855408, 'duration_batch': 0.9397050295935737, 'duration_size': 0.23492625739839343, 'avg_pred_std': 0.10036693361898263}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Val loss {'avg_role_model_loss': 0.005793615489771279, 'avg_role_model_std_loss': 2.93090469723272, 'avg_role_model_mean_pred_loss': 7.996645985781352e-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.005793615489771279, 'n_size': 450, 'n_batch': 113, 'duration': 92.21822166442871, 'duration_batch': 0.8160904572073338, 'duration_size': 0.20492938147650824, 'avg_pred_std': 0.0686845871407654}\n",
"Epoch 3\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train loss {'avg_role_model_loss': 0.0032525908350200753, 'avg_role_model_std_loss': 0.45932424604433697, 'avg_role_model_mean_pred_loss': 1.5064653623929553e-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.0032525908350200753, 'n_size': 900, 'n_batch': 225, 'duration': 210.6352882385254, 'duration_batch': 0.9361568366156684, 'duration_size': 0.2340392091539171, 'avg_pred_std': 0.09941185830367937}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Val loss {'avg_role_model_loss': 0.0025840073977209006, 'avg_role_model_std_loss': 2.9610207560058215, 'avg_role_model_mean_pred_loss': 8.98458365437745e-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.0025840073977209006, 'n_size': 450, 'n_batch': 113, 'duration': 91.6226761341095, 'duration_batch': 0.81082014277973, 'duration_size': 0.20360594696468778, 'avg_pred_std': 0.04679510168797147}\n",
"Epoch 4\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train loss {'avg_role_model_loss': 0.0028994390259807308, 'avg_role_model_std_loss': 0.27792873476118807, 'avg_role_model_mean_pred_loss': 1.2238399814356409e-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.0028994390259807308, 'n_size': 900, 'n_batch': 225, 'duration': 210.90299940109253, 'duration_batch': 0.9373466640048557, 'duration_size': 0.23433666600121392, 'avg_pred_std': 0.10629830273903078}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Val loss {'avg_role_model_loss': 0.004226378290137897, 'avg_role_model_std_loss': 3.139442252464839, 'avg_role_model_mean_pred_loss': 2.8896792241464515e-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.004226378290137897, 'n_size': 450, 'n_batch': 113, 'duration': 92.30420923233032, 'duration_batch': 0.8168514091356666, 'duration_size': 0.20512046496073405, 'avg_pred_std': 0.04041025609363167}\n",
"Epoch 5\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train loss {'avg_role_model_loss': 0.0029357373788823477, 'avg_role_model_std_loss': 0.35013624048834924, 'avg_role_model_mean_pred_loss': 1.5252040759503315e-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.0029357373788823477, 'n_size': 900, 'n_batch': 225, 'duration': 210.8098328113556, 'duration_batch': 0.9369325902726915, 'duration_size': 0.23423314756817287, 'avg_pred_std': 0.10065761231092943}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Val loss {'avg_role_model_loss': 0.003366937771077371, 'avg_role_model_std_loss': 2.7330855187934775, 'avg_role_model_mean_pred_loss': 2.1526505657937356e-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.003366937771077371, 'n_size': 450, 'n_batch': 113, 'duration': 92.45483732223511, 'duration_batch': 0.8181844010817266, 'duration_size': 0.20545519404941134, 'avg_pred_std': 0.048643345435137604}\n",
"Epoch 6\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train loss {'avg_role_model_loss': 0.0025804581021010463, 'avg_role_model_std_loss': 0.33193543293685124, 'avg_role_model_mean_pred_loss': 1.1130432750345e-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.0025804581021010463, 'n_size': 900, 'n_batch': 225, 'duration': 210.82577991485596, 'duration_batch': 0.9370034662882487, 'duration_size': 0.23425086657206218, 'avg_pred_std': 0.10346181529677577}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Val loss {'avg_role_model_loss': 0.0029045950072920986, 'avg_role_model_std_loss': 4.791847205054414, 'avg_role_model_mean_pred_loss': 1.7926797626652248e-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.0029045950072920986, 'n_size': 450, 'n_batch': 113, 'duration': 92.71966814994812, 'duration_batch': 0.8205280367252046, 'duration_size': 0.20604370699988472, 'avg_pred_std': 0.04583418705378066}\n",
"Epoch 7\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train loss {'avg_role_model_loss': 0.0024444010488999385, 'avg_role_model_std_loss': 0.27924930442016427, 'avg_role_model_mean_pred_loss': 1.0806890312169106e-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.0024444010488999385, 'n_size': 900, 'n_batch': 225, 'duration': 211.59207558631897, 'duration_batch': 0.9404092248280843, 'duration_size': 0.23510230620702108, 'avg_pred_std': 0.10225464255238573}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Val loss {'avg_role_model_loss': 0.002720622533104486, 'avg_role_model_std_loss': 3.2791891266000865, 'avg_role_model_mean_pred_loss': 1.838483538128186e-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.002720622533104486, 'n_size': 450, 'n_batch': 113, 'duration': 96.57148313522339, 'duration_batch': 0.8546148950019768, 'duration_size': 0.21460329585605198, 'avg_pred_std': 0.04418732333965435}\n",
"Epoch 8\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train loss {'avg_role_model_loss': 0.00242780985414154, 'avg_role_model_std_loss': 0.25769682647126535, 'avg_role_model_mean_pred_loss': 1.037415603605397e-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.00242780985414154, 'n_size': 900, 'n_batch': 225, 'duration': 213.52410340309143, 'duration_batch': 0.9489960151248508, 'duration_size': 0.2372490037812127, 'avg_pred_std': 0.10494643683855732}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Val loss {'avg_role_model_loss': 0.002887863010659607, 'avg_role_model_std_loss': 1.8791022815315657, 'avg_role_model_mean_pred_loss': 2.555802672021092e-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.002887863010659607, 'n_size': 450, 'n_batch': 113, 'duration': 92.99426054954529, 'duration_batch': 0.8229580579605777, 'duration_size': 0.20665391233232286, 'avg_pred_std': 0.059518284711418096}\n",
"Epoch 9\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train loss {'avg_role_model_loss': 0.002208985082106665, 'avg_role_model_std_loss': 0.42546326303130916, 'avg_role_model_mean_pred_loss': 7.684016633753033e-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.002208985082106665, 'n_size': 900, 'n_batch': 225, 'duration': 213.6311333179474, 'duration_batch': 0.9494717036353217, 'duration_size': 0.23736792590883043, 'avg_pred_std': 0.10293637524772849}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Val loss {'avg_role_model_loss': 0.0024638745025731624, 'avg_role_model_std_loss': 3.782287786237916, 'avg_role_model_mean_pred_loss': 1.655159604749657e-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.0024638745025731624, 'n_size': 450, 'n_batch': 113, 'duration': 97.28867506980896, 'duration_batch': 0.8609617262814953, 'duration_size': 0.21619705571068656, 'avg_pred_std': 0.04808065608046965}\n",
"Epoch 10\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train loss {'avg_role_model_loss': 0.0020764596655175813, 'avg_role_model_std_loss': 0.3896139937922279, 'avg_role_model_mean_pred_loss': 7.334516867581215e-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.0020764596655175813, 'n_size': 900, 'n_batch': 225, 'duration': 221.03631401062012, 'duration_batch': 0.9823836178249783, 'duration_size': 0.24559590445624457, 'avg_pred_std': 0.10016421435814765}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Val loss {'avg_role_model_loss': 0.0025203956082178692, 'avg_role_model_std_loss': 2.2354346593865277, 'avg_role_model_mean_pred_loss': 2.0540576969837897e-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.0025203956082178692, 'n_size': 450, 'n_batch': 113, 'duration': 97.72019529342651, 'duration_batch': 0.8647804893223585, 'duration_size': 0.2171559895409478, 'avg_pred_std': 0.057214381701758014}\n",
"Epoch 11\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train loss {'avg_role_model_loss': 0.0019838308382329867, 'avg_role_model_std_loss': 0.26038020301704434, 'avg_role_model_mean_pred_loss': 7.2093371565769966e-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.0019838308382329867, 'n_size': 900, 'n_batch': 225, 'duration': 221.59594750404358, 'duration_batch': 0.9848708777957492, 'duration_size': 0.2462177194489373, 'avg_pred_std': 0.1044646823985709}\n",
"Time out: 3600.622545480728/3600\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Eval loss {'role_model': 'tvae', 'n_size': 1050, 'n_batch': 263, 'role_model_metrics': {'avg_loss': 0.0027671898508283663, 'avg_g_mag_loss': 0.06750814222799723, 'avg_g_cos_loss': 0.031209569611071075, 'pred_duration': 4.135732650756836, 'grad_duration': 12.466698169708252, 'total_duration': 16.602430820465088, 'pred_std': 0.10057252645492554, 'std_loss': 0.008725129999220371, 'mean_pred_loss': 2.4340070012840442e-05, 'pred_rmse': 0.05260408669710159, 'pred_mae': 0.03820032626390457, 'pred_mape': 0.1258891075849533, 'grad_rmse': 0.04161679372191429, 'grad_mae': 0.021082276478409767, 'grad_mape': 0.4825449585914612}, '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.0027671898508283663, 'avg_g_mag_loss': 0.06750814222799723, 'avg_g_cos_loss': 0.031209569611071075, 'avg_pred_duration': 4.135732650756836, 'avg_grad_duration': 12.466698169708252, 'avg_total_duration': 16.602430820465088, 'avg_pred_std': 0.10057252645492554, 'avg_std_loss': 0.008725129999220371, 'avg_mean_pred_loss': 2.4340070012840442e-05}, 'min_metrics': {'avg_loss': 0.0027671898508283663, 'avg_g_mag_loss': 0.06750814222799723, 'avg_g_cos_loss': 0.031209569611071075, 'pred_duration': 4.135732650756836, 'grad_duration': 12.466698169708252, 'total_duration': 16.602430820465088, 'pred_std': 0.10057252645492554, 'std_loss': 0.008725129999220371, 'mean_pred_loss': 2.4340070012840442e-05, 'pred_rmse': 0.05260408669710159, 'pred_mae': 0.03820032626390457, 'pred_mape': 0.1258891075849533, 'grad_rmse': 0.04161679372191429, 'grad_mae': 0.021082276478409767, 'grad_mape': 0.4825449585914612}, 'model_metrics': {'tvae': {'avg_loss': 0.0027671898508283663, 'avg_g_mag_loss': 0.06750814222799723, 'avg_g_cos_loss': 0.031209569611071075, 'pred_duration': 4.135732650756836, 'grad_duration': 12.466698169708252, 'total_duration': 16.602430820465088, 'pred_std': 0.10057252645492554, 'std_loss': 0.008725129999220371, 'mean_pred_loss': 2.4340070012840442e-05, 'pred_rmse': 0.05260408669710159, 'pred_mae': 0.03820032626390457, 'pred_mape': 0.1258891075849533, 'grad_rmse': 0.04161679372191429, 'grad_mae': 0.021082276478409767, 'grad_mape': 0.4825449585914612}}}\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",
"del model\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 if log_wandb else None,\n",
" study_name=study_name,\n",
" **params\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "9b514a07",
"metadata": {
"execution": {
"iopub.execute_input": "2024-03-22T18:16:21.365486Z",
"iopub.status.busy": "2024-03-22T18:16:21.365041Z",
"iopub.status.idle": "2024-03-22T18:16:21.370168Z",
"shell.execute_reply": "2024-03-22T18:16:21.369073Z"
},
"papermill": {
"duration": 0.028958,
"end_time": "2024-03-22T18:16:21.372457",
"exception": false,
"start_time": "2024-03-22T18:16:21.343499",
"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-03-22T18:16:21.409276Z",
"iopub.status.busy": "2024-03-22T18:16:21.408968Z",
"iopub.status.idle": "2024-03-22T18:16:21.506071Z",
"shell.execute_reply": "2024-03-22T18:16:21.505164Z"
},
"papermill": {
"duration": 0.117463,
"end_time": "2024-03-22T18:16:21.508351",
"exception": false,
"start_time": "2024-03-22T18:16:21.390888",
"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-03-22T18:16:21.544277Z",
"iopub.status.busy": "2024-03-22T18:16:21.543923Z",
"iopub.status.idle": "2024-03-22T18:16:21.818454Z",
"shell.execute_reply": "2024-03-22T18:16:21.817370Z"
},
"papermill": {
"duration": 0.295571,
"end_time": "2024-03-22T18:16:21.820671",
"exception": false,
"start_time": "2024-03-22T18:16:21.525100",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"<Axes: >"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"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-03-22T18:16:21.858143Z",
"iopub.status.busy": "2024-03-22T18:16:21.857786Z",
"iopub.status.idle": "2024-03-22T18:20:40.954647Z",
"shell.execute_reply": "2024-03-22T18:20:40.953627Z"
},
"papermill": {
"duration": 259.118235,
"end_time": "2024-03-22T18:20:40.957108",
"exception": false,
"start_time": "2024-03-22T18:16:21.838873",
"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-03-22T18:20:40.994176Z",
"iopub.status.busy": "2024-03-22T18:20:40.993823Z",
"iopub.status.idle": "2024-03-22T18:20:41.015411Z",
"shell.execute_reply": "2024-03-22T18:20:41.014472Z"
},
"papermill": {
"duration": 0.04219,
"end_time": "2024-03-22T18:20:41.017464",
"exception": false,
"start_time": "2024-03-22T18:20:40.975274",
"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>tvae</th>\n",
" <td>0.030277</td>\n",
" <td>0.045636</td>\n",
" <td>0.002767</td>\n",
" <td>12.488235</td>\n",
" <td>0.021082</td>\n",
" <td>0.482545</td>\n",
" <td>0.041617</td>\n",
" <td>0.000024</td>\n",
" <td>4.115197</td>\n",
" <td>0.0382</td>\n",
" <td>0.125889</td>\n",
" <td>0.052604</td>\n",
" <td>0.100573</td>\n",
" <td>0.008725</td>\n",
" <td>16.603431</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" avg_g_cos_loss avg_g_mag_loss avg_loss grad_duration grad_mae \\\n",
"tvae 0.030277 0.045636 0.002767 12.488235 0.021082 \n",
"\n",
" grad_mape grad_rmse mean_pred_loss pred_duration pred_mae \\\n",
"tvae 0.482545 0.041617 0.000024 4.115197 0.0382 \n",
"\n",
" pred_mape pred_rmse pred_std std_loss total_duration \n",
"tvae 0.125889 0.052604 0.100573 0.008725 16.603431 "
]
},
"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-03-22T18:20:41.051948Z",
"iopub.status.busy": "2024-03-22T18:20:41.051665Z",
"iopub.status.idle": "2024-03-22T18:20:41.424283Z",
"shell.execute_reply": "2024-03-22T18:20:41.423284Z"
},
"papermill": {
"duration": 0.392558,
"end_time": "2024-03-22T18:20:41.426797",
"exception": false,
"start_time": "2024-03-22T18:20:41.034239",
"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-03-22T18:20:41.464627Z",
"iopub.status.busy": "2024-03-22T18:20:41.464010Z",
"iopub.status.idle": "2024-03-22T18:25:10.980556Z",
"shell.execute_reply": "2024-03-22T18:25:10.979659Z"
},
"papermill": {
"duration": 269.538205,
"end_time": "2024-03-22T18:25:10.983174",
"exception": false,
"start_time": "2024-03-22T18:20:41.444969",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Caching in ../../../../contraceptive/_cache_aug_test/tvae/all inf False\n",
"Caching in ../../../../contraceptive/_cache_bs_test/tvae/all inf False\n",
"Caching in ../../../../contraceptive/_cache_synth_test/tvae/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-03-22T18:25:11.021429Z",
"iopub.status.busy": "2024-03-22T18:25:11.021082Z",
"iopub.status.idle": "2024-03-22T18:25:11.048484Z",
"shell.execute_reply": "2024-03-22T18:25:11.047685Z"
},
"papermill": {
"duration": 0.049077,
"end_time": "2024-03-22T18:25:11.050646",
"exception": false,
"start_time": "2024-03-22T18:25:11.001569",
"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-03-22T18:25:11.085900Z",
"iopub.status.busy": "2024-03-22T18:25:11.085593Z",
"iopub.status.idle": "2024-03-22T18:25:11.091285Z",
"shell.execute_reply": "2024-03-22T18:25:11.090350Z"
},
"papermill": {
"duration": 0.025923,
"end_time": "2024-03-22T18:25:11.093469",
"exception": false,
"start_time": "2024-03-22T18:25:11.067546",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'tvae': 0.3965440729686192}\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-03-22T18:25:11.130756Z",
"iopub.status.busy": "2024-03-22T18:25:11.130471Z",
"iopub.status.idle": "2024-03-22T18:25:11.518772Z",
"shell.execute_reply": "2024-03-22T18:25:11.517773Z"
},
"papermill": {
"duration": 0.409639,
"end_time": "2024-03-22T18:25:11.520956",
"exception": false,
"start_time": "2024-03-22T18:25:11.111317",
"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-03-22T18:25:11.558170Z",
"iopub.status.busy": "2024-03-22T18:25:11.557829Z",
"iopub.status.idle": "2024-03-22T18:25:11.910037Z",
"shell.execute_reply": "2024-03-22T18:25:11.908917Z"
},
"papermill": {
"duration": 0.37333,
"end_time": "2024-03-22T18:25:11.912313",
"exception": false,
"start_time": "2024-03-22T18:25:11.538983",
"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-03-22T18:25:11.954190Z",
"iopub.status.busy": "2024-03-22T18:25:11.953310Z",
"iopub.status.idle": "2024-03-22T18:25:12.111585Z",
"shell.execute_reply": "2024-03-22T18:25:12.110496Z"
},
"papermill": {
"duration": 0.182951,
"end_time": "2024-03-22T18:25:12.114578",
"exception": false,
"start_time": "2024-03-22T18:25:11.931627",
"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-03-22T18:25:12.154928Z",
"iopub.status.busy": "2024-03-22T18:25:12.154594Z",
"iopub.status.idle": "2024-03-22T18:25:12.439272Z",
"shell.execute_reply": "2024-03-22T18:25:12.438355Z"
},
"papermill": {
"duration": 0.306768,
"end_time": "2024-03-22T18:25:12.441359",
"exception": false,
"start_time": "2024-03-22T18:25:12.134591",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAATAAAAEmCAYAAADldMx1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABUz0lEQVR4nO2dd3hU1daH3zMtDZJQEwKB0KQ3wSB4EZEgKorYQEBKRCyIormIYAEBFa6UGwuCggh6QYpX0WtBJZ8gKIqE3qUGSQEE0pNp5/tjMpOpSWYyk8kk+32eeWDOnHNmzZmc36y99tprSbIsywgEAkEAovC3AQKBQOApQsAEAkHAIgRMIBAELELABAJBwCIETCAQBCxCwAQCQcAiBEwgEAQsQsAEAkHAovK3AVWN0WgkPT2dunXrIkmSv80RCAR2yLJMbm4uMTExKBRl+1i1TsDS09OJjY31txkCgaAczp8/T7Nmzcrcp9YJWN26dQHTxQkPD/ezNQKBwJ6cnBxiY2Mt92pZ1DoBMw8bw8PDhYAJBNWYioR4RBBfIBAELELABAJBwCIETCAQBCy1LgZWEWRZRq/XYzAY/G2KwEsolUpUKpVInalhCAGzQ6vVkpGRQUFBgb9NEXiZ0NBQmjRpgkaj8bcpAi8hBMwKo9HImTNnUCqVxMTEoNFoxC92DUCWZbRaLZcuXeLMmTO0bdu23ARJQWAgBMwKrVaL0WgkNjaW0NBQf5sj8AC9wchfVwuJDFUTGVrqaYWEhKBWqzl37hxarZbg4GA/WinwFuJnyAni1zlwydcayCnS8Xee1uE18b3WPMQ3KqhZlPSokRG9amoDQsAENRLRa6t2IARMUGMYP348o0Y8ACD8r1pCtRCwJUuWEBcXR3BwML1792bXrl0u9121ahWSJNk8REAWbrnlFp599ll/m1FtEB5Y7cDvArZ+/XqSkpKYNWsWe/bsoVu3bgwePJiLFy+6PCY8PJyMjAzL49y5c1VoscCX6HQ6r5xHxMBqB34XsMWLFzNx4kQSExPp2LEjy5YtIzQ0lJUrV7o8RpIkoqOjLY+oqCif2SfLMgVavV8eFW2aPn78eLZt28Zbb71l8UqbNWvG0qVLbfbbu3cvCoXCIviLFy+mS5cuhIWFERsby6RJk8jLy7M5ZseOHfTr14+QkBBiY2N55plnyM/Pr5BdGRkZDBkyhJCQEFq2bMnatWuJi4sjOTnZso8kSSxdupShQ4cSFhbG66+/jsFgYMKECbRs2ZKQkBDatWvHW2+9ZXNug8FAUlISkZGRNGjQgGnTptleL6FftQK/5oFptVpSU1OZMWOGZZtCoSAhIYGdO3e6PC4vL48WLVpgNBq5/vrreeONN+jUqZPTfYuLiykuLrY8z8nJccvGQp2BjjO/d+sYb3FkzmBCNeV/RW+99RYnTpygc+fOzJkzB4BFixaxdu1annzySct+a9as4aabbqJFixaA6Vq//fbbtGzZktOnTzNp0iSmTZvGe++9B8CpU6e4/fbbee2111i5ciWXLl1i8uTJTJ48mY8++qhcu8aOHcvly5fZunUrarWapKQkp571q6++yvz580lOTkalUmE0GmnWrBkbN26kQYMG/Prrrzz22GM0adKE4cOHWz7fqlWrWLlyJR06dGDRokV88cUX9Ot/CyD0q7bgVwG7fPkyBoPBwYOKiori2LFjTo9p164dK1eupGvXrmRnZ7Nw4UL69u3L4cOHnVZvnDdvHrNnz/aJ/dWFiIgINBoNoaGhREdHAzB69GgWLVpEWloazZs3x2g0sm7dOl5++WXLcdYxs7i4OF577TWeeOIJi4DNmzeP0aNHW/Zr27Ytb7/9Nv3792fp0qVlxh6PHTvGli1b+OOPP+jVqxcAK1asoG3btg77jho1isTERJtt1t9Zy5Yt2blzJxs2bLAIWHJyMjNmzOC+++4DYNmyZXz/fekPjYiB1Q4CLhO/T58+9OnTx/K8b9++dOjQgffff5+5c+c67D9jxgySkpIsz83VHitKiFrJkTmDK2e0h4SolR4f2717dzp06MDatWuZPn0627Zt4+LFizz44IOWfbZs2cK8efM4duwYOTk56PV6ioqKKCgoIDQ0lP3793PgwAHWrFljOUaWZcuSqw4dOrh8/+PHj6NSqbj++ust29q0aUO9evUc9jULnDVLlixh5cqVpKWlUVhYiFarpXv37gBkZ2eTkZFB7969LfurVCp69eqFVm9agC9iYLUDvwpYw4YNUSqVZGVl2WzPysqyeBLloVar6dGjBydPnnT6elBQEEFBQR7bKElShYZx1ZHRo0dbBGzt2rXcfvvtNGjQAICzZ89y11138eSTT/L6669Tv359duzYwYQJE9BqtYSGhpKXl8fjjz/OM88843Du5s2b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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.019727,
"end_time": "2024-03-22T18:25:12.481176",
"exception": false,
"start_time": "2024-03-22T18:25:12.461449",
"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.13"
},
"papermill": {
"default_parameters": {},
"duration": 5438.254231,
"end_time": "2024-03-22T18:25:15.223561",
"environment_variables": {},
"exception": null,
"input_path": "eval/contraceptive/tvae/42/mlu-eval.ipynb",
"output_path": "eval/contraceptive/tvae/42/mlu-eval.ipynb",
"parameters": {
"allow_same_prediction": true,
"dataset": "contraceptive",
"dataset_name": "contraceptive",
"debug": false,
"folder": "eval",
"gp": false,
"gp_multiply": false,
"log_wandb": false,
"param_index": 0,
"path": "eval/contraceptive/tvae/42",
"path_prefix": "../../../../",
"random_seed": 42,
"single_model": "tvae"
},
"start_time": "2024-03-22T16:54:36.969330",
"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
} |