<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
根據線性代數的運算規則我們知道,矩陣運算往往都是在兩個矩陣維度相同或者相匹配時才能運算。比如加減法需要兩個矩陣的維度相同,乘法需要前一個矩陣的列數與後一個矩陣的行數相等。那麼在 numpy、tensor 裡也是同樣的道理,但是在機器學習的某些演演算法中會出現兩個維度不相同也不匹配的矩陣進行運算,那麼這時候就需要用廣播機制來解決,通過廣播機制,其tensor引數可以自動擴充套件為相等大小(不需要複製資料)。下面我們以tensor為例來解釋什麼是廣播機制。
先來說下廣播機制的規則,只有遵循下面的規則兩個張量才可以進行廣播運算。
每個tensor至少有一個維度;
遍歷tensor所有維度時,從末尾開始遍歷(從右往左開始遍歷),兩個tensor存在下列情況
tensor維度相等。
tensor維度不等且其中一個維度為1或者不存在。
滿足上面的條件才可以進行廣播機制。
相同維度,一定可以 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)
輸出結果如下:
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]]])
有一個張量沒有維度,一定不可以進行 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)
輸出結果:
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
有一個張量缺少維度,一定可以進行 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)
輸出結果:
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相比缺少一個維度,根據廣播機制的規則我們從最後一個維度進行匹配,後面三個維度都一樣,張量y的缺少一個維度,於是觸發廣播機制。
兩個張量的維度不相等,其中有一個張量的對應維度為1或者缺失,一定可以進行 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)
輸出結果:
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]]]])
以上就是廣播機制的操作,只要記住幾個規則就行了,注意tensor在進行運算的時候是從後往前匹配運算的。
在進行廣播機制的時候我們要注意一個原地操作運算,什麼是原地操作運算?原地操作運算就是指改變一個tensor的值的時候,不經過複製操作,而是直接在原來的記憶體上改變它的值。在pytorch中經常加字尾“”來代表原地操作符,例:.add _()、.scatter(),原地操作不允許tensor使用廣播機制那樣來改變張量形狀維度大小,如下例子所示。
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)
輸出結果:
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]
到此這篇關於Broadcast廣播機制在Pytorch Tensor Numpy中的使用詳解的文章就介紹到這了,更多相關Pytorch Broadcast內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45