首页人工智能Pytorch【深度学习(PyTorch...

【深度学习(PyTorch篇)】10.Tensor的转置操作


本系列文章配套代码获取有以下两种途径:

  • 通过百度网盘获取:
链接:https://pan.baidu.com/s/1XuxKa9_G00NznvSK0cr5qw?pwd=mnsj 提取码:mnsj
  • 前往GitHub获取
https://github.com/returu/PyTorch





Pytorcht/T()transpose()permute()函数都是用于Tensor的转置操作,但它们在使用和功能上有一些区别。
01

t/T():


对于2维Tensort或T()可以用于获取其转置。
该函数会返回一个新的2维Tensor,其行和列将被交换,通过该函数可以实现图像旋转90°的操作。
>>> a = torch.randn(3,4)
>>> a
tensor([[ 0.9782, -0.8856, -1.4474, -0.6651],
        [-0.9384,  0.3654,  0.0169, -0.8105],
        [ 0.9884,  0.3084, -0.3560,  1.5181]]
)

>>> a.t()
tensor([[ 0.9782, -0.9384,  0.9884],
        [-0.8856,  0.3654,  0.3084],
        [-1.4474,  0.0169, -0.3560],
        [-0.6651, -0.8105,  1.5181]]
)

>>> a.t().shape
torch.Size([43])
注意:t/T()只适用于2维Tensor。对于更高维度的Tensor,需要使用下面介绍的transpose()permute()
02

transpose():


transpose(dim0,dim1)函数用于交换Tensor的两个指定维度。其中,dim0 (int)、dim1 (int)分别表示需要交换的两个指定维度。
该函数会返回一个新的Tensor,其中dim0dim1指定的两个维度被交换。
>>> a = torch.randn(4,3,14,28)

# 交换第1和第3个维度
>>> a.transpose(1,3).shape
torch.Size([428143])
需要注意的是,transpose()可以用于多维张量,但每次只能交换两个维度
03

permute():


permute(dims)函数用于重新排列Tensor的维度。其中,dims (tuple of ints)参数表示新的维度顺序,形式为元组或列表,
该函数会返回一个新的Tensor,其维度按照dims参数的顺序重新排列。
相比transpose()函数,permute() 可以一次性地重新排列多个维度,提供了更大的灵活性。
例如,PyTorch要求输入的图像数据维度为[batch,channel,h,w],而使用PIL库读取的图形数据维度为[batch,h,w,channel],那么就需要重新排列维度。那么如果使用transpose()方法,至少要交换两次,而使用permute()可以很方便的操作。
>>> a = torch.randn(4,3,14,28)

# [batch,channel,h,w] → [batch,h,w,channel]
>>> a.permute(0,2,3,1).shape
torch.Size([414283])
最后,需要注意的是,虽然大多数情况下,转置操作的输出和输入的Tensor是共享存储区的,但是转置操作会使得Tensor在内存空间中变的不连续,一些操作就无法完成,此时就需要通过tensor.contiguous()函数将Tensor变成连续的。但是有些操作支持对不连续的Tensor运算(例如tensor.sum()/max()),此时就不需将Tensor变成连续的,从而节省内存。

更多内容可以前往官网查看

https://pytorch.org/


本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments