溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

pytorch中的廣播語(yǔ)義是什么

發(fā)布時(shí)間:2022-03-09 13:49:50 來(lái)源:億速云 閱讀:151 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹“pytorch中的廣播語(yǔ)義是什么”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“pytorch中的廣播語(yǔ)義是什么”文章能幫助大家解決問(wèn)題。

1、什么是廣播語(yǔ)義?

官方文檔有這樣一個(gè)解釋?zhuān)?/strong>

In short, if a PyTorch operation supports broadcast, then its Tensor arguments can be automatically expanded to be of equal sizes (without making copies of the data).

這句話(huà)的意思大概是:簡(jiǎn)單的說(shuō),如果一個(gè)pytorch操作支持廣播,那么它的Tensor參數(shù)可以自動(dòng)的擴(kuò)展為相同的尺寸(不需要復(fù)制數(shù)據(jù))。

按照我的理解,應(yīng)該是指算法計(jì)算過(guò)程中,不同的Tensor如果size不同,但是符合一定的規(guī)則,那么可以自動(dòng)的進(jìn)行維度擴(kuò)展,來(lái)實(shí)現(xiàn)Tensor的計(jì)算。在維度擴(kuò)展的過(guò)程中,并不是真的把維度小的Tensor復(fù)制為和維度大的Tensor相同,因?yàn)檫@樣太浪費(fèi)內(nèi)存了。

2、廣播語(yǔ)義的規(guī)則

首先來(lái)看標(biāo)準(zhǔn)的情況,兩個(gè)Tensor的size相同,則可以直接計(jì)算:

x = torch.empty((4, 2, 3))
y = torch.empty((4, 2, 3)) 
print((x+y).size())

輸出:

torch.Size([4, 2, 3]) 

但是,如果兩個(gè)Tensor的維度并不相同,pytorch也是可以根據(jù)下面的兩個(gè)法則進(jìn)行計(jì)算:

  • (1)Each tensor has at least one dimension.

  • (2)When iterating over the dimension sizes, starting at the trailing dimension, the dimension sizes must either be equal, one of them is 1, or one of them does not exist.

  • 每個(gè)Tensor至少有一個(gè)維度。

  • 迭代標(biāo)注尺寸時(shí),從后面的標(biāo)注開(kāi)始

第一個(gè)規(guī)則要求每個(gè)參與計(jì)算的Tensor至少有一個(gè)維度,第二個(gè)規(guī)則是指在維度迭代時(shí),從最后一個(gè)維度開(kāi)始,可以有三種情況:

  • 維度相等

  • 其中一個(gè)維度是1

  • 其中一個(gè)維度不存在

3、不符合廣播語(yǔ)義的例子

x = torch.empty((0, ))
y = torch.empty((2, 3)) 
print((x + y).size())

輸出:

RuntimeError: The size of tensor a (0) must match  the size of tensor b (3) at non-singleton dimension 1 

這里,不滿(mǎn)足第一個(gè)規(guī)則“每個(gè)參與計(jì)算的Tensor至少有一個(gè)維度”。

x = torch.empty(5, 2, 4, 1) 
y = torch.empty(3, 1, 1) 
print((x + y).size())

輸出:

RuntimeError: The size of tensor a (2) must match 
the size of tensor b (3) at non-singleton dimension 1 

這里,不滿(mǎn)足第二個(gè)規(guī)則,因?yàn)閺淖詈蟮木S度開(kāi)始迭代的過(guò)程中,倒數(shù)第三個(gè)維度:x是2,y是3。這并不符合第二條規(guī)則的三種情況,所以不能使用廣播語(yǔ)義。

4、符合廣播語(yǔ)義的例子

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

輸出:

torch.Size([5, 3, 4, 1]) 

x是四維的,y是三維的,從最后一個(gè)維度開(kāi)始迭代:

  • 最后一維:x是1,y是1,滿(mǎn)足規(guī)則二 

  • 倒數(shù)第二維:x是4,y是1,滿(mǎn)足規(guī)則二 

  • 倒數(shù)第三維:x是3,y是3,滿(mǎn)足規(guī)則一

  • 倒數(shù)第四維:x是5,y是0,滿(mǎn)足規(guī)則一 

關(guān)于“pytorch中的廣播語(yǔ)義是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI