oneflow icon indicating copy to clipboard operation
oneflow copied to clipboard

flow.Tensor 包数据存在误差

Open hhhfccz opened this issue 2 years ago • 2 comments

Summary

flow.Tensor 包数据存在误差

Code to reproduce bug

import oneflow as flow


flow.manual_seed(987342)
for i in range(5):
    n, in_c, out_c = flow.randint(1, 500, (3,)).tolist()
    ops = n * in_c * out_c
    print(ops)
    print(flow.DoubleTensor([ops]))

output:

20348460
tensor([20348460.], dtype=oneflow.float64)
70389882
tensor([70389880.], dtype=oneflow.float64)
4158917
tensor([4158917.], dtype=oneflow.float64)
283185
tensor([283185.], dtype=oneflow.float64)
7921568
tensor([7921568.], dtype=oneflow.float64)

70389882 != 70389880

还有很多数都存在这个情况

Python 3.7.10 (default, Feb 26 2021, 18:47:35) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import oneflow as flow
>>> flow.Tensor([33724053])
tensor([33724052.], dtype=oneflow.float32)

hhhfccz avatar Oct 18 '22 10:10 hhhfccz

这个问题看起来非常尴尬

lixinqi avatar Oct 18 '22 12:10 lixinqi

这里是因为 DoubleTensor 的构造函数先走了 flow.Tensor.to(flow.double) ,中间经过了 fp32,导致精度出现了问题,我来修复

marigoold avatar Oct 18 '22 12:10 marigoold