更改 torch.sigmoid 的精度?

Change the precision of torch.sigmoid?

我希望我的 sigmoid 永远不会打印实心的 1 或 0,而是实际打印准确的值

我试过使用

torch.set_printoptions(precision=20) 

但是没用。这是 sigmoid 函数的示例输出:

before sigmoid : tensor([[21.2955703735]])
after sigmoid : tensor([[1.]])

但我不希望它打印 1,我希望它打印准确的数字,我该如何强制执行此操作?

float32difference between 1 and the exact value of sigmoid(21.2955703735) is on the order of 5e-10, which is significantly less than machine epsilon (大约是 1.19e-7)。因此 1.0 是可以使用默认精度实现的最佳近似值。您可以将张量转换为 float64(又名双精度)张量以获得更精确的估计。

torch.set_printoptions(precision=20)
x = torch.tensor([21.2955703735])
result = torch.sigmoid(x.to(dtype=torch.float64))
print(result)

这导致

tensor([0.99999999943577644324], dtype=torch.float64)

请记住,即使使用 64 位浮点计算,这也只能精确到最后 9 位后的大约 6 位(对于较大的 sigmoid 输入,精度会更低)。表示非常接近 1 的数字的更好方法是直接计算 1 与值之间的差值。在这种情况下 1 - sigmoid(x) 相当于 1 / (1 + exp(x))sigmoid(-x)。例如,

x = torch.tensor([21.2955703735])
delta = torch.sigmoid(-x.to(dtype=torch.float64))
print(f'sigmoid({x.item()}) = 1 - {delta.item()}')

结果

sigmoid(21.295570373535156) = 1 - 5.642236648842976e-10

并且更准确地表示您想要的结果(尽管仍然不准确)。