濮阳杆衣贸易有限公司

主頁 > 知識(shí)庫(kù) > 基于PyTorch中view的用法說明

基于PyTorch中view的用法說明

熱門標(biāo)簽:正安縣地圖標(biāo)注app 地圖地圖標(biāo)注有嘆號(hào) 400電話申請(qǐng)資格 螳螂科技外呼系統(tǒng)怎么用 qt百度地圖標(biāo)注 舉辦過冬奧會(huì)的城市地圖標(biāo)注 阿里電話機(jī)器人對(duì)話 電銷機(jī)器人系統(tǒng)廠家鄭州 遼寧智能外呼系統(tǒng)需要多少錢

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

我的理解是:

把原先tensor中的數(shù)據(jù)按照行優(yōu)先的順序排成一個(gè)一維的數(shù)據(jù)(這里應(yīng)該是因?yàn)橐蟮刂肥沁B續(xù)存儲(chǔ)的),然后按照參數(shù)組合成其他維度的tensor。

比如說是不管你原先的數(shù)據(jù)是[[[1,2,3],[4,5,6]]]還是[1,2,3,4,5,6],因?yàn)樗鼈兣懦梢痪S向量都是6個(gè)元素,所以只要view后面的參數(shù)一致,得到的結(jié)果都是一樣的。

比如,

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))

得到的結(jié)果都是

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

再看一個(gè)例子:

a=torch.Tensor([[[1,2,3],[4,5,6]]])
print(a.view(3,2))

將會(huì)得到:

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

相當(dāng)于就是從1,2,3,4,5,6順序的拿數(shù)組來填充需要的形狀。但是如果您想得到如下的結(jié)果:

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

就需要使用另一個(gè)函數(shù)了:permute()。用法參見我的另一篇博客:PyTorch中permute的用法

另外,參數(shù)不可為空。參數(shù)中的-1就代表這個(gè)位置由其他位置的數(shù)字來推斷,只要在不致歧義的情況的下,view參數(shù)就可以推斷出來,也就是人可以推斷出形狀的情況下,view函數(shù)也可以推斷出來。

比如a tensor的數(shù)據(jù)個(gè)數(shù)是6個(gè),如果view(1,-1),我們就可以根據(jù)tensor的元素個(gè)數(shù)推斷出-1代表6。

而如果是view(-1,-1,2),人不知道怎么推斷,機(jī)器也不知道。

還有一種情況是人可以推斷出來,但是機(jī)器推斷不出來的:view(-1,-1,6),人可以知道-1都代表1,但是機(jī)器不允許同時(shí)有兩個(gè)負(fù)1。

如果沒有-1,那么所有參數(shù)的乘積就要和tensor中元素的總個(gè)數(shù)一致了,否則就會(huì)出現(xiàn)錯(cuò)誤。

補(bǔ)充:pytorch中x.view()和permute用法

pytorch中x.view()用法

在pytorch中經(jīng)常會(huì)看到x.view(),它表示將Tensor的維度轉(zhuǎn)變?yōu)関iew指定的維度,有點(diǎn)類似于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ù)自動(dòng)分配的列數(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轉(zhuǎn)變成6行1列

print(a.view(-1,6).size())
(1, 6)

或者將a轉(zhuǎn)變成1行6列

在程序里還經(jīng)常見到view函數(shù)后面跟著permute()函數(shù),這個(gè)函數(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)了。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • Pytorch之view及view_as使用詳解
  • pytorch中torch.max和Tensor.view函數(shù)用法詳解
  • 對(duì)pytorch中x = x.view(x.size(0), -1) 的理解說明

標(biāo)簽:隨州 信陽 合肥 興安盟 淘寶好評(píng)回訪 濟(jì)源 阜新 昭通

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《基于PyTorch中view的用法說明》,本文關(guān)鍵詞  基于,PyTorch,中,view,的,用法,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《基于PyTorch中view的用法說明》相關(guān)的同類信息!
  • 本頁收集關(guān)于基于PyTorch中view的用法說明的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    湘阴县| 岳西县| 濮阳市| 镇雄县| 洛南县| 海晏县| 囊谦县| 盐源县| 平度市| 津南区| 定安县| 金湖县| 图木舒克市| 沙田区| 德兴市| 临高县| 鄯善县| 布拖县| 密云县| 合肥市| 安远县| 通城县| 徐闻县| 翁源县| 县级市| 广元市| 镇康县| 望谟县| 宣城市| 东丽区| 宣武区| 边坝县| 新龙县| 兴山县| 英超| 翁源县| 阜阳市| 清镇市| 临猗县| 苍山县| 阳西县|