目錄
參考 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])