您好,登錄后才能下訂單哦!
這篇文章主要介紹“pytorch中的廣播語義是什么”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“pytorch中的廣播語義是什么”文章能幫助大家解決問題。
官方文檔有這樣一個解釋:
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).
這句話的意思大概是:簡單的說,如果一個pytorch操作支持廣播,那么它的Tensor參數可以自動的擴展為相同的尺寸(不需要復制數據)。
按照我的理解,應該是指算法計算過程中,不同的Tensor如果size
不同,但是符合一定的規則,那么可以自動的進行維度擴展,來實現Tensor
的計算。在維度擴展的過程中,并不是真的把維度小的Tensor復制為和維度大的Tensor相同,因為這樣太浪費內存了。
首先來看標準的情況,兩個Tensor的size相同,則可以直接計算:
x = torch.empty((4, 2, 3)) y = torch.empty((4, 2, 3)) print((x+y).size())
輸出:
torch.Size([4, 2, 3])
但是,如果兩個Tensor
的維度并不相同,pytorch也是可以根據下面的兩個法則進行計算:
(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.
每個
Tensor
至少有一個維度。迭代標注尺寸時,從后面的標注開始
第一個規則要求每個參與計算的Tensor
至少有一個維度,第二個規則是指在維度迭代時,從最后一個維度開始,可以有三種情況:
維度相等
其中一個維度是1
其中一個維度不存在
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
這里,不滿足第一個規則“每個參與計算的Tensor
至少有一個維度”。
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
這里,不滿足第二個規則,因為從最后的維度開始迭代的過程中,倒數第三個維度:x是2,y是3。這并不符合第二條規則的三種情況,所以不能使用廣播語義。
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是三維的,從最后一個維度開始迭代:
最后一維:x是1,y是1,滿足規則二
倒數第二維:x是4,y是1,滿足規則二
倒數第三維:x是3,y是3,滿足規則一
倒數第四維:x是5,y是0,滿足規則一
關于“pytorch中的廣播語義是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。