pytorch單維篩選 相乘的案例
m需要和篩選的結(jié)果維度相同
>0.5運(yùn)行的結(jié)果與原來維度相同,結(jié)果是 0 1,0代不符合,1代表符合。
import torch m=torch.Tensor([0.1,0.2,0.3]).cuda() iou=torch.Tensor([0.5,0.6,0.7]) x= m * ((iou > 0.5).type(torch.cuda.FloatTensor)) print(x)
下面是把第一條與第二條變成了2:
import torch m=torch.Tensor([0.1,0.2,0.3]).cuda() iou=torch.Tensor([0.5,0.6,0.7]) a=iou > 0.5 m[[0,1,1]]=2 print(m)
下面的結(jié)果:0.2與0.3改為了2
import torch m=torch.Tensor([0.1,0.2,0.3]).cuda() iou=torch.Tensor([0.5,0.6,0.7]) a=iou > 0.5 m[a]=2 print(m)
補(bǔ)充:torch.Tensor的4種乘法
torch.Tensor有4種常見的乘法:*, torch.mul, torch.mm, torch.matmul. 本文拋磚引玉,簡(jiǎn)單敘述一下這4種乘法的區(qū)別,具體使用還是要參照官方文檔。
點(diǎn)乘
a與b做*乘法,原則是如果a與b的size不同,則以某種方式將a或b進(jìn)行復(fù)制,使得復(fù)制后的a和b的size相同,然后再將a和b做element-wise的乘法。
下面以*標(biāo)量和*一維向量為例展示上述過程。
* 標(biāo)量
Tensor與標(biāo)量k做*乘法的結(jié)果是Tensor的每個(gè)元素乘以k(相當(dāng)于把k復(fù)制成與lhs大小相同,元素全為k的Tensor).
>>> a = torch.ones(3,4) >>> a tensor([[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]]) >>> a * 2 tensor([[2., 2., 2., 2.], [2., 2., 2., 2.], [2., 2., 2., 2.]])
* 一維向量
Tensor與行向量做*乘法的結(jié)果是每列乘以行向量對(duì)應(yīng)列的值(相當(dāng)于把行向量的行復(fù)制,成為與lhs維度相同的Tensor). 注意此時(shí)要求Tensor的列數(shù)與行向量的列數(shù)相等。
>>> a = torch.ones(3,4) >>> a tensor([[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]]) >>> b = torch.Tensor([1,2,3,4]) >>> b tensor([1., 2., 3., 4.]) >>> a * b tensor([[1., 2., 3., 4.], [1., 2., 3., 4.], [1., 2., 3., 4.]])
Tensor與列向量做*乘法的結(jié)果是每行乘以列向量對(duì)應(yīng)行的值(相當(dāng)于把列向量的列復(fù)制,成為與lhs維度相同的Tensor). 注意此時(shí)要求Tensor的行數(shù)與列向量的行數(shù)相等。
>>> a = torch.ones(3,4) >>> a tensor([[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]]) >>> b = torch.Tensor([1,2,3]).reshape((3,1)) >>> b tensor([[1.], [2.], [3.]]) >>> a * b tensor([[1., 1., 1., 1.], [2., 2., 2., 2.], [3., 3., 3., 3.]])
* 矩陣
經(jīng)Arsmart在評(píng)論區(qū)提醒,增補(bǔ)一個(gè)矩陣 * 矩陣的例子,感謝Arsmart的熱心評(píng)論!
如果兩個(gè)二維矩陣A與B做點(diǎn)積A * B,則要求A與B的維度完全相同,即A的行數(shù)=B的行數(shù),A的列數(shù)=B的列數(shù)
>>> a = torch.tensor([[1, 2], [2, 3]]) >>> a * a tensor([[1, 4], [4, 9]])
broadcast
點(diǎn)積是broadcast的。broadcast是torch的一個(gè)概念,簡(jiǎn)單理解就是在一定的規(guī)則下允許高維Tensor和低維Tensor之間的運(yùn)算。broadcast的概念稍顯復(fù)雜,在此不做展開,可以參考官方文檔關(guān)于broadcast的介紹. 在torch.matmul里會(huì)有關(guān)于broadcast的應(yīng)用的一個(gè)簡(jiǎn)單的例子。
這里舉一個(gè)點(diǎn)積broadcast的例子。在例子中,a是二維Tensor,b是三維Tensor,但是a的維度與b的后兩位相同,那么a和b仍然可以做點(diǎn)積,點(diǎn)積結(jié)果是一個(gè)和b維度一樣的三維Tensor,運(yùn)算規(guī)則是:若c = a * b, 則c[i,*,*] = a * b[i, *, *],即沿著b的第0維做二維Tensor點(diǎn)積,或者可以理解為運(yùn)算前將a沿著b的第0維也進(jìn)行了expand操作,即a = a.expand(b.size()); a * b。
>>> a = torch.tensor([[1, 2], [2, 3]]) >>> b = torch.tensor([[[1,2],[2,3]],[[-1,-2],[-2,-3]]]) >>> a * b tensor([[[ 1, 4], [ 4, 9]], [[-1, -4], [-4, -9]]]) >>> b * a tensor([[[ 1, 4], [ 4, 9]], [[-1, -4], [-4, -9]]])
其實(shí),上面提到的二維Tensor點(diǎn)積標(biāo)量、二維Tensor點(diǎn)積行向量,都是發(fā)生在高維向量和低維向量之間的,也可以看作是broadcast.
torch.mul
官方文檔關(guān)于torch.mul的介紹. 用法與*乘法相同,也是element-wise的乘法,也是支持broadcast的。
下面是幾個(gè)torch.mul的例子.
乘標(biāo)量
>>> a = torch.ones(3,4) >>> a tensor([[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]]) >>> a * 2 tensor([[2., 2., 2., 2.], [2., 2., 2., 2.], [2., 2., 2., 2.]])
乘行向量
>>> a = torch.ones(3,4) >>> a tensor([[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]]) >>> b = torch.Tensor([1,2,3,4]) >>> b tensor([1., 2., 3., 4.]) >>> torch.mul(a, b) tensor([[1., 2., 3., 4.], [1., 2., 3., 4.], [1., 2., 3., 4.]])
乘列向量
>>> a = torch.ones(3,4) >>> a tensor([[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]]) >>> b = torch.Tensor([1,2,3]).reshape((3,1)) >>> b tensor([[1.], [2.], [3.]]) >>> torch.mul(a, b) tensor([[1., 1., 1., 1.], [2., 2., 2., 2.], [3., 3., 3., 3.]])
乘矩陣
例1:二維矩陣 mul 二維矩陣
>>> a = torch.tensor([[1, 2], [2, 3]]) >>> torch.mul(a,a) tensor([[1, 4], [4, 9]])
例2:二維矩陣 mul 三維矩陣(broadcast)
>>> a = torch.tensor([[1, 2], [2, 3]]) >>> b = torch.tensor([[[1,2],[2,3]],[[-1,-2],[-2,-3]]]) >>> torch.mul(a,b) tensor([[[ 1, 4], [ 4, 9]], [[-1, -4], [-4, -9]]])
torch.mm
官方文檔關(guān)于torch.mm的介紹. 數(shù)學(xué)里的矩陣乘法,要求兩個(gè)Tensor的維度滿足矩陣乘法的要求.
例子:
>>> a = torch.ones(3,4) >>> b = torch.ones(4,2) >>> torch.mm(a, b) tensor([[4., 4.], [4., 4.], [4., 4.]])
torch.matmul
官方文檔關(guān)于torch.matmul的介紹. torch.mm的broadcast版本.
例子:
>>> a = torch.ones(3,4) >>> b = torch.ones(5,4,2) >>> torch.matmul(a, b) tensor([[[4., 4.], [4., 4.], [4., 4.]], [[4., 4.], [4., 4.], [4., 4.]], [[4., 4.], [4., 4.], [4., 4.]], [[4., 4.], [4., 4.], [4., 4.]], [[4., 4.], [4., 4.], [4., 4.]]])
同樣的a和b,使用torch.mm相乘會(huì)報(bào)錯(cuò)
>>> torch.mm(a, b) Traceback (most recent call last): File "<stdin>", line 1, in <module> RuntimeError: matrices expected, got 2D, 3D tensors at /pytorch/aten/src/TH/generic/THTensorMath.cpp:2065
以上這篇pytorch單維篩選 相乘的案例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python 日志logging模塊用法簡(jiǎn)單示例
這篇文章主要介紹了Python 日志logging模塊用法,結(jié)合簡(jiǎn)單實(shí)例形式分析了Python 日志logging模塊功能、原理及日志輸出到控制臺(tái)與文件的相關(guān)操作技巧,需要的朋友可以參考下2019-10-10Python采集某網(wǎng)站文檔并保存word格式的示例
這篇文章主要介紹了Python采集某網(wǎng)站文檔并保存word格式的示例,我們平常需要下載文檔的時(shí)候,是不是發(fā)現(xiàn),要么不能下載,要么不能復(fù)制,那么我們今天來分享一下,如何用Python將這些不給下載的文檔給批量下載下來,需要的朋友可以參考下2023-07-07python中使用pymssql庫操作MSSQL數(shù)據(jù)庫
這篇文章主要給大家介紹了關(guān)于python中使用pymssql庫操作MSSQL數(shù)據(jù)庫的相關(guān)資料,最近在學(xué)習(xí)python,發(fā)現(xiàn)好像沒有對(duì)pymssql的詳細(xì)說明,于是乎把官方文檔學(xué)習(xí)一遍,重要部分做個(gè)歸檔,方便以后查閱,需要的朋友可以參考下2023-08-08Python實(shí)現(xiàn)將絕對(duì)URL替換成相對(duì)URL的方法
這篇文章主要介紹了Python實(shí)現(xiàn)將絕對(duì)URL替換成相對(duì)URL的方法,涉及Python字符串操作及正則匹配的相關(guān)技巧,需要的朋友可以參考下2015-06-06分享4個(gè)方便且好用的Python自動(dòng)化腳本
自動(dòng)化測(cè)試是把以人為驅(qū)動(dòng)的測(cè)試行為轉(zhuǎn)化為機(jī)器執(zhí)行的一種過程,直白的就是為了節(jié)省人力、時(shí)間或硬件資源,提高測(cè)試效率,這篇文章主要給大家分享介紹了3個(gè)方便且好用的Python自動(dòng)化腳本,需要的朋友可以參考下2022-02-02python變量數(shù)據(jù)類型和運(yùn)算符
這篇文章主要介紹了python變量數(shù)據(jù)類型和運(yùn)算符,不同類型的變量可以進(jìn)行的運(yùn)算是不同的,所以必須理解變量的類型,下面文章的更多相關(guān)內(nèi)容介紹,需要的小伙伴可以參考一下2022-07-07淺談Python3中strip()、lstrip()、rstrip()用法詳解
這篇文章主要介紹了淺談Python3中strip()、lstrip()、rstrip()用法詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-04-04