Python 如何防止PyTorch对指定的值进行微小更改

Python 如何防止PyTorch对指定的值进行微小更改,python,floating-point,pytorch,precision,rounding-error,Python,Floating Point,Pytorch,Precision,Rounding Error,PyTorch对我指定的值几乎没有改变,这会在我的神经网络中产生真正不同的结果。例如: a = [234678.5462495405945] b = torch.tensor(a) print(b.item()) 输出为: 234678.546875 PyTorch对我的变量a所做的微小更改在我的神经网络中导致了完全不同的结果。我的神经网络非常敏感。如何防止Pytork对指定的值进行微小更改?您的问题相当广泛;你还没有向我们展示你的网络。这意味着我们都无法解决真正的问题。但是您展示的代码示例

PyTorch对我指定的值几乎没有改变,这会在我的神经网络中产生真正不同的结果。例如:

a = [234678.5462495405945]
b = torch.tensor(a)
print(b.item())
输出为:

234678.546875

PyTorch对我的变量
a
所做的微小更改在我的神经网络中导致了完全不同的结果。我的神经网络非常敏感。如何防止Pytork对指定的值进行微小更改?

您的问题相当广泛;你还没有向我们展示你的网络。这意味着我们都无法解决真正的问题。但是您展示的代码示例的范围更为有限:为什么PyTorch要更改我的浮动


PyTorch默认使用单精度浮点(现在称为binary32)。Python默认使用双精度浮点(现在称为binary64)。当您从Python浮点转换为PyTorch浮点张量时,您将失去精度。(这称为舍入。)

如果需要,可以指定数据类型,但整个网络必须转换为binary64

举个例子:

import torch
a = 234678.5462495405945
b = torch.tensor(a, dtype=torch.float64)
print(b.item())
# 234678.54624954058


如果你的网络那么敏感,你可能会遇到更大的问题。你很可能是过度搭配,或者你太专注于一个训练例子。在量化网络和使用低精度数字时显示性能曲线方面做了大量工作。

您的问题相当广泛;你还没有向我们展示你的网络。这意味着我们都无法解决真正的问题。但是您展示的代码示例的范围更为有限:为什么PyTorch要更改我的浮动


PyTorch默认使用单精度浮点(现在称为binary32)。Python默认使用双精度浮点(现在称为binary64)。当您从Python浮点转换为PyTorch浮点张量时,您将失去精度。(这称为舍入。)

如果需要,可以指定数据类型,但整个网络必须转换为binary64

举个例子:

import torch
a = 234678.5462495405945
b = torch.tensor(a, dtype=torch.float64)
print(b.item())
# 234678.54624954058


如果你的网络那么敏感,你可能会遇到更大的问题。你很可能是过度搭配,或者你太专注于一个训练例子。在量化网络和使用低精度数字时显示性能曲线方面已经做了大量工作。

PyTorch默认使用单精度浮点(现在称为binary32)。Python默认使用双精度浮点(现在称为binary64)。如果需要,可以指定数据类型,但整个网络必须转换为binary64。不过我想这不是你真正的问题。为什么你的人际网络会如此敏感而不被认为是过度配置的呢?你的价值观在Pytorch接触到它之前就已经改变了。尝试在指定的行之后立即打印出
a
,您会发现它与您指定的值不完全相同。浮点并不表示精确的值。PyTorch默认使用单精度浮点(现在称为binary32)。Python默认使用双精度浮点(现在称为binary64)。如果需要,可以指定数据类型,但整个网络必须转换为binary64。不过我想这不是你真正的问题。为什么你的人际网络会如此敏感而不被认为是过度配置的呢?你的价值观在Pytorch接触到它之前就已经改变了。尝试在指定的行之后立即打印出
a
,您会发现它与您指定的值不完全相同。浮点数并不表示精确的值。如何指定数据,我只是不希望pytorch更改值。编辑文章以给出一个示例。如果每次使用浮点数64初始化张量,它不会更改值,,(注意->),但会增加模型大小。如何指定数据,我只是不想pytorch更改值。编辑文章以给出一个示例。如果每次使用float64初始化张量,它不会更改值,,(注意->),但会增加模型大小