我希望我的sigmoid从不打印实数1或0,而是实际打印确切的值
我试着用
torch.set_printoptions(precision=20) 但它并没有起作用。下面是sigmoid函数的输出示例:
before sigmoid : tensor([[21.2955703735]])
after sigmoid : tensor([[1.]])但是我不想让它打印1,我想让它打印出确切的数字,我怎么能强制这样做呢?
发布于 2020-11-14 14:09:30
difference between 1 and the exact value of sigmoid(21.2955703735)约为5e-10,明显低于float32的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并且是您想要的结果的更准确的表示(尽管仍然不准确)。
https://stackoverflow.com/questions/64831042
复制相似问题