KindXiaoming / pykan

Kolmogorov Arnold Networks
MIT License
13.66k stars 1.2k forks source link

sympy好像没有arcsin,sympy好像是有asin #286

Open Nzavcciuoier123 opened 1 week ago

Nzavcciuoier123 commented 1 week ago

在kan/utils.py里边

微信图片_20240626195240

我替换为了:

微信图片_20240626195414

但是之后运行symbolic_formula的时候,可以正常循环很多个轮回,只是到循环的后边,又报错了:


abcd: tensor(-10., device='cuda:0', grad_fn=) tensor(-10., device='cuda:0', grad_fn=) tensor(0., device='cuda:0', grad_fn=) tensor(0., device='cuda:0', grad_fn=) sympy_fun: <function at 0x0000026A0B66FF40> sympy_fun(a x[i] + b) -1.5707963267949 + 3.57716042987056I c sympy_fun(a x[i] + b) 0 yj of this cycle 0 yj += c sympy_fun(a x[i] + b) + d 0

l: 2 j: 0 i: 4

abcd: tensor(-0.3266, device='cuda:0', grad_fn=) tensor(4.2120, device='cuda:0', grad_fn=) tensor(32.4615, device='cuda:0', grad_fn=) tensor(27.8678, device='cuda:0', grad_fn=) sympy_fun: <function at 0x0000026A0B66FA30> sympy_fun(a x[i] + b) sin(-7.56461509787557tanh(11.1724251508104*(0.608286075430445 - x_1)2 + 36.7776407800446*(0.626369554415839 - x_8)*3 - 7.73219327961241sqrt(0.0847742109613535x_5 + 1) + 1.22136635587686sin(6.8x_11 + 10.0) - 3.52072350468796sin(10.0x_12 - 1.2) + 5.30827751245068tanh(1.8x_7 - 0.116) + 0.120921154012907Abs(8.35264x_10 - 5.16992) + 0.398040951161874Abs(8.77168x_3 - 7.75528) + 0.152038383509339Abs(8.99592x_4 - 5.72264) + 0.476989765959612Abs(3.93696x_6 + 9.23024) + 1.18985092177403Abs(9.48392x_9 - 5.25016) + 6.37825401886856 - 0.904722874216664/sqrt(x_2 - 0.718028316727845)) + 1.02139776233446tanh(-0.0227702529010633sin(3.59992x_11 + 9.52232) + 0.00800001820320635sin(10.0x_3 + 7.6) - 0.0120942440459707sin(10.0x_4 - 8.8) + 0.0314825062202321sin(0.399359999999999x_5 + 2.98) + 0.00960726557240071tanh(10.0x_1 - 4.6) + 0.012299771904715tanh(10.0x_10 - 2.2) + 6.72493973290265tanh(5.212x_12 - 4.4) + 0.0382286594952153tanh(2.72504x_6 - 1.55808) - 0.0171770888741439tanh(10.0x_9 - 5.072) + 0.0097956745244225Abs(8.552x_2 - 7.53552) + 0.00501973010930146asin(2.45984x_8 - 1.45992) - 3.91706222333103 - 0.0652459680717108exp(-6.0x_7)) + 10.9615164797256 - 0.000192188835522137/(0.0459414790590742sin(8.76656x_11 - 0.390479999999999) + 0.146902203148953sin(0.379759999999999x_5 - 7.78104) - 0.0441599680288885sin(10.0x_9 + 5.6) + 0.674707330916322tanh(10.0x_3 - 3.2) - 0.119457671525295tanh(10.0x_8 - 9.0) + 0.0276926410383739Abs(9.8232x_1 - 4.8496) - 0.30709730203254asin(0.431119999999999x_6 + 0.611039999999999) - 0.277195594477601asin(1.824x_7 - 0.83512) - 1 - 7.51823258612397e-6/(-x_4 - 0.0415951154359855)3 - 6.78079366228912e-6/(-x_10 - 0.0418075622502306)3 + 6.93283430779549e-5/(1 - 0.933202469346533*x_2)3 - 0.0276676972005992/sqrt(0.999999999986125 - x_12))3 + 1.53630886449928e-6/(-(0.342121302906022 - x_9)*3 - 0.142627998111472(0.348260162321734 - x_4)3 - 0.00263396726622537sin(10.0x_10 + 2.8) - 0.0019378684075077sin(10.0x_3 - 7.4) - 0.00369449669401643tanh(10.0x_1 - 6.8) + 0.00974121628694192tanh(0.828x_5 + 8.8) - 0.000870654630450156tanh(10.0x_7 - 4.2) + 0.00266531146165239tanh(10.0x_8 - 8.4) + 0.0107551288586664Abs(9.4x_12 - 8.992) + 0.000984900549189844Abs(7.51192x_6 + 3.65392) - 0.00801292942013108asin(2.17224x_11 - 1.00144) - 0.0431994805840643 - 6.33441304567693e-7/(0.750522088353413 - x_2)2)2) c sympy_fun(a x[i] + b) 32.461481517204sin(-7.56461509787557tanh(11.1724251508104*(0.608286075430445 - x_1)2 + 36.7776407800446*(0.626369554415839 - x_8)*3 - 7.73219327961241sqrt(0.0847742109613535x_5 + 1) + 1.22136635587686sin(6.8x_11 + 10.0) - 3.52072350468796sin(10.0x_12 - 1.2) + 5.30827751245068tanh(1.8x_7 - 0.116) + 0.120921154012907Abs(8.35264x_10 - 5.16992) + 0.398040951161874Abs(8.77168x_3 - 7.75528) + 0.152038383509339Abs(8.99592x_4 - 5.72264) + 0.476989765959612Abs(3.93696x_6 + 9.23024) + 1.18985092177403Abs(9.48392x_9 - 5.25016) + 6.37825401886856 - 0.904722874216664/sqrt(x_2 - 0.718028316727845)) + 1.02139776233446tanh(-0.0227702529010633sin(3.59992x_11 + 9.52232) + 0.00800001820320635sin(10.0x_3 + 7.6) - 0.0120942440459707sin(10.0x_4 - 8.8) + 0.0314825062202321sin(0.399359999999999x_5 + 2.98) + 0.00960726557240071tanh(10.0x_1 - 4.6) + 0.012299771904715tanh(10.0x_10 - 2.2) + 6.72493973290265tanh(5.212x_12 - 4.4) + 0.0382286594952153tanh(2.72504x_6 - 1.55808) - 0.0171770888741439tanh(10.0x_9 - 5.072) + 0.0097956745244225Abs(8.552x_2 - 7.53552) + 0.00501973010930146asin(2.45984x_8 - 1.45992) - 3.91706222333103 - 0.0652459680717108exp(-6.0x_7)) + 10.9615164797256 - 0.000192188835522137/(0.0459414790590742sin(8.76656x_11 - 0.390479999999999) + 0.146902203148953sin(0.379759999999999x_5 - 7.78104) - 0.0441599680288885sin(10.0x_9 + 5.6) + 0.674707330916322tanh(10.0x_3 - 3.2) - 0.119457671525295tanh(10.0x_8 - 9.0) + 0.0276926410383739Abs(9.8232x_1 - 4.8496) - 0.30709730203254asin(0.431119999999999x_6 + 0.611039999999999) - 0.277195594477601asin(1.824x_7 - 0.83512) - 1 - 7.51823258612397e-6/(-x_4 - 0.0415951154359855)3 - 6.78079366228912e-6/(-x_10 - 0.0418075622502306)3 + 6.93283430779549e-5/(1 - 0.933202469346533*x_2)3 - 0.0276676972005992/sqrt(0.999999999986125 - x_12))3 + 1.53630886449928e-6/(-(0.342121302906022 - x_9)*3 - 0.142627998111472(0.348260162321734 - x_4)3 - 0.00263396726622537sin(10.0x_10 + 2.8) - 0.0019378684075077sin(10.0x_3 - 7.4) - 0.00369449669401643tanh(10.0x_1 - 6.8) + 0.00974121628694192tanh(0.828x_5 + 8.8) - 0.000870654630450156tanh(10.0x_7 - 4.2) + 0.00266531146165239tanh(10.0x_8 - 8.4) + 0.0107551288586664Abs(9.4x_12 - 8.992) + 0.000984900549189844Abs(7.51192x_6 + 3.65392) - 0.00801292942013108asin(2.17224x_11 - 1.00144) - 0.0431994805840643 - 6.33441304567693e-7/(0.750522088353413 - x_2)2)2) yj of this cycle 32.461481517204sin(-7.56461509787557tanh(11.1724251508104*(0.608286075430445 - x_1)2 + 36.7776407800446*(0.626369554415839 - x_8)*3 - 7.73219327961241sqrt(0.0847742109613535x_5 + 1) + 1.22136635587686sin(6.8x_11 + 10.0) - 3.52072350468796sin(10.0x_12 - 1.2) + 5.30827751245068tanh(1.8x_7 - 0.116) + 0.120921154012907Abs(8.35264x_10 - 5.16992) + 0.398040951161874Abs(8.77168x_3 - 7.75528) + 0.152038383509339Abs(8.99592x_4 - 5.72264) + 0.476989765959612Abs(3.93696x_6 + 9.23024) + 1.18985092177403Abs(9.48392x_9 - 5.25016) + 6.37825401886856 - 0.904722874216664/sqrt(x_2 - 0.718028316727845)) + 1.02139776233446tanh(-0.0227702529010633sin(3.59992x_11 + 9.52232) + 0.00800001820320635sin(10.0x_3 + 7.6) - 0.0120942440459707sin(10.0x_4 - 8.8) + 0.0314825062202321sin(0.399359999999999x_5 + 2.98) + 0.00960726557240071tanh(10.0x_1 - 4.6) + 0.012299771904715tanh(10.0x_10 - 2.2) + 6.72493973290265tanh(5.212x_12 - 4.4) + 0.0382286594952153tanh(2.72504x_6 - 1.55808) - 0.0171770888741439tanh(10.0x_9 - 5.072) + 0.0097956745244225Abs(8.552x_2 - 7.53552) + 0.00501973010930146asin(2.45984x_8 - 1.45992) - 3.91706222333103 - 0.0652459680717108exp(-6.0x_7)) + 10.9615164797256 - 0.000192188835522137/(0.0459414790590742sin(8.76656x_11 - 0.390479999999999) + 0.146902203148953sin(0.379759999999999x_5 - 7.78104) - 0.0441599680288885sin(10.0x_9 + 5.6) + 0.674707330916322tanh(10.0x_3 - 3.2) - 0.119457671525295tanh(10.0x_8 - 9.0) + 0.0276926410383739Abs(9.8232x_1 - 4.8496) - 0.30709730203254asin(0.431119999999999x_6 + 0.611039999999999) - 0.277195594477601asin(1.824x_7 - 0.83512) - 1 - 7.51823258612397e-6/(-x_4 - 0.0415951154359855)3 - 6.78079366228912e-6/(-x_10 - 0.0418075622502306)3 + 6.93283430779549e-5/(1 - 0.933202469346533*x_2)3 - 0.0276676972005992/sqrt(0.999999999986125 - x_12))3 + 1.53630886449928e-6/(-(0.342121302906022 - x_9)*3 - 0.142627998111472(0.348260162321734 - x_4)3 - 0.00263396726622537sin(10.0x_10 + 2.8) - 0.0019378684075077sin(10.0x_3 - 7.4) - 0.00369449669401643tanh(10.0x_1 - 6.8) + 0.00974121628694192tanh(0.828x_5 + 8.8) - 0.000870654630450156tanh(10.0x_7 - 4.2) + 0.00266531146165239tanh(10.0x_8 - 8.4) + 0.0107551288586664Abs(9.4x_12 - 8.992) + 0.000984900549189844Abs(7.51192x_6 + 3.65392) - 0.00801292942013108asin(2.17224x_11 - 1.00144) - 0.0431994805840643 - 6.33441304567693e-7/(0.750522088353413 - x_2)2)2) + 27.8677715604751 yj += c sympy_fun(a x[i] + b) + d 32.461481517204sin(-7.56461509787557tanh(11.1724251508104*(0.608286075430445 - x_1)2 + 36.7776407800446*(0.626369554415839 - x_8)*3 - 7.73219327961241sqrt(0.0847742109613535x_5 + 1) + 1.22136635587686sin(6.8x_11 + 10.0) - 3.52072350468796sin(10.0x_12 - 1.2) + 5.30827751245068tanh(1.8x_7 - 0.116) + 0.120921154012907Abs(8.35264x_10 - 5.16992) + 0.398040951161874Abs(8.77168x_3 - 7.75528) + 0.152038383509339Abs(8.99592x_4 - 5.72264) + 0.476989765959612Abs(3.93696x_6 + 9.23024) + 1.18985092177403Abs(9.48392x_9 - 5.25016) + 6.37825401886856 - 0.904722874216664/sqrt(x_2 - 0.718028316727845)) + 1.02139776233446tanh(-0.0227702529010633sin(3.59992x_11 + 9.52232) + 0.00800001820320635sin(10.0x_3 + 7.6) - 0.0120942440459707sin(10.0x_4 - 8.8) + 0.0314825062202321sin(0.399359999999999x_5 + 2.98) + 0.00960726557240071tanh(10.0x_1 - 4.6) + 0.012299771904715tanh(10.0x_10 - 2.2) + 6.72493973290265tanh(5.212x_12 - 4.4) + 0.0382286594952153tanh(2.72504x_6 - 1.55808) - 0.0171770888741439tanh(10.0x_9 - 5.072) + 0.0097956745244225Abs(8.552x_2 - 7.53552) + 0.00501973010930146asin(2.45984x_8 - 1.45992) - 3.91706222333103 - 0.0652459680717108exp(-6.0x_7)) + 10.9615164797256 - 0.000192188835522137/(0.0459414790590742sin(8.76656x_11 - 0.390479999999999) + 0.146902203148953sin(0.379759999999999x_5 - 7.78104) - 0.0441599680288885sin(10.0x_9 + 5.6) + 0.674707330916322tanh(10.0x_3 - 3.2) - 0.119457671525295tanh(10.0x_8 - 9.0) + 0.0276926410383739Abs(9.8232x_1 - 4.8496) - 0.30709730203254asin(0.431119999999999x_6 + 0.611039999999999) - 0.277195594477601asin(1.824x_7 - 0.83512) - 1 - 7.51823258612397e-6/(-x_4 - 0.0415951154359855)3 - 6.78079366228912e-6/(-x_10 - 0.0418075622502306)3 + 6.93283430779549e-5/(1 - 0.933202469346533*x_2)3 - 0.0276676972005992/sqrt(0.999999999986125 - x_12))3 + 1.53630886449928e-6/(-(0.342121302906022 - x_9)*3 - 0.142627998111472(0.348260162321734 - x_4)3 - 0.00263396726622537sin(10.0x_10 + 2.8) - 0.0019378684075077sin(10.0x_3 - 7.4) - 0.00369449669401643tanh(10.0x_1 - 6.8) + 0.00974121628694192tanh(0.828x_5 + 8.8) - 0.000870654630450156tanh(10.0x_7 - 4.2) + 0.00266531146165239tanh(10.0x_8 - 8.4) + 0.0107551288586664Abs(9.4x_12 - 8.992) + 0.000984900549189844Abs(7.51192x_6 + 3.65392) - 0.00801292942013108asin(2.17224x_11 - 1.00144) - 0.0431994805840643 - 6.33441304567693e-7/(0.750522088353413 - x_2)2)2) + 27.8677715604751

