{ "cells": [ { "cell_type": "markdown", "id": "134e7f9d", "metadata": {}, "source": [ "# Hello, KAN!" ] }, { "cell_type": "markdown", "id": "2571d531", "metadata": {}, "source": [ "### Initialize KAN" ] }, { "cell_type": "code", "execution_count": 1, "id": "2075ef56", "metadata": {}, "outputs": [], "source": [ "from kan import *\n", "# create a KAN: 2D inputs, 1D output, and 5 hidden neurons. cubic spline (k=3), 5 grid intervals (grid=5).\n", "model = KAN(width=[2,5,1], grid=5, k=3, seed=0)" ] }, { "cell_type": "markdown", "id": "3d72e076", "metadata": {}, "source": [ "### Create dataset" ] }, { "cell_type": "code", "execution_count": 2, "id": "46717e8b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(torch.Size([1000, 2]), torch.Size([1000, 1]))" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# create dataset f(x,y) = exp(sin(pi*x)+y^2)\n", "f = lambda x: torch.exp(torch.sin(torch.pi*x[:,[0]]) + x[:,[1]]**2)\n", "dataset = create_dataset(f, n_var=2)\n", "dataset['train_input'].shape, dataset['train_label'].shape" ] }, { "cell_type": "markdown", "id": "8c6add1d", "metadata": {}, "source": [ "### Plot KAN at initialization" ] }, { "cell_type": "code", "execution_count": 3, "id": "ac76f858", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# plot KAN at initialization\n", "model(dataset['train_input']);\n", "model.plot(beta=100)" ] }, { "cell_type": "markdown", "id": "ddf67e30", "metadata": {}, "source": [ "### Train KAN with sparsity regularization" ] }, { "cell_type": "code", "execution_count": 4, "id": "97111d75", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "train loss: 1.55e-01 | test loss: 1.30e-01 | reg: 2.05e+01 : 100%|██| 20/20 [00:16<00:00, 1.21it/s]\n" ] } ], "source": [ "# train the model\n", "model.train(dataset, opt=\"LBFGS\", steps=20, lamb=0.01, lamb_entropy=10.);" ] }, { "cell_type": "markdown", "id": "2f30c3ab", "metadata": {}, "source": [ "### Plot trained KAN" ] }, { "cell_type": "code", "execution_count": 5, "id": "3f95fcdd", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "model.plot()" ] }, { "cell_type": "markdown", "id": "576856cf", "metadata": {}, "source": [ "### Prune KAN and plot again" ] }, { "cell_type": "code", "execution_count": 6, "id": "7fe6fb12", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZcAAAFICAYAAACcDrP3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAx+0lEQVR4nO3deXBVVYIG8O++vJeXvOw7BBJCQlbDqiFhE0YgYRHcWy1xsJ0ZLataxrampsYau3Rqpmu6q6wRxpmxptpy13ZQREDAIAiidAIEEAhZyEICCRHIRl7ykrztzB/4jrksEshN7lu+X5V/3AN5OcR7892zK0IIASIiIg0Z9K4AERH5H4YLERFpjuFCRESaY7gQEZHmGC5ERKQ5hgsREWmO4UJERJpjuBARkeYYLkREpDmGCxERaY7hQkREmmO4EBGR5hguRESkOYYLERFpjuFCRESaM+pdASJfIIRAR0cHent7ER4ejri4OCiKone1iLwWWy5Ev6C7uxsbNmxAZmYmEhISMHnyZCQkJCAzMxMbNmxAd3e33lUk8koKT6Ikur7S0lI89NBDsNlsAK60Xjw8rRaLxYJNmzahpKRElzoSeSuGC9F1lJaWYuXKlRBCwO123/DvGQwGKIqC7du3M2CIhmC4EF2lu7sbEydORH9//y8Gi4fBYEBoaChaWloQHR09+hUk8gEccyG6ynvvvQebzTasYAEAt9sNm82G999/f5RrRuQ72HIhGkIIgczMTDQ2NuJWHg1FUZCeno66ujrOIiMCw4VIpb29HQkJCSP6+ri4OA1rROSb2C1GNERvb++Ivt5qtWpUEyLfxnAhGiI8PHxEXx8REaFRTYh8G8OFaIi4uDhkZGTc8riJoijIyMhAbGzsKNWMyLcwXIiGUBQFzz///G197bp16ziYT/QTDugTXYXrXIhGji0XoqtER0dj06ZNUBQFBsMvPyKeFfqff/45g4VoCIYL0XWUlJRg+/btCA0NhaIo13R3ecpCQ0OxY8cOFBcX61RTIu/EcCG6gZKSErS0tGD9+vVIT09X/Vl6ejrWr1+P1tZWBgvRdXDMhWgYhBCorKzEf/zHf+DFF19Efn4+B++JfgFbLkTDoCgKYmJiEBkZiZiYGAYL0U0wXIiISHMMFyIi0hzDhYiINMdwISIizTFciIhIcwwXIiLSHMOFiIg0x3AhIiLNMVyIiEhzDBciItIcw4WIiDTHcCEiIs0xXIiISHMMF6JhioqKwgMPPICoqCi9q0Lk9XieC9EwuVwu2Gw2WCwWBAUF6V0dIq/GcCEiIs2xW4yIiDRn1LsCRB5utxtNTU0YGBjQuyo+LyUlBREREXpXgwIYw4W8htPpxOeffw6HwwGz2ax3dXzWpUuX8MQTTyA/P1/vqlAAY7iQV1EUBffffz8yMzP1ropPcLvdOHHiBCZOnIj4+Hi4XC787//+LziUSnpjuJDXCQoKgtHIW/NmhBA4d+4cNm3aBLPZjMWLF2PWrFl6V4sIAMOFyGfZ7XaUlpaiv78f/f39+OKLLxjK5DU4W4zIBwkhcPToUZw+fVqWjRs3Dnl5eTrWiuhnDBciHyOEQFdXF/bs2QO32w0AMBqNWLZsGcLCwnSuHdEVDBciH+N2u7F37160t7fLsunTpyM3N1fHWhGpMVyIfIgQAk1NTTh8+LAsi4yMxNKlS7klDXkVhguRD/EM4nsWmiqKgoULFyIxMRGKouhcO6KfMVyIfIRnEL++vl6WpaSkoKioCAYDH2XyLrwjiXyAEAKXL19WDeKbTCYUFxfDYrHoXDuiazFciHyAEALffvutahB/2rRpyMnJYXcYeSWGC5GX86zELy8vl2Xh4eFYsmQJB/HJazFciLyc0+nE119/jf7+flk2f/58JCUlsdVCXovhQuTFhBA4deoUqqurZdn48eMxb948DuKTV+PdSeTF+vr68PXXX8PlcgG4sqnn0qVLER4ernPNiH4Zw4XIS7ndbpSXl+P8+fOyLDs7G/n5+ewOI6/HcCHyQkIIdHR04LvvvpNns4SEhGDp0qUwmUw6147o5hguRF7Is3/Y5cuXZVlBQQFSU1PZaiGfwHAh8jJCCJw9exZHjx6VZdHR0Vi4cCEH8cln8E4l8jIOhwO7d+9W7R929913Iy4ujq0W8hkMFyIvIoRAVVUVampqZFlycjIKCwsZLORTGC5EXsRms2H37t2qqceLFy/m/mHkcxguRF5CCIFDhw6htbVVlnHqMfkqhguRFxBCoLOzE/v371dNPV6yZAmnHpNPYrgQeQHPrsddXV2ybNasWZg0aRJbLeSTGC5EOhNCoKWl5ZqjixctWsSpx+SzeOcS6ex6ux4vWLAA8fHxbLWQz2K4EOlICIGampprdj3m0cXk63j3Eumov78fu3fvhtPpBPDz1GPueky+juFCpBMhBCoqKnD27FlZNmXKFEydOpXdYeTzGC5EOhBCoLu7G/v27ZNTj81mM5YsWYLg4GCda0c0cgwXIh0IIbB//350dnbKsunTpyM9PZ2tFvILDBeiMSaEQGtrKw4ePCjLIiIicM8993AQn/wG72SiMeZyubB7927YbDZZNnfuXCQmJrLVQn6D4UI0hoQQqK2txalTp2RZUlIS5s2bx1YL+RXezURjqL+/H7t27ZJTjw0GAxYvXoyIiAida0akLYYL0RjxTD0+d+6cLMvIyMD06dPZHUZ+h+FCNAY8ux7v3bsXbrcbwJWpx8XFxZx6TH6J4UI0BtxuN/bu3ava9XjmzJmcekx+i+FCNMqEEGhqalLtehwVFcWpx+TXeGcTjbLBwUGUlpZicHAQAKAoChYuXMhdj8mvMVyIRpEQAkeOHEF9fb0sS0lJQWFhIVst5Nd4dxONEs8g/p49e+QgvslkQklJCSwWi861IxpdDBeiUeJ2u/H1119fs39YdnY2u8PI7zFciEaB5xCwI0eOyLLo6GgUFxcjKChIx5oRjQ2GC5HGhBDo7e3Fjh074HA4AFxZiX/PPfcgISGBrRYKCAwXIo0JIbB37160trbKsoyMDMyePZvBQgGD4UKkISEE6uvr8Ze//EWWhYaGYsWKFTCbzTrWjGhsMVyINOLpDtu2bRsGBgYA/LymZdKkSWy1UEBhuBBpxO12Y9euXaqNKSdNmoQFCxZwTQsFHN7xRBoQQuDEiRMoLy+XZRaLBatXr+aaFgpIDBeiERJC4Mcff8S2bduumR2WlpbG7jAKSAwXohEQQsBms2Hz5s2qxZK5ubmYP38+u8MoYPHOJxoBl8uFnTt34vTp07IsPj4e9913H2eHUUBjuBDdJrfbje+//x5lZWWyzGw24/777+diSQp4DBei2+AZwN+5cydcLheAK+MsS5cuRV5eHoOFAh7DhegWCSFQV1eHzz77TJ7RAgB33XUX7r77bo6zEIHhQnRLhBBobm7Gn//8Z/T29sryrKwsrF69GiaTScfaEXkPhgvRMAkhcO7cOXz44Yfo6uqS5RMmTMCjjz6KsLAwdocR/cSodwWIfIEQAmfPnsUHH3yA9vZ2WZ6YmIgnnngCsbGxDBaiIRguRDchhEBDQwM+/vhj1VqWuLg4rFmzBuPHj2ewEF2F4UL0C9xuN6qqqrBx40b09PTI8tjYWKxZswYpKSkMFqLrYLgQ3YDL5cKhQ4ewdetW9Pf3y/KEhASsWbMGqampDBaiG2C4EF1FCAG73Y49e/Zg7969cr8wABg/fjyeeOIJTJgwgcFC9AsYLkRDCCFgtVqxZcsWHDt2DG63W/5Zeno6Hn/8ccTHxzNYiG6C4UL0EyEE2trasHHjRjQ1NclyRVEwbdo0PPjgg4iMjGSwEA0Dw4UIVwbuKysrsXnzZtUalqCgIMyfPx/Lly+H2WxmsBANE8OFAppnfOXbb7/Fnj17VNu5hIaGYuXKlSgqKoLRyEeF6FbwiaGAJYRAZ2cntmzZgsrKStX4Snx8PB5++GFkZWVxrzCi28BwoYAjhIDb7UZ1dTW2bNmCS5cuqf48KysLDz/8MLfNJxoBhgsFFCEEenp6sHv3bpSXl6umGRuNRsydOxclJSWwWCwMFqIRYLhQQBBCwOFw4MSJE9i1axcuXryo+vPIyEisWrUKM2fORFBQEIOFaIQYLuTXPAP29fX12LdvHxobG+XhXsCVacaZmZm47777kJyczFAh0gjDhbxSb28vGhsbERERgYiICISGhiI4OFjVqrheEAghAABOpxNdXV2ora1FRUUFWlpaVKECAGFhYVi0aBEWLFjAacZEGmO4kFdqaWnBe++9BwAwmUwICQlBWFgYIiMjER0djcjISISHhyM0NFROE7bb7bBarbh06RLa2tpw8eJF1Z5gHkFBQcjNzcWyZcuQnJzM2WBEo4DhQl6pu7tbtjRcLhcGBgbQ3d2N1tbW2/7MoKAgpKSk4J577kFubi6MRiNbK0SjhOFCXuny5cuafVZISAjS09MxZ84cZGVlITg4mKFCNMoYLuSVZs6cibi4OHR1daGrqwvd3d24fPky+vr6MDAwAKfTCbfbrVr4CAAGgwEmkwnh4eEYN24csrOzkZWVhYSEBBgMBoYK0RhhuJBXSkxMRGJiohygF0LA5XLBbrejv79f/me32+FwOKAoCkwmE0JDQxEeHo7w8HCEhIRAURQGCpEOGC7kVYQQaGpqgt1uH/bXmEwm+bU2mw02m+2adSyBwuVywWaz6V0NIoYLeQ9FUTBu3DhUVVWhqqpK7+r4rJCQEFgsFr2rQQFOEZ5+ByKdefb84i05cgaDgVOsSVcMFyIi0hxfbYiISHMMFyIi0hzDhYiINMdwISIizTFciIbJ5XLBarVes7syEV2L4UI0TG1tbXj55ZfR1tamd1WIvB7DhYiINMdwISIizTFciIhIcwwXIiLSHMOFiIg0x3AhIiLNMVyIiEhzDBciItIcw4WIiDTHcCEiIs0xXIiISHMMFyIi0hzDhYiINMdwISIizTFciIZBCIHOzk709PSgs7MTQgi9q0Tk1RTBp4Tohrq7u/Hee+/hjTfeQENDgyzPyMjA888/j7Vr1yI6Olq/ChJ5KYYL0Q2UlpbioYcegs1mAwBVa0VRFACAxWLBpk2bUFJSoksdibwVw4XoOkpLS7Fy5UoIIeB2u2/49wwGAxRFwfbt2xkwREMwXIiu0t3djYkTJ6K/v/8Xg8XDYDAgNDQULS0t7CIj+gkH9Imu8t5778Fmsw0rWADA7XbDZrPh/fffH+WaEfkOtlyIhhBCIDMzE42Njbc0I0xRFKSnp6Ourk6OxxAFMoYL0RDt7e1ISEgY0dfHxcVpWCMi38RuMaIhurq6RvT1VqtVo5oQ+Taj3hUg0tPAwACOHj2KsrIylJWV4dChQyP6vE8//RSzZ89Gbm4uEhIS2EVGAYvdYhRQenp6cPjwYZSXl6OsrAw//PAD7HY7oqKiUFhYiKKiIvzxj39ES0vLLX92QkICnnjiCZw7dw4AEBcXh7y8POTl5SE3NxcTJkxg2FDAYMuF/FpHR4cMkvLyclRWVsLtdiMxMRFz5szBAw88gDlz5iAnJwcGw5VeYpfLhd/+9re3PKD/8ssvY926dejt7UVNTQ2qqqpQVVWFAwcOwO12IyIiQgZNXl4eJk2ahKCgoNH6pxPpii0X8istLS0oLy+XgVJXVwcASE1NxZw5czBnzhwUFRVh8uTJN2xFaL3OZWBgAKdPn0ZVVRWqq6tx+vRpOBwOhIaGIjs7W7ZuMjIyYDKZRvTvJ/IWDBfyWUIINDQ0yPGS8vJy2Z2VnZ2NoqIiGSbJycm39Nm3ukJ/x44dKC4uHtZnOxwONDQ0oLq6GlVVVaipqUF/fz9MJhMyMzNl6yYrKwuhoaG3VG8ib8FwIZ/hcrlQVVWl6uZqb2+HwWDAtGnTZJgUFhYiNjZ2xN9vuHuLff7558MOlutxu91obm6W3WjV1dXo6emBwWBAenq67EbLyclBRETEyP5RRGOE4UJey2634/jx4zJIDh48CKvViuDgYMyaNUt2c911110IDw8flTp0d3fj/fffx3/+539esyvyunXrsHbtWkRFRWn6PYUQOH/+vAyaqqoqtLe3AwBSUlJU4zZahCjRaGC4kNew2Ww4cuSI7OaqqKjA4OAgwsLCUFBQIMNk5syZMJvNY1o3z3kuVqsVERERiI2NHdOZX5cuXZJBU1VVhfPnzwMAkpKSVGGTlJTEGWnkFRgupJvu7m4cPHhQdnOdOHECTqcTMTExKCoqkt1c+fn5MBo5sXGo7u5uOSOturoaTU1NEEIgJiZGBk1eXh5SUlIYNqQLhguNmQsXLqjGS6qrqyGEwPjx41UzuTIzM+W0YBqevr4+1NbWytZNfX09XC4XwsLCkJubKwMnPT2d059pTDBcaFQIIXD27FkZJmVlZThz5gwAID09XQbJnDlz+HY9CgYHB1FfXy+70U6fPo3BwUGYzWZkZWXJlk1mZiaCg4P1ri75IYYLacLtdqOurk62SsrKytDW1gZFUZCbmytbJoWFhUhKStK7ugHH5XKhsbFRtmyqq6vR19eHoKAgTJkyRY7b5OTkwGKx6F1d8gMMF7otTqcTlZWVslVy8OBBdHV1wWg0Yvr06bJVMnv2bB6g5YWEEDh37pxs2VRVVaG7uxuKoiAtLU12o+Xm5mo+G44CA8OFhmVwcBBHjx6VrZLDhw+jr68PZrMZBQUFMkzuvPNOvvn6ICEELly4oFprc+HCBQBAcnKyao+0kRxJQIGD4ULX1dvbi8OHD8uWybFjx2C32xEZGYnZs2fLbq5p06axz95PdXR0oLq6WnaleTbkjI+PV01/Tk5O5pgZXYPhQgCAzs5O1Z5cJ0+ehNvtRnx8vGrwPTc3l7ONApTValVNf25sbITb7UZkZKSqGy0tLY2z/YjhEqhaW1tlmJSXl6O2thYAMHHiRNW04IyMDL6V0nX19/erNuSsq6uTG3Lm5OTIwOGGnIGJ4RIAhBBobGxUTQv2dHFkZWXJBYtFRUWYOHGizrUlX+VwOFBfX6/akHNgYEC1IWdeXh6ysrIQEhKid3VplDFc/JDL5UJNTY1qWvClS5dgMBiQn58vWyWFhYWIj4/Xu7rkp1wu1zUbclqtVrkhp6cbLTc3d9T2hiP9MFz8gN1ux4kTJ2SQHDx4ED09PQgODsaMGTNkN1dBQQF31SXdCCHQ2tqq2iOto6MDwJXzdoaO23BDTt/HcPFB/f39qKiokOMlhw8fxsDAACwWi2pa8KxZs9j9QF5LCHHNhpxtbW0AgHHjxqnChhty+h6Gi4/Ys2cPDhw4gLKyMhw/fhxOpxPR0dGq8ZKpU6dy4JR8Wnd3t2oXgebmZgghEBsbK8OmoKCALRsfwHDxEV1dXXC73TCZTPK/oKAgvs2RX3M6nbBarejp6YHVakVvby+ys7MRExOjd9XoJhguPsLtdkNRFIYJBTSXywVFUbiOxgcwXIiISHOMfyIi0hyP9/uJy+VCRUUFrFar3lXxedOmTUNiYqLe1aDb4HK5cPr0afT39+tdFZ+Xnp4e0DuCs1vsJ/39/Vi1ahUGBga4oOs2eXYCeOONN7Bs2TK9q0O3YXBwEL/73e9gt9s5jX0E2tra8Jvf/AYFBQV6V0U3bLn8RAgBg8GAf/3Xf8XcuXP1rs6oEkKgv78fQgiEhIRothGl0+nEY489Br6v+DZFUfDUU0/hjjvu0LsqPmFgYAC1tbXIyMhAeHg4nE4nfv/73wf8c8BwuUpQUBDMZrPe1dCcEAJOpxPl5eX46KOPcPLkSTidTkyZMgWPPfYYli5dCrPZPKLZaJzN5j8MBgPXTA2DEALV1dV4/fXXER8fj9mzZ2Px4sV8DsBwCQhCCPT29uK1117Du+++q+pPP3PmDL799ls89NBDePXVVxEdHc0Hg2iY3G43Dhw4AIfDgba2NuzYsQPTpk3Tu1pegeHi54QQ6Ovrw0svvYTPPvsMbrf7mr9jt9vxySefwG6347XXXkNYWJgONSXyPe3t7aisrJTXkyZNQnp6uo418h6ciuznnE4nXnvtNVWwGAwG5OTkYMaMGbLrQwiBL774An/605+uG0AUmIQQsFqtcLlcelfF6wgh8MMPP6Cnp0eWFRUVcSLETxgufkwIge3bt+Odd96RgWE2m/HCCy9g27Zt2Lx5M1566SU5xuRyufDmm2/i+PHjAT8YSVe6fI4fP45/+Zd/wbFjx3hPXMXpdOLgwYPy5xIWFoY777xT51p5D4aLnxJCoKWlBf/+7/8ux1iCgoLw3HPP4cUXX0RUVBTCwsLwzDPPYO3atXKcpaurC+vXr8fg4KCe1Sedud1ufPPNN3j99dfR1NSEt956C2fPnmXADHHx4kU0NDTI6ylTpmDcuHE61si7MFz8lMvlwn//93/jzJkzsmzJkiVYt24dgoODZZnJZMK6deuQk5Mjy/bu3YsDBw7wF0kAczgcKCsrQ19fH4ArYwsffPABBgYGdK6ZdxBC4NSpU7DZbACuzJQsKCiA0chhbA+Gix8SQuDYsWP49NNPZdm4cePwz//8z9cM1iuKgoSEBDz//PPywRgYGMCf/vQntl4CmNlsxtNPP43x48fLspMnT6q6gQKZy+XCkSNH5M/CYrEgPz+fMy2HYLj4IYfDgTfffFNuZWMwGPDss88iKyvruje/oihYvny5qr+4rKwMFRUV/EUSwJKTk/Hkk0/KSR8ulws7duyQb+uBrKurC/X19fI6LS0NSUlJOtbI+zBc/IwQAocPH8aePXtkWU5ODh577LFf3KbcYrHg17/+tWy99Pf346OPPuIsoQCmKApmzpyJWbNmybLm5uaAH9wXQqCurk41S2z69OnsErsKw8XPOJ1OvP3226pB/GefffamJ/cpioLFixerxl6++eYb1YAlBR6j0Yjly5fLcTqXy4VvvvkGTqdT55rpRwihmlEZHByMqVOnskvsKgwXPyKEQGVlJfbu3SvL8vLysGLFimHd+JGRkfjVr36lmjm2ZcuWgH5LDXSKoiArKwtZWVmy7PTp0wE9c6y/vx+1tbXyOikpCRMmTNCxRt6J4eJH3G43Pv74Y/T29gK4Mtaydu1aREZGDuvrFUXBihUrVH3H27ZtQ3d392hUl3yEyWTCwoUL5UvHwMAAysvLda6VflpbW3Hx4kV5nZuby4WT18Fw8SPnzp3Dzp075fXkyZOxfPnyW2quT5gwAUuXLpXXDQ0NKCsrC9i3VLry0jF9+nTExcXJsiNHjgTkwL4QAlVVVbDb7QCu/GzYJXZ9DBc/IYTAl19+iUuXLsmyBx98EPHx8bf0OQaDAQ8++KBcte90OrF582YO7Ae46OhoTJ8+XV63tbXhzJkzAffS4XK5cOrUKXkdERGBjIwMhst1MFz8hNVqxeeffy4f9ri4ODzwwAO3fNMrioIZM2YgLy9Plh04cADnzp3TtL7kWxRFwezZs+XZPw6HAxUVFTrXauz19PSgqalJXqempiImJka/CnkxhosfEELg0KFDqkHGv/qrv0JaWtptfZ7FYsHq1avldUdHB3bv3h1wb6n0M0VRkJmZqWoJnzhxIqCOQxZCoLm5WTUFOS8vj1OQb4Dh4gdcLhc2bdoEh8MB4MrUyEceeeS2T5hUFAXFxcXyjUwIgW3btnHrjwAXHh6uOp2yra0NZ8+e1bFGY6+qqkp2EQcFBSE3N5ddYjfAcPEDLS0t2L9/v7zOycnBXXfdNaKbPi0tDYWFhfL6xIkTqKmpYeslgCmKglmzZsnFuA6HAydPngyYe8LpdKKmpkZex8TEIDU1VccaeTeGi48TQmDPnj1ob2+XZatXr0Z4ePiIPtdoNGLVqlXyF4nNZlPNRKPA4+kai4qKkmXHjx+XLWZ/193djdbWVnmdlpY24ufMnzFcfNzg4CC2bt0q3x6jo6OxbNmyETfVFUXBggULkJycLMtKS0tV/c0UeKKjozFlyhR5fe7cOdWLjb8SQqCpqUmuIQOu9BD80pZKgY4/GR8mhEBtbS1OnDghy2bPno3Jkydr8vmJiYlYtGiRvK6vr1ftBEuBx2AwqKYk22w21NbWBsQ9UVNTIw/dM5lMN9wIlq5guPi4r776Sp65YTAYsHr1as1mryiKglWrVsl9pRwOB7Zt2xYQv0jo+hRFUa1IF0LgxIkTfn9POJ1O1WzM6OhobvlyEwwXH9bb24vS0lJ5PW7cOCxYsECztynPAG5GRoYs27dvn2rrCwo8SUlJqu7Suro6+YLjr7q6ulTjLZMmTeJ4y00wXHyUEAInT55EXV2dLJs/fz4SExM1/T6RkZEoKSmR121tbfjuu+/8/k2VbsxsNiM7O1ted3R0qH7x+qPm5mZVgObm5nK85Sb40/FhX331lTwt0mg04t577x2VG3758uWwWCwArmyOuXXr1oDecp2AqVOnqqYkV1VV+e0LhxAC1dXVHG+5RQwXH3X58mV888038nrixIkoKCjQ/IZXFAU5OTmYNm2aLDt06BCam5s1/T7kOxRFweTJkxERESHLhi4u9DcOhwOnT5+W19HR0apuQbo+hosPEkLg2LFjqj2OFi5cOGp7HIWEhODee+9VnfNSWlrqt2+qdHPR0dGqBYTNzc24fPmyjjUaPVePt0yePJnjLcPAcPFBQgiUlpbKbb9NJtOwDwS7HYqiYOnSparTLLdu3RqQW67TFUajUbW5aU9Pj1+2Zj37iQ0db+H6luHhT8gH9fT0qLZ7mTRpEmbMmDGqfcApKSmYP3++vK6qquKalwDmmZLsmfbucrlQXV3tl/cDx1tuD8PFx3jO7x66YeCCBQtUW3KMhqCgIDz44IPyl8ng4CA+++wz+dBR4ElJSUF0dLS8rqmp8buJHlePt8TExHC8ZZgYLj5o165dqi6xkpKSUX+TUhQFc+bMQWZmpizbs2dPwO2KSz8LDw9XHevQ0tKCzs5O/So0Crq6unD+/Hl5nZaWhrCwMB1r5DsYLj6mp6cH3377rbyeOHHiqHeJeURFReH++++X15cuXcKWLVv8siuEbs5gMKjGXXp7e/3qdMrr7SfG9S3Dx5+SD/FstTF0ltjdd9+t6poYTYqi4L777lMdGLVx48aA2LiQrqUoCrKzs2EymQD8vB7EnwwdRzKZTMjMzOR4yzAxXHzM0C4xo9E4Jl1iQ02aNAnLly+X142Njfjyyy/95m2Vbk1ycrJqFmFtba28P33d1eMtsbGxHG+5BQwXH2K1Wq/pEps5c+aYhovBYMCaNWvkAjq32423336brZcAZbFYVHvPtbW1+c290NnZyfGWEWC4+JCTJ0/izJkz8nrBggWjtnDyRhRFQX5+PoqLi2XZ6dOn8eGHH3LmWAC6etzFZrOhoaHB51uyQgicOXOG+4mNAH9SPkIIgV27dqn2EhvrLjEPo9GIZ599Vk5/FkLgrbfeUm1JToFBURRkZWXBbDYDuHIv+Ms+Y1ePt3B9y61huPgIq9WKffv2yesJEyZg1qxZutzsiqJg6tSpeOyxx2SZ502PAk9SUhISEhLkdV1dnXwJ8lV2u1013hIXF4fx48frWCPfw3DxAUIInDp1Co2NjbJs/vz5qoHUsWYwGPDcc88hNzcXK1aswGeffaYa6KfAERoaqlr/dOHCBZ8/86e9vR1tbW3yevLkyXJncBoebY4spFH39ddfe0WXmIeiKBg/fjw++OADJCYmwmw2w+Fw6FYf0o+iKMjLy8O+ffsghMDg4CDq6uqQmprqk91IQgg0NDSo9s674447ON5yi/jTugEhBKxWq1c073t7e1Xb6ycnJ+POO+/U/cFVFAWpqakICQnRvS6kH0VRMGXKFNXRx6dOnfLZcZerx43MZjPHW24Dw+U6nE4nvvvuOzz66KP46KOPdH1IPDf60C6xuXPnIi4uTrc6EV0tISFBNSZRX1/vs0cfDw4OqsZbEhISkJSUpGONfBPD5Sp2ux1/+MMf8NRTT6GiogIbNmxAXV2drgGza9cuDAwMALiygaTeXWJEV7v66OP29nbVGhFf8uOPP+LChQvyOisrC6GhoTrWyDcxXK4SFBSE9vZ2uZ9QW1sbXnvtNd1WHff19V3TJTYaJ04SjdQdd9wh70uHw+GTW/ALIVBbWyu7wz3ruvi83TqGy1WCgoLw29/+VrXb61dffYX9+/eP+YPi6RJraGiQZewSI2+kKArS09NVRx9XVlb63NHHbrcbJ0+elNcWiwVTpkxhuNwGhst1pKam4oUXXpBnlwwMDOCNN97QpQ/56i6xZcuWcdYKeaWYmBjV0cdNTU0+d/Sx1WpVvcxNnDhRtVErDR9/S12HZ/ffoqIiWVZRUYFdu3aNaeult7cXu3fvltfsEiNvZjQakZ+fL697enp8biuYM2fOoKurS17fcccdctdnujUMlxuwWCz4zW9+I6dXOp1OvPXWW2PWehFCoLKyUvUWNW/ePL5FkddSFEX1y/jqLiZv5znSwtOVZzQaMXXqVL7M3SaGyw0oioK5c+di3rx5suz48eNyodhY+Oqrr1QLJ5cvX84bnbxaSkqKaiuYU6dOob+/X8caDd/AwAAqKyvldVxcHCZNmqRjjXwbw+UXmM1m/N3f/Z1svTgcDrz77rtyDGQ0Xb58GXv27JHXEyZMwF133cVwIa9msViQm5srr3/88Ue0tLToWKPhO3/+vGr6dHZ2NsLDw3WskW9juPwCz7nxs2fPlmWHDh3C4cOHR7X1IoTAsWPHVBtBLlq0iLPEyOspioLp06fLlyC73Y4TJ054/biLp0ts6BRkvTaG9RcMl5sICQnB2rVrVTPHPvzwQzidzlH7nkIIbN++Xe7VFRwcjBUrVvBGJ6/nOfp46NHbP/zwg9efTmm323HkyBF5HRkZiezsbD5zI8BwuQlFUbBw4UJVU3/v3r2q7SG01t7ertpef/LkyWN+4iTR7YqOjlbtktzc3Iwff/xRxxrd3Pnz59Hc3Cyvs7Ozdd113B8wXIYhIiICjz/+uPzlfvnyZWzcuHFUTl4UQuDAgQNobW2VZcXFxfJgLiJvZzAYVOOD/f39OHr0qNd2jQkhcPToUTnxQFEUFBQUcD3ZCPGnNwyKomDlypWYOHGiLNu2bZtq/yGtOJ1ObNmyRU6HDA0NxYoVKzT/PkSjxbNlSmRkpCw7fPiw13aNDQwM4ODBg/I6KiqKW75ogOEyTElJSVi1apW8bm1txc6dOzV/G2tubkZ5ebm8zs/PR25uLm908ilxcXGqruTm5mZVt5O3EEKgvr4e586dk2X5+fnsEtMAw2WYFEXBI488ojo3/pNPPpEbXGpBCIGdO3eis7NTfs/Vq1dzR1byOQaDAUVFRfKlaHBwEAcPHvS6rjG32439+/fLyTNBQUGYN28eu8Q0wJ/gMCmKgqysLNx9992y7NSpU/jLX/6i2QPT19eHLVu2yOu4uDgUFxez1UI+x7Naf+iOEocOHUJPT4+OtbrWpUuXcPToUXk9YcIE9hRohOFyC4xGI5544gkEBwcDuLKo8uOPP9bkeF8hBA4dOoSamhpZdvfddyMlJWXEn02kh6ioKNx5553y+sKFCzh+/LjXtF6EEPjuu+9Um2vOmzcPYWFhOtbKfzBcboGiKCgsLMS0adNk2ffff4+ampoRPzAulwsbN26Ug54mkwkPP/wwgoKCRvS5RHpRFAXz58+H2WwGcKULat++fZq8jGmhq6tLNeU/KioKc+fOZatFIwyXW2SxWPDYY4/JPlmr1YqNGzeOKFyEEGhoaMDevXtlWU5ODgoLC3mjk8/ynPGSlZUly2pqanQ/2RW48sx9++23uHjxoiwrLCxEYmKijrXyLwyXW6QoCpYtW6bqrvryyy9V61JulRACn376qdzqW1EUPPzww9zXiHyeyWTC4sWLZQvcbrejtLRU10PEhBC4dOmS6giN8PBwFBcXcyBfQ/xJ3oaEhAQ88MAD8rqtrQ2bN2++7bexH3/8EZs3b5bX48ePx6pVq9hqIZ+nKApmzpypOkTs6NGjqK+v16314na7sW3bNly6dEmWzZs3DykpKXzmNMRwuU2PPPKI3EhSCIH/+7//Q0dHxy1/jhACmzdvVu0cu3r1aiQnJ2tWVyI9WSwWLF26VP7iHhgYwNatW0d1f74bEULg5MmTqi7omJgYrFixgq0WjfGneRs8fcklJSWyrKGhAV9++eUtv41dvHgRH3zwgfy6mJgYPP7447zRyW94dhcfejbKsWPHcOzYsTFtvQgh0N7ejvfff18em6EoCu69916MHz+erRaN8TfYbTIYDPjrv/5rOS7idrvx7rvvoru7e9ifIYTAxo0bVVvrr1y5UrXpH5E/CA8Px6pVq+TYi8PhwKeffoqenp4xCRghBGw2G95++22cPXtWlufm5mLJkiV8mRsF/IneJkVRMHXqVCxZskSW1dTU4IsvvhjWwyKEQHNzM9555x3596Ojo/H0009z+jH5Hc80/vz8fFnW1NSEzZs3j/rg/tBgqaiokOXR0dFYu3YtLBbLqH7/QMVwGQGj0Yi//du/lYuu3G433nrrLdX0xhtxuVx48803VWMtDzzwAFcHk98ym8149NFH5fMihMCuXbtQVlY2aq0XIQQuXryIN954A/v375ffx2w248knn8TkyZP5vI0ShssIeGbCLF++XJbV19fjnXfe+cXt+D0rgzdu3CjLxo8fj2effZbNc/JbiqJgypQpWL16tbzP7XY73n33XZw6dUrTgBFCYHBwEN9//z3+7d/+DRUVFfLzPQuU58+fz+dtFPEnO0JGoxHPPfec3EVVCIF33nnnhoOVQgicP38er776Kvr6+gBcGb955plnkJaWxrco8msGgwErVqzArFmzZNnly5fxxhtv4MSJEyM+I0kIgb6+PpSVleH3v/89/uu//gttbW3yz81mM371q1/h3nvvZffzKGO4jJCiKMjLy8OaNWtkMHR1deGVV15Be3u7KmCEELBarXj55ZdRXV0tywsLC7FmzRq+RVFACAkJwdNPP420tDRZ1tHRgfXr16O0tBQDAwO31IoRQsDhcODs2bP47LPP8PLLL2PDhg2oqqpSjefExMTg2WefxerVq2EymbT8J9F1GPWugD8ICgrCM888g2+++QaVlZUArhyO9E//9E/44x//KNfDtLe345VXXsHOnTvl18bHx+OVV15RHaxE5M8URUFCQgKef/55vP7663Lc0Wq14t1338XBgwexYsUK5OXlwWKxQFEUVYteCAEhBOx2Oy5evIjKykocPnwY9fX18jTJoYxGI2bMmIHHH38cqamp7B0YIwwXjSQkJODVV1/F3/zN3+Dy5csQQuDLL79ES0sLHn/8cTgcDnzyySeorKyUb2WhoaH43e9+hxkzZvCGp4CiKApSU1Px4osv4n/+539QX18P4MpEl8rKSlRXVyMxMRFZWVlITU1FbGwsjEYjBgcH0dHRgXPnzuHs2bO4ePGiXLNyNZPJhMzMTNx7772YMWMGTCYTn7MxxHDRiGcH2JdeegmvvvqqbNp7FotdzWw244UXXsDDDz/M7jAKSIqiICUlBf/4j/+IP//5z/j+++/ljskulwttbW2q8RJFUW7aXaYoCiIjIzFjxgwsWrQIWVlZCA4OZqjogOGiIYPBgCeffBIulwt/+MMfYLVar/v3oqKi8A//8A/49a9/zb5fCmiKoiAmJgbPPPMMCgoKsHXrVtTX1193a5gbBYuiKAgNDUV6ejrmzJmDWbNmITY2FgaDgaGiI4aLxkwmE55++mnk5ORg/fr1OHLkiOwHDgsLQ1FREf7+7/8eBQUFbLEQ4Uo4mEwmFBQUYNq0aaitrUV5eTmqq6vR0dEBu92umkVmMBgQEhKCmJgYpKWlIT8/H7m5uUhMTITRaGSgeAmGyygICgrC/PnzUVBQgMbGRjQ1NcFgMCA9PR1paWns+yW6DkVREBISgmnTpmHq1KkYHBxEd3c3Ojo60NfXB5fLheDgYISHhyMmJgaRkZEwm83XDPiTd2C4DOF2u1FRUQGbzabp53paKI2NjWhsbNT0s72Jy+W6pb3VyDsJIXD69GkMDg7qXRXJYDDAYDDI6fw36nL2Bi6XC729vXpXQ3cMl58YDAZkZ2dj9+7d2L17t97V8Vnh4eGIjo7Wuxp0mzyD7EePHsXRo0f1ro7PCg0NDfjD/hSh93mjXkIIAafTqfvxq/7AaDRyPMlHCSHgcrn4HGggKCgooJ8DhgsREWkucGOViIhGDcOFiIg0x3AhIiLNMVyIiEhzDBcfwdlsRD+vIRnto5Fp5BguPuLkyZNITk7GyZMn9a4KkW6am5vx1FNPobm5We+q0E0wXIiISHMMFyIi0hzDhYiINMdwISIizTFciIhIcwwXIiLSHMOFiIg0x3AhIiLNMVyIiEhzDBciItIcw4WIiDTHcCEiIs0xXIiISHMMFyIi0hzDxQcIIdDV1QW3242uri6e6UIBSQiBzs5O9PX1obOzk8+Bl2O4eLHu7m5s2LABmZmZWLRoETo6OrBo0SJkZmZiw4YN6O7u1ruKRKNu6HNQUFCAr776CgUFBXwOvJwiGP9eqbS0FA899BBsNhsAqN7SFEUBAFgsFmzatAklJSW61JFotPE58F0MFy9UWlqKlStXQggBt9t9w79nMBigKAq2b9/OB4v8Dp8D38Zw8TLd3d2YOHEi+vv7f/GB8jAYDAgNDUVLSwuio6NHv4JEY4DPge/jmIuXee+992Cz2Yb1QAGA2+2GzWbD+++/P8o1Ixo7fA58H1suXkQIgczMTDQ2Nt7STBhFUZCeno66ujrZD03kq/gc+AeGixdpb29HQkLCiL4+Li5OwxoRjT0+B/6B3WJepLe3d0Rfb7VaNaoJkX74HPgHhosXCQ8PH9HXR0REaFQTIv3wOfAPDBcvEhcXh4yMjFvuL1YUBRkZGYiNjR2lmhGNHT4H/oHh4kUURcHzzz9/W1+7bt06DmKSX+Bz4B84oO9lOL+fiM+BP2DLxctER0dj06ZNUBQFBsMv/+/xrEz+/PPP+UCRX+Fz4PsYLl6opKQE27dvR2hoKBRFuaaZ7ykLDQ3Fjh07UFxcrFNNiUYPnwPfxnDxUiUlJWhpacH69euRnp6u+rP09HSsX78era2tfKDIr/E58F0cc/EBnnMsrFYrIiIiEBsby0FLCjh8DnwLw4WIiDTHbjEiItIcw4WIiDTHcCEiIs0xXIiISHMMFyIi0hzDhYiINMdwISIizTFciIhIcwwXIiLSHMOFiIg0x3AhIiLNMVyIiEhzDBciItIcw4WIiDT3/xKPCWnmhNkTAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "model = model.prune()\n", "model(dataset['train_input'])\n", "model.plot()" ] }, { "cell_type": "markdown", "id": "bd08ad99", "metadata": {}, "source": [ "### Continue training and replot" ] }, { "cell_type": "code", "execution_count": 7, "id": "18a2db11", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "train loss: 4.71e-03 | test loss: 4.74e-03 | reg: 3.08e+00 : 100%|██| 50/50 [00:07<00:00, 6.51it/s]\n" ] } ], "source": [ "model.train(dataset, opt=\"LBFGS\", steps=50);" ] }, { "cell_type": "code", "execution_count": 8, "id": "af27aba7", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "model.plot()" ] }, { "cell_type": "markdown", "id": "cf35d505", "metadata": {}, "source": [ "### Automatically or manually set activation functions to be symbolic" ] }, { "cell_type": "code", "execution_count": 9, "id": "b3c0642b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "fixing (0,0,0) with sin, r2=0.9999870517513758\n", "fixing (0,1,0) with x^2, r2=0.9999995406740803\n", "fixing (1,0,0) with exp, r2=0.9999989605235987\n" ] } ], "source": [ "mode = \"auto\" # \"manual\"\n", "\n", "if mode == \"manual\":\n", " # manual mode\n", " model.fix_symbolic(0,0,0,'sin');\n", " model.fix_symbolic(0,1,0,'x^2');\n", " model.fix_symbolic(1,0,0,'exp');\n", "elif mode == \"auto\":\n", " # automatic mode\n", " lib = ['x','x^2','x^3','x^4','exp','log','sqrt','tanh','sin','abs']\n", " model.auto_symbolic(lib=lib)" ] }, { "cell_type": "markdown", "id": "821ba616", "metadata": {}, "source": [ "### Continue training to almost machine precision" ] }, { "cell_type": "code", "execution_count": 10, "id": "c0800415", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "train loss: 1.57e-11 | test loss: 1.66e-13 | reg: 3.08e+00 : 100%|██| 50/50 [00:02<00:00, 20.36it/s]\n" ] } ], "source": [ "model.train(dataset, opt=\"LBFGS\", steps=50);" ] }, { "cell_type": "markdown", "id": "e39da499", "metadata": {}, "source": [ "### Obtain the symbolic formula" ] }, { "cell_type": "code", "execution_count": 11, "id": "bf44f7e0", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 1.0 e^{1.0 x_{2}^{2} + 1.0 \\sin{\\left(3.14 x_{1} \\right)}}$" ], "text/plain": [ "1.0*exp(1.0*x_2**2 + 1.0*sin(3.14*x_1))" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.symbolic_formula()[0][0]" ] } ], "metadata": { "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.9.7" } }, "nbformat": 4, "nbformat_minor": 5 }