PyTorch中view的用法

2021-09-23 18:35:51 字數 1177 閱讀 8762

相當於numpy中resize()的功能,但是用法可能不太一樣。

我的理解是:

把原先tensor中的資料按照行優先的順序排成乙個一維的資料(這裡應該是因為要求位址是連續儲存的),然後按照引數組合成其他維度的tensor。比如說是不管你原先的資料是[[[1,2,3],[4,5,6]]]還是[1,2,3,4,5,6],因為它們排成一維向量都是6個元素,所以只要view後面的引數一致,得到的結果都是一樣的。比如,

a=torch.tensor([[[1,2,3],[4,5,6]]])

b=torch.tensor([1,2,3,4,5,6])

print(a.view(1,6))

print(b.view(1,6))

得到的結果都是tensor([[1., 2., 3., 4., 5., 6.]])

再看乙個例子:

a=torch.tensor([[[1,2,3],[4,5,6]]])

print(a.view(3,2))

將會得到:

tensor([[1., 2.],

[3., 4.],

[5., 6.]])

相當於就是從1,2,3,4,5,6順序的拿陣列來填充需要的形狀。但是如果您想得到如下的結果:

tensor([[1., 4.],

[2., 5.],

[3., 6.]])

就需要使用另乙個函式了:permute()。用法參見我的另一篇部落格:pytorch中permute的用法

另外,引數不可為空。引數中的-1就代表這個位置由其他位置的數字來推斷,只要在不致歧義的情況的下,view引數就可以推斷出來,也就是人可以推斷出形狀的情況下,view函式也可以推斷出來。比如a tensor的資料個數是6個,如果view(1,-1),我們就可以根據tensor的元素個數推斷出-1代表6。而如果是view(-1,-1,2),人不知道怎麼推斷,機器也不知道。還有一種情況是人可以推斷出來,但是機器推斷不出來的:view(-1,-1,6),人可以知道-1都代表1,但是機器不允許同時有兩個負1。

如果沒有-1,那麼所有引數的乘積就要和tensor中元素的總個數一致了,否則就會出現錯誤。

PyTorch中view的用法

相當於numpy中resize 的功能,但是用法可能不太一樣。我的理解是 把原先tensor中的資料按照行優先的順序排成乙個一維的資料 這裡應該是因為要求位址是連續儲存的 然後按照引數組合成其他維度的tensor。比如說是不管你原先的資料是 1,2,3 4,5,6 還是 1,2,3,4,5,6 因為...

Pytorch中view的用法

在pytorch中view函式的作用為重構張量的維度,相當於numpy中resize 的功能,但是用法可能不太一樣。如下例所示 import torch tt1 torch.tensor 0.3623,0.6115,0.7283,0.4699,2.3261,0.1599 result tt1.vie...

PyTorch中view的用法

我的理解就是將原來的tensor在進行維度的更改 根據引數的輸入進行更改 後再進行輸出,其實就是更換了tensor的一種檢視方式 a torch.tensor 1,2,3 4,5,6 b torch.tensor 1,2,3,4,5,6 print a.view 1,6 print b.view 1...