pytorch中permute()函數(shù)用法補充說明(矩陣維度變化過程)
一、前言
之前寫了篇torch中permute()函數(shù)用法文章,在詳細的說一下permute函數(shù)里維度變化的詳細過程
非常感謝@m0_46225327對本文案例更加細節(jié)補充
注意:
本文是這篇torch中permute()函數(shù)用法文章的補充內(nèi)容
如果有精力可以把這篇文章閱讀一下,能夠更好的理解函數(shù)的維度變化過程
以及加深對輸出結(jié)果的印象
二、舉例解釋
這里以比較經(jīng)典的變化四做例子
先回顧一下變化四的內(nèi)容:
————————————————分割線——————————————
變化四:0與2交換
b = x.permute(2,1,0) # 交換塊和列 print(b) print(b.size())


此時參數(shù)0對應的3塊經(jīng)過permute已經(jīng)變成了5塊
參數(shù)2對應的5列已經(jīng)變成了3列
————————————————分割線——————————————
解釋部分
變化四中permute參數(shù)把(0,1,2)交換成了(2,1,0)
直觀上看是直接把0和2兩個位置直接交換
實際上兩個參數(shù)交換包括了以下部分
維度變換重點
維度數(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) # 第一個"==>" 變化為2和5交換,對應函數(shù)里的參數(shù)0不動,1和2交換 ,變換完后為(0,2,1),對應維度是(3,5,2)。重排序為(0,1,2) # 第二個"==>" 變化為3和5交換,對應函數(shù)里的參數(shù)2不動,0和1交換,變換完后為(1,0,2),對應維度是(5,3,2)。重排序為(0,1,2) # 第三個"==>" 變化為3和2交換,對應函數(shù)里的參數(shù)0不動,1和2交換,變換完后為(0,2,1),對應維度是(5,2,3)。重排序為(0,1,2)
或者看表格更容易理解些?
| 維度變換過程 | 維度數(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) |
這里先給大家把代碼放上來
便于大家驗證理解
也可以先跳過代碼部分直接看圖片解釋
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塊中的每一塊矩陣進行轉(zhuǎn)置操作,即行和列的交換
2行3列==>3行2列
3、permute(0,2,1) ⇒ permute(1,0,2)

這部分是列不動,把塊和行交換
把第一塊的五行分別寫入變換后的五塊中第一行
把第二塊的五行分別寫入變換后的五塊中第二行
把第三塊的五行分別寫入變換后的五塊中第三行
4、permute(1,0,2) ⇒ permute(0,2,1)

最后行列交換,即轉(zhuǎn)置
三、寫在最后
如果大家看起來還是比較難理解些
建議可以手寫一下這個轉(zhuǎn)換例子,真的一下就懂了
以下是我手寫矩陣轉(zhuǎn)化過程

到此這篇關(guān)于pytorch中permute()函數(shù)用法補充說明的文章就介紹到這了,更多相關(guān)pytorch permute()函數(shù)用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python的bit_length函數(shù)來二進制的位數(shù)方法
今天小編就為大家分享一篇Python的bit_length函數(shù)來二進制的位數(shù)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
python中自定義異常/raise關(guān)鍵字拋出異常的案例解析
在編程過程中合理的使用異常可以使得程序正常的執(zhí)行,本篇文章給大家介紹python中自定義異常/raise關(guān)鍵字拋出異常案例解析,需要的朋友可以參考下2024-01-01

