相當於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中元素的總個數一致了,否則就會出現錯誤。
---------------------
作者:York1996
來源:CSDN
原文:https://blog.csdn.net/york1996/article/details/81949843
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!