pytorch中torch.stack()函數(shù)用法解讀
torch.stack()函數(shù)用法
一、基本功能
pytroch官方文檔對于這個函數(shù)的描述很簡略。
只有一句話:
在維度上連接(concatenate)若干個張量。(這些張量形狀相同)。
經(jīng)過代碼總結(jié)歸納,可以得到stack(tensors,dim=0,out=None)
函數(shù)的功能:
將若干個張量在dim維度上連接,生成一個擴(kuò)維的張量,比如說原來你有若干個2維張量,連接可以得到一個3維的張量。
設(shè)待連接張量維度為n,dim取值范圍為-n-1~n,這里得提一下為負(fù)的意義:-i為倒數(shù)第i個維度。
舉個例子:
對于2維的待連接張量,-1維即3維,-2維即2維。
上代碼:
a=torch.tensor([[1,2,3],[4,5,6]]) b=torch.tensor([[10,20,30],[40,50,60]]) c=torch.tensor([[100,200,300],[400,500,600]]) print(torch.stack([a,b,c],dim=0)) print(torch.stack([a,b,c],dim=1)) print(torch.stack([a,b,c],dim=2)) print(torch.stack([a,b,c],dim=0).size()) print(torch.stack([a,b,c],dim=1).size()) print(torch.stack([a,b,c],dim=2).size()) #輸出結(jié)果為: tensor([[[ 1, 2, 3], [ 4, 5, 6]], [[ 10, 20, 30], [ 40, 50, 60]], [[100, 200, 300], [400, 500, 600]]]) tensor([[[ 1, 2, 3], [ 10, 20, 30], [100, 200, 300]], [[ 4, 5, 6], [ 40, 50, 60], [400, 500, 600]]]) tensor([[[ 1, 10, 100], [ 2, 20, 200], [ 3, 30, 300]], [[ 4, 40, 400], [ 5, 50, 500], [ 6, 60, 600]]]) torch.Size([3, 2, 3]) torch.Size([2, 3, 3]) torch.Size([2, 3, 3])
二、規(guī)律分析
通過代碼運(yùn)行結(jié)果,我們不難發(fā)現(xiàn),stack(tensors,dim=0,out=None)
函數(shù)的運(yùn)行機(jī)制可以等價為:
- dim=0時,將tensor在一維上連接,簡單來說就是,就是將tensor1,tensor2…tensor n,連接為【tensor1,tensor2… tensor n】(就是在這里產(chǎn)生了擴(kuò)維)
- dim=1時,將每個tensor的第i行按行連接組成一個新的2維tensor,再將這些新tensor按照dim=0的方式連接。
- dim=2時,將每個tensor的第i行轉(zhuǎn)置后按列連接組成一個新的2維tensor,再將這些新tesnor按照dim=0的方式連接
可以得到一個結(jié)論:n維(n>=2)待連接張量按dim=x的方式連接等價于:
- 若x=0,參照上面的規(guī)律進(jìn)行連接
- 若x>0,對每個張量的第一個維度下的張量對應(yīng)地按照dim=x-1的方式進(jìn)行連接得到若干個新張量,這些新張量按照dim=0的方式進(jìn)行連接。
- 很明顯,該規(guī)律具有遞歸的特性,x=0,1,2的基礎(chǔ)情況已經(jīng)給出。
注:以上規(guī)律是在未看函數(shù)實現(xiàn)源碼基礎(chǔ)上未加證明的猜測。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python學(xué)習(xí)之線程池與GIL全局鎖詳解
本文我們將學(xué)習(xí)線程池的創(chuàng)建與全局鎖。線程池的創(chuàng)建于進(jìn)程池的原理是相同的;關(guān)于GIL全局鎖,暫時沒有代碼上的練習(xí),而是對其概念進(jìn)行一個簡單的啟蒙,感興趣的可以了解一下2022-04-04利用Python和PyQt5構(gòu)建一個多功能PDF轉(zhuǎn)換器
在日常工作中,處理PDF文件幾乎是每個人都不可避免的任務(wù),本文將通過Python和PyQt5搭建一個強(qiáng)大的PDF文件處理平臺,希望對大家有所幫助2024-12-12Python Paramiko創(chuàng)建文件目錄并上傳文件詳解
Paramiko是一個用于進(jìn)行SSH2會話的Python庫,它支持加密、認(rèn)證和文件傳輸?shù)裙δ?本文旨在詳細(xì)指導(dǎo)新手朋友如何使用Python的Paramiko庫來創(chuàng)建遠(yuǎn)程文件目錄并上傳文件,希望對大家有所幫助2024-10-10使用Python編寫一個在Linux下實現(xiàn)截圖分享的腳本的教程
這篇文章主要介紹了使用Python編寫一個在Linux下實現(xiàn)截圖分享的腳本的教程,利用到了scrot和urllib2庫,需要的朋友可以參考下2015-04-0415個應(yīng)該掌握的Jupyter Notebook使用技巧(小結(jié))
這篇文章主要介紹了15個應(yīng)該掌握的Jupyter Notebook使用技巧(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09