當前位置:網站首頁>Broadcasting機制
Broadcasting機制
2022-01-28 06:59:00 【nefu_0iq】
一、Broadcasting機制介紹
- Broadcasting(廣播)機制是numpy對不同shape的數組進行數值計算的一種方式。
- Numpy的通用函數中要求輸入的兩個tensor的shape一致。當兩個tensor的shape不一致時,會使用Broadcasting機制。
二、Broadcast機制規則
- 規則1:讓所有輸入的tensor向dim最大的tensor看齊,dim不足,前補1
- 規則2:將輸入的tensor的某一個shape為1的維度拉伸。
- 規則3:如果存在兩個tensor的shape在任何維度均不匹配,且均沒有等於1的維度,則會報錯。
三、實例說明
- Broadcasting理解
- 三部分代碼分別對應下圖的三個實例
a = torch.tensor([ [0,0,0],[10,10,10],[20,20,20],[30,30,30]]) # torch.Size([4, 3])
b = torch.tensor([ [0,1,2] , [0,1,2],[0,1,2],[0,1,2]]) # torch.Size([4, 3])
print("a + b == \n",a + b)
# 由於a和b的shape相同,不需要使用Broadcasting機制
# ---------------------------------------------------------------------
a = torch.tensor([ [0,0,0],[10,10,10],[20,20,20],[30,30,30]]) # torch.Size([4, 3])
b = torch.tensor([0,1,2]) # torch.Size([3])
print("a + b == \n",a + b)
# a.shape = [4,3] a.dim = 2; b.shape = [3], b.dim = 1, shape不同,需要使用Broadcasting機制
# 由於b.dim = 1 < a.dim = 2 , b向a看齊
# 相當於b.unsqueeze(0),使其shape變為[1,3],然後再使用expand(4,-1)使其shape變為[4,3]
# ---------------------------------------------------------------------
a = torch.tensor([[0],[10],[20],[30]]) # torch.Size([4, 1])
b = torch.tensor([0,1,2]) # torch.Size([3])
print("a + b == \n",a + b)
# a.shape = [4,1] a.dim = 2; b.shape = [3], b.dim = 1, shape不同,需要使用Broadcasting機制
# 由於b.dim = 1 < a.dim = 2 , b向a看齊
# 如果dim不同需要補齊所以b的shape變換為 [3] => [1,3]
# dim變換後,將shape為1的拉伸: a.shape變換為: [4,1] => [4,3] ; b.shape變換為: [1,3] => [4,3]
2. 簡單實際應用
1. 給你一個tensor,其shape含義為[class,students,scores]
2. 先需要將學生的所有成績+5分
a = torch.rand(4,32,8) # torch.Size([4, 32, 8])
b = torch.tensor(5) # torch.Size([])
c = a + b
- 錯誤實例
a = torch.rand(4,32,14,14)
b = torch.rand(2,32,14,14)
c = a + b
# RuntimeError: The size of tensor a (4) must match the size of tensor b (2) at non-singleton dimension 0
# 這裏出錯原因:
# Dim 0 has dim,can NOT insert and expand to same
# Dim 0 has distinct dim, NOT size 1
# NOT broadcasting-able
- 多種方式理解
- 一下例子我們用
[b,c,h,w]
[4,3,32,32] + [32,32]
: 對於所有的batch,channels,都疊加相同的picture_map,相當於疊加相同的base,使其平移。[4,3,32,32] + [3,1,1]
:對於RGB來說,增加值[4,3,32,32] + [1,1,1,1]
:對於所有像素點都增加一個值
- 一下例子我們用
版權聲明
本文為[nefu_0iq]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/01/202201280659003737.html
邊欄推薦
猜你喜歡
隨機推薦
- uniapp上傳圖片及組件傳值
- 瑞利年金險資金保障安全嗎?收益高不高啊?
- 華為手機USB連不上電腦的解决方法
- Flutter 2,移動金融應用開發
- 關於st25系列NFC標簽簡單介紹及st25TV系列用於門禁讀取時的注意事項總結
- 關於用ffmpeg轉手機視頻發現視頻長寬倒了的問題
- 函數 / 類模板--模板2
- 數組中的第k個最大的元素--優先級隊列、排序、堆、排序
- 單片機實例27——ADC0809A/D轉換器基本應用技術(硬件電路圖+匯編程序+C語言程序)
- Collection集合的學習
- 一場面試結束,某度員工從事Android 5年為何還是初級工程師?
- 3本書閱讀筆記【人月神話-Go語言實戰-研發能力持續成長路線】01
- PHP垃圾回收機制
- 【電子技術】什麼是LFSR?
- 死鎖?如何定比特到死鎖?如何修複死鎖?(jps和jstack兩個工具)
- 快樂寒假 22/01/20
- image
- 噴程序員?SURE?
- LDO分壓電阻計算小工具
- 面試之求一串字符串中每個字符的出現次數
- 【ISO15765_UDS&OBD診斷】-01-概述
- 【Mysql上分之路】第九篇:Mysql存儲引擎
- RHCE 第一次作業
- 2021.10.16我的第一篇博客:一切皆有可能!
- CTA-敏感行為-讀取IMEI
- 面試被問怎麼排查平時遇到的系統CPU飆高和頻繁GC,該怎麼回答?
- nuxt項目總結-綜合
- 自然語言處理學習筆記(一)
- C語言第一課
- 各比特大佬,Spark的重點難點系列暫時更新完畢
- 基於 esbuild 的 universal bundler 設計
- XCTFre逆向(四):insanity
- 理解什麼是真正的並發數
- JVM腦圖
- 【Pytorch(四)】學習如何使用 PyTorch 讀取並處理數據集
- 函數棧幀的創建與銷毀
- 構建神經網絡- 手寫字體識別案例
- 多模態生成模型ERNIE-VILG
- kotlin不容忽視的小細節
- 備戰一年,終於斬獲騰訊T3,我堅信成功是可以複制的