相关疑难解决方法(0)

在64位架构上不能使用Python中的128位浮点数

我通过我的python终端(在Enthought Canopy IDE中)检查了指针的大小

import ctypes
print (ctypes.sizeof(ctypes.c_voidp) * 8)
Run Code Online (Sandbox Code Playgroud)

我有一个64位的架构,并且工作numpy.float64得很好.但我不能用np.float128

np.array([1,1,1],dtype=np.float128)
Run Code Online (Sandbox Code Playgroud)

要么

np.float128(1)
Run Code Online (Sandbox Code Playgroud)

结果是:

AttributeError: 'module' object has no attribute 'float128'
Run Code Online (Sandbox Code Playgroud)

我正在运行以下版本:

sys.version_info(major=2, minor=7, micro=6, releaselevel='final', serial=0)
Run Code Online (Sandbox Code Playgroud)

python numpy 128-bit

10
推荐指数
1
解决办法
6627
查看次数

pytorch 的机器精度是多少,什么时候应该使用双打?

我正在对合成数据进行实验(例如拟合正弦曲线),我在 pytorch 中遇到了非常小的错误。一如约2.00e-7。我正在阅读有关机器精度的信息,它似乎非常接近机器精度。我怎么知道这是否会导致问题(或者它是否已经存在,例如我无法区分不同的错误,因为它们是“机器零”)。

错误:

p = np.array([2.3078539778125768e-07,
               1.9997889411762922e-07,
               2.729681222011256e-07,
               3.2532371115080884e-07])

m = np.array([3.309504692539563e-07,
                 4.1058904888091606e-06,
                 6.8326703386053605e-06,
                 7.4616147721799645e-06])
Run Code Online (Sandbox Code Playgroud)

让我感到困惑的是,我尝试将我认为的数字添加到较小的数字中,以便它没有返回任何差异,但它确实返回了一个差异(即我尝试a+eps = a使用eps = smaller than machine precision):

import torch

x1 = torch.tensor(1e-6)
x2 = torch.tensor(1e-7)
x3 = torch.tensor(1e-8)
x4 = torch.tensor(1e-9)

eps = torch.tensor(1e-11)

print(x1.dtype)
print(x1)
print(x1+eps)

print(x2)
print(x2+eps)

print(x3)
print(x3+eps)

print(x4)
print(x4+eps)
Run Code Online (Sandbox Code Playgroud)

输出:

torch.float32
tensor(1.0000e-06)
tensor(1.0000e-06)
tensor(1.0000e-07)
tensor(1.0001e-07)
tensor(1.0000e-08)
tensor(1.0010e-08)
tensor(1.0000e-09)
tensor(1.0100e-09)
Run Code Online (Sandbox Code Playgroud)

我希望一切都为零,但事实并非如此。有人可以向我解释发生了什么吗?如果我的损失接近,1e-7我应该使用double而不是float? 谷歌搜索似乎 single 是 float afaik 的精度。

如果我想使用双打,什么是缺点/优点 …

floating-point precision pytorch

5
推荐指数
1
解决办法
1060
查看次数

标签 统计

128-bit ×1

floating-point ×1

numpy ×1

precision ×1

python ×1

pytorch ×1