python-3.x - python中非常大的浮点数
问题描述
我正在尝试为 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')
我的结论是即使十进制也无法处理这个数字。有谁知道我可以用来表示这些非常大的浮点数的另一种方法。
解决方案
如果值高于 709,则函数“math.exp”超出浮点范围并引发此溢出错误。
如果math.exp
您使用numpy.exp
如此大的指数而不是 ,您将看到它的计算结果为特殊值inf
(无穷大)。
除了这一切,我想知道你为什么要产生这么大的数字(不知道你知道它有多大。只是给你一个想法,宇宙中的原子数估计在 10 范围内到 80 次方。您尝试生成的数字远大于此)。
推荐阅读
- video-streaming - 如何解决使用 SimpleWebRTC 直播视频的问题?
- ios - MacOS Catalina Simulators 屏幕保护程序捕获相同的屏幕
- sql - 选择特定列中重复值最多的行
- tensorflow - 说卷积实现是基于 GEMM(矩阵乘法)还是基于 1x1 内核是什么意思?
- laravel - 在 Laravel 8 项目上安装 hyn/多租户时出错
- ubuntu - Kubernetes:如何设置作业 / pod 的最短生命周期?
- minecraft - Minecraft Education 不会始终如一地运行代码
- c# - c#如何为序列化指定自定义接口
- html - “C++”而不是“C++”会阻碍搜索引擎索引吗?
- scala - 如何避免while循环并在scala中返回