Тензор (1.0) .item () против float (Tensor (1.0)) - PullRequest
2 голосов
/ 10 июля 2020

Если x - torch.Tensor dtype torch.float, то операции x.item() и float(x) точно такие же?

1 Ответ

1 голос
/ 11 июля 2020

Операции x.item() и float(x) не совпадают.

Из документации item () его можно использовать для получения значения тензора как Python число (только из тензоров, содержащих одно значение). По сути, он возвращает значение тензора как есть. Он не вносит никаких изменений в тензор.

Где float() - для преобразования входных данных в число с плавающей запятой, когда это возможно. Найдите документацию здесь .

Чтобы увидеть разницу, рассмотрим другой тензор y dtype int64:

import torch

y = torch.tensor(2)
print(y, y.dtype)
>>> tensor(2) torch.int64

print('y.item(): {}, float(y): {}'.format(y.item(), float(y)))
>>> y.item(): 2, float(y): 2.0

print(type(y.item()), type(float(y)))
>>> <class 'int'> <class 'float'>

Обратите внимание, что float(y) не преобразует тип в -место. Вам нужно будет назначить его, если вам понадобится это изменение. Например:

z = float(y)
print('y.dtype: {}, type(z): {}'.format(y.dtype, type(z)))
>>> y.dtype: torch.int64, type(z): <class 'float'>

Мы видим, что z не является torch.Tensor. Это просто число с плавающей запятой.

Операцию float() не следует путать с self.float(). Эта операция выполняет преобразование тензорного dtype (не на месте, требуется присваивание).

print('y.float(): {},\n y.float().dtype: {},\n y: {},\n y.dtype'.format(y.float(), y.float().dtype, y, y.dtype))

y.float(): 2.0,
y.float().dtype: torch.float32,
y: 2,
y.dtype: torch.int64
...