最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Broadcast廣播機(jī)制在Pytorch Tensor Numpy中的使用詳解

 更新時(shí)間:2022年08月17日 11:05:02   作者:I松風(fēng)水月  
python中Broadcast機(jī)制非常實(shí)用,在python中的廣播機(jī)制其實(shí)很簡(jiǎn)單,下方主要介紹Broadcast廣播機(jī)制在Pytorch Tensor Numpy中的使用,希望對(duì)你有所幫助

1.什么是廣播機(jī)制

根據(jù)線性代數(shù)的運(yùn)算規(guī)則我們知道,矩陣運(yùn)算往往都是在兩個(gè)矩陣維度相同或者相匹配時(shí)才能運(yùn)算。比如加減法需要兩個(gè)矩陣的維度相同,乘法需要前一個(gè)矩陣的列數(shù)與后一個(gè)矩陣的行數(shù)相等。那么在 numpy、tensor 里也是同樣的道理,但是在機(jī)器學(xué)習(xí)的某些算法中會(huì)出現(xiàn)兩個(gè)維度不相同也不匹配的矩陣進(jìn)行運(yùn)算,那么這時(shí)候就需要用廣播機(jī)制來(lái)解決,通過廣播機(jī)制,其tensor參數(shù)可以自動(dòng)擴(kuò)展為相等大?。ú恍枰獜?fù)制數(shù)據(jù))。下面我們以tensor為例來(lái)解釋什么是廣播機(jī)制。

2.廣播機(jī)制的規(guī)則

先來(lái)說下廣播機(jī)制的規(guī)則,只有遵循下面的規(guī)則兩個(gè)張量才可以進(jìn)行廣播運(yùn)算。

每個(gè)tensor至少有一個(gè)維度;

遍歷tensor所有維度時(shí),從末尾開始遍歷(從右往左開始遍歷),兩個(gè)tensor存在下列情況

tensor維度相等。

tensor維度不等且其中一個(gè)維度為1或者不存在。

滿足上面的條件才可以進(jìn)行廣播機(jī)制。

3.代碼舉例

相同維度,一定可以 broadcast:

import torch
x = torch.rand(1, 2, 3)
y = torch.rand(1, 2, 3)
z = x + y
print(x.shape)
print(y.shape)
print(z.shape)
print(x)
print(y)
print(z)

輸出結(jié)果如下:

torch.Size([1, 2, 3])
torch.Size([1, 2, 3])
torch.Size([1, 2, 3])
tensor([[[0.0322, 0.2378, 0.4711],
         [0.9191, 0.0802, 0.4002]]])
tensor([[[0.5645, 0.9541, 0.3089],
         [0.7633, 0.7400, 0.7507]]])
tensor([[[0.5966, 1.1919, 0.7800],
         [1.6825, 0.8202, 1.1509]]])

有一個(gè)張量沒有維度,一定不可以進(jìn)行 broadcast:

import torch
x = torch.rand(0)
y = torch.rand(1, 2, 3)
print(x.shape)
print(y.shape)
z = x + y
print(z.shape)
print(x)
print(y)
print(z)

輸出結(jié)果:

torch.Size([0])
torch.Size([1, 2, 3])
Traceback (most recent call last):
  File "D:/program/Test/broadcast/test.py", line 8, in <module>
    z = x + y
RuntimeError: The size of tensor a (0) must match the size of tensor b (3) at non-singleton dimension 2

有一個(gè)張量缺少維度,一定可以進(jìn)行 broadcast:

import torch
x = torch.rand(1, 2, 3, 4)
y = torch.rand(2, 3, 4)
print(x.shape)
print(y.shape)
z = x + y
print(z.shape)
print(x)
print(y)
print(z)

輸出結(jié)果:

torch.Size([1, 2, 3, 4])
torch.Size([2, 3, 4])
torch.Size([1, 2, 3, 4])
tensor([[[[0.0094, 0.1863, 0.2657, 0.3782],
          [0.3296, 0.7454, 0.2080, 0.4156],
          [0.2092, 0.5414, 0.1053, 0.3872]],

         [[0.8161, 0.3554, 0.7352, 0.2116],
          [0.7459, 0.1662, 0.7555, 0.4548],
          [0.2611, 0.0353, 0.1862, 0.5948]]]])
