【问题标题】:How to interpret Tensor sizes?如何解释张量大小?
【发布时间】:2021-03-24 04:06:59
【问题描述】:

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

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 时,它到底是什么?

【问题讨论】:

    标签: python python-3.x pytorch tensor torch


    【解决方案1】:

    根据official documentation -

    期望输入为

    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
    

    【讨论】:

    • 太棒了!虽然我的陈述的第二部分不是真的吗? “而 x2 是 (1x3) 行向量”。 “.view()”和“.reshape()”还有什么区别吗?
    • 是的,第二部分是正确的。 view 和 reshape 的区别在于 reshape 总是复制内存,而 view 从不复制内存。两者各有利弊。
    猜你喜欢
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多