【问题标题】:Pytorch copying inexact value of numpy floating point numberPytorch复制numpy浮点数的不精确值
【发布时间】:2019-10-10 19:17:13
【问题描述】:

我正在将浮点数(或 numpy 数组)转换为 Pytorch 张量,它似乎将不精确的值复制到张量。错误出现在第 8 位有效数字及之后。这对我的工作很重要(没有双关语),因为我处理的是对初始条件的微小变化非常敏感的混沌动力学。

我已经在使用 torch.set_printoptions(precision=16) 打印 16 个有效数字。

np_x = state
print(np_x)
x = torch.tensor(np_x,requires_grad=True,dtype=torch.float32)
print(x.data[0])

输出是:

0.7575408585008059
tensor(0.7575408816337585)

了解问题所在或如何解决会很有帮助?

【问题讨论】:

    标签: numpy pytorch


    【解决方案1】:

    因为您使用的是float32 dtype。如果将这两个数字转换为二进制,您会发现它们实际上是相同的。严格来说,这两个数字在 float32 格式中的最准确表示是相同的。

    0.7575408585008059
    Most accurate representation = 7.57540881633758544921875E-1
    
    0.7575408816337585
    Most accurate representation = 7.57540881633758544921875E-1
    
    Binary: 00111111 01000001 11101110 00110011
    

    【讨论】:

    • 谢谢!只是想知道您是如何获得“最准确的表示”的?另外,如果它们基本上是相同的数字,为什么它们打印的不同?
    • @AnshulChoudhary 有很多在线转换工具,您可以看看。对于第二个问题,由于二进制编码不能代表所有可能的数字,所以其中一些只能在一些舍入误差下进行近似。
    猜你喜欢
    • 1970-01-01
    • 2021-11-11
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 2021-02-01
    相关资源
    最近更新 更多