tensor([[[0.4637, 0.3938, 0.2039, 0.3892],
         [0.4146, 0.8713, 0.3947, 0.5345],
         [0.2401, 0.3800, 0.3747, 0.8381]],

        [[0.0459, 0.1242, 0.3529, 0.1527],
         [0.2361, 0.2850, 0.8671, 0.8040],
         [0.6575, 0.4075, 0.8156, 0.2638]]])
tensor([[[[0.4730, 0.5801, 0.4695, 0.7674],
          [0.7442, 1.6167, 0.6027, 0.9501],
          [0.4493, 0.9214, 0.4800, 1.2253]],

         [[0.8620, 0.4796, 1.0881, 0.3643],
          [0.9820, 0.4512, 1.6227, 1.2588],
          [0.9186, 0.4428, 1.0018, 0.8586]]]])

上面的張量y跟張量x相比缺少一個(gè)維度,根據(jù)廣播機(jī)制的規(guī)則我們從最后一個(gè)維度進(jìn)行匹配,后面三個(gè)維度都一樣,張量y的缺少一個(gè)維度,于是觸發(fā)廣播機(jī)制。

兩個(gè)張量的維度不相等,其中有一個(gè)張量的對(duì)應(yīng)維度為1或者缺失,一定可以進(jìn)行 broadcast:

import torch
x = torch.rand(1, 2, 3, 4)
y = torch.rand(2, 1, 1)
print(x.shape)
print(y.shape)
z = x + y
print(z.shape)
print(x)
print(y)
print(z)

輸出結(jié)果:

torch.Size([1, 2, 3, 4])
torch.Size([2, 1, 1])
torch.Size([1, 2, 3, 4])
tensor([[[[0.8670, 0.0134, 0.7929, 0.4109],
          [0.3595, 0.8457, 0.2819, 0.8470],
          [0.5040, 0.9281, 0.9161, 0.7305]],

         [[0.3798, 0.3866, 0.4680, 0.5744],
          [0.6984, 0.6501, 0.2235, 0.3099],
          [0.9861, 0.8598, 0.7635, 0.3238]]]])
tensor([[[0.3393]],

        [[0.1775]]])
tensor([[[[1.2062, 0.3527, 1.1322, 0.7501],
          [0.6987, 1.1850, 0.6212, 1.1863],
          [0.8433, 1.2674, 1.2554, 1.0698]],

         [[0.5574, 0.5641, 0.6455, 0.7519],
          [0.8759, 0.8276, 0.4010, 0.4875],
          [1.1636, 1.0373, 0.9410, 0.5013]]]])

以上就是廣播機(jī)制的操作,只要記住幾個(gè)規(guī)則就行了,注意tensor在進(jìn)行運(yùn)算的時(shí)候是從后往前匹配運(yùn)算的。

4.原地操作

在進(jìn)行廣播機(jī)制的時(shí)候我們要注意一個(gè)原地操作運(yùn)算,什么是原地操作運(yùn)算?原地操作運(yùn)算就是指改變一個(gè)tensor的值的時(shí)候,不經(jīng)過復(fù)制操作,而是直接在原來(lái)的內(nèi)存上改變它的值。在pytorch中經(jīng)常加后綴“”來(lái)代表原地操作符,例:.add _()、.scatter(),原地操作不允許tensor使用廣播機(jī)制那樣來(lái)改變張量形狀維度大小,如下例子所示。

import torch
x = torch.rand(1,3,1)
y = torch.rand(3,1,7)
print(x.shape)
print(y.shape)
z = x.add_(y)
print(z.shape)
print(x)
print(y)
print(z)

輸出結(jié)果:

torch.Size([1, 3, 1])
torch.Size([3, 1, 7])
Traceback (most recent call last):
  File "D:/program/Test/broadcast/test.py", line 8, in <module>
    z = x.add_(y)
RuntimeError: output with shape [1, 3, 1] doesn't match the broadcast shape [3, 3, 7]

