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

Pytorch中的廣播機(jī)制詳解(Broadcast)

 更新時(shí)間:2023年01月03日 09:51:50   作者:cv_lhp  
這篇文章主要介紹了Pytorch中的廣播機(jī)制詳解(Broadcast),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

1. Pytorch中的廣播機(jī)制

如果一個(gè)Pytorch運(yùn)算支持廣播的話,那么就意味著傳給這個(gè)運(yùn)算的參數(shù)會(huì)被自動(dòng)擴(kuò)張成相同的size,在不復(fù)制數(shù)據(jù)的情況下就能進(jìn)行運(yùn)算,整個(gè)過程可以做到避免無(wú)用的復(fù)制,達(dá)到更高效的運(yùn)算。

廣播機(jī)制實(shí)際上是在運(yùn)算過程中,去處理兩個(gè)形狀不同向量的一種手段。

pytorch中的廣播機(jī)制和numpy中的廣播機(jī)制一樣, 因?yàn)槎际菙?shù)組的廣播機(jī)制。

2. 廣播機(jī)制的理解

以數(shù)組A和數(shù)組B的相加為例, 其余數(shù)學(xué)運(yùn)算同理

核心:如果相加的兩個(gè)數(shù)組的shape不同, 就會(huì)觸發(fā)廣播機(jī)制:

1)程序會(huì)自動(dòng)執(zhí)行操作使得A.shape==B.shape;

2)對(duì)應(yīng)位置進(jìn)行相加運(yùn)算,結(jié)果的shape是:A.shape和B.shape對(duì)應(yīng)位置的最大值,比如:A.shape=(1,9,4),B.shape=(15,1,4),那么A+B的shape是(15,9,4)

3. 兩個(gè)張量進(jìn)行廣播機(jī)制的條件

3.1 兩個(gè)張量都至少有一個(gè)維度

#像下面這種情況下就不行,因?yàn)閤不滿足這個(gè)條件。
x=torch.empty((0,))
y=torch.empty(2,2)

3.2 按從右往左順序看兩個(gè)張量的每一個(gè)維度,x和y每個(gè)對(duì)應(yīng)著的兩個(gè)維度都需要能夠匹配上。

什么情況下算是匹配上了?滿足下面的條件就可以:

  • a.這兩個(gè)維度的大小相等
  • b. 某個(gè)維度 一個(gè)張量有,一個(gè)張量沒有
  • c.某個(gè)維度 一個(gè)張量有,一個(gè)張量也有但大小是1

如下舉例:

x=torch.empty(5,3,4,1)
y=torch.empty( 3,1,1)

如上面代碼中,首先將兩個(gè)張量維度向右靠齊,從右往左看,兩個(gè)張量第四維大小相等,都為1,滿足上面條件a;第三個(gè)維度大小不相等,但第二個(gè)張量第三維大小為1,滿足上面條件b;第二個(gè)維度大小相等都為3,滿足上面條件a;第一個(gè)維度第一個(gè)張量有,第二個(gè)張量沒有,滿足上面條件b,因此兩個(gè)張量每個(gè)維度都符合上面廣播條件,因此可以進(jìn)行廣播。

兩個(gè)張量維度從右往左看,如果出現(xiàn)兩個(gè)張量在某個(gè)維度位置上面,維度大小不相等,且兩個(gè)維度大小沒有一個(gè)是1,那么這兩個(gè)張量一定不能進(jìn)行廣播。

4. 當(dāng)兩個(gè)張量滿足可廣播條件后

具體怎么進(jìn)行廣播

x=torch.empty(5,3,4,1)
y=torch.empty( 3,1,1)

如上面代碼所示:

a. 首先第一步,將上面條件b的類型變成條件c的類型,也即是把第二個(gè)張量在缺失維度的位置上新增一個(gè)維度,維度大小為1,新增的維度如下面所示。

統(tǒng)一前:
x=torch.empty(5,3,4,1)
y=torch.empty( 3,1,1)
統(tǒng)一后:
x=torch.empty(5,3,4,1)
y=torch.empty(1,3,1,1)

b. 第二步,x、y對(duì)應(yīng)維度不等的位置,把size為1的維度會(huì)被廣播得和對(duì)應(yīng)維度一樣大,比如y中0維的1會(huì)變成5,y中2維的1會(huì)變成4,最后兩個(gè)張量的維度大小變成一樣,然后再進(jìn)行張量運(yùn)算,轉(zhuǎn)變的維度如下所示。

