310 lines
130 KiB
Plaintext
310 lines
130 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "c982abca",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Interpretation 1: Hello, MultKAN!"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "30fde2f3",
|
|
"metadata": {},
|
|
"source": [
|
|
"Motivation: The original KAN has some level of interpretability, but sometimes not fully interpretable (fully interpretable = convert the network to a symbolic formula). The biggest limitation is the lack of multiplications operators. The original KAN only has addition operators. Although multiplication can be expressed as addition and single-variable functions (which is the core idea of Kolmogorov-Arnold representation theorem), we still hope to explicitly have multiplications in the KANs so that multiplications can be more easily read out from KANs. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "72377ee4",
|
|
"metadata": {},
|
|
"source": [
|
|
"We first show how multiplications can be represented by addition and single variable functions. Usually KAN would find solutions leveraging linear functions and quadractic functions (the solutions are not unique). $$xy=((x+y)^2-(x-y)^2)/4=((x+y)^2-x^2-y^2)/2=\\cdots$$"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"id": "76538154",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"train loss: 4.38e-02 | test loss: 4.59e-02 | reg: 5.74e+00 : 15%|▍ | 3/20 [00:02<00:13, 1.30it/s]\n"
|
|
]
|
|
},
|
|
{
|
|
"ename": "KeyboardInterrupt",
|
|
"evalue": "",
|
|
"output_type": "error",
|
|
"traceback": [
|
|
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
|
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
|
|
"\u001b[0;32m/var/folders/6j/b6y80djd4nb5hl73rv3sv8y80000gn/T/ipykernel_42203/4110680146.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mlambda\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0mdataset\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcreate_dataset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn_var\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdataset\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msteps\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m20\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlamb\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0.01\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
|
|
"\u001b[0;32m~/Desktop/2022/research/code/pykan/kan/MultKAN.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, dataset, opt, steps, log, lamb, lamb_l1, lamb_entropy, lamb_coef, lamb_coefdiff, update_grid, grid_update_num, loss_fn, lr, start_grid_update_step, stop_grid_update_step, batch, small_mag_threshold, small_reg_factor, metrics, save_fig, in_vars, out_vars, beta, save_fig_freq, img_folder, device, singularity_avoiding, y_th, reg_metric)\u001b[0m\n\u001b[1;32m 808\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 809\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mopt\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m\"LBFGS\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 810\u001b[0;31m \u001b[0moptimizer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mclosure\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 811\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 812\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mopt\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m\"Adam\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
|
"\u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/torch/optim/optimizer.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 383\u001b[0m )\n\u001b[1;32m 384\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 385\u001b[0;31m \u001b[0mout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 386\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_optimizer_step_code\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 387\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
|
|
"\u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/torch/utils/_contextlib.py\u001b[0m in \u001b[0;36mdecorate_context\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 113\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mdecorate_context\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 114\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mctx_factory\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 115\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 116\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 117\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mdecorate_context\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
|
"\u001b[0;32m~/Desktop/2022/research/code/pykan/kan/LBFGS.py\u001b[0m in \u001b[0;36mstep\u001b[0;34m(self, closure)\u001b[0m\n\u001b[1;32m 440\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mobj_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0md\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 441\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_directional_evaluate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mclosure\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0md\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 442\u001b[0;31m loss, flat_grad, t, ls_func_evals = _strong_wolfe(\n\u001b[0m\u001b[1;32m 443\u001b[0m obj_func, x_init, t, d, loss, flat_grad, gtd)\n\u001b[1;32m 444\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_add_grad\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0md\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
|
"\u001b[0;32m~/Desktop/2022/research/code/pykan/kan/LBFGS.py\u001b[0m in \u001b[0;36m_strong_wolfe\u001b[0;34m(obj_func, x, t, d, f, g, gtd, c1, c2, tolerance_change, max_ls)\u001b[0m\n\u001b[1;32m 48\u001b[0m \u001b[0mg\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mg\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclone\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmemory_format\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontiguous_format\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 49\u001b[0m \u001b[0;31m# evaluate objective and gradient using initial step\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 50\u001b[0;31m \u001b[0mf_new\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mg_new\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mobj_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0md\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 51\u001b[0m \u001b[0mls_func_evals\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 52\u001b[0m \u001b[0mgtd_new\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mg_new\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0md\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
|
"\u001b[0;32m~/Desktop/2022/research/code/pykan/kan/LBFGS.py\u001b[0m in \u001b[0;36mobj_func\u001b[0;34m(x, t, d)\u001b[0m\n\u001b[1;32m 439\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 440\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mobj_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0md\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 441\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_directional_evaluate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mclosure\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0md\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 442\u001b[0m loss, flat_grad, t, ls_func_evals = _strong_wolfe(\n\u001b[1;32m 443\u001b[0m obj_func, x_init, t, d, loss, flat_grad, gtd)\n",
|
|
"\u001b[0;32m~/Desktop/2022/research/code/pykan/kan/LBFGS.py\u001b[0m in \u001b[0;36m_directional_evaluate\u001b[0;34m(self, closure, x, t, d)\u001b[0m\n\u001b[1;32m 288\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_directional_evaluate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mclosure\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0md\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 289\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_add_grad\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0md\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 290\u001b[0;31m \u001b[0mloss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mclosure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 291\u001b[0m \u001b[0mflat_grad\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_gather_flat_grad\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 292\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_set_param\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
|
"\u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/torch/utils/_contextlib.py\u001b[0m in \u001b[0;36mdecorate_context\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 113\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mdecorate_context\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 114\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mctx_factory\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 115\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 116\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 117\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mdecorate_context\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
|
"\u001b[0;32m~/Desktop/2022/research/code/pykan/kan/MultKAN.py\u001b[0m in \u001b[0;36mclosure\u001b[0;34m()\u001b[0m\n\u001b[1;32m 792\u001b[0m \u001b[0mreg_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtensor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0.\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 793\u001b[0m \u001b[0mobjective\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtrain_loss\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mlamb\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mreg_\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 794\u001b[0;31m \u001b[0mobjective\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbackward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 795\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mobjective\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 796\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
|
|
"\u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/torch/_tensor.py\u001b[0m in \u001b[0;36mbackward\u001b[0;34m(self, gradient, retain_graph, create_graph, inputs)\u001b[0m\n\u001b[1;32m 520\u001b[0m \u001b[0minputs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minputs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 521\u001b[0m )\n\u001b[0;32m--> 522\u001b[0;31m torch.autograd.backward(\n\u001b[0m\u001b[1;32m 523\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgradient\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mretain_graph\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcreate_graph\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minputs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minputs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 524\u001b[0m )\n",
|
|
"\u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/torch/autograd/__init__.py\u001b[0m in \u001b[0;36mbackward\u001b[0;34m(tensors, grad_tensors, retain_graph, create_graph, grad_variables, inputs)\u001b[0m\n\u001b[1;32m 264\u001b[0m \u001b[0;31m# some Python versions print out the first line of a multi-line function\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 265\u001b[0m \u001b[0;31m# calls in the traceback and some print out the last line\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 266\u001b[0;31m Variable._execution_engine.run_backward( # Calls into the C++ engine to run the backward pass\n\u001b[0m\u001b[1;32m 267\u001b[0m \u001b[0mtensors\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 268\u001b[0m \u001b[0mgrad_tensors_\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
|
"\u001b[0;31mKeyboardInterrupt\u001b[0m: "
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"from kan import *\n",
|
|
"torch.set_default_dtype(torch.float64)\n",
|
|
"\n",
|
|
"model = KAN(width=[2,5,1])\n",
|
|
"\n",
|
|
"f = lambda x: x[:,0] * x[:,1]\n",
|
|
"dataset = create_dataset(f, n_var=2)\n",
|
|
"model.fit(dataset, steps=20, lamb=0.01);"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"id": "939224b9",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 500x400 with 22 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"model.plot()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "2ec84826",
|
|
"metadata": {},
|
|
"source": [
|
|
"This network seems to be using the equality $xy=((x+y)^2-(x-y)^2)/4$ but not exactly."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "b33ecf62",
|
|
"metadata": {},
|
|
"source": [
|
|
"Now we want to explicitly introduce multiplication operators, called MultKAN. Note that MultKAN and KAN are actually the same class in implementation, so you can use either class name. If you dig into MultKAN.py, there is a line 'KAN = MultKAN'. KAN is just a special case of MultKAN. To inlcude multiplications, you only need to modify the width parameter. For example, [2,5,1] KAN means 2 inputs, 5 hidden add neurons, and 1 output; [2,[5,2],1] MultKAN means 2 inputs, 5 hidden add neurons and 2 hidden mult neurons, and 1 output."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"id": "d8f94f0f",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 500x400 with 38 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"model = KAN(width=[2,[5,2],1], base_fun='identity')\n",
|
|
"model.get_act(dataset)\n",
|
|
"model.plot()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"id": "4b39ad0c",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"train loss: 1.41e-02 | test loss: 1.44e-02 | reg: 5.34e+00 : 100%|██| 20/20 [00:17<00:00, 1.17it/s]\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"model.fit(dataset, steps=20, lamb=0.01, lamb_coef=1.0);"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"id": "4c0314b5",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 500x400 with 38 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"model.plot()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"id": "2af1c553",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"model = model.prune()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"id": "aac1fb1c",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 500x400 with 10 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"model.plot()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"id": "97851f1f",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"train loss: 1.28e-08 | test loss: 1.31e-08 | reg: 5.26e+00 : 100%|██| 20/20 [00:04<00:00, 4.40it/s]\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"model.fit(dataset, steps=20);"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"id": "f27281df",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"fixing (0,0,0) with x, r2=0.9999999999860647, c=1\n",
|
|
"fixing (0,0,1) with 0\n",
|
|
"fixing (0,1,0) with 0\n",
|
|
"fixing (0,1,1) with x, r2=0.9999999999802792, c=1\n",
|
|
"fixing (1,0,0) with x, r2=0.9999999997392498, c=1\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"model.auto_symbolic()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"id": "fd45a429",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"train loss: 1.49e-16 | test loss: 1.52e-16 | reg: 5.26e+00 : 100%|██| 20/20 [00:00<00:00, 28.72it/s]\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"model.fit(dataset, steps=20);"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"id": "ffb84f4c",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/latex": [
|
|
"$\\displaystyle x_{1} x_{2}$"
|
|
],
|
|
"text/plain": [
|
|
"x_1*x_2"
|
|
]
|
|
},
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"sf = model.symbolic_formula()[0][0]\n",
|
|
"nsimplify(ex_round(ex_round(sf, 3),3))"
|
|
]
|
|
}
|
|
],
|
|
"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
|
|
}
|