pytorch學習記錄2--tensor維度變化

  1. 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])

 

 

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