統(tǒng)一前:
x=torch.empty(5,3,4,1)
y=torch.empty(1,3,1,1)
統(tǒng)一后:
x=torch.empty(5,3,4,1)
y=torch.empty(5,3,4,1)

5. 從空間上理解廣播機(jī)制

5.1 一維張量進(jìn)行廣播,b被自動(dòng)廣播得和a一樣的維度大小,完成了張量相乘運(yùn)算,如下圖所示。

a = torch.tensor([1,2,3])
b = torch.tensor([2])
c = a*b
a,a.shape,b,b.shape,c,c.shape

輸出結(jié)果如下:

(tensor([1, 2, 3]),
 torch.Size([3]),
 tensor([2]),
 torch.Size([1]),
 tensor([2, 4, 6]),
 torch.Size([3]))

從空間上理解一維張量進(jìn)行廣播

5.1 二維張量進(jìn)行廣播,b被自動(dòng)廣播得和a一樣的維度大小,完成了張量相加運(yùn)算,如下圖所示。

a = torch.tensor([[0],[10],[20],[30]])
b = torch.tensor([1,2,3])
c = a+b
a,a.shape,b,b.shape,c,c.shape

輸出結(jié)果如下:

(tensor([[ 0],
         [10],
         [20],
         [30]]),
 torch.Size([4, 1]),
 tensor([1, 2, 3]),
 torch.Size([3]),
 tensor([[ 1,  2,  3],
         [11, 12, 13],
         [21, 22, 23],
         [31, 32, 33]]),
 torch.Size([4, 3]))

從空間上理解二維張量進(jìn)行廣播

上面二維張量和一維張量相加運(yùn)算進(jìn)行廣播過程為:a的形狀是(4,1),b的形狀是(3),如果a和b要匹配上,第一步給b新添一個(gè)維度,我們有:a的形狀是(4,1),b的形狀是(1,3);第二步二者各自把為1的維度進(jìn)行廣播,就如上圖中那樣進(jìn)行廣播,最后運(yùn)算完成。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python編程實(shí)現(xiàn)微信企業(yè)號(hào)文本消息推送功能示例

    Python編程實(shí)現(xiàn)微信企業(yè)號(hào)文本消息推送功能示例

    這篇文章主要介紹了Python編程實(shí)現(xiàn)微信企業(yè)號(hào)文本消息推送功能,結(jié)合實(shí)例形式分析了Python微信企業(yè)號(hào)文本消息推送接口的調(diào)用相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • Python制作動(dòng)態(tài)詞頻條形圖的全過程

    Python制作動(dòng)態(tài)詞頻條形圖的全過程

    說(shuō)起動(dòng)態(tài)圖表,最火的莫過于動(dòng)態(tài)條形圖了,下面這篇文章主要給大家介紹了關(guān)于Python制作動(dòng)態(tài)詞頻條形圖的全過程,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-11-11
  • 在Ubuntu系統(tǒng)下安裝使用Python的GUI工具wxPython

    在Ubuntu系統(tǒng)下安裝使用Python的GUI工具wxPython

    這篇文章主要介紹了在Ubuntu系統(tǒng)下安裝使用Python的GUI工具wxPython的方法,wxPython可以為Python提供強(qiáng)大的圖形化界面開發(fā)支持,需要的朋友可以參考下
    2016-02-02
  • 使用Python操作ArangoDB的方法步驟

    使用Python操作ArangoDB的方法步驟

    這篇文章主要介紹了使用Python操作ArangoDB的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • python logging日志模塊原理及操作解析

    python logging日志模塊原理及操作解析

    這篇文章主要介紹了python logging日志模塊原理及操作解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Python實(shí)現(xiàn)用手機(jī)監(jiān)控遠(yuǎn)程控制電腦的方法

    Python實(shí)現(xiàn)用手機(jī)監(jiān)控遠(yuǎn)程控制電腦的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)用手機(jī)監(jiān)控遠(yuǎn)程控制電腦的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 最新評(píng)論

    福海县| 莱阳市| 芮城县| 信丰县| 遂溪县| 深泽县| 乌拉特后旗| 襄垣县| 天镇县| 新疆| 洛宁县| 贞丰县| 梅州市| 汉源县| 广饶县| 盐池县| 错那县| 蕉岭县| 玉田县| 舞钢市| 塔城市| 长顺县| 鄂州市| 祥云县| 巩义市| 河西区| 东台市| 浏阳市| 壶关县| 双城市| 天台县| 石城县| 绥德县| 义乌市| 拉萨市| 昂仁县| 健康| 新河县| 修武县| 石屏县| 阿巴嘎旗|