问题描述
tensor.permute()
和 tensor.view()
有什么区别?
他们似乎在做同样的事情.
They seem to do the same thing.
推荐答案
输入
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()
reshapes the tensor to a different but compatible shape. For example, our input tensor aten
has the shape (2, 3)
. This can be viewed as tensors of shapes (6, 1)
, (1, 6)
etc.,
# 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)
的行向量,如:
Alternatively, it can also be reshaped or viewed as a row vector of shape (1, 6)
as in:
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()
仅用于交换轴.下面的例子会让事情变得更清楚:
Whereas tensor.permute()
is only used to swap the axes. The below example will make things clear:
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])
你也可以使用负索引来做同样的事情:
You can also use negative indexing to do the same thing as in:
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])
这篇关于PyTorch 中 tensor.permute 和 tensor.view 的区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!