pytorch中的张量割炬Torch.Size([])和Torch.Size([1])的形状差异

时间:2019-07-02 16:49:48

标签: pytorch tensor

我是pytorch的新手。在玩张量时,我观察到两种类型的张量-

tensor(58)
tensor([57.3895])

我打印了它们的形状,输出分别是-

torch.Size([])
torch.Size([1])

两者之间有什么区别?

3 个答案:

答案 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.shapet.size()时,您都会获得该尺寸信息。

张量的概念是它们可以为其中的数据(包括torch.Size([]))具有不同的兼容大小尺寸。

每当您松开张量时,它将添加另一个尺寸1。 每次压缩张量时,它都会删除1的维数,或者通常会删除所有1的维数。