Python 中非常大的浮点数

问题描述 投票:0回答:2

我正在尝试为 Mnist 数据库构建一个神经网络。计算 softmax 函数时,我收到一个错误,其目的与“您无法存储该大小的浮点数”

代码如下:

def softmax(vector): # REQUIRES a unidimensional numpy array 
    adjustedVals = [0] * len(vector)
    totalExp = np.exp(vector)
    print("totalExp equals")
    print(totalExp)
    totalSum = totalExp.sum()
    for i in range(len(vector)):
        adjustedVals[i] = (np.exp(vector[i])) / totalSum
    return adjustedVals # this throws back an error sometimes?!?!

经过检查,最推荐使用十进制模块。然而,当我弄乱了这个模块的命令行中使用的值时,那就是:

from decimal import Decimal
import math
test = Decimal(math.exp(720))

对于 math.exp(>709) 的任何值,我都会收到类似的错误。

OverflowError: (34, 'Numerical result out of range')

我的结论是,即使是十进制也无法处理这个数字。有谁知道我可以用另一种方法来表示这些非常大的浮点数。

python-3.x machine-learning neural-network floating-point decimal
2个回答
0
投票

有一种技术可以使 softmax 函数对于

vector
中的某种值分布在计算上更加可行。也就是说,您可以从
vector
(我们称之为
x_max
)的每个元素中减去最大值。如果您还记得 softmax 公式,这种操作不会影响结果,因为它简化为结果乘以
e^(x_max) / e^(x_max) = 1
。这样,您获得的最高中间值是
e^(x_max - x_max) = 1
,这样就可以避免溢出。

为了获得更多解释,我推荐以下文章:https://nolanbconaway.github.io/blog/2017/softmax-numpy


0
投票

当值高于 709 时,函数“math.exp”超出了浮点范围并抛出此溢出错误。

如果您使用

math.exp
而不是
numpy.exp
来表示如此大的指数,您将看到它的计算结果为特殊值
inf
(无穷大)。

除此之外,我想知道为什么你会想要产生这么大的数字(不确定你是否知道它有多大。只是为了给你一个想法,宇宙中原子的数量估计在10 的 80 次方。您尝试生成的数字比该数字大得多)。

© www.soinside.com 2019 - 2024. All rights reserved.