網(wǎng)站首頁 編程語言 正文
一、前言
之前寫了篇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
相關(guān)推薦
- 2022-12-11 Django?auth?應(yīng)用模塊詳解_python
- 2023-12-08 uniapp 頁面添加背景圖片不顯示
- 2023-04-26 C語言實(shí)現(xiàn)數(shù)組元素排序方法詳解_C 語言
- 2022-03-16 C#語言主要語言區(qū)域_C#教程
- 2022-07-29 Linux文件管理方法介紹_linux shell
- 2023-01-05 Python?Flask?模型介紹和配置方法_python
- 2022-09-07 pytest配置文件pytest.ini的具體使用_python
- 2022-09-10 golang之?dāng)?shù)組切片的具體用法_Golang
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支