Deep learning 张量(1.0).item()vs float(张量(1.0))

Deep learning 张量(1.0).item()vs float(张量(1.0)),deep-learning,pytorch,Deep Learning,Pytorch,如果x是一个torch.dtype torch.float的torch.Tensor,那么操作x.item()和float(x)是完全相同的吗?操作x.item()和float(x)是不同的 从item()的中,可以使用它获取作为Python编号的张量值(仅从包含单个值的张量中获取)。它基本上返回张量的值。它不会对张量做任何修改 其中asfloat()用于在可能的情况下将其输入转换为浮点数。查找文档 看到差异,考虑另一个张量Y型dIn 64: import torch y = torch.te

如果
x
是一个torch.dtype torch.float的torch.Tensor,那么操作
x.item()
float(x)
是完全相同的吗?

操作
x.item()
float(x)
是不同的

从item()的中,可以使用它获取作为Python编号的张量值(仅从包含单个值的张量中获取)。它基本上返回张量的值。它不会对张量做任何修改

其中as
float()
用于在可能的情况下将其输入转换为浮点数。查找文档

看到差异,考虑另一个张量Y型dIn 64:

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'>
我们可以看到
z
不是
torch.Tensor
。它只是一个浮点数

不要将
float()
操作与
self.float()
混淆。这将执行张量数据类型转换(未到位,需要赋值)

z = float(y)
print('y.dtype: {}, type(z): {}'.format(y.dtype, type(z)))
>>> y.dtype: torch.int64, type(z): <class 'float'>
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