File size: 211,729 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 |
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "982e76f5",
"metadata": {
"execution": {
"iopub.execute_input": "2024-03-22T19:36:59.926982Z",
"iopub.status.busy": "2024-03-22T19:36:59.926612Z",
"iopub.status.idle": "2024-03-22T19:36:59.959766Z",
"shell.execute_reply": "2024-03-22T19:36:59.959082Z"
},
"papermill": {
"duration": 0.048315,
"end_time": "2024-03-22T19:36:59.961821",
"exception": false,
"start_time": "2024-03-22T19:36:59.913506",
"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-22T19:36:59.986986Z",
"iopub.status.busy": "2024-03-22T19:36:59.986611Z",
"iopub.status.idle": "2024-03-22T19:36:59.993605Z",
"shell.execute_reply": "2024-03-22T19:36:59.992766Z"
},
"papermill": {
"duration": 0.021906,
"end_time": "2024-03-22T19:36:59.995635",
"exception": false,
"start_time": "2024-03-22T19:36:59.973729",
"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-22T19:37:00.019438Z",
"iopub.status.busy": "2024-03-22T19:37:00.018936Z",
"iopub.status.idle": "2024-03-22T19:37:00.022856Z",
"shell.execute_reply": "2024-03-22T19:37:00.021963Z"
},
"papermill": {
"duration": 0.018194,
"end_time": "2024-03-22T19:37:00.024950",
"exception": false,
"start_time": "2024-03-22T19:37:00.006756",
"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-22T19:37:00.048617Z",
"iopub.status.busy": "2024-03-22T19:37:00.048315Z",
"iopub.status.idle": "2024-03-22T19:37:00.052533Z",
"shell.execute_reply": "2024-03-22T19:37:00.051690Z"
},
"executionInfo": {
"elapsed": 678,
"status": "ok",
"timestamp": 1696841022168,
"user": {
"displayName": "Rizqi Nur",
"userId": "09644007964068789560"
},
"user_tz": -420
},
"id": "ns5hFcVL2yvs",
"papermill": {
"duration": 0.018212,
"end_time": "2024-03-22T19:37:00.054427",
"exception": false,
"start_time": "2024-03-22T19:37:00.036215",
"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-22T19:37:00.077831Z",
"iopub.status.busy": "2024-03-22T19:37:00.077295Z",
"iopub.status.idle": "2024-03-22T19:37:00.082918Z",
"shell.execute_reply": "2024-03-22T19:37:00.082045Z"
},
"papermill": {
"duration": 0.019446,
"end_time": "2024-03-22T19:37:00.084750",
"exception": false,
"start_time": "2024-03-22T19:37:00.065304",
"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": "f4f0a115",
"metadata": {
"execution": {
"iopub.execute_input": "2024-03-22T19:37:00.111051Z",
"iopub.status.busy": "2024-03-22T19:37:00.110431Z",
"iopub.status.idle": "2024-03-22T19:37:00.115765Z",
"shell.execute_reply": "2024-03-22T19:37:00.114973Z"
},
"papermill": {
"duration": 0.020918,
"end_time": "2024-03-22T19:37:00.117637",
"exception": false,
"start_time": "2024-03-22T19:37:00.096719",
"status": "completed"
},
"tags": [
"injected-parameters"
]
},
"outputs": [],
"source": [
"# Parameters\n",
"dataset = \"contraceptive\"\n",
"dataset_name = \"contraceptive\"\n",
"single_model = \"lct_gan\"\n",
"gp = False\n",
"gp_multiply = False\n",
"random_seed = 1\n",
"debug = False\n",
"folder = \"eval\"\n",
"path_prefix = \"../../../../\"\n",
"path = \"eval/contraceptive/lct_gan/1\"\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.010803,
"end_time": "2024-03-22T19:37:00.139438",
"exception": false,
"start_time": "2024-03-22T19:37:00.128635",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 7,
"id": "5f45b1d0",
"metadata": {
"execution": {
"iopub.execute_input": "2024-03-22T19:37:00.162833Z",
"iopub.status.busy": "2024-03-22T19:37:00.162271Z",
"iopub.status.idle": "2024-03-22T19:37:00.171358Z",
"shell.execute_reply": "2024-03-22T19:37:00.170598Z"
},
"executionInfo": {
"elapsed": 7,
"status": "ok",
"timestamp": 1696841022169,
"user": {
"displayName": "Rizqi Nur",
"userId": "09644007964068789560"
},
"user_tz": -420
},
"id": "UdvXYv3c3LXy",
"papermill": {
"duration": 0.022705,
"end_time": "2024-03-22T19:37:00.173192",
"exception": false,
"start_time": "2024-03-22T19:37:00.150487",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/kaggle/working\n",
"/kaggle/working/eval/contraceptive/lct_gan/1\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-22T19:37:00.196567Z",
"iopub.status.busy": "2024-03-22T19:37:00.196330Z",
"iopub.status.idle": "2024-03-22T19:37:02.274147Z",
"shell.execute_reply": "2024-03-22T19:37:02.273085Z"
},
"papermill": {
"duration": 2.091878,
"end_time": "2024-03-22T19:37:02.276201",
"exception": false,
"start_time": "2024-03-22T19:37:00.184323",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Set seed to <function seed at 0x78a890c5f370>\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-22T19:37:02.303841Z",
"iopub.status.busy": "2024-03-22T19:37:02.303357Z",
"iopub.status.idle": "2024-03-22T19:37:02.316110Z",
"shell.execute_reply": "2024-03-22T19:37:02.315206Z"
},
"papermill": {
"duration": 0.02929,
"end_time": "2024-03-22T19:37:02.318006",
"exception": false,
"start_time": "2024-03-22T19:37:02.288716",
"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-22T19:37:02.342193Z",
"iopub.status.busy": "2024-03-22T19:37:02.341909Z",
"iopub.status.idle": "2024-03-22T19:37:02.349491Z",
"shell.execute_reply": "2024-03-22T19:37:02.348614Z"
},
"executionInfo": {
"elapsed": 6,
"status": "ok",
"timestamp": 1696841022169,
"user": {
"displayName": "Rizqi Nur",
"userId": "09644007964068789560"
},
"user_tz": -420
},
"id": "Vrl2QkoV3o_8",
"papermill": {
"duration": 0.021752,
"end_time": "2024-03-22T19:37:02.351453",
"exception": false,
"start_time": "2024-03-22T19:37:02.329701",
"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-22T19:37:02.375787Z",
"iopub.status.busy": "2024-03-22T19:37:02.375495Z",
"iopub.status.idle": "2024-03-22T19:37:02.474933Z",
"shell.execute_reply": "2024-03-22T19:37:02.474086Z"
},
"executionInfo": {
"elapsed": 6,
"status": "ok",
"timestamp": 1696841022169,
"user": {
"displayName": "Rizqi Nur",
"userId": "09644007964068789560"
},
"user_tz": -420
},
"id": "TilUuFk9vqMb",
"papermill": {
"duration": 0.114926,
"end_time": "2024-03-22T19:37:02.477611",
"exception": false,
"start_time": "2024-03-22T19:37:02.362685",
"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-22T19:37:02.504711Z",
"iopub.status.busy": "2024-03-22T19:37:02.504080Z",
"iopub.status.idle": "2024-03-22T19:37:07.156105Z",
"shell.execute_reply": "2024-03-22T19:37:07.155324Z"
},
"executionInfo": {
"elapsed": 3113,
"status": "ok",
"timestamp": 1696841025277,
"user": {
"displayName": "Rizqi Nur",
"userId": "09644007964068789560"
},
"user_tz": -420
},
"id": "7Abt8nStvr9Z",
"papermill": {
"duration": 4.668007,
"end_time": "2024-03-22T19:37:07.158408",
"exception": false,
"start_time": "2024-03-22T19:37:02.490401",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"2024-03-22 19:37:04.751058: 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 19:37:04.751112: 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 19:37:04.752906: 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-22T19:37:07.183123Z",
"iopub.status.busy": "2024-03-22T19:37:07.182562Z",
"iopub.status.idle": "2024-03-22T19:37:07.188539Z",
"shell.execute_reply": "2024-03-22T19:37:07.187524Z"
},
"papermill": {
"duration": 0.020379,
"end_time": "2024-03-22T19:37:07.190540",
"exception": false,
"start_time": "2024-03-22T19:37:07.170161",
"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-22T19:37:07.215777Z",
"iopub.status.busy": "2024-03-22T19:37:07.215511Z",
"iopub.status.idle": "2024-03-22T19:37:15.361034Z",
"shell.execute_reply": "2024-03-22T19:37:15.359853Z"
},
"executionInfo": {
"elapsed": 20137,
"status": "ok",
"timestamp": 1696841045408,
"user": {
"displayName": "Rizqi Nur",
"userId": "09644007964068789560"
},
"user_tz": -420
},
"id": "tbaguWxAvtPi",
"papermill": {
"duration": 8.161045,
"end_time": "2024-03-22T19:37:15.363624",
"exception": false,
"start_time": "2024-03-22T19:37:07.202579",
"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-22T19:37:15.390983Z",
"iopub.status.busy": "2024-03-22T19:37:15.390664Z",
"iopub.status.idle": "2024-03-22T19:37:15.397343Z",
"shell.execute_reply": "2024-03-22T19:37:15.396543Z"
},
"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.022416,
"end_time": "2024-03-22T19:37:15.399240",
"exception": false,
"start_time": "2024-03-22T19:37:15.376824",
"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-22T19:37:15.423691Z",
"iopub.status.busy": "2024-03-22T19:37:15.423432Z",
"iopub.status.idle": "2024-03-22T19:37:15.427872Z",
"shell.execute_reply": "2024-03-22T19:37:15.427059Z"
},
"papermill": {
"duration": 0.018915,
"end_time": "2024-03-22T19:37:15.429769",
"exception": false,
"start_time": "2024-03-22T19:37:15.410854",
"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-22T19:37:15.454450Z",
"iopub.status.busy": "2024-03-22T19:37:15.454193Z",
"iopub.status.idle": "2024-03-22T19:37:15.967529Z",
"shell.execute_reply": "2024-03-22T19:37:15.966629Z"
},
"papermill": {
"duration": 0.528118,
"end_time": "2024-03-22T19:37:15.969855",
"exception": false,
"start_time": "2024-03-22T19:37:15.441737",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Caching in ../../../../contraceptive/_cache_aug_test/lct_gan/all inf False\n",
"../../../../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/lct_gan/all inf False\n",
"../../../../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/lct_gan/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-22T19:37:15.998281Z",
"iopub.status.busy": "2024-03-22T19:37:15.997971Z",
"iopub.status.idle": "2024-03-22T19:37:16.319621Z",
"shell.execute_reply": "2024-03-22T19:37:16.318764Z"
},
"executionInfo": {
"elapsed": 588,
"status": "ok",
"timestamp": 1696841049215,
"user": {
"displayName": "Rizqi Nur",
"userId": "09644007964068789560"
},
"user_tz": -420
},
"id": "NgahtU1q9uLO",
"papermill": {
"duration": 0.338255,
"end_time": "2024-03-22T19:37:16.321610",
"exception": false,
"start_time": "2024-03-22T19:37:15.983355",
"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': 'lct_gan',\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': ['lct_gan'],\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-22T19:37:16.350046Z",
"iopub.status.busy": "2024-03-22T19:37:16.349720Z",
"iopub.status.idle": "2024-03-22T19:37:16.457775Z",
"shell.execute_reply": "2024-03-22T19:37:16.456979Z"
},
"papermill": {
"duration": 0.125285,
"end_time": "2024-03-22T19:37:16.460059",
"exception": false,
"start_time": "2024-03-22T19:37:16.334774",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Caching in ../../../../contraceptive/_cache_aug_train/lct_gan/all inf False\n",
"split df ratio is 0\n",
"../../../../ml-utility-loss/aug_train/contraceptive [400, 0]\n",
"Caching in ../../../../contraceptive/_cache_aug_val/lct_gan/all inf False\n",
"split df ratio is 1\n",
"../../../../ml-utility-loss/aug_val/contraceptive [0, 200]\n",
"Caching in ../../../../contraceptive/_cache_bs_train/lct_gan/all inf False\n",
"split df ratio is 0\n",
"../../../../ml-utility-loss/bs_train/contraceptive [100, 0]\n",
"Caching in ../../../../contraceptive/_cache_bs_val/lct_gan/all inf False\n",
"split df ratio is 1\n",
"../../../../ml-utility-loss/bs_val/contraceptive [0, 50]\n",
"Caching in ../../../../contraceptive/_cache_synth/lct_gan/all inf False\n",
"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-22T19:37:16.488607Z",
"iopub.status.busy": "2024-03-22T19:37:16.487899Z",
"iopub.status.idle": "2024-03-22T19:37:16.945681Z",
"shell.execute_reply": "2024-03-22T19:37:16.944677Z"
},
"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.474366,
"end_time": "2024-03-22T19:37:16.947922",
"exception": false,
"start_time": "2024-03-22T19:37:16.473556",
"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",
"['lct_gan'] 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-22T19:37:16.976131Z",
"iopub.status.busy": "2024-03-22T19:37:16.975778Z",
"iopub.status.idle": "2024-03-22T19:37:16.979707Z",
"shell.execute_reply": "2024-03-22T19:37:16.979026Z"
},
"papermill": {
"duration": 0.020246,
"end_time": "2024-03-22T19:37:16.981682",
"exception": false,
"start_time": "2024-03-22T19:37:16.961436",
"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-22T19:37:17.007348Z",
"iopub.status.busy": "2024-03-22T19:37:17.007080Z",
"iopub.status.idle": "2024-03-22T19:37:17.014104Z",
"shell.execute_reply": "2024-03-22T19:37:17.013253Z"
},
"papermill": {
"duration": 0.021998,
"end_time": "2024-03-22T19:37:17.015955",
"exception": false,
"start_time": "2024-03-22T19:37:16.993957",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"11889160"
]
},
"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-22T19:37:17.041708Z",
"iopub.status.busy": "2024-03-22T19:37:17.041437Z",
"iopub.status.idle": "2024-03-22T19:37:17.120909Z",
"shell.execute_reply": "2024-03-22T19:37:17.120024Z"
},
"papermill": {
"duration": 0.094727,
"end_time": "2024-03-22T19:37:17.122862",
"exception": false,
"start_time": "2024-03-22T19:37:17.028135",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"========================================================================================================================\n",
"Layer (type:depth-idx) Output Shape Param #\n",
"========================================================================================================================\n",
"MLUtilitySingle [2, 1179, 40] --\n",
"├─Adapter: 1-1 [2, 1179, 40] --\n",
"│ └─Sequential: 2-1 [2, 1179, 256] --\n",
"│ │ └─FeedForward: 3-1 [2, 1179, 1024] --\n",
"│ │ │ └─Linear: 4-1 [2, 1179, 1024] 41,984\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, 40] (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,889,160\n",
"Trainable params: 11,889,160\n",
"Non-trainable params: 0\n",
"Total mult-adds (M): 44.13\n",
"========================================================================================================================\n",
"Input size (MB): 0.47\n",
"Forward/backward pass size (MB): 375.40\n",
"Params size (MB): 47.56\n",
"Estimated Total Size (MB): 423.43\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-22T19:37:17.152093Z",
"iopub.status.busy": "2024-03-22T19:37:17.151777Z",
"iopub.status.idle": "2024-03-22T20:44:11.433524Z",
"shell.execute_reply": "2024-03-22T20:44:11.432528Z"
},
"papermill": {
"duration": 4014.314032,
"end_time": "2024-03-22T20:44:11.450901",
"exception": false,
"start_time": "2024-03-22T19:37:17.136869",
"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.017055697603565123, 'avg_role_model_std_loss': 0.7837836365105371, 'avg_role_model_mean_pred_loss': 0.000854024517475194, '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.017055697603565123, 'n_size': 900, 'n_batch': 225, 'duration': 209.5561990737915, 'duration_batch': 0.9313608847724066, 'duration_size': 0.23284022119310166, 'avg_pred_std': 0.11550631119145287}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Val loss {'avg_role_model_loss': 0.02723778669618898, 'avg_role_model_std_loss': 0.35535829481002906, 'avg_role_model_mean_pred_loss': 0.0011922009129072346, '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.02723778669618898, 'n_size': 450, 'n_batch': 113, 'duration': 91.00356817245483, 'duration_batch': 0.8053413112606622, 'duration_size': 0.20223015149434406, 'avg_pred_std': 0.12002328037391458}\n",
"Epoch 1\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train loss {'avg_role_model_loss': 0.007602974076354359, 'avg_role_model_std_loss': 0.6694789405275434, 'avg_role_model_mean_pred_loss': 0.00012108089975418718, '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.007602974076354359, 'n_size': 900, 'n_batch': 225, 'duration': 209.41460299491882, 'duration_batch': 0.9307315688663059, 'duration_size': 0.23268289221657648, 'avg_pred_std': 0.0941959698839734}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Val loss {'avg_role_model_loss': 0.004413039641092635, 'avg_role_model_std_loss': 0.45001505491487465, 'avg_role_model_mean_pred_loss': 4.256673724010495e-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.004413039641092635, 'n_size': 450, 'n_batch': 113, 'duration': 91.49867558479309, 'duration_batch': 0.8097227927857795, 'duration_size': 0.20333039018842908, 'avg_pred_std': 0.06237377326902563}\n",
"Epoch 2\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train loss {'avg_role_model_loss': 0.005956742855616742, 'avg_role_model_std_loss': 0.6394465912903183, 'avg_role_model_mean_pred_loss': 6.889980071151411e-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.005956742855616742, 'n_size': 900, 'n_batch': 225, 'duration': 209.05843949317932, 'duration_batch': 0.9291486199696859, 'duration_size': 0.23228715499242147, 'avg_pred_std': 0.09135436112475064}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Val loss {'avg_role_model_loss': 0.004399605713939915, 'avg_role_model_std_loss': 1.215607570140407, 'avg_role_model_mean_pred_loss': 2.922537710473547e-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.004399605713939915, 'n_size': 450, 'n_batch': 113, 'duration': 88.99790143966675, 'duration_batch': 0.7875920481386438, 'duration_size': 0.19777311431037056, 'avg_pred_std': 0.04754088749589844}\n",
"Epoch 3\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train loss {'avg_role_model_loss': 0.005293925739824772, 'avg_role_model_std_loss': 0.6930031799355281, 'avg_role_model_mean_pred_loss': 5.091876555952298e-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.005293925739824772, 'n_size': 900, 'n_batch': 225, 'duration': 209.8546106815338, 'duration_batch': 0.9326871585845947, 'duration_size': 0.23317178964614868, 'avg_pred_std': 0.09368091402575374}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Val loss {'avg_role_model_loss': 0.005122498869895935, 'avg_role_model_std_loss': 0.6850604875349726, 'avg_role_model_mean_pred_loss': 0.0001063596828682662, '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.005122498869895935, 'n_size': 450, 'n_batch': 113, 'duration': 90.19163846969604, 'duration_batch': 0.7981560926521774, 'duration_size': 0.2004258632659912, 'avg_pred_std': 0.06673125488749515}\n",
"Epoch 4\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train loss {'avg_role_model_loss': 0.004406307417407839, 'avg_role_model_std_loss': 0.5391749190130491, 'avg_role_model_mean_pred_loss': 3.865118440087487e-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.004406307417407839, 'n_size': 900, 'n_batch': 225, 'duration': 208.6917781829834, 'duration_batch': 0.9275190141465929, 'duration_size': 0.23187975353664822, 'avg_pred_std': 0.0995840290437142}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Val loss {'avg_role_model_loss': 0.005340991177492671, 'avg_role_model_std_loss': 0.6295711460246051, 'avg_role_model_mean_pred_loss': 7.291253590576869e-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.005340991177492671, 'n_size': 450, 'n_batch': 113, 'duration': 91.7313449382782, 'duration_batch': 0.8117818136130814, 'duration_size': 0.20384743319617377, 'avg_pred_std': 0.06550657832418132}\n",
"Epoch 5\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train loss {'avg_role_model_loss': 0.00469050889802424, 'avg_role_model_std_loss': 0.9336842445089064, 'avg_role_model_mean_pred_loss': 3.8414434089242215e-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.00469050889802424, 'n_size': 900, 'n_batch': 225, 'duration': 208.08384490013123, 'duration_batch': 0.9248170884450276, 'duration_size': 0.2312042721112569, 'avg_pred_std': 0.09579447591263388}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Val loss {'avg_role_model_loss': 0.004810444195496125, 'avg_role_model_std_loss': 0.3487526955594519, 'avg_role_model_mean_pred_loss': 8.624510295827805e-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.004810444195496125, 'n_size': 450, 'n_batch': 113, 'duration': 90.39807367324829, 'duration_batch': 0.7999829528606044, 'duration_size': 0.20088460816277398, 'avg_pred_std': 0.0735004077937487}\n",
"Epoch 6\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train loss {'avg_role_model_loss': 0.005119060436975107, 'avg_role_model_std_loss': 0.6433215488478984, 'avg_role_model_mean_pred_loss': 6.873547569881813e-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.005119060436975107, 'n_size': 900, 'n_batch': 225, 'duration': 207.70152282714844, 'duration_batch': 0.9231178792317708, 'duration_size': 0.2307794698079427, 'avg_pred_std': 0.09771538318652245}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Val loss {'avg_role_model_loss': 0.004957494798161659, 'avg_role_model_std_loss': 1.346057123426031, 'avg_role_model_mean_pred_loss': 5.000207313663115e-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.004957494798161659, 'n_size': 450, 'n_batch': 113, 'duration': 90.1600124835968, 'duration_batch': 0.7978762166689982, 'duration_size': 0.20035558329688177, 'avg_pred_std': 0.06382843967428249}\n",
"Epoch 7\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train loss {'avg_role_model_loss': 0.00532732381252572, 'avg_role_model_std_loss': 0.4333305762650606, 'avg_role_model_mean_pred_loss': 5.976084272669491e-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.00532732381252572, 'n_size': 900, 'n_batch': 225, 'duration': 207.5520989894867, 'duration_batch': 0.9224537732866075, 'duration_size': 0.23061344332165187, 'avg_pred_std': 0.09995691900038058}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Val loss {'avg_role_model_loss': 0.0050655570465864405, 'avg_role_model_std_loss': 1.4249071690357547, 'avg_role_model_mean_pred_loss': 4.881459755913574e-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.0050655570465864405, 'n_size': 450, 'n_batch': 113, 'duration': 90.09133553504944, 'duration_batch': 0.7972684560623844, 'duration_size': 0.2002029678556654, 'avg_pred_std': 0.05493936902612646}\n",
"Epoch 8\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train loss {'avg_role_model_loss': 0.004071665801651155, 'avg_role_model_std_loss': 0.3260331416654134, 'avg_role_model_mean_pred_loss': 2.1085142560956504e-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.004071665801651155, 'n_size': 900, 'n_batch': 225, 'duration': 209.66889786720276, 'duration_batch': 0.931861768298679, 'duration_size': 0.23296544207466974, 'avg_pred_std': 0.10195785622629855}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Val loss {'avg_role_model_loss': 0.005279655439727422, 'avg_role_model_std_loss': 0.9929788724251226, 'avg_role_model_mean_pred_loss': 6.48734679797379e-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.005279655439727422, 'n_size': 450, 'n_batch': 113, 'duration': 91.38696694374084, 'duration_batch': 0.8087342207410694, 'duration_size': 0.20308214876386854, 'avg_pred_std': 0.06704739362940984}\n",
"Epoch 9\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train loss {'avg_role_model_loss': 0.004601976428077453, 'avg_role_model_std_loss': 0.3923278355509547, 'avg_role_model_mean_pred_loss': 4.1437573981469074e-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.004601976428077453, 'n_size': 900, 'n_batch': 225, 'duration': 202.2607822418213, 'duration_batch': 0.8989368099636502, 'duration_size': 0.22473420249091255, 'avg_pred_std': 0.1009762748144567}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Val loss {'avg_role_model_loss': 0.003612730009287285, 'avg_role_model_std_loss': 1.519655740890833, 'avg_role_model_mean_pred_loss': 3.1731855463335754e-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.003612730009287285, 'n_size': 450, 'n_batch': 113, 'duration': 86.41371130943298, 'duration_batch': 0.7647231089330353, 'duration_size': 0.19203046957651773, 'avg_pred_std': 0.05825823241436805}\n",
"Epoch 10\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train loss {'avg_role_model_loss': 0.003639938447223459, 'avg_role_model_std_loss': 0.2671018096537945, 'avg_role_model_mean_pred_loss': 2.6972246297165055e-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.003639938447223459, 'n_size': 900, 'n_batch': 225, 'duration': 204.09564805030823, 'duration_batch': 0.907091769112481, 'duration_size': 0.22677294227812025, 'avg_pred_std': 0.10696077811221281}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Val loss {'avg_role_model_loss': 0.002935796806381808, 'avg_role_model_std_loss': 1.918275244656198, 'avg_role_model_mean_pred_loss': 1.3822624714984066e-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.002935796806381808, 'n_size': 450, 'n_batch': 113, 'duration': 87.83020257949829, 'duration_batch': 0.7772584299070645, 'duration_size': 0.19517822795444065, 'avg_pred_std': 0.04963276007591821}\n",
"Epoch 11\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train loss {'avg_role_model_loss': 0.0033298865797243907, 'avg_role_model_std_loss': 0.48618020502341713, 'avg_role_model_mean_pred_loss': 2.140108548165483e-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.0033298865797243907, 'n_size': 900, 'n_batch': 225, 'duration': 201.81425046920776, 'duration_batch': 0.89695222430759, 'duration_size': 0.2242380560768975, 'avg_pred_std': 0.10155585827512874}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Val loss {'avg_role_model_loss': 0.002946255624992773, 'avg_role_model_std_loss': 1.365417978676351, 'avg_role_model_mean_pred_loss': 1.4400359725914503e-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.002946255624992773, 'n_size': 450, 'n_batch': 113, 'duration': 87.90818929672241, 'duration_batch': 0.777948577847101, 'duration_size': 0.19535153177049425, 'avg_pred_std': 0.05489195802813577}\n",
"Epoch 12\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train loss {'avg_role_model_loss': 0.003180694187467452, 'avg_role_model_std_loss': 0.5309610087041662, 'avg_role_model_mean_pred_loss': 1.2343771629586152e-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.003180694187467452, 'n_size': 900, 'n_batch': 225, 'duration': 202.47150707244873, 'duration_batch': 0.8998733647664388, 'duration_size': 0.2249683411916097, 'avg_pred_std': 0.09903836669710775}\n",
"Time out: 3780.621705532074/3600\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Eval loss {'role_model': 'lct_gan', 'n_size': 1050, 'n_batch': 263, 'role_model_metrics': {'avg_loss': 0.003139846928090611, 'avg_g_mag_loss': 0.10179269966281267, 'avg_g_cos_loss': 0.03099184789007441, 'pred_duration': 3.9727766513824463, 'grad_duration': 12.556280612945557, 'total_duration': 16.529057264328003, 'pred_std': 0.09302742779254913, 'std_loss': 0.02486800216138363, 'mean_pred_loss': 3.833626033156179e-05, 'pred_rmse': 0.05603433772921562, 'pred_mae': 0.04172290489077568, 'pred_mape': 0.13467051088809967, 'grad_rmse': 0.15034998953342438, 'grad_mae': 0.04181426018476486, 'grad_mape': 1.1387050151824951}, '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.003139846928090611, 'avg_g_mag_loss': 0.10179269966281267, 'avg_g_cos_loss': 0.03099184789007441, 'avg_pred_duration': 3.9727766513824463, 'avg_grad_duration': 12.556280612945557, 'avg_total_duration': 16.529057264328003, 'avg_pred_std': 0.09302742779254913, 'avg_std_loss': 0.02486800216138363, 'avg_mean_pred_loss': 3.833626033156179e-05}, 'min_metrics': {'avg_loss': 0.003139846928090611, 'avg_g_mag_loss': 0.10179269966281267, 'avg_g_cos_loss': 0.03099184789007441, 'pred_duration': 3.9727766513824463, 'grad_duration': 12.556280612945557, 'total_duration': 16.529057264328003, 'pred_std': 0.09302742779254913, 'std_loss': 0.02486800216138363, 'mean_pred_loss': 3.833626033156179e-05, 'pred_rmse': 0.05603433772921562, 'pred_mae': 0.04172290489077568, 'pred_mape': 0.13467051088809967, 'grad_rmse': 0.15034998953342438, 'grad_mae': 0.04181426018476486, 'grad_mape': 1.1387050151824951}, 'model_metrics': {'lct_gan': {'avg_loss': 0.003139846928090611, 'avg_g_mag_loss': 0.10179269966281267, 'avg_g_cos_loss': 0.03099184789007441, 'pred_duration': 3.9727766513824463, 'grad_duration': 12.556280612945557, 'total_duration': 16.529057264328003, 'pred_std': 0.09302742779254913, 'std_loss': 0.02486800216138363, 'mean_pred_loss': 3.833626033156179e-05, 'pred_rmse': 0.05603433772921562, 'pred_mae': 0.04172290489077568, 'pred_mape': 0.13467051088809967, 'grad_rmse': 0.15034998953342438, 'grad_mae': 0.04181426018476486, 'grad_mape': 1.1387050151824951}}}\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-22T20:44:11.484448Z",
"iopub.status.busy": "2024-03-22T20:44:11.484132Z",
"iopub.status.idle": "2024-03-22T20:44:11.488584Z",
"shell.execute_reply": "2024-03-22T20:44:11.487707Z"
},
"papermill": {
"duration": 0.023713,
"end_time": "2024-03-22T20:44:11.490684",
"exception": false,
"start_time": "2024-03-22T20:44:11.466971",
"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-22T20:44:11.522326Z",
"iopub.status.busy": "2024-03-22T20:44:11.522055Z",
"iopub.status.idle": "2024-03-22T20:44:11.619261Z",
"shell.execute_reply": "2024-03-22T20:44:11.618274Z"
},
"papermill": {
"duration": 0.115695,
"end_time": "2024-03-22T20:44:11.621500",
"exception": false,
"start_time": "2024-03-22T20:44:11.505805",
"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-22T20:44:11.655717Z",
"iopub.status.busy": "2024-03-22T20:44:11.655043Z",
"iopub.status.idle": "2024-03-22T20:44:11.931221Z",
"shell.execute_reply": "2024-03-22T20:44:11.930263Z"
},
"papermill": {
"duration": 0.295167,
"end_time": "2024-03-22T20:44:11.933247",
"exception": false,
"start_time": "2024-03-22T20:44:11.638080",
"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-22T20:44:11.968723Z",
"iopub.status.busy": "2024-03-22T20:44:11.968034Z",
"iopub.status.idle": "2024-03-22T20:48:05.896124Z",
"shell.execute_reply": "2024-03-22T20:48:05.895337Z"
},
"papermill": {
"duration": 233.948452,
"end_time": "2024-03-22T20:48:05.898722",
"exception": false,
"start_time": "2024-03-22T20:44:11.950270",
"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-22T20:48:05.934156Z",
"iopub.status.busy": "2024-03-22T20:48:05.933853Z",
"iopub.status.idle": "2024-03-22T20:48:05.952653Z",
"shell.execute_reply": "2024-03-22T20:48:05.951833Z"
},
"papermill": {
"duration": 0.038451,
"end_time": "2024-03-22T20:48:05.954486",
"exception": false,
"start_time": "2024-03-22T20:48:05.916035",
"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>lct_gan</th>\n",
" <td>0.031092</td>\n",
" <td>0.090557</td>\n",
" <td>0.00314</td>\n",
" <td>12.489086</td>\n",
" <td>0.041814</td>\n",
" <td>1.138705</td>\n",
" <td>0.15035</td>\n",
" <td>0.000038</td>\n",
" <td>3.991713</td>\n",
" <td>0.041723</td>\n",
" <td>0.134671</td>\n",
" <td>0.056034</td>\n",
" <td>0.093027</td>\n",
" <td>0.024868</td>\n",
" <td>16.480799</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",
"lct_gan 0.031092 0.090557 0.00314 12.489086 0.041814 \n",
"\n",
" grad_mape grad_rmse mean_pred_loss pred_duration pred_mae \\\n",
"lct_gan 1.138705 0.15035 0.000038 3.991713 0.041723 \n",
"\n",
" pred_mape pred_rmse pred_std std_loss total_duration \n",
"lct_gan 0.134671 0.056034 0.093027 0.024868 16.480799 "
]
},
"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-22T20:48:05.987875Z",
"iopub.status.busy": "2024-03-22T20:48:05.987334Z",
"iopub.status.idle": "2024-03-22T20:48:06.323344Z",
"shell.execute_reply": "2024-03-22T20:48:06.322430Z"
},
"papermill": {
"duration": 0.354866,
"end_time": "2024-03-22T20:48:06.325490",
"exception": false,
"start_time": "2024-03-22T20:48:05.970624",
"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-22T20:48:06.360856Z",
"iopub.status.busy": "2024-03-22T20:48:06.360522Z",
"iopub.status.idle": "2024-03-22T20:52:09.563033Z",
"shell.execute_reply": "2024-03-22T20:52:09.562228Z"
},
"papermill": {
"duration": 243.222766,
"end_time": "2024-03-22T20:52:09.565475",
"exception": false,
"start_time": "2024-03-22T20:48:06.342709",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Caching in ../../../../contraceptive/_cache_aug_test/lct_gan/all inf False\n",
"Caching in ../../../../contraceptive/_cache_bs_test/lct_gan/all inf False\n",
"Caching in ../../../../contraceptive/_cache_synth_test/lct_gan/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-22T20:52:09.602257Z",
"iopub.status.busy": "2024-03-22T20:52:09.601874Z",
"iopub.status.idle": "2024-03-22T20:52:09.628172Z",
"shell.execute_reply": "2024-03-22T20:52:09.627453Z"
},
"papermill": {
"duration": 0.046497,
"end_time": "2024-03-22T20:52:09.630047",
"exception": false,
"start_time": "2024-03-22T20:52:09.583550",
"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-22T20:52:09.663146Z",
"iopub.status.busy": "2024-03-22T20:52:09.662872Z",
"iopub.status.idle": "2024-03-22T20:52:09.668072Z",
"shell.execute_reply": "2024-03-22T20:52:09.667239Z"
},
"papermill": {
"duration": 0.023904,
"end_time": "2024-03-22T20:52:09.670018",
"exception": false,
"start_time": "2024-03-22T20:52:09.646114",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'lct_gan': 0.38558200279871624}\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-22T20:52:09.706391Z",
"iopub.status.busy": "2024-03-22T20:52:09.705913Z",
"iopub.status.idle": "2024-03-22T20:52:10.051187Z",
"shell.execute_reply": "2024-03-22T20:52:10.050352Z"
},
"papermill": {
"duration": 0.366373,
"end_time": "2024-03-22T20:52:10.053189",
"exception": false,
"start_time": "2024-03-22T20:52:09.686816",
"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-22T20:52:10.087766Z",
"iopub.status.busy": "2024-03-22T20:52:10.087487Z",
"iopub.status.idle": "2024-03-22T20:52:10.406559Z",
"shell.execute_reply": "2024-03-22T20:52:10.405809Z"
},
"papermill": {
"duration": 0.338846,
"end_time": "2024-03-22T20:52:10.408588",
"exception": false,
"start_time": "2024-03-22T20:52:10.069742",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"image/png": "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dWs3uzUa74UUB+p9mzt3brdr4zgOixYtEttIct8YETA7duxgKpWKbd68mZ05c4Y9+OCDLCkpidXV1flsv3//fiaXy9nvfvc79u2337Jf//rXTKlUslOnToltNmzYwPR6PXv33XfZiRMn2K233soKCgqY1WqN1GUxxvp+bXfddRd75ZVX2LFjx9jZs2dZcXEx0+v17PLly2KbZcuWsRtvvJHV1NSIj+bm5khdkkhfr23Lli0sMTHRy+7a2lqvNgP1vjU1NXld1+nTp5lcLmdbtmwR20hx30iI+sCMGTPYypUrxb/dbjfLzs5m69ev99n+jjvuYIsWLfLaNnPmTPbwww8zxhjjeZ5lZmay3//+9+L+1tZWplar2VtvvRWGK/BPX6+tKy6Xi+l0OrZt2zZx27Jly9jixYtDbWqf6eu1bdmyhen1er/ni6X79oc//IHpdDpmMpnEbVLcNxqaBYhnVdoFCxaI23palRYAvvrqK6/2ALBw4UKxfXl5OWpra73a6PV6zJw50+85w0Ew19YVi8UCp9OJlBTvZa337NmD9PR0jBo1Cj/5yU/Q1NTk5wzhIdhrM5lMGDZsGHJzc7F48WKcOXNG3BdL9+21117DnXfeCa3WexmjSN83EqIA6WlV2traWp/H1NbW9tje89yXc4aDYK6tK48//jiys7O9vhQ33ngjXn/9dezevRvPPfcc9u7di5tuuglut+9Va8NBMNc2atQobN68Ge+99x7eeOMN8DyP2bNn4/LlywBi574dOnQIp0+fxgMPPOC1XYr7NqCz74noYMOGDdixYwf27Nnj5dS98847xdcTJkzAxIkTMXz4cOzZswfz58+XwtSAmDVrlte6erNnz8aYMWPwl7/8Bc8884yEloWW1157DRMmTMCMGTO8tktx36hHFCB9XZUWADIzM3ts73nuyznDQTDX5uH555/Hhg0b8Mknn2DixIk9ti0sLERqaiouXLjQb5sDpT/X5kGpVGLKlCmi3bFw38xmM3bs2IH777+/1/eJxH0jIQqQYFalnTVrlld7ANi1a5fYvqCgAJmZmV5tDAYDDh48GNGVboNdcfd3v/sdnnnmGXz00UeYNm1ar+9z+fJlNDU1ISsrKyR2B0IoVhN2u904deqUaPdAv2+AEFZit9txzz339Po+EblvEXWND3B27NjB1Go127p1K/v222/ZQw89xJKSksSp3XvvvZc98cQTYvv9+/czhULBnn/+eXb27Fn25JNP+py+T0pKYu+99x47efIkW7x4sWTTwH25tg0bNjCVSsX+8Y9/eE3zGo1GxhhjRqORrV69mn311VesvLycffrpp2zq1KlsxIgRzGazRfW1rVu3jn388cesrKyMHTlyhN15551Mo9GwM2fOeF3/QLxvHq6++mq2dOnSbtulum8kRH3kj3/8I8vLy2MqlYrNmDGDff311+K+6667ji1btsyr/dtvv81GjhzJVCoVGzduHPvggw+89vM8z37zm9+wjIwMplar2fz581lJSUkkLqUbfbm2YcOGMQDdHk8++SRjjDGLxcJuuOEGlpaWxpRKJRs2bBh78MEHu8XjRIq+XNtjjz0mts3IyGA333wzO3r0qNf5Bup9Y4yxc+fOMQDsk08+6XYuqe4blQEhCEJyyEdEEITkkBARBCE5JEQEQUgOCRFBEJJDQkQQhOSQEBEEITkkRARBSA4JETGg2Lp1K5KSksS/n3rqKUyePFn8u7i4GEuWLIm4XUT/ICEifOIpF/rjH/+4276VK1eC4zgUFxd7tQ+1AOTn5+Oll17y2rZ06VKUlpb6PWbjxo3YunWr+PfcuXPx2GOPhdQuIvSQEBF+yc3NxY4dO2C1WsVtNpsN27dvR15eniQ2xcXFIT093e9+vV7v1WMiBgYkRIRfpk6ditzcXOzcuVPctnPnTuTl5WHKlCn9OrevnsqSJUvEXtbcuXNRWVmJn//852IBd6D70KwrnXtmxcXF2Lt3LzZu3Cieo7y8HEVFRXj++ee9jjt+/Dg4jotoiRKiAxIiokdWrFiBLVu2iH9v3rwZy5cvD/v77ty5Ezk5OXj66adRU1ODmpqaPp9j48aNmDVrFh588EHxHHl5ed2uCQC2bNmCa6+9FkVFRaG6BKIPkBARPXLPPffgyy+/RGVlJSorK7F///6Aatj0l5SUFMjlcuh0OmRmZgZVcEyv10OlUiE+Pl48h1wuR3FxMUpKSsRld5xOJ7Zv344VK1aE+jKIAKFSsUSPpKWlYdGiRdi6dSsYY1i0aBFSU1OlNqtfZGdnY9GiRdi8eTNmzJiBf//737Db7bj99tulNm3QQj0ioldWrFiBrVu3Ytu2bSHrNchkMnStQON0OkNy7kB44IEHREf8li1bsHTpUsTHx0fs/QlvSIiIXrnxxhvhcDjgdDqxcOHCkJwzLS3Ny+/jdrtx+vRprzYqlarfK0f4O8fNN98MrVaLTZs24aOPPqJhmcTQ0IzoFblcjrNnz4qv/dHW1objx497bRsyZAhyc3O7tb3++uuxatUqfPDBBxg+fDhefPFFtLa2erXJz8/Hvn37cOedd0KtVgc1JMzPz8fBgwdRUVGBhIQEpKSkQCaTib6iNWvWYMSIERGtNU10h3pEREAkJiYiMTGxxzZ79uzBlClTvB7r1q3z2XbFihVYtmwZ7rvvPlx33XUoLCzEvHnzvNo8/fTTqKiowPDhw5GWlhaU3atXr4ZcLsfYsWORlpaGS5cuifvuv/9+OByOiMwCEj1DpWKJQcsXX3yB+fPno6qqqtsihURkISEiBh12ux0NDQ1YtmwZMjMz8eabb0pt0qCHhmbEoOOtt97CsGHD0Nrait/97ndSm0OAekQEQUQB1CMiCEJySIgIgpAcEiKCICSHhIggCMkhISIIQnJIiAiCkBwSIoIgJIeEiCAIySEhIghCcv4/dxPYPI7V8kYAAAAASUVORK5CYII=",
"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-22T20:52:10.445970Z",
"iopub.status.busy": "2024-03-22T20:52:10.445338Z",
"iopub.status.idle": "2024-03-22T20:52:10.657820Z",
"shell.execute_reply": "2024-03-22T20:52:10.656962Z"
},
"papermill": {
"duration": 0.233183,
"end_time": "2024-03-22T20:52:10.659660",
"exception": false,
"start_time": "2024-03-22T20:52:10.426477",
"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-22T20:52:10.696552Z",
"iopub.status.busy": "2024-03-22T20:52:10.696267Z",
"iopub.status.idle": "2024-03-22T20:52:10.902785Z",
"shell.execute_reply": "2024-03-22T20:52:10.901904Z"
},
"papermill": {
"duration": 0.22726,
"end_time": "2024-03-22T20:52:10.904698",
"exception": false,
"start_time": "2024-03-22T20:52:10.677438",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 300x300 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#\"\"\"\n",
"from ml_utility_loss.loss_learning.visualization import plot_grad, plot_grad_2, plot_grad_3\n",
"import matplotlib.pyplot as plt\n",
"\n",
"#plot_grad_2(y, model.models)\n",
"for m in model.models:\n",
" ym = y[m]\n",
" fig, ax = plt.subplots()\n",
" plot_grad_3(ym[\"error\"], ym[\"grad\"], name=f\"{m}_grad\", fig=fig, ax=ax)\n",
"#\"\"\""
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "54c0e9f3",
"metadata": {
"papermill": {
"duration": 0.01794,
"end_time": "2024-03-22T20:52:10.940967",
"exception": false,
"start_time": "2024-03-22T20:52:10.923027",
"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": 4515.294993,
"end_time": "2024-03-22T20:52:13.681599",
"environment_variables": {},
"exception": null,
"input_path": "eval/contraceptive/lct_gan/1/mlu-eval.ipynb",
"output_path": "eval/contraceptive/lct_gan/1/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/lct_gan/1",
"path_prefix": "../../../../",
"random_seed": 1,
"single_model": "lct_gan"
},
"start_time": "2024-03-22T19:36:58.386606",
"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
} |