torch.Tensor下常用的函数

(1)torch.Tensor.permute (重新排列维度-不能改变维度)

(2)torch.Tensor.view(按照原维度-改变维度)


(1)torch.Tensor.permute 

官网:https://pytorch.org/docs/stable/tensors.html#torch.Tensor.permute

torch.Tensor.permute 重新排列tensor中的维度。tensor.(1,2,0) 其中1,2,0是tensor结构对应的维度。

>>> x = torch.randn(2, 3, 5)
>>> x.size()
torch.Size([2, 3, 5])
>>> x.permute(2, 0, 1).size() ####维度转换(0,1,2)->(2,0,1)
torch.Size([5, 2, 3])

(2)torch.Tensor.view

官网:https://pytorch.org/docs/stable/tensors.html#torch.Tensor.view

torch.Tensor.view 按照原来tensor结构和现在想要的结构,重新组织tensor中的数字,形成新的大小。

import torch
a = torch.rand(3,4,6)
print(a.view(3,-1,8).size())

output:
torch.Size([3, 3, 8])

本质:就是将3*4*6个数字,按照view()中指定的大小,从新排列,排列的过程就是tensor中的从左到右,从上到下。如果指定中出现“-1”,那么就是将其他维度排好后再排列这个维度。

import torch
a = torch.rand(2,3,4,6)
print(a.transpose(1,2).size())
print(a.view(2,4,3,6).size())
print(torch.equal(a.transpose(1,2),a.view(2,4,3,6)))

output:
torch.Size([2, 4, 3, 6])
torch.Size([2, 4, 3, 6])
False

官方还给出了上面例子,来说明view()函数,可以看出虽然维度相同,但是判断的时候两者并不相同。这是因为在transpose()的时候将dim=1和2的数据进行了转置(调换)(没有破坏原维度上的数据),但是view()中是以a中的数据为基础,将2*3*4*6个数据从新按照2,4,3,6的结构重新排列,里面的数据并不是维度上的转置(破坏了原来的维度,从新排)。

发布了56 篇原创文章 · 获赞 29 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/foneone/article/details/103882755