到此這篇關(guān)于Broadcast廣播機(jī)制在Pytorch Tensor Numpy中的使用詳解的文章就介紹到這了,更多相關(guān)Pytorch Broadcast內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue的el-scrollbar實(shí)現(xiàn)自定義滾動(dòng)

    Vue的el-scrollbar實(shí)現(xiàn)自定義滾動(dòng)

    本篇文章給大家分享了Vue的el-scrollbar實(shí)現(xiàn)自定義滾動(dòng)實(shí)現(xiàn)的過程和實(shí)例代碼,對(duì)此有需要的朋友可以參考下。
    2018-05-05
  • Python實(shí)現(xiàn)定時(shí)精度可調(diào)節(jié)的定時(shí)器

    Python實(shí)現(xiàn)定時(shí)精度可調(diào)節(jié)的定時(shí)器

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)定時(shí)精度可調(diào)節(jié)的定時(shí)器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 解決pycharm remote deployment 配置的問題

    解決pycharm remote deployment 配置的問題

    今天小編就為大家分享一篇解決pycharm remote deployment 配置的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2019-06-06
  • 五個(gè)方便好用的Python自動(dòng)化辦公腳本的實(shí)現(xiàn)

    五個(gè)方便好用的Python自動(dòng)化辦公腳本的實(shí)現(xiàn)

    在沒有人工干預(yù)的情況下,機(jī)器可以自己完成各項(xiàng)任務(wù),這大大提升了工作效率。Python因?yàn)檎Z(yǔ)法簡(jiǎn)潔易懂,而且有豐富的第三方工具庫(kù),所以非常適合編寫自動(dòng)化腳本,本文就為大家?guī)?lái)了五個(gè)這樣的腳本,需要的可以參考一下
    2022-01-01
  • Pandas過濾dataframe中包含特定字符串的數(shù)據(jù)方法

    Pandas過濾dataframe中包含特定字符串的數(shù)據(jù)方法

    今天小編就為大家分享一篇Pandas過濾dataframe中包含特定字符串的數(shù)據(jù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-11-11
  • python打印經(jīng)典故事從前有座山的幾種寫法

    python打印經(jīng)典故事從前有座山的幾種寫法

    在定義了函數(shù)之后,就可以使用該函數(shù)了,下面這篇文章主要給大家介紹了關(guān)于python打印經(jīng)典故事從前有座山的幾種寫法,通過這個(gè)有意思的實(shí)例幫助大家學(xué)習(xí)python,需要的朋友可以參考下
    2022-05-05
  • tensorflow指定GPU與動(dòng)態(tài)分配GPU memory設(shè)置

    tensorflow指定GPU與動(dòng)態(tài)分配GPU memory設(shè)置

    今天小編就為大家分享一篇tensorflow指定GPU與動(dòng)態(tài)分配GPU memory設(shè)置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2020-02-02
  • 利用OpenCV給彩色圖像添加椒鹽噪聲的方法

    利用OpenCV給彩色圖像添加椒鹽噪聲的方法

    椒鹽噪聲是數(shù)字圖像中的常見噪聲,一般是圖像傳感器、傳輸信道及解碼處理等產(chǎn)生的黑白相間的亮暗點(diǎn)噪聲,椒鹽噪聲常由圖像切割產(chǎn)生,這篇文章主要給大家介紹了關(guān)于利用OpenCV給彩色圖像添加椒鹽噪聲的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • 利用python?pywifi實(shí)現(xiàn)破解WiFi密碼

    利用python?pywifi實(shí)現(xiàn)破解WiFi密碼

    家里沒有怎么辦,只要你會(huì)Python,辦法總比困難多,本文就利用pywifi?這個(gè)庫(kù)實(shí)驗(yàn)一下如何破解Wi-Fi?密碼,注意,該方法僅可用來(lái)研究學(xué)習(xí)所用,需要的朋友可以參考下
    2024-03-03
  • python實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(面向?qū)ο?

    python實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(面向?qū)ο?

    這篇文章主要介紹了python實(shí)現(xiàn)面向?qū)ο蟀鎸W(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06

最新評(píng)論

峨山| 应城市| 启东市| 辽阳市| 高密市| 涟源市| 梨树县| 云南省| 宁海县| 鄂伦春自治旗| 花莲市| 巴彦淖尔市| 台中县| 龙海市| 辉县市| 清徐县| 渝北区| 文登市| 蚌埠市| 大关县| 崇左市| 尉氏县| 尼勒克县| 苗栗县| 确山县| 哈巴河县| 保康县| 纳雍县| 崇文区| 大足县| 陇西县| 柘城县| 巫山县| 饶平县| 乐业县| 长春市| 南乐县| 尤溪县| 吉安市| 林口县| 金门县|