首页 > 解决方案 > 如何解释张量大小?

问题描述

我很难理解以下内容之间的区别

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似乎不受转置的影响?此外,当尝试x1使用“.view()”强制成为 (1x3) 行向量时: print(x1.view(1, -1))我们得到:

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

那么为什么“.T”没有做到这一点,但“.view(1, -1)”却能够转换x1为(1x3)行向量?

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

标签: pythonpython-3.xpytorchtensortorch

解决方案


根据官方文档-

期望输入为 <= 2-D 张量并转置维度 0 和 1。0-D 和 1-D 张量按原样返回。当输入是二维张量时,这等效于 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)。第一个只有一个轴,而另一个有 2 个轴(类似于您添加的双括号)

这种说法,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

推荐阅读