我怎样才能防止 PyTorch 对我分配的值进行少量更改
How can I prevent PyTorch from making little changes to my assigned values
PyTorch 对我分配的值几乎没有改变,这会导致我的神经网络产生完全不同的结果。例如:
a = [234678.5462495405945]
b = torch.tensor(a)
print(b.item())
输出为:
234678.546875
PyTorch 对我的变量 a
所做的小改动在我的神经网络中导致了完全不同的结果。我的神经网络非常敏感。如何防止 PyTorch 对分配的值进行少量更改?
你的问题很宽泛;你还没有向我们展示你的网络。这意味着我们 none 可以解决真正的问题。但是您展示的代码示例的范围更有限:为什么 PyTorch 会更改我的浮点数?
PyTorch 默认使用单精度浮点数(现在称为 binary32)。 Python 默认使用双精度浮点数(现在称为 binary64)。当您从 Python 浮点数转换为 PyTorch FloatTensor 时,您会失去精度。 (这称为 舍入。)
如果你愿意,你可以指定数据类型,但是你的整个网络将不得不转换为binary64。
举个例子:
import torch
a = 234678.5462495405945
b = torch.tensor(a, dtype=torch.float64)
print(b.item())
# 234678.54624954058
如果您的网络如此敏感,您可能会遇到更大的问题。您可能过度拟合,或者过于专注于一个训练示例。当您使用较低精度的数字时,已经完成了大量关于量化网络和显示性能曲线的工作。
PyTorch 对我分配的值几乎没有改变,这会导致我的神经网络产生完全不同的结果。例如:
a = [234678.5462495405945]
b = torch.tensor(a)
print(b.item())
输出为:
234678.546875
PyTorch 对我的变量 a
所做的小改动在我的神经网络中导致了完全不同的结果。我的神经网络非常敏感。如何防止 PyTorch 对分配的值进行少量更改?
你的问题很宽泛;你还没有向我们展示你的网络。这意味着我们 none 可以解决真正的问题。但是您展示的代码示例的范围更有限:为什么 PyTorch 会更改我的浮点数?
PyTorch 默认使用单精度浮点数(现在称为 binary32)。 Python 默认使用双精度浮点数(现在称为 binary64)。当您从 Python 浮点数转换为 PyTorch FloatTensor 时,您会失去精度。 (这称为 舍入。)
如果你愿意,你可以指定数据类型,但是你的整个网络将不得不转换为binary64。
举个例子:
import torch
a = 234678.5462495405945
b = torch.tensor(a, dtype=torch.float64)
print(b.item())
# 234678.54624954058
如果您的网络如此敏感,您可能会遇到更大的问题。您可能过度拟合,或者过于专注于一个训练示例。当您使用较低精度的数字时,已经完成了大量关于量化网络和显示性能曲线的工作。