Traceback (most recent call last): File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\assumptions.py", line 499, in getit return self._assumptions[fact] KeyError: 'zero'

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\assumptions.py", line 499, in getit return self._assumptions[fact] KeyError: 'extended_nonnegative'

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\assumptions.py", line 499, in getit return self._assumptions[fact] KeyError: 'zero'

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\assumptions.py", line 499, in getit return self._assumptions[fact] KeyError: 'zero'

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "E:\XuChaoXiong\pykan_original_beifen_xiugai20240626\pykan\tc_infer2_20240625.py", line 98, in print(model.symbolic_formula()) File "E:\XuChaoXiong\pykan_original_beifen_xiugai20240626\pykan\kan\KAN.py", line 1260, in symbolic_formula self.symbolic_acts = [[ex_round(symbolic_acts[l][i]) for i in range(len(symbolic_acts[l]))] for l in range(len(symbolic_acts))] File "E:\XuChaoXiong\pykan_original_beifen_xiugai20240626\pykan\kan\KAN.py", line 1260, in self.symbolic_acts = [[ex_round(symbolic_acts[l][i]) for i in range(len(symbolic_acts[l]))] for l in range(len(symbolic_acts))] File "E:\XuChaoXiong\pykan_original_beifen_xiugai20240626\pykan\kan\KAN.py", line 1260, in self.symbolic_acts = [[ex_round(symbolic_acts[l][i]) for i in range(len(symbolic_acts[l]))] for l in range(len(symbolic_acts))] File "E:\XuChaoXiong\pykan_original_beifen_xiugai20240626\pykan\kan\KAN.py", line 1207, in ex_round ex2 = ex2.subs(a, round(a, floating_digit)) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\basic.py", line 1040, in subs rv = rv._subs(old, new, kwargs) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\cache.py", line 72, in wrapper retval = cfunc(args, kwargs) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\basic.py", line 1154, in _subs rv = fallback(self, old, new) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\basic.py", line 1126, in fallback arg = arg._subs(old, new, hints) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\cache.py", line 72, in wrapper retval = cfunc(args, kwargs) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\basic.py", line 1154, in _subs rv = fallback(self, old, new) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\basic.py", line 1126, in fallback arg = arg._subs(old, new, hints) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\cache.py", line 72, in wrapper retval = cfunc(*args, kwargs) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\basic.py", line 1154, in _subs rv = fallback(self, old, new) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\basic.py", line 1131, in fallback rv = self.func(args) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\cache.py", line 72, in wrapper retval = cfunc(args, kwargs) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\function.py", line 466, in new result = super().new(cls, *args, options) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\cache.py", line 72, in wrapper retval = cfunc(*args, kwargs) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\function.py", line 307, in new evaluated = cls.eval(args) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\functions\elementary\trigonometric.py", line 343, in eval i_coeff = _imaginary_unit_as_coefficient(arg) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\functions\elementary\trigonometric.py", line 38, in _imaginary_unit_as_coefficient return arg.as_coefficient(S.ImaginaryUnit) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\expr.py", line 1711, in as_coefficient r = self.extract_multiplicatively(expr) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\expr.py", line 2252, in extract_multiplicatively quotient = self / c File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\decorators.py", line 236, in _func return func(self, other) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\decorators.py", line 106, in binary_op_wrapper return func(self, other) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\expr.py", line 259, in truediv return Mul(self, denom) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\cache.py", line 72, in wrapper retval = cfunc(args, kwargs) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\operations.py", line 98, in new c_part, nc_part, order_symbols = cls.flatten(args) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\mul.py", line 285, in flatten if not a.is_zero and a.is_Rational: File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\assumptions.py", line 503, in getit return _ask(fact, self) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\assumptions.py", line 559, in _ask fact_i_value = handler_i(obj) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\add.py", line 830, in _eval_is_extended_nonnegative if not c.is_zero and a.is_extended_nonnegative: File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\assumptions.py", line 503, in getit return _ask(fact, self) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\assumptions.py", line 559, in _ask fact_i_value = handler_i(obj) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\add.py", line 874, in _eval_is_extended_negative args = [a for a in self.args if not a.is_zero] File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\add.py", line 874, in args = [a for a in self.args if not a.is_zero] File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\assumptions.py", line 503, in getit return _ask(fact, self) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\assumptions.py", line 559, in _ask fact_i_value = handler_i(obj) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\mul.py", line 1347, in _eval_is_zero seen_zero, seen_infinite = self._eval_is_zero_infinite_helper() File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\mul.py", line 1324, in _eval_is_zero_infinite_helper if a.is_zero: File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\assumptions.py", line 503, in getit return _ask(fact, self) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\assumptions.py", line 559, in _ask fact_i_value = handler_i(obj) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\functions\elementary\hyperbolic.py", line 792, in _eval_is_real return (im % (pi/2)).is_zero File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\decorators.py", line 236, in _func return func(self, other) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\decorators.py", line 106, in binary_op_wrapper return func(self, other) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\expr.py", line 273, in mod return Mod(self, other) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\cache.py", line 72, in wrapper retval = cfunc(*args, kwargs) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\function.py", line 466, in new result = super().new(cls, *args, *options) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\cache.py", line 72, in wrapper retval = cfunc(args, kwargs) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\function.py", line 307, in new evaluated = cls.eval(args) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\mod.py", line 180, in eval a = cls(i, q) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\cache.py", line 72, in wrapper retval = cfunc(args, kwargs) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\function.py", line 466, in new result = super().new(cls, *args, *options) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\cache.py", line 72, in wrapper retval = cfunc(args, kwargs) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\function.py", line 307, in new evaluated = cls.eval(args) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\core\mod.py", line 167, in eval G = gcd(p, q) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\polys\polytools.py", line 5486, in gcd result = F.gcd(G) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\polys\polytools.py", line 2916, in gcd result = F.gcd(G) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\polys\polyclasses.py", line 689, in gcd return per(dmp_gcd(F, G, lev, dom)) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\polys\euclidtools.py", line 1625, in dmp_gcd return dmp_inner_gcd(f, g, u, K)[0] File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\polys\euclidtools.py", line 1584, in dmp_inner_gcd h, cff, cfg = _dmp_inner_gcd(f, g, u, K) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\polys\euclidtools.py", line 1532, in _dmp_inner_gcd f = dmp_convert(f, u, K, exact) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\polys\densebasic.py", line 567, in dmp_convert return dmp_strip([ dmp_convert(c, v, K0, K1) for c in f ], u) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\polys\densebasic.py", line 567, in return dmp_strip([ dmp_convert(c, v, K0, K1) for c in f ], u) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\polys\densebasic.py", line 567, in dmp_convert return dmp_strip([ dmp_convert(c, v, K0, K1) for c in f ], u) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\polys\densebasic.py", line 567, in return dmp_strip([ dmp_convert(c, v, K0, K1) for c in f ], u) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\polys\densebasic.py", line 561, in dmp_convert return dup_convert(f, K0, K1) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\polys\densebasic.py", line 538, in dup_convert return dup_strip([ K1.convert(c, K0) for c in f ]) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\polys\densebasic.py", line 538, in return dup_strip([ K1.convert(c, K0) for c in f ]) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\polys\domains\domain.py", line 409, in convert return self.convert_from(element, base) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\polys\domains\domain.py", line 396, in convert_from result = _convert(element, base) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\polys\domains\rationalfield.py", line 136, in from_RealField return MPQ(map(int, K0.to_rational(a))) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\polys\domains\realfield.py", line 108, in to_rational return self._context.to_rational(element, limit) File "E:\Anaconda\envs\xcx_tf_20240410_jupyter\lib\site-packages\sympy\polys\domains\mpelements.py", line 142, in to_rational k = (ctx.max_denom - q0)//q1 ZeroDivisionError: integer division or modulo by zero

