如何解释张量大小?
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
到底是什么?
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
我很难理解以下各项之间的区别:
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
到底是什么?
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