python - 如何解释张量大小?
问题描述
我很难理解以下内容之间的区别:
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
当我们第一次分配它时,它到底是什么?
解决方案
根据官方文档-
期望输入为 <= 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
推荐阅读
- google-cloud-automl - 使用 AutoML 进行不同语言对的机器翻译
- android - 如何在运行时更新 Android BLE Advertiser 服务数据?
- json - ASPjson 中的嵌套数组
- ubuntu - 子进程 /usr/bin/dpkg 为 Wine 返回错误代码 (1)
- java - 选择在 Java 中动态使用的 Enum
- matrix - 矩阵导数(链式法则)
- ms-access - 按文本框过滤的 MS-Access 报表查询
- vba - 使用变量作为参数在 VBA 中调用 PowerShell 脚本
- android - file.delete() 不会以编程方式从 Android 中的 sdcard 中删除文件
- html - 关于 2 张图片的问题,一张用作悬停,另一张图片轻松翻转并退出页面