? Ошибка
torch.Tensor()
, также называемая torch.FloatTensor()
, возвращает неверный результат, когда преобразует нечетные целые числа больше 2 24 . Значение возвращаемого тензора не является исходным целым числом, а его числом +1 или -1.
Это довольно странно. Хотя эту ошибку можно устранить, явно указав torch.IntTensor()
, мне интересно, что вызвало ошибку.
Воспроизвести
Шаги для воспроизведения поведения:
- Это правильно, когда число <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