pytorch中的廣播語(yǔ)義
pytorch的廣播語(yǔ)義(broadcasting semantics),和numpy的很像,所以可以先看看numpy的文檔:
1、什么是廣播語(yǔ)義?
官方文檔有這樣一個(gè)解釋:
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).
這句話的意思大概是:簡(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
這里,不滿足第一個(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
這里,不滿足第二個(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,滿足規(guī)則二
- 倒數(shù)第二維:x是4,y是1,滿足規(guī)則二
- 倒數(shù)第三維:x是3,y是3,滿足規(guī)則一
- 倒數(shù)第四維:x是5,y是0,滿足規(guī)則一
到此這篇關(guān)于pytorch中的廣播語(yǔ)義的文章就介紹到這了,更多相關(guān)pytorch廣播語(yǔ)義內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
實(shí)例講解Python中g(shù)lobal語(yǔ)句下全局變量的值的修改
global是Python中的一個(gè)關(guān)鍵字用來(lái),聲明一個(gè)局部變量為全局變量,這里我們來(lái)以實(shí)例講解Python中g(shù)lobal語(yǔ)句下全局變量的值的修改,需要的朋友可以參考下.2016-06-06
python np.arange 步長(zhǎng)0.1的問(wèn)題需要特別注意
這篇文章主要介紹了python np.arange 步長(zhǎng)0.1的問(wèn)題需要特別注意,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05
python 實(shí)現(xiàn)將Numpy數(shù)組保存為圖像
今天小編就為大家分享一篇python 實(shí)現(xiàn)將Numpy數(shù)組保存為圖像,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
python簡(jiǎn)單幾步獲取各種DOS命令顯示的內(nèi)容詳解流程
你會(huì)用python獲取各種DOS命令顯示的內(nèi)容核心嗎?說(shuō)的可不是返回值,是用system()函數(shù)調(diào)用windows操作系統(tǒng)的DOS命令來(lái)做點(diǎn)事情,需要的朋友可以參考下2021-10-10
pytorch中關(guān)于backward的幾個(gè)要點(diǎn)說(shuō)明
這篇文章主要介紹了pytorch中關(guān)于backward的幾個(gè)要點(diǎn)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
Python實(shí)現(xiàn)名片管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)名片管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02
Python構(gòu)建機(jī)器學(xué)習(xí)API服務(wù)的操作過(guò)程
這篇文章主要介紹了Python構(gòu)建機(jī)器學(xué)習(xí)API服務(wù)的操作過(guò)程,通過(guò)本文的指導(dǎo),讀者可以學(xué)習(xí)如何使用Python構(gòu)建機(jī)器學(xué)習(xí)模型的API服務(wù),并了解到在實(shí)際應(yīng)用中需要考慮的一些關(guān)鍵問(wèn)題和解決方案,從而為自己的項(xiàng)目提供更好的支持和服務(wù),需要的朋友可以參考下2024-04-04
python對(duì)常見(jiàn)數(shù)據(jù)類型的遍歷解析
這篇文章主要介紹了python對(duì)常見(jiàn)數(shù)據(jù)類型的遍歷解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
分析Python中設(shè)計(jì)模式之Decorator裝飾器模式的要點(diǎn)
這篇文章主要介紹了Python中設(shè)計(jì)模式之Decorator裝飾器模式模式,文中詳細(xì)地講解了裝飾對(duì)象的相關(guān)加鎖問(wèn)題,需要的朋友可以參考下2016-03-03

