From 8d019f266164eb4128bb7ea1d15b7f73e139f4fa Mon Sep 17 00:00:00 2001 From: huxuedan <1187557832@qq.com> Date: Sat, 11 May 2024 15:26:08 +0800 Subject: [PATCH 1/2] Fix description --- kan/KAN.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kan/KAN.py b/kan/KAN.py index 28b0aa268..4e981d0ed 100644 --- a/kan/KAN.py +++ b/kan/KAN.py @@ -25,7 +25,7 @@ class KAN(nn.Module): depth: int depth of KAN width: list - number of neurons in each layer. e.g., [2,5,5,3] means 2D inputs, 5D outputs, with 2 layers of 5 hidden neurons. + number of neurons in each layer. e.g., [2,5,5,3] means 2D inputs, 3D outputs, with 2 layers of 5 hidden neurons. grid: int the number of grid intervals k: int From 55f4b3904f1d98423b5c6533071aca283dff2467 Mon Sep 17 00:00:00 2001 From: huxuedan <1187557832@qq.com> Date: Sat, 11 May 2024 16:22:46 +0800 Subject: [PATCH 2/2] remove extra symbols --- .../Example_4_symbolic_regression.ipynb | 8 ++--- hellokan.ipynb | 14 ++++---- kan/KAN.py | 36 +++++++++---------- 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/docs/Examples/Example_4_symbolic_regression.ipynb b/docs/Examples/Example_4_symbolic_regression.ipynb index 92cd615c0..45fb25dd7 100644 --- a/docs/Examples/Example_4_symbolic_regression.ipynb +++ b/docs/Examples/Example_4_symbolic_regression.ipynb @@ -72,7 +72,7 @@ ], "source": [ "# train the model\n", - "model.train(dataset, opt=\"LBFGS\", steps=20, lamb=0.01, lamb_entropy=10.);" + "model.train(dataset, opt=\"LBFGS\", steps=20, lamb=0.01, lamb_entropy=10.)" ] }, { @@ -286,7 +286,7 @@ } ], "source": [ - "model.train(dataset, opt=\"LBFGS\", steps=20);\n", + "model.train(dataset, opt=\"LBFGS\", steps=20)\n", "model.plot()" ] }, @@ -465,7 +465,7 @@ } ], "source": [ - "model.train(dataset, opt=\"LBFGS\", steps=20);\n", + "model.train(dataset, opt=\"LBFGS\", steps=20)\n", "model.plot()" ] }, @@ -612,7 +612,7 @@ ], "source": [ "# this loss is stuck at around 1e-3 RMSE, which is good, but not machine precision.\n", - "model.train(dataset, opt=\"LBFGS\", steps=20);\n", + "model.train(dataset, opt=\"LBFGS\", steps=20)\n", "model.plot()" ] }, diff --git a/hellokan.ipynb b/hellokan.ipynb index 0d7e1de13..c21aadb61 100644 --- a/hellokan.ipynb +++ b/hellokan.ipynb @@ -180,7 +180,7 @@ ], "source": [ "# plot KAN at initialization\n", - "model(dataset['train_input']);\n", + "model(dataset['train_input'])\n", "model.plot(beta=100)" ] }, @@ -208,7 +208,7 @@ ], "source": [ "# train the model\n", - "model.train(dataset, opt=\"LBFGS\", steps=20, lamb=0.01, lamb_entropy=10.);" + "model.train(dataset, opt=\"LBFGS\", steps=20, lamb=0.01, lamb_entropy=10.)" ] }, { @@ -324,7 +324,7 @@ } ], "source": [ - "model.train(dataset, opt=\"LBFGS\", steps=50);" + "model.train(dataset, opt=\"LBFGS\", steps=50)" ] }, { @@ -377,9 +377,9 @@ "\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", + " 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", @@ -409,7 +409,7 @@ } ], "source": [ - "model.train(dataset, opt=\"LBFGS\", steps=50);" + "model.train(dataset, opt=\"LBFGS\", steps=50)" ] }, { diff --git a/kan/KAN.py b/kan/KAN.py index 4e981d0ed..63f6a8166 100644 --- a/kan/KAN.py +++ b/kan/KAN.py @@ -185,7 +185,7 @@ def initialize_from_another_model(self, another_model, x): >>> model_fine = KAN(width=[2,5,1], grid=10, k=3) >>> print(model_fine.act_fun[0].coef[0][0].data) >>> x = torch.normal(0,1,size=(100,2)) - >>> model_fine.initialize_from_another_model(model_coarse, x); + >>> model_fine.initialize_from_another_model(model_coarse, x) >>> print(model_fine.act_fun[0].coef[0][0].data) tensor(-0.0030) tensor(0.0506) @@ -348,7 +348,7 @@ def set_mode(self, l, i, j, mode, mask_n=None): output neuron index mode : str 'n' (numeric) or 's' (symbolic) or 'ns' (combined) - mask_n : None or float) + mask_n : None or float magnitude of the numeric front Returns: @@ -356,19 +356,19 @@ def set_mode(self, l, i, j, mode, mask_n=None): None ''' if mode == "s": - mask_n = 0.; + mask_n = 0. mask_s = 1. elif mode == "n": - mask_n = 1.; + mask_n = 1. mask_s = 0. elif mode == "sn" or mode == "ns": - if mask_n == None: + if mask_n is None: mask_n = 1. else: mask_n = mask_n mask_s = 1. else: - mask_n = 0.; + mask_n = 0. mask_s = 0. self.act_fun[l].mask.data[j * self.act_fun[l].in_dim + i] = mask_n @@ -814,7 +814,7 @@ def train(self, dataset, opt="LBFGS", steps=100, log=1, lamb=0., lamb_l1=1., lam >>> model = KAN(width=[2,5,1], grid=5, k=3, noise_scale=0.1, seed=0) >>> f = lambda x: torch.exp(torch.sin(torch.pi*x[:,[0]]) + x[:,[1]]**2) >>> dataset = create_dataset(f, n_var=2) - >>> model.train(dataset, opt='LBFGS', steps=50, lamb=0.01); + >>> model.train(dataset, opt='LBFGS', steps=50, lamb=0.01) >>> model.plot() ''' @@ -842,7 +842,7 @@ def nonlinear(x, th=small_mag_threshold, factor=small_reg_factor): pbar = tqdm(range(steps), desc='description', ncols=100) - if loss_fn == None: + if loss_fn is None: loss_fn = loss_fn_eval = lambda x, y: torch.mean((x - y) ** 2) else: loss_fn = loss_fn_eval = loss_fn @@ -958,7 +958,7 @@ def prune(self, threshold=1e-2, mode="auto", active_neurons_id=None): >>> model = KAN(width=[2,5,1], grid=5, k=3, noise_scale=0.1, seed=0) >>> f = lambda x: torch.exp(torch.sin(torch.pi*x[:,[0]]) + x[:,[1]]**2) >>> dataset = create_dataset(f, n_var=2) - >>> model.train(dataset, opt='LBFGS', steps=50, lamb=0.01); + >>> model.train(dataset, opt='LBFGS', steps=50, lamb=0.01) >>> model.prune() >>> model.plot(mask=True) ''' @@ -1063,7 +1063,7 @@ def suggest_symbolic(self, l, i, j, a_range=(-10, 10), b_range=(-10, 10), lib=No >>> model = KAN(width=[2,5,1], grid=5, k=3, noise_scale=0.1, seed=0) >>> f = lambda x: torch.exp(torch.sin(torch.pi*x[:,[0]]) + x[:,[1]]**2) >>> dataset = create_dataset(f, n_var=2) - >>> model.train(dataset, opt='LBFGS', steps=50, lamb=0.01); + >>> model.train(dataset, opt='LBFGS', steps=50, lamb=0.01) >>> model = model.prune() >>> model(dataset['train_input']) >>> model.suggest_symbolic(0,0,0) @@ -1076,7 +1076,7 @@ def suggest_symbolic(self, l, i, j, a_range=(-10, 10), b_range=(-10, 10), lib=No ''' r2s = [] - if lib == None: + if lib is None: symbolic_lib = SYMBOLIC_LIB else: symbolic_lib = {} @@ -1124,8 +1124,8 @@ def auto_symbolic(self, a_range=(-10, 10), b_range=(-10, 10), lib=None, verbose= >>> model = KAN(width=[2,5,1], grid=5, k=3, noise_scale=0.1, seed=0) >>> f = lambda x: torch.exp(torch.sin(torch.pi*x[:,[0]]) + x[:,[1]]**2) >>> dataset = create_dataset(f, n_var=2) - >>> model.train(dataset, opt='LBFGS', steps=50, lamb=0.01); - >>> >>> model = model.prune() + >>> model.train(dataset, opt='LBFGS', steps=50, lamb=0.01) + >>> model = model.prune() >>> model(dataset['train_input']) >>> model.auto_symbolic() fixing (0,0,0) with sin, r2=0.9994837045669556 @@ -1139,8 +1139,8 @@ def auto_symbolic(self, a_range=(-10, 10), b_range=(-10, 10), lib=None, verbose= >>> model = KAN(width=[2,5,1], grid=5, k=3, noise_scale=0.1, seed=0) >>> f = lambda x: torch.exp(torch.sin(torch.pi*x[:,[0]]) + x[:,[1]]**2) >>> dataset = create_dataset(f, n_var=2) - >>> model.train(dataset, opt='LBFGS', steps=50, lamb=0.01); - >>> >>> model = model.prune() + >>> model.train(dataset, opt='LBFGS', steps=50, lamb=0.01) + >>> model = model.prune() >>> model(dataset['train_input']) >>> model.auto_symbolic(lib=['exp','sin','x^2']) fixing (0,0,0) with sin, r2=0.999411404132843 @@ -1184,11 +1184,11 @@ def symbolic_formula(self, floating_digit=2, var=None, normalizer=None, simplify >>> model = KAN(width=[2,5,1], grid=5, k=3, noise_scale=0.1, seed=0, grid_eps=0.02) >>> f = lambda x: torch.exp(torch.sin(torch.pi*x[:,[0]]) + x[:,[1]]**2) >>> dataset = create_dataset(f, n_var=2) - >>> model.train(dataset, opt='LBFGS', steps=50, lamb=0.01); + >>> model.train(dataset, opt='LBFGS', steps=50, lamb=0.01) >>> model = model.prune() >>> model(dataset['train_input']) >>> model.auto_symbolic(lib=['exp','sin','x^2']) - >>> model.train(dataset, opt='LBFGS', steps=50, lamb=0.00, update_grid=False); + >>> model.train(dataset, opt='LBFGS', steps=50, lamb=0.00, update_grid=False) >>> model.symbolic_formula() ''' symbolic_acts = [] @@ -1202,7 +1202,7 @@ def ex_round(ex1, floating_digit=floating_digit): return ex2 # define variables - if var == None: + if var is None: for ii in range(1, self.width[0] + 1): exec(f"x{ii} = sympy.Symbol('x_{ii}')") exec(f"x.append(x{ii})")