Неверный результат при преобразовании нечетных целых чисел больше 2 ^ 24 в тензор в Pytorch - PullRequest
0 голосов
/ 14 марта 2020

? Ошибка

torch.Tensor(), также называемая torch.FloatTensor(), возвращает неверный результат, когда преобразует нечетные целые числа больше 2 24 . Значение возвращаемого тензора не является исходным целым числом, а его числом +1 или -1.

Это довольно странно. Хотя эту ошибку можно устранить, явно указав torch.IntTensor(), мне интересно, что вызвало ошибку.

Воспроизвести

Шаги для воспроизведения поведения:

  1. Это правильно, когда число <2 <sup>24
>>> 2**24
16777216
>>> t = torch.Tensor([16777215])
>>> t
tensor([16777215.])
>>> t = torch.Tensor([16777216])
>>> t
tensor([16777216.])
Получает неправильное значение для нечетного числа> 2 24 , в то время как четное число является правильным.
>>> t = torch.Tensor([16777217])
>>> t
tensor([16777216.])
>>> t = torch.Tensor([16777218])
>>> t
tensor([16777218.])
>>> t = torch.Tensor([16777219])
>>> t
tensor([16777220.])
>>> t = torch.Tensor([16777220])
>>> t
tensor([16777220.])
IntTensor() против FloatTensor()
>>> t = torch.IntTensor([16777219])
>>> t
tensor([16777219], dtype=torch.int32)
>>> t = torch.FloatTensor([16777219])
>>> t
tensor([16777220.])

Среда

  • Версия PyTorch: 1.4.0
  • ОС (например, * 1048) *): Ubuntu 18.04 64bit
  • Как вы установили PyTorch (conda, pip, источник): pip
  • Python версия: 3.6.9
...