oneflow
oneflow copied to clipboard
flow.Tensor 包数据存在误差
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)
这个问题看起来非常尴尬
这里是因为 DoubleTensor
的构造函数先走了 flow.Tensor
再 .to(flow.double)
,中间经过了 fp32,导致精度出现了问题,我来修复