Pytroch-tensor View vs. Permute

最近在開始寫代碼,碰到了view和permute這兩個操作,比較容易混淆,在此區(qū)分。

注意這是針對pytorch中tensor的操作,和numpy中的array沒有任何關(guān)系?。?!

View的操作在這里可以認為是對維度的改變(擴張或減小),維度擴張的意思就是給原來的數(shù)據(jù)再多加一維(多加一個中括號),或者就是給原來的數(shù)據(jù)減去一維(減少一個中括號),下面針對實例進行介紹。

view效果展示圖

從圖中可以看到,我們可以對tensor i (一共包含3個元素)指定任意的維度(只要維度的乘積綜合為tensor i 的總個數(shù)即可,例如這里所有的維度乘積之和為3)。
在這里,我們看到-1的存在,它不是意味著我們索引中的最后一個,而是說讓pytroch自動去計算這里應(yīng)該填入什么值來保證總乘積等于總共的元素個數(shù)。(其實是給程序員偷懶的方式!?。?br> 其次,還需要提的是在用view對tensor更改維度以后,其中的值是按照原來tensor中排列的順序來填充新維度下的tensor內(nèi)容。
舉個例子,

[[1,2,3],[4,5,6]].view(3,2)
會得到
[[1,2],[3,4],[5,6]]
就是按照原來[[1,2,3],[4,5,6]]中數(shù)據(jù)的順序,按序取出后然后放入。

總之,這個方法就是能讓你把你的tensor變成你想要的維度形式,通過增加維度或者減小維度的方式實現(xiàn)。)

接下來聊聊permute

可能有朋友會說如果有view的操作了,為什么還需要permute來調(diào)整維度等等。

其實,permute能做的是view做不到的,

(因為view只能以順序的方式來擺放元素,但是view可以實現(xiàn)坐標(biāo)上的對稱轉(zhuǎn)換)

且在view進行了維度擴張以后,在有些情況下我們自然而然地將維度之間進行交換位置,實現(xiàn)例如轉(zhuǎn)置這樣的操作。

下面用例子來說明

Permute效果展示圖

圖中第一行其實是定義了一個(1,2,3)維度的tensor,在這里如果我們需要對數(shù)據(jù)進行維度的變換,例如將原來(1,2,3)維的數(shù)據(jù)變換為(1,3,2)維的形式。permute在這里做的其實就是一個轉(zhuǎn)置的操作。第0維(也就是上面括號中的1)不去動它,在后面的變換中,將處于(2,1)[4,5,6]中的4變換成結(jié)果中的(1,2)[1,4]中的4,來達到轉(zhuǎn)置的效果??梢?,也印證了a.permute(0,2,1)中的2,1其實是對第3維與第2維進行了交換(也就是我們理解的轉(zhuǎn)置的意思,這里因為是從0開始計數(shù)的,所以這里表示維度是0,1,2維)。

至此,對于view與permute的對比和介紹都結(jié)束啦,歡迎大家對于有問題和不足的地方進行留言?。。「兄x?。。?/h1>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容