pytorch中permute()函數(shù)用法實(shí)例詳解
前言
本文只討論二維三維中的permute用法
最近的Attention學(xué)習(xí)中的一個(gè)permute函數(shù)讓我不理解
這個(gè)光說(shuō)太抽象
我就結(jié)合代碼與圖片解釋一下
首先創(chuàng)建一個(gè)三維數(shù)組小實(shí)例
import torch x = torch.linspace(1, 30, steps=30).view(3,2,5) # 設(shè)置一個(gè)三維數(shù)組 print(x) print(x.size()) # 查看數(shù)組的維數(shù)
這里為了防止出現(xiàn)維數(shù)數(shù)值相同的巧合局面(例如三維數(shù)組(3,3,3)或者(2,4,4)等)
輸出結(jié)果如下圖

一般的把(3,2,5)解釋為3維2行5列這里很容易讓人迷迷糊糊
那么我們按照塊,行,列理解起來(lái)會(huì)更容易一些
比如(3,2,5),表示3塊 2*5的數(shù)組
以下我簡(jiǎn)單用3塊3*3圖偷懶舉例

然后堆起來(lái)就是我們熟知的三維矩陣

接下來(lái)先簡(jiǎn)單介紹下permute()函數(shù)
permute(dims)
參數(shù)dims用矩陣的維數(shù)代入,一般默認(rèn)從0開(kāi)始。即第0維,第1維等等
也可以理解為,第0塊,第1塊等等。當(dāng)然矩陣最少是兩維才能使用permute
如是兩維,dims分別為是0和1
可以寫成permute(0,1)這里不做任何變化,維數(shù)與之前相同
如果寫成permute(1,0)得到的就是矩陣的轉(zhuǎn)置
如果三維是permute(0,1,2)
0代表共有幾塊維度:本例中0對(duì)應(yīng)著3塊矩陣
1代表每一塊中有多少行:本例中1對(duì)應(yīng)著每塊有2行
2代表每一塊中有多少列:本例中2對(duì)應(yīng)著每塊有5列
所以是3塊2行5列的三維矩陣
這些0,1,2并沒(méi)有任何實(shí)際的意義,也不是數(shù)值,只是用來(lái)標(biāo)識(shí)區(qū)別。有點(diǎn)類似于x,y,z來(lái)區(qū)分三個(gè)坐標(biāo)維度,是人為規(guī)定好的
三維情況直接用下面的代碼來(lái)給大家講解
三維情況
變化一:不改變?nèi)魏螀?shù)
b = x.permute(0,1,2) # 不改變維度 print(b) print(b.size())

發(fā)現(xiàn)此時(shí)矩陣沒(méi)有變化,依然是按照之前的方式排列
變化二:1與2交換
b = x.permute(0,2,1) # 每一塊的行與列進(jìn)行交換,即每一塊做轉(zhuǎn)置行為 print(b) print(b.size())


兩張圖片可以比較
在不改變每一塊(即)的前提下,對(duì)每一塊的行列進(jìn)行對(duì)調(diào)(即二維矩陣的轉(zhuǎn)置)
變化三:0與1交換
b = x.permute(1,0,2) # 交換塊和行 print(b) print(b.size())


兩者比較可以看出塊數(shù)和每塊的行數(shù)發(fā)生了變化
即參數(shù)0對(duì)應(yīng)的數(shù)值3塊變成2塊
參數(shù)1對(duì)應(yīng)的2行變成3行
這個(gè)變化剛好是0與1 的位置交換,導(dǎo)致參數(shù)進(jìn)行對(duì)調(diào)
此時(shí)變成了2塊 * 3行 * 5列(初始為3塊 * 2行 *5列)
變化四:0與2交換
b = x.permute(2,1,0) # 交換塊和列 print(b) print(b.size())


此時(shí)參數(shù)0對(duì)應(yīng)的3塊經(jīng)過(guò)permute已經(jīng)變成了5塊
參數(shù)2對(duì)應(yīng)的5列已經(jīng)變成了3列
變化五:0與1交換,1與2交換
b = x.permute(2,0,1) # 交換塊和行和列 print(b) print(b.size())


