pytorch中permute()函數(shù)用法補(bǔ)充說(shuō)明(矩陣維度變化過(guò)程)
一、前言
之前寫了篇torch中permute()函數(shù)用法文章,在詳細(xì)的說(shuō)一下permute函數(shù)里維度變化的詳細(xì)過(guò)程
非常感謝@m0_46225327對(duì)本文案例更加細(xì)節(jié)補(bǔ)充
注意:
本文是這篇torch中permute()函數(shù)用法文章的補(bǔ)充內(nèi)容
如果有精力可以把這篇文章閱讀一下,能夠更好的理解函數(shù)的維度變化過(guò)程
以及加深對(duì)輸出結(jié)果的印象
二、舉例解釋
這里以比較經(jīng)典的變化四做例子
先回顧一下變化四的內(nèi)容:
————————————————分割線——————————————
變化四: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列
————————————————分割線——————————————
解釋部分
變化四中permute參數(shù)把(0,1,2)交換成了(2,1,0)
直觀上看是直接把0和2兩個(gè)位置直接交換
實(shí)際上兩個(gè)參數(shù)交換包括了以下部分
維度變換重點(diǎn)
維度數(shù)值變換:(3,2,5)==>(3,5,2)==>(5,3,2)==>(5,2,3) # 讀者一定要考慮清楚下一行代表什么意思 函數(shù)中參數(shù)變換(0,1,2)==>(0,2,1)==>(1,0,2)==>(0,2,1) # 第一個(gè)"==>" 變化為2和5交換,對(duì)應(yīng)函數(shù)里的參數(shù)0不動(dòng),1和2交換 ,變換完后為(0,2,1),對(duì)應(yīng)維度是(3,5,2)。重排序?yàn)?0,1,2) # 第二個(gè)"==>" 變化為3和5交換,對(duì)應(yīng)函數(shù)里的參數(shù)2不動(dòng),0和1交換,變換完后為(1,0,2),對(duì)應(yīng)維度是(5,3,2)。重排序?yàn)?0,1,2) # 第三個(gè)"==>" 變化為3和2交換,對(duì)應(yīng)函數(shù)里的參數(shù)0不動(dòng),1和2交換,變換完后為(0,2,1),對(duì)應(yīng)維度是(5,2,3)。重排序?yàn)?0,1,2)
或者看表格更容易理解些?
維度變換過(guò)程 | 維度數(shù)值變換 | 函數(shù)參數(shù)變換 |
---|---|---|
(3,2,5) | - | (0,1,2) |
(3,5,2) | 2和5 | (0,1,2)==> (0,2,1) |
(5,3,2) | 3和5 | (0,1,2)==>(1,0,2) |
(5,2,3) | 3和2 | (0,1,2)==>(0,2,1) |
這里先給大家把代碼放上來(lái)
便于大家驗(yàn)證理解
也可以先跳過(guò)代碼部分直接看圖片解釋
import torch x = torch.linspace(1,30,steps=30).view(3,2,5) print('x:',x) print(x.size()) # permute(0,1,2)==>permute(2,1,0) # (3,2,5)==>(3,5,2)==>(5,3,2)==>(5,2,3) # # (0,1,2)==>(0,2,1)==>(1,0,2)==>(0,2,1) b1 = x.permute(0,2,1) print('b1:',b1) print(b1.size()) b2 = b1.permute(2,0,1) print('b2:',b2) print(b2.size()) b = b2.permute(2,1,0) print('b:',b) print(b1.size())
1、permute(0,1,2)
這部分就是(3,2,5)矩陣中原有的樣子
2、permute(0,1,2) ⇒ permute(0,2,1)
這部分是把3塊中的每一塊矩陣進(jìn)行轉(zhuǎn)置操作,即行和列的交換
2行3列==>3行2列
3、permute(0,2,1) ⇒ permute(1,0,2)
這部分是列不動(dòng),把塊和行交換
把第一塊的五行分別寫入變換后的五塊中第一行
把第二塊的五行分別寫入變換后的五塊中第二行
把第三塊的五行分別寫入變換后的五塊中第三行
4、permute(1,0,2) ⇒ permute(0,2,1)
最后行列交換,即轉(zhuǎn)置
三、寫在最后
如果大家看起來(lái)還是比較難理解些
建議可以手寫一下這個(gè)轉(zhuǎn)換例子,真的一下就懂了
以下是我手寫矩陣轉(zhuǎn)化過(guò)程
到此這篇關(guān)于pytorch中permute()函數(shù)用法補(bǔ)充說(shuō)明的文章就介紹到這了,更多相關(guān)pytorch permute()函數(shù)用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)二維數(shù)組的對(duì)角線遍歷
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)二維數(shù)組的對(duì)角線遍歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03python調(diào)用接口的4種方式代碼實(shí)例
這篇文章主要介紹了python調(diào)用接口的4種方式代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11Python RobotFramework的安裝過(guò)程及應(yīng)用實(shí)戰(zhàn)教程
這篇文章主要介紹了RobotFramework的安裝過(guò)程及應(yīng)用實(shí)戰(zhàn)教程,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08Python3.5基礎(chǔ)之函數(shù)的定義與使用實(shí)例詳解【參數(shù)、作用域、遞歸、重載等】
這篇文章主要介紹了Python3.5基礎(chǔ)之函數(shù)的定義與使用,結(jié)合實(shí)例形式詳細(xì)分析了Python3.5函數(shù)的定義、參數(shù)、作用域、遞歸、重載、內(nèi)置函數(shù)等基本概念與相關(guān)使用技巧,需要的朋友可以參考下2019-04-04利用python對(duì)月餅數(shù)據(jù)進(jìn)行可視化(看看哪家最劃算)
通過(guò)python對(duì)數(shù)據(jù)進(jìn)行可視化展示,可直觀地展示數(shù)據(jù)之間的關(guān)系,為用戶提供更多的信息,這篇文章主要給大家介紹了關(guān)于利用python對(duì)月餅數(shù)據(jù)進(jìn)行可視化的相關(guān)資料,看看哪家最劃算,需要的朋友可以參考下2022-09-09Python的Bottle框架中實(shí)現(xiàn)最基本的get和post的方法的教程
這篇文章主要介紹了Python的Bottle框架中實(shí)現(xiàn)最基本的get和post的方法的教程,Bottle框架在Python開發(fā)者中的人氣很高,需要的朋友可以參考下2015-04-04Anaconda安裝以及修改環(huán)境默認(rèn)位置圖文教程
Anaconda是一個(gè)用于科學(xué)計(jì)算的Python發(fā)行版,支持Linux,Mac, Windows, 包含了眾多流行的科學(xué)計(jì)算、數(shù)據(jù)分析的 Python 包,下面這篇文章主要給大家介紹了關(guān)于Anaconda安裝以及修改環(huán)境默認(rèn)位置的相關(guān)資料,需要的朋友可以參考下2023-04-04