Pytorch教程(十五):element-wise、Broadcasting
我們先創(chuàng)建了兩個(gè)秩為2,形狀為 2×22 \times 22×2的張量,這意味著我們有兩個(gè)軸,他們都有兩個(gè)元素的長(zhǎng)度,第一個(gè)軸的元素是數(shù)組,第二個(gè)軸的元素是數(shù)字。
兩個(gè)張量必須具有相同數(shù)量的元素才能執(zhí)行一個(gè)element-wise操作。也就是說(shuō)兩個(gè)張量必須具有相同的形狀才能執(zhí)行一個(gè)元素操作,具有相同的形狀意味著每一個(gè)對(duì)應(yīng)的軸上有相同數(shù)量的軸,并且他們的長(zhǎng)度相同。
在相應(yīng)位置的每一對(duì)元素被加在一起,產(chǎn)生一個(gè)具有相同形狀的新張量,所以加法是一個(gè)element-wise運(yùn)算。所有其他的算數(shù)運(yùn)算,比如減法、乘法、除法也是元素運(yùn)算。
我們通常用張量看到的運(yùn)算是使用標(biāo)量值的算數(shù)運(yùn)算,而下面這些例子打破了我們建立的規(guī)則,即元素的操作需要在張量有相同的形狀的前提下進(jìn)行,所有的標(biāo)量值都是零階張量,這就意味著他們沒有形狀,我們的張量t1是一個(gè)2×22 \times 22×2的二階張量,那么這時(shí)如何調(diào)整的呢?
可能想到的第一個(gè)解決方案是,操作只是簡(jiǎn)單地使用單個(gè)標(biāo)量值,并對(duì)一個(gè)張量中的每個(gè)元素進(jìn)行操作,這種邏輯是可行的,然而這有點(diǎn)誤導(dǎo)人,它打破了一個(gè)更普遍的情況,即我們沒有使用標(biāo)量的情況,要以不同的方式來(lái)思考這些操作,我們需要引入張量廣播的概念。
廣播定義了在元素操作過程中如何處理不同形狀的張量。
我們重新考慮一下t1+2運(yùn)算,標(biāo)量張量被擴(kuò)展到張量t1的形狀,然后進(jìn)行元素運(yùn)算,通過對(duì)numpy函數(shù)的廣播,我們可以看到在標(biāo)量值上的廣播是什么樣子:
下面看一個(gè)稍微復(fù)雜一點(diǎn)的情況:
即使這些張量有不同的shape,但依然可以相加,這正是得益于廣播機(jī)制,較低的秩向量t2將通過廣播進(jìn)行轉(zhuǎn)換,以匹配更高階張量t1的形狀,而元素將像往常一樣執(zhí)行。我們可以使用廣播到numpy函數(shù)來(lái)檢查廣播轉(zhuǎn)換,然后運(yùn)行操作:
可以看出t2被廣播成了shape為2×22 \times 22×2的tensor,這樣t1 + t2就是相同shape之間的操作。而這就是torch內(nèi)部自動(dòng)幫我們做的,我們無(wú)需手動(dòng)執(zhí)行廣播。
總結(jié)
以上是生活随笔為你收集整理的Pytorch教程(十五):element-wise、Broadcasting的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3000元以内投影仪推荐什么牌子?
- 下一篇: 夏普电视画面如何设置