我正在使用Sigmoid函数来进行人工神经网络。我将传递给该函数的值范围从10,000到300,000。我需要高精度的答案,因为这将作为我人工神经网络中节点之间连接的权重。我尝试在numpy中查找,但没有找到合适的方法。是否有一种方法可以计算e^(-x)
?
我正在使用Sigmoid函数来进行人工神经网络。我将传递给该函数的值范围从10,000到300,000。我需要高精度的答案,因为这将作为我人工神经网络中节点之间连接的权重。我尝试在numpy中查找,但没有找到合适的方法。是否有一种方法可以计算e^(-x)
?
@Paul已经回答了你的计算问题。
然而,从神经网络的角度来看,你的问题表明你正在做一些错误的事情。在需要计算这样的数字的情况下,没有合理使用神经网络的方法。你似乎忘记了以下至少一个方面:
所有这些元素都是处理神经网络的基本和关键部分。我建议阅读Haykin的Neural Networks and Learning Machines。
常规的Python数学和numpy模块在exp(300000)上会溢出。
您需要使用任意精度浮点库。
先决条件:pip install mpmath
from mpmath import *
mp.dps=300
print exp(300000)
2.21090954962043147554031964344003334958746533182776533253160702399084245726328190320934903726540800347936047182773804396858994958295396516475277561815722954583856797032504775443385287094864178178111231967140927970972263439977028621274619241097429676587262948251263990280758512853239132411057394977398e+130288
see also http://code.google.com/p/mpmath/
exp(-300000)+1
,它只输出了1
。 - Earl Bunaomp.dps
设置精度。看起来它可以做到...但你可能想要测试一下...并且那些150k位数字对象将需要内存。 - Paulmp.dps
设为 130000
,然后执行 print exp(-300000)+1
。但输出仍然是 1
。 - Earl Bunaomp.dps=300
更改为 mp.dps=150000
,您将获得更多数字,以便 1+exp(-300000) 输出 1、一堆零,然后是 exp(-300000) 的数字。 - Paulmp.dps=130000
,我也会得到1,但这还不够。 - Pauldecimal
模块是Python标准库中的一个模块,可以计算所需精度下的exp(-300000)
:
>>> import decimal
>>> decimal.getcontext().prec = 300
>>> decimal.Decimal(-300000).exp()
Decimal('4.52302537736869338168154543856941208987901785730658877589102779454404342316583413710153707357620016787644963947448152347606024065141665176979995260298156742722510150887341893137830615617098803353373668680329179329422367091094657806579661636984526349130940466600671093389647604708034230900336526970689E-130289')
我同意@lejlot的答案:如果你需要它,那么你的神经网络存在问题。
x
很大时,e**-x
等于0,1 + e**-x
等于1
,你需要找到程序中e**-x != 0
会产生差异的表达式)。 - jfs
GMPY
库或long
数字类型。 - sshashank124