进程已结束,退出代码为 1

Nzavcciuoier123 commented 1 week ago

菜菜,大佬来瞧瞧(乖巧)

Nzavcciuoier123 commented 1 week ago

家人们!!!!

Nzavcciuoier123 commented 1 week ago

解决了!!!!

Nzavcciuoier123 commented 1 week ago

把KAN.py里的symbolic_formula函数

替换为:

20240626调试symbolic_formula

def symbolic_formula(self, floating_digit=2, var=None, normalizer=None, simplify=False):
    '''
    obtain the symbolic formula

    Args:
    -----
        floating_digit : int
            the number of digits to display
        var : list of str
            the name of variables (if not provided, by default using ['x_1', 'x_2', ...])
        normalizer : [mean array (floats), varaince array (floats)]
            the normalization applied to inputs
        simplify : bool
            If True, simplify the equation at each step (usually quite slow), so set up False by default.

    Returns:
    --------
        symbolic formula : sympy function

    Example
    -------
    >>> 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 = 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.symbolic_formula()
    '''
    symbolic_acts = []
    x = []
    #original
    # def ex_round(ex1, floating_digit=floating_digit):
    #     ex2 = ex1
    #     for a in sympy.preorder_traversal(ex1):
    #         if isinstance(a, sympy.Float):
    #             ex2 = ex2.subs(a, round(a, floating_digit))
    #     return ex2
    #20240626调试
    def ex_round(ex1, floating_digit=2):
        ex2 = ex1
        for a in sympy.preorder_traversal(ex1):
            if isinstance(a, sympy.Float):
                try:
                    rounded_value = round(a, floating_digit)
                    ex2 = ex2.subs(a, rounded_value)
                except ZeroDivisionError as e:
                    print(
                        f"ZeroDivisionError: rounding value {a} to {floating_digit} digits resulted in error: {e}")
                    continue
                except Exception as e:
                    print(f"Exception during rounding: {e}")
                    continue
        return ex2

    # define variables
    if var == None:
        for ii in range(1, self.width[0] + 1):
            exec(f"x{ii} = sympy.Symbol('x_{ii}')")
            exec(f"x.append(x{ii})")
    else:
        x = [sympy.symbols(var_) for var_ in var]

    x0 = x

    if normalizer != None:
        mean = normalizer[0]
        std = normalizer[1]
        x = [(x[i] - mean[i]) / std[i] for i in range(len(x))]

    symbolic_acts.append(x)

    for l in range(len(self.width) - 1):
        y = []
        for j in range(self.width[l + 1]):
            yj = 0.
            for i in range(self.width[l]):
                a, b, c, d = self.symbolic_fun[l].affine[j, i]
                sympy_fun = self.symbolic_fun[l].funs_sympy[j][i]
                try:
                    yj += c * sympy_fun(a * x[i] + b) + d
                except ZeroDivisionError as e:
                    print(
                        f"ZeroDivisionError: layer={l}, input_neuron={i}, output_neuron={j}, a={a}, b={b}, c={c}, d={d}, sympy_fun={sympy_fun}")
                    return
                except Exception as e:
                    print(f"Exception: {e}")
                    return
            if simplify == True:
                y.append(sympy.simplify(yj + self.biases[l].weight.data[0, j]))
            else:
                y.append(yj + self.biases[l].weight.data[0, j])

        x = y
        symbolic_acts.append(x)

    self.symbolic_acts = [[ex_round(symbolic_acts[l][i]) for i in range(len(symbolic_acts[l]))] for l in
                          range(len(symbolic_acts))]

    out_dim = len(symbolic_acts[-1])
    return [ex_round(symbolic_acts[-1][i]) for i in range(len(symbolic_acts[-1]))], x0

即可!!!!!!

Nzavcciuoier123 commented 1 week ago

可以正常输出输入数据之间的关系式了!!!!

Nzavcciuoier123 commented 1 week ago

看来解决了https://github.com/KindXiaoming/pykan/issues/174的问题