如何解释张量大小?

How to interpret Tensor sizes?

我很难理解以下各项之间的区别

x1 = torch.tensor([1, 2, 3]) # single brackets

x2 = torch.tensor([[1, 2, 3]]) # double brackets

检查尺寸时: x1.size()x2.size() 我们得到以下结果:

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

我将其解释为 x1 是 (3x1) 列向量,而 x2 是 (1x3) 行向量。

但是,当尝试转置两个向量时: print(x1.T) print(x2.T),我们得到:

tensor([1, 2, 3])
tensor([[1],
        [2],
        [3]])

x1 似乎不受影响 换位? 此外,当尝试使用“.view()”强制 x1 成为 (1x3) 行向量时: print(x1.view(1, -1)) 我们得到:

tensor([[1, 2, 3]])  # double brackets

那么为什么“.T”没有成功,而“.view(1, -1)”却能够将 x1 转换为 (1x3) 行向量?

当我们第一次分配它时 x1 到底是什么?

根据official documentation -

Expects input to be <= 2-D tensor and transposes dimensions 0 and 1. 0-D and 1-D tensors are returned as is. When input is a 2-D tensor this is equivalent to transpose(input, 0, 1).

x = torch.randn(())
torch.t(x)
#tensor(0.1995)

x = torch.randn(3)
x
#tensor([ 2.4320, -0.4608,  0.7702])

torch.t(x)
#tensor([ 2.4320, -0.4608,  0.7702])

x = torch.randn(2, 3)
x
#tensor([[ 0.4875,  0.9158, -0.5872],
#        [ 0.3938, -0.6929,  0.6932]])

torch.t(x)
#tensor([[ 0.4875,  0.3938],
#        [ 0.9158, -0.6929],
#        [-0.5872,  0.6932]])

这就是x1没有效果的原因。它目前是一维张量而不是二维张量。 (3,)(3,1)的形状是有区别的。第一个只有一个轴而另一个有两个轴(类似于你添加的双括号)

这种说法,Which I interpret as x1 being a (3x1) column vector, while x2 is a (1x3) row vector.在某种程度上是不正确的。

x1 #(3,) 1D tensor
x1.reshape((3,1) #(3,1) #2D tensor

x1.T #(1,3) 2D tensor with successful transpose