Pytorch踩坑之transpose与view

在实际应用中,经常会遇到需要对张量维度进行变换的情况,经常用到的就是transpose方法和view方法。但是这两种方法有着本质的区别,使用错误会导致难以察觉的错误。

transpose方法

transpose方法可以理解为维度交换,也就是转置。它有两个参数dim1和dim2,意义很简单,即交换dim1和dim2两个维度。

view方法

view方法则可以理解成对张量重新进行维度定义,它只有一个参数size,但这个size可以是元组或者列表,表示重新进行定义的维度。

两者的区别

具体看一个例子。

import torch

a = torch.tensor([[[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9],
                   [10, 11, 12]]])
print(a.shape)

这里我们定义了一个张量a,它的维度是(1,4,3),然后对比一下两个方法的区别:

b = a.transpose(1, 2)
c = a.view((1, 3, -1))
print("Here is Tensor b:\n")
print(b)
print(b.shape)
print("Here is Tensor c:\n")
print(c)
print(c.shape)

输出结果如下图

Pytorch踩坑之transpose与view_第1张图片
很明显,transpose方法对a的后两维进行了转置交换,而view方法则是以行序对所有元素重新设定维度。

因此在实际应用时一定要注意自己需要实现怎样的维度变换,是交换两个维度还是重新定义维度,一旦误用很难发现。

你可能感兴趣的:(Pytorch,python,机器学习,人工智能,pytorch)