PyTorch中torch.matmul()函數(shù)常見用法總結(jié)
一、函數(shù)介紹
pytorch中兩個張量的乘法可以分為兩種:
- 兩個張量對應(yīng)元素相乘,在PyTorch中可以通過torch.mul函數(shù)(或*運(yùn)算符)實(shí)現(xiàn);
- 兩個張量矩陣相乘,在PyTorch中可以通過torch.matmul函數(shù)實(shí)現(xiàn);
torch.matmul(input, other) → Tensor
計(jì)算兩個張量input和other的矩陣乘積
【注意】:matmul函數(shù)沒有強(qiáng)制規(guī)定維度和大小,可以用利用廣播機(jī)制進(jìn)行不同維度的相乘操作。
二、常見用法
torch.matmul()也是一種類似于矩陣相乘操作的tensor連乘操作。但是它可以利用python中的廣播機(jī)制,處理一些維度不同的tensor結(jié)構(gòu)進(jìn)行相乘操作。這也是該函數(shù)與torch.bmm()區(qū)別所在。
2.1 兩個一維向量的乘積運(yùn)算
若兩個tensor都是一維的,則返回兩個向量的點(diǎn)積運(yùn)算結(jié)果:
import torch x = torch.tensor([1,2]) y = torch.tensor([3,4]) print(x,y) print(torch.matmul(x,y),torch.matmul(x,y).size())
運(yùn)行結(jié)果:
tensor([1, 2]) tensor([3, 4])
tensor(11) torch.Size([])

2.2 兩個二維矩陣的乘積運(yùn)算
若兩個tensor都是二維的,則返回兩個矩陣的矩陣相乘結(jié)果:
import torch x = torch.tensor([[1,2],[3,4]]) y = torch.tensor([[5,6,7],[8,9,10]]) print(torch.matmul(x,y),torch.matmul(x,y).size())
運(yùn)行結(jié)果:
tensor([[21, 24, 27],[47, 54, 61]]) torch.Size([2, 3])

2.3 一個一維向量和一個二維矩陣的乘積運(yùn)算
若input為一維,other為二維,則先將input的一維向量擴(kuò)充到二維(維數(shù)前面插入長度為1的新維度),然后進(jìn)行矩陣乘積,得到結(jié)果后再將此維度去掉,得到的與input的維度相同。
import torch x = torch.tensor([1,2]) y = torch.tensor([[5,6,7],[8,9,10]]) print(torch.matmul(x,y),torch.matmul(x,y).size())
運(yùn)行結(jié)果:
tensor([21, 24, 27]) torch.Size([3])
【分析】:首先將x維度從(2)擴(kuò)充為(,2),然后將x(,2) 與y(2,3)進(jìn)行相乘,得到(,3),最后去掉一維部分,得到(3)

2.4 一個二維矩陣和一個一維向量的乘積運(yùn)算
若input為二維,other為一維,則先將other的一維向量擴(kuò)充到二維(維數(shù)后面插入長度為1的新維度),然后進(jìn)行矩陣乘積,得到結(jié)果后再將此維度去掉,得到的與other的維度相同。
import torch x = torch.tensor([[1,2,3],[4,5,6]]) y = torch.tensor([7,8,9]) print(torch.matmul(x,y),'\n',torch.matmul(x,y).size())
運(yùn)行結(jié)果:
tensor([ 50, 122])
torch.Size([2])
【分析】:首先y維度從(3)擴(kuò)充為(3,),然后將x(2,3)與x(2,)進(jìn)行相乘,得到(2,),最后去掉一維部分,得到(2)
【總結(jié)】:2.3和2.4基本類似,唯一不同的是2.3中一維向量和二維矩陣的乘積運(yùn)算需要在一維向量前面插入長度為1的新維度(x為一維向量,y為二維矩陣);2.4中二維矩陣和一維向量的乘積運(yùn)算需要在一維向量后面插入長度為1的新維度(x為二維矩陣,y為一維向量)。
2.5 其他
其他的暫時用不上,有需要的可以自行查閱相關(guān)資料~
參考:https://cloud.tencent.com/developer/article/1802317
到此這篇關(guān)于PyTorch中torch.matmul()函數(shù)用法總結(jié)的文章就介紹到這了,更多相關(guān)PyTorch torch.matmul()函數(shù)用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python創(chuàng)建學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python創(chuàng)建學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-11-11
基于OpenCV目標(biāo)跟蹤實(shí)現(xiàn)人員計(jì)數(shù)器
這篇文章主要介紹了如何利用Python OpenCV這兩者來創(chuàng)建更準(zhǔn)確的人員計(jì)數(shù)器,文中的示例代碼講解詳細(xì),感興趣的小伙伴快來跟隨小編學(xué)習(xí)一下吧2022-03-03
基于OpenCV實(shí)現(xiàn)小型的圖像數(shù)據(jù)庫檢索功能
下面就使用VLAD表示圖像,實(shí)現(xiàn)一個小型的圖像數(shù)據(jù)庫的檢索程序。下面實(shí)現(xiàn)需要的功能模塊,分步驟給大家介紹的非常詳細(xì),對OpenCV圖像數(shù)據(jù)庫檢索功能感興趣的朋友跟隨小編一起看看吧2021-12-12
python定位xpath 節(jié)點(diǎn)位置的方法
今天小編就為大家分享一篇python定位xpath 節(jié)點(diǎn)位置的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
Python實(shí)現(xiàn)Mysql數(shù)據(jù)統(tǒng)計(jì)及numpy統(tǒng)計(jì)函數(shù)
這篇文章主要介紹了Python實(shí)現(xiàn)Mysql數(shù)據(jù)統(tǒng)計(jì)的實(shí)例代碼,給大家介紹了Python數(shù)據(jù)分析numpy統(tǒng)計(jì)函數(shù)的相關(guān)知識,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07
詳解Django框架中用戶的登錄和退出的實(shí)現(xiàn)
這篇文章主要介紹了詳解Django框架中用戶的登錄和退出的實(shí)現(xiàn),Django是重多Python人氣框架中最為知名的一個,需要的朋友可以參考下2015-07-07
Python繪圖實(shí)現(xiàn)臺風(fēng)路徑可視化代碼實(shí)例
這篇文章主要介紹了Python繪圖實(shí)現(xiàn)臺風(fēng)路徑可視化代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10
python處理multipart/form-data的請求方法
今天小編就為大家分享一篇python處理multipart/form-data的請求方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12

