日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

pytorch中permute()函數(shù)用法補(bǔ)充說明(矩陣維度變化過程)_python

作者:ac不知深 ? 更新時(shí)間: 2022-06-25 編程語言

一、前言

之前寫了篇torch中permute()函數(shù)用法文章,在詳細(xì)的說一下permute函數(shù)里維度變化的詳細(xì)過程

非常感謝@m0_46225327對本文案例更加細(xì)節(jié)補(bǔ)充

注意:

本文是這篇torch中permute()函數(shù)用法文章的補(bǔ)充內(nèi)容

如果有精力可以把這篇文章閱讀一下,能夠更好的理解函數(shù)的維度變化過程

以及加深對輸出結(jié)果的印象

二、舉例解釋

這里以比較經(jīng)典的變化四做例子

先回顧一下變化四的內(nèi)容:

————————————————分割線——————————————

變化四:0與2交換

b = x.permute(2,1,0)            # 交換塊和列
print(b)
print(b.size())

此時(shí)參數(shù)0對應(yīng)的3塊經(jīng)過permute已經(jīng)變成了5塊

參數(shù)2對應(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交換,對應(yīng)函數(shù)里的參數(shù)0不動(dòng),1和2交換 ,變換完后為(0,2,1),對應(yīng)維度是(3,5,2)。重排序?yàn)?0,1,2)
# 第二個(gè)"==>" 變化為3和5交換,對應(yīng)函數(shù)里的參數(shù)2不動(dòng),0和1交換,變換完后為(1,0,2),對應(yīng)維度是(5,3,2)。重排序?yàn)?0,1,2)
# 第三個(gè)"==>" 變化為3和2交換,對應(yīng)函數(shù)里的參數(shù)0不動(dòng),1和2交換,變換完后為(0,2,1),對應(yīng)維度是(5,2,3)。重排序?yàn)?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)

這里先給大家把代碼放上來

便于大家驗(yàn)證理解

也可以先跳過代碼部分直接看圖片解釋

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

三、寫在最后

如果大家看起來還是比較難理解些

建議可以手寫一下這個(gè)轉(zhuǎn)換例子,真的一下就懂了

以下是我手寫矩陣轉(zhuǎn)化過程

原文鏈接:https://blog.csdn.net/weixin_41377182/article/details/124245005

欄目分類
最近更新