【问题标题】:Change the precision of torch.sigmoid?改变torch.sigmoid的精度?
【发布时间】:2021-02-26 01:25:22
【问题描述】:

我希望我的 sigmoid 从不打印实心 1 或 0,而是实际打印确切的值

我试过了

torch.set_printoptions(precision=20) 

但它没有工作。这是 sigmoid 函数的示例输出:

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

但我不希望它打印 1,我希望它打印确切的数字,我该如何强制呢?

【问题讨论】:

    标签: pytorch torch sigmoid


    【解决方案1】:

    difference between 1 and the exact value of sigmoid(21.2955703735) 的数量级为 5e-10,明显小于 machine epsilonfloat32(约为 1.19e-7)。因此 1.0 是可以使用默认精度实现的最佳近似值。您可以将您的张量转换为 float64(AKA 双精度)张量以获得更精确的估计。

    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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多