關於torch中permute和Transpose 的一點理解

目錄

Tensor.permute(d0,d1,d2,d2)

torch.Transpose(Tensor, a,b)


參考 PyTorch 高維矩陣轉置 Transpose 和 Permute ;這裏只講了 permute和Transpose ,

其它相關的函數可參考:

【1】一文掌握torch.squeeze() 和torch.unsqueeze()的用法

【2】pytorch中x = x.view(x.size(0), -1) 的理解

Tensor.permute(d0,d1,d2,d2)

注:但沒有 torch.permute() 這個調用方式, 只能 Tensor.permute()。

        我們可以把這個permute的過程這樣理解;把tensor中的各維度上的值和編號對應,那麼

  對於tensor(0,1,2,3),permute(d0,d1,d2,d2)分別把 0和d0、1和d1、2和d2、3和d3的維度值交換,並且 

 d0,d1,d2,d3就是0,1,2,3的一個排列; 

注:這裏的維度值表示的是在該維度上有多少個數據;eg.對於二維的tensor(3,4)表示3行4列; 0表示行,1表示列。

import torch
image = torch.randn(1,16 ,256, 256)  # torch.randn標準正態分佈

image = image.permute(1,0,2,3)
print(image.shape)#torch.Size([16, 1, 256, 256])

 

 

 

 

 


torch.Transpose(Tensor, a,b)

連續使用transpose也可實現permute的效果。

transpose只能操作2D矩陣的轉置。  0表示行,1表示列。

torch.transpose(Tensor, 1, 0)

#   transpose 一次只能有兩個參數,否則報錯了會!!

e = a.transpose(2,0,1)

print(e)

print(e.size())

#  TypeError: transpose() takes 2 positional arguments but 3 were given 

 

 

 

# torch.rand 產生均勻分佈的隨機數

torch.rand(2,3,4,5).transpose(3,0).transpose(2,1).transpose(3,2).shape
Out: torch.Size([5, 4, 2, 3])

 

 

torch.rand(2,3,4,5).transpose(1,0).transpose(2,1).transpose(3,1).shape

# Out: torch.Size([3, 5, 2, 4])

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章