2024-04-24 10:35:54 发布
网友
tensor.permute()和tensor.view()有什么区别?
tensor.permute()
tensor.view()
他们似乎做了同样的事。
视图更改张量的表示方式。例如:一个有4个元素的张量可以表示为4X1或2X2或1X4,但是permute改变了轴。在排列数据时,数据会被移动,但视图中的数据不会被移动,而只是重新解释。
下面的代码示例可以帮助您。a是2x2张量/矩阵。使用视图,可以将a读取为列或行向量(张量)。但你不能转置它。要换位,你需要换位。通过交换/排列轴来实现转置。
a
In [7]: import torch In [8]: a = torch.tensor([[1,2],[3,4]]) In [9]: a Out[9]: tensor([[ 1, 2], [ 3, 4]]) In [11]: a.permute(1,0) Out[11]: tensor([[ 1, 3], [ 2, 4]]) In [12]: a.view(4,1) Out[12]: tensor([[ 1], [ 2], [ 3], [ 4]]) In [13]:
奖金:见https://twitter.com/karpathy/status/1013322763790999552
In [12]: aten = torch.tensor([[1, 2, 3], [4, 5, 6]]) In [13]: aten Out[13]: tensor([[ 1, 2, 3], [ 4, 5, 6]]) In [14]: aten.shape Out[14]: torch.Size([2, 3])
torch.view()将张量重塑为不同但兼容的形状。例如,我们的输入张量aten具有形状(2, 3)。这可以看作是形状张量(6, 1),(1, 6)等
torch.view()
aten
(2, 3)
(6, 1)
(1, 6)
# reshaping (or viewing) 2x3 matrix as a column vector of shape 6x1 In [15]: aten.view(6, -1) Out[15]: tensor([[ 1], [ 2], [ 3], [ 4], [ 5], [ 6]]) In [16]: aten.view(6, -1).shape Out[16]: torch.Size([6, 1])
或者,也可以将其重塑或视图作为形状的行向量(1, 6),如下所示:
In [19]: aten.view(-1, 6) Out[19]: tensor([[ 1, 2, 3, 4, 5, 6]]) In [20]: aten.view(-1, 6).shape Out[20]: torch.Size([1, 6])
而tensor.permute()仅用于交换轴。下面的例子将说明问题:
In [39]: aten Out[39]: tensor([[ 1, 2, 3], [ 4, 5, 6]]) In [40]: aten.shape Out[40]: torch.Size([2, 3]) # swapping the axes/dimensions 0 and 1 In [41]: aten.permute(1, 0) Out[41]: tensor([[ 1, 4], [ 2, 5], [ 3, 6]]) # since we permute the axes/dims, the shape changed from (2, 3) => (3, 2) In [42]: aten.permute(1, 0).shape Out[42]: torch.Size([3, 2])
也可以使用负索引执行与中相同的操作:
In [45]: aten.permute(-1, 0) Out[45]: tensor([[ 1, 4], [ 2, 5], [ 3, 6]]) In [46]: aten.permute(-1, 0).shape Out[46]: torch.Size([3, 2])
视图更改张量的表示方式。例如:一个有4个元素的张量可以表示为4X1或2X2或1X4,但是permute改变了轴。在排列数据时,数据会被移动,但视图中的数据不会被移动,而只是重新解释。
下面的代码示例可以帮助您。
a
是2x2张量/矩阵。使用视图,可以将a
读取为列或行向量(张量)。但你不能转置它。要换位,你需要换位。通过交换/排列轴来实现转置。奖金:见https://twitter.com/karpathy/status/1013322763790999552
输入
torch.view()
将张量重塑为不同但兼容的形状。例如,我们的输入张量aten
具有形状(2, 3)
。这可以看作是形状张量(6, 1)
,(1, 6)
等或者,也可以将其重塑或视图作为形状的行向量
(1, 6)
,如下所示:而
tensor.permute()
仅用于交换轴。下面的例子将说明问题:也可以使用负索引执行与中相同的操作:
相关问题 更多 >
编程相关推荐