-
view / reshape #改變維度爲指定維度
- a=torch.rand(2,3,28,28)
- a.view(2,-1) .shape
- a.reshape(2,-1).shape
輸出結果爲:
torch.Size([2, 2352])
torch.Size([2, 2352])
2.squeeze / unsqueeze #壓縮或擴展維度
squeeze用於維度壓縮
- b=torch.rand(1,32,1,1)
- print(b.squeeze(0).shape) #若當前索引shape!=1,則不會變
輸出結果爲:
torch.Size([32, 1, 1])
unsqueeze用於維度擴張
- a=torch.rand(2,3,28,28)
- print(a.unSqueeze(0).shape) #在0上增加一個維度
輸出結果:
torch.Size([1, 2, 3, 28, 28])
3.transpose / permute #張量維度轉換
- transpose用來進行兩維度之間轉換
- t=torch.rand(3,3,28,28)
- t.transpose(0,2) #第0維和第2維進行交換
輸出結果:
torch.Size([28, 3, 3, 28])
- permute可以用來進行多維度轉換
- p=torch.rand(1,2,3,4)
- p.permute(3,2,1,0)
輸出結果:
torch.Size([4, 3, 2, 1])
4. expand與repeat
- expand用於維度擴張,參數爲擴張後維度
- e=torch.tensor([3,4])
- e.expand(3,2,2) #expand參數爲擴張後維度
輸出結果:
tensor([[[3, 4],
[3, 4]],[[3, 4],
[3, 4]],[[3, 4],
[3, 4]]])torch.Size([3, 2, 2])
- repeat函數用於維度擴張,參數爲當前維度所要複製的次數
- r=torch.rand([3,4])
- r.repeat(2,3,3)
輸出結果:
tensor([[[3, 4, 3, 4, 3, 4],
[3, 4, 3, 4, 3, 4],
[3, 4, 3, 4, 3, 4]],[[3, 4, 3, 4, 3, 4],
[3, 4, 3, 4, 3, 4],
[3, 4, 3, 4, 3, 4]]])torch.Size([2, 3, 6])
- cat 將兩個tensor按照指定維度拼接起來、
- c1=torch.rand(4,32,8)
- c2=torch.rand(5,32,8)
- torch.cat([c1,c2],dim=0)
輸出結果:
torch.Size([9, 32, 8])
stack
- split 將一個tensor按照指定維度和長度分開
- s1=torch.rand(6,3,16,32)
- aa,bb=s1.split([1,5],dim=0)
輸出結果:
torch.Size([1, 3, 16, 32])
torch.Size([5, 3, 16, 32])
- s1=torch.rand(6,3,16,32)
- aa,bb=s1.split(3,dim=0) #所分長度相同則輸入一個值即可
輸出結果:
torch.Size([3, 3, 16, 32])
torch.Size([3, 3, 16, 32])
- chunk 將一個張量在指定維度分成n份 ,tensor.chunk(n,dim=dim)
- aa,bb,cc=s1.chunk(3,dim=1)
輸出結果:
torch.Size([6, 1, 16, 32])
torch.Size([6, 1, 16, 32])
torch.Size([6, 1, 16, 32])