此時(shí)參數(shù)0對(duì)應(yīng)的3塊變成了5塊
參數(shù)1對(duì)應(yīng)的2行變成了3行
參數(shù)2對(duì)應(yīng)的5列變成了2列
變化六:0與1交換,0與2交換
b = x.permute(1,2,0) # 交換塊和行和列 print(b) print(b.size())


此時(shí)參數(shù)0對(duì)應(yīng)的3塊變成了2塊
參數(shù)1對(duì)應(yīng)的2行變成了5行
參數(shù)2對(duì)應(yīng)的5列變成了3列
總結(jié)
根據(jù)以上舉得二維和三維例子可以知道permute()函數(shù)其實(shí)是對(duì)矩陣的塊行列進(jìn)行交換
里面的參數(shù)并不是具體數(shù)值
而是塊行列的代指
寫在最后
沒(méi)想隨手寫的一篇居然這么多讀者關(guān)注
我又在此篇文章的基礎(chǔ)上,詳細(xì)的解釋了維度變化過(guò)程
能夠更好的幫助大家理解permute函數(shù)的用法
到此這篇關(guān)于pytorch中permute()函數(shù)用法的文章就介紹到這了,更多相關(guān)pytorch permute()函數(shù)用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
集成開(kāi)發(fā)環(huán)境Pycharm的安裝及模板設(shè)置圖文教程
PyCharm是一種Python的集成開(kāi)發(fā)環(huán)境,帶有一整套可以幫助用戶在使用Python語(yǔ)言開(kāi)發(fā)時(shí)提高效率的工具,這篇文章主要介紹了集成開(kāi)發(fā)環(huán)境Pycharm的安裝及模板設(shè)置,需要的朋友可以參考下2022-07-07
Python批量實(shí)現(xiàn)橫屏轉(zhuǎn)豎屏的視頻處理工具
這篇文章主要為大家詳細(xì)介紹了如何使用Python和Tkinter框架開(kāi)發(fā)一個(gè)視頻處理器應(yīng)用,用于批量橫屏轉(zhuǎn)豎屏視頻處理,支持多種視頻格式和編碼選擇,需要的可以了解下2025-02-02
python庫(kù)matplotlib繪制坐標(biāo)圖
這篇文章主要為大家介紹了python庫(kù)matplotlib繪制坐標(biāo)圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10
pyqt5 QScrollArea設(shè)置在自定義側(cè)(任何位置)
這篇文章主要介紹了pyqt5 QScrollArea設(shè)置在自定義側(cè)(任何位置),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Django model反向關(guān)聯(lián)名稱的方法
今天小編就為大家分享一篇Django model反向關(guān)聯(lián)名稱的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
Python configparser模塊配置文件過(guò)程解析
這篇文章主要介紹了Python configparser模塊配置文件過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
python腳本實(shí)現(xiàn)mp4中的音頻提取并保存在原目錄
這篇文章主要介紹了python腳本實(shí)現(xiàn)mp4中的音頻提取并保存在原目錄,本文給大家通過(guò)實(shí)例代碼介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
用Python創(chuàng)建簡(jiǎn)易網(wǎng)站圖文教程
今天給大家?guī)?lái)的是關(guān)于Python的相關(guān)知識(shí),文章圍繞著用Python創(chuàng)建簡(jiǎn)易網(wǎng)站展開(kāi),文中有非常詳細(xì)的介紹及圖文示例,需要的朋友可以參考下2021-06-06
Python?命令行?prompt_toolkit?庫(kù)詳解
prompt_toolkit 是一個(gè)用于構(gòu)建強(qiáng)大交互式命令行的 Python 工具庫(kù)。接下來(lái)通過(guò)本文給大家介紹Python?命令行?prompt_toolkit?庫(kù)的相關(guān)知識(shí),感興趣的朋友一起看看吧2022-01-01

