基于PyTorch中view的用法說明
相當于numpy中resize()的功能,但是用法可能不太一樣。
我的理解是:
把原先tensor中的數(shù)據(jù)按照行優(yōu)先的順序排成一個一維的數(shù)據(jù)(這里應該是因為要求地址是連續(xù)存儲的),然后按照參數(shù)組合成其他維度的tensor。
比如說是不管你原先的數(shù)據(jù)是[[[1,2,3],[4,5,6]]]還是[1,2,3,4,5,6],因為它們排成一維向量都是6個元素,所以只要view后面的參數(shù)一致,得到的結果都是一樣的。
比如,
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順序的拿數(shù)組來填充需要的形狀。但是如果您想得到如下的結果:
tensor([[1., 4.],
[2., 5.],
[3., 6.]])
就需要使用另一個函數(shù)了:permute()。用法參見我的另一篇博客:PyTorch中permute的用法
另外,參數(shù)不可為空。參數(shù)中的-1就代表這個位置由其他位置的數(shù)字來推斷,只要在不致歧義的情況的下,view參數(shù)就可以推斷出來,也就是人可以推斷出形狀的情況下,view函數(shù)也可以推斷出來。
比如a tensor的數(shù)據(jù)個數(shù)是6個,如果view(1,-1),我們就可以根據(jù)tensor的元素個數(shù)推斷出-1代表6。
而如果是view(-1,-1,2),人不知道怎么推斷,機器也不知道。
還有一種情況是人可以推斷出來,但是機器推斷不出來的:view(-1,-1,6),人可以知道-1都代表1,但是機器不允許同時有兩個負1。
如果沒有-1,那么所有參數(shù)的乘積就要和tensor中元素的總個數(shù)一致了,否則就會出現(xiàn)錯誤。
補充:pytorch中x.view()和permute用法
pytorch中x.view()用法
在pytorch中經(jīng)常會看到x.view(),它表示將Tensor的維度轉變?yōu)関iew指定的維度,有點類似于resize函數(shù)
b=torch.Tensor([[[[1,2,3],[4,5,6],[7,8,9]],[[1,2,3],[4,5,6],[7,8,9]]]]) print(b.size()) (1, 2, 3, 3) print(b.view(b.size(0),-1)) tensor([[1., 2., 3., 4., 5., 6., 7., 8., 9., 1., 2., 3., 4., 5., 6., 7., 8., 9.]]) print(b.view(b.size(0),-1).size()) (1, 18)
b.size(0)表示b中0維度==1,-1是按照原數(shù)據(jù)自動分配的列數(shù)。
a=torch.Tensor([[[1,2,3],[4,5,6]]]) print(a.size()) (1, 2, 3) print(a.view(6,-1)) tensor([[1.], [2.], [3.], [4.], [5.], [6.]]) print(a.view(6,-1).size()) (6, 1)
將a轉變成6行1列
print(a.view(-1,6).size()) (1, 6)
或者將a轉變成1行6列
在程序里還經(jīng)常見到view函數(shù)后面跟著permute()函數(shù),這個函數(shù)是做維度換位的
print(a.view(-1,6).permute(1,0)) tensor([[1.], [2.], [3.], [4.], [5.], [6.]]) print(a.view(-1,6).permute(1,0).size()) (6, 1)
加了permute,a就由(1,6)變成(6,1)了。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關文章
nginx黑名單和django限速,最簡單的防惡意請求方法分享
今天小編就為大家分享一篇nginx黑名單和django限速,最簡單的防惡意請求方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
Python range與enumerate函數(shù)區(qū)別解析
這篇文章主要介紹了Python range與enumerate函數(shù)區(qū)別解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-02-02
Python爬取智聯(lián)招聘數(shù)據(jù)分析師崗位相關信息的方法
這篇文章主要介紹了Python爬取智聯(lián)招聘數(shù)據(jù)分析師崗位相關信息的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08
Python繪制指數(shù)分布的概率密度函數(shù)圖
在數(shù)據(jù)科學和統(tǒng)計學中,指數(shù)分布是一種應用廣泛的連續(xù)概率分布,通常用于建模獨立隨機事件發(fā)生的時間間隔,本文將展示如何在Python中繪制指數(shù)分布的概率密度函數(shù)圖,需要的可以了解下2024-12-12

