首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >改变torch.sigmoid的精度?

改变torch.sigmoid的精度?
EN

Stack Overflow用户
提问于 2020-11-14 12:51:39
回答 1查看 330关注 0票数 2

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

我试着用

代码语言:javascript
复制
torch.set_printoptions(precision=20) 

但它并没有起作用。下面是sigmoid函数的输出示例:

代码语言:javascript
复制
before sigmoid : tensor([[21.2955703735]])
after sigmoid : tensor([[1.]])

但是我不想让它打印1,我想让它打印出确切的数字,我怎么能强制这样做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-14 14:09:30

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

代码语言:javascript
复制
torch.set_printoptions(precision=20)
x = torch.tensor([21.2955703735])
result = torch.sigmoid(x.to(dtype=torch.float64))
print(result)

这导致了

代码语言:javascript
复制
tensor([0.99999999943577644324], dtype=torch.float64)

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

代码语言:javascript
复制
x = torch.tensor([21.2955703735])
delta = torch.sigmoid(-x.to(dtype=torch.float64))
print(f'sigmoid({x.item()}) = 1 - {delta.item()}')

结果:

代码语言:javascript
复制
sigmoid(21.295570373535156) = 1 - 5.642236648842976e-10

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64831042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档