我是pytorch的新手。在玩张量时,我观察到两种类型的张量-
tensor(58)
tensor([57.3895])
我打印了它们的形状,输出分别是-
torch.Size([])
torch.Size([1])
两者之间有什么区别?
答案 0 :(得分:2)
第一个不正确,因此无法推断其大小。
您应该使用list
对其进行初始化,see here以获取更多信息。
答案 1 :(得分:2)
在tensor
中查看pytorch
的文档:
Docstring:
tensor(data, dtype=None, device=None, requires_grad=False, pin_memory=False) -> Tensor
Constructs a tensor with :attr:`data`.
然后描述数据是什么
Args:
data (array_like): Initial data for the tensor. Can be a list, tuple,
NumPy ``ndarray``, scalar, and other types.
如您所见,data
可以是标量(这是维数为零的数据)。
因此,在回答您的问题时,tensor(58)
是维数为0
的张量,而tensor([58])
是维数为1
的张量。
答案 2 :(得分:0)
您可以像这样使用具有单个标量值的张量:
import torch
t = torch.tensor(1)
print(t, t.shape) # tensor(1) torch.Size([])
t = torch.tensor([1])
print(t, t.shape) # tensor([1]) torch.Size([1])
t = torch.tensor([[1]])
print(t, t.shape) # tensor([[1]]) torch.Size([1, 1])
t = torch.tensor([[[1]]])
print(t, t.shape) # tensor([[[1]]]) torch.Size([1, 1, 1])
t = torch.unsqueeze(t, 0)
print(t, t.shape) # tensor([[[[1]]]]) torch.Size([1, 1, 1, 1])
t = torch.unsqueeze(t, 0)
print(t, t.shape) # tensor([[[[[1]]]]]) torch.Size([1, 1, 1, 1, 1])
t = torch.unsqueeze(t, 0)
print(t, t.shape) # tensor([[[[[[1]]]]]]) torch.Size([1, 1, 1, 1, 1, 1])
#squize dimension with id 0
t = torch.squeeze(t,dim=0)
print(t, t.shape) # tensor([[[[[1]]]]]) torch.Size([1, 1, 1, 1, 1])
#back to beginning.
t = torch.squeeze(t)
print(t, t.shape) # tensor(1) torch.Size([])
print(type(t)) # <class 'torch.Tensor'>
print(type(t.data)) # <class 'torch.Tensor'>
张量,确实具有尺寸或形状。都一样实际上是torch.Size
类。
您可以编写help(torch.Size)
以获得更多信息。
每当您编写t.shape
或t.size()
时,您都会获得该尺寸信息。
张量的概念是它们可以为其中的数据(包括torch.Size([])
)具有不同的兼容大小尺寸。
每当您松开张量时,它将添加另一个尺寸1。 每次压缩张量时,它都会删除1的维数,或者通常会删除所有1的维数。