亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解torch.Tensor的4種乘法

 更新時(shí)間:2020年09月03日 10:15:16   作者:da_kao_la  
這篇文章主要介紹了詳解torch.Tensor的4種乘法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

torch.Tensor有4種常見(jiàn)的乘法:*, 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)量和*一維向量為例展示上述過(guò)程。

* 標(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ù)雜,在此不做展開(kāi),可以參考官方文檔關(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

到此這篇關(guān)于詳解torch.Tensor的4種乘法的文章就介紹到這了,更多相關(guān)torch.Tensor 乘法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • OpenCV半小時(shí)掌握基本操作之圖像基礎(chǔ)操作

    OpenCV半小時(shí)掌握基本操作之圖像基礎(chǔ)操作

    這篇文章主要介紹了OpenCV基本操作之圖像基礎(chǔ)操作,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • python類方法和靜態(tài)方法詳解

    python類方法和靜態(tài)方法詳解

    這篇文章主要為大家介紹了python類方法和靜態(tài)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • python和anaconda區(qū)別以及先后安裝的問(wèn)題詳解

    python和anaconda區(qū)別以及先后安裝的問(wèn)題詳解

    Anaconda(開(kāi)源的Python包管理器)是一個(gè)python發(fā)行版,包含了conda、Python等180多個(gè)科學(xué)包及其依賴項(xiàng),下面這篇文章主要給大家介紹了關(guān)于python和anaconda區(qū)別以及先后安裝問(wèn)題的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • python實(shí)現(xiàn)控制臺(tái)輸出彩色字體

    python實(shí)現(xiàn)控制臺(tái)輸出彩色字體

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)控制臺(tái)輸出彩色字體,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • opencv繪制矩形和圓的實(shí)現(xiàn)

    opencv繪制矩形和圓的實(shí)現(xiàn)

    本文主要介紹了opencv繪制矩形和圓的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • DataFrame 數(shù)據(jù)合并實(shí)現(xiàn)(merge,join,concat)

    DataFrame 數(shù)據(jù)合并實(shí)現(xiàn)(merge,join,concat)

    這篇文章主要介紹了DataFrame 數(shù)據(jù)合并實(shí)現(xiàn)(merge,join,concat),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • pandas數(shù)據(jù)類型之Series的具體使用

    pandas數(shù)據(jù)類型之Series的具體使用

    本文主要介紹了pandas數(shù)據(jù)類型之Series的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 快速進(jìn)修Python指南之面向?qū)ο蟾呒?jí)篇

    快速進(jìn)修Python指南之面向?qū)ο蟾呒?jí)篇

    這篇文章主要為大家介紹了Java開(kāi)發(fā)者如何快速進(jìn)修Python指南之面向?qū)ο蟾呒?jí)使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 關(guān)于python字符串方法分類詳解

    關(guān)于python字符串方法分類詳解

    在本篇文章里小編給各位整理的是關(guān)于關(guān)于python字符串方法分類的知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們學(xué)習(xí)下。
    2019-08-08
  • Pycharm之快速定位到某行快捷鍵的方法

    Pycharm之快速定位到某行快捷鍵的方法

    今天小編就為大家分享一篇Pycharm之快速定位到某行快捷鍵的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01

最新評(píng)論