当我运行此代码时:
max(MIN_LEARNING_RATE, min(0.5, 1.0 - math.log10((t+1)/25)))
t = 0
我有这个错误:
ValueError: math domain error
但如果我使用python 3.6运行相同的代码,则错误消失
答案 0 :(得分:2)
这是因为在Python 2中,除法返回浮动的一个层次,在它的1/25
的情况下,它返回0。
而math.log(0)
会出现域错误。
因此,在Python 2代码中,在脚本开头添加:
from __future__ import division
默认情况下在Python 2中:
$ python2
Python 2.7.13 (default, Dec 18 2016, 07:03:39)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> math.log(1/25)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: math domain error
>>> 1/25
0
在Python 3中:
$ python3
Python 3.6.1 (default, Apr 4 2017, 09:40:21)
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.38)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> math.log(1/25)
-3.2188758248682006
>>> 1/25
0.04
在Python 2中使用__future__.division
:
$ python2
Python 2.7.13 (default, Dec 18 2016, 07:03:39)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from __future__ import division
>>> import math
>>> math.log(1/25)
-3.2188758248682006
>>> 1/25
0.04
答案 1 :(得分:1)
由于python-2.x中的舍入,(0+1)/25
评估为1/25
,其转向0
。因此,未定义的math.log10(0)
会产生ValueError
。
将from __future__ import division
添加到程序中的第一行,或将代码行更改为max(MIN_LEARNING_RATE, min(0.5, 1.0 - math.log10((t+1)/25.0)))