以比較簡單的lenet網路模型為例,我們嘗試推導主要算子的算力計算公式,并看一下它的各層理論算力要求,
lenet網路結構

以第二層為例,他的輸入尺寸是1*28*28*1的一張feature map,卷積核為 5*5*1,stride_h和stride_w均為1, pad_h,pad_w均為0,說明不做padding,輸出feature map會縮小,

卷積層的算力評估方法
卷積模型,典型的卷積層計算如下圖所示:

如果輸入特征圖的寬高分別是,輸出特征圖的寬高分別是
,上下左右填充分別為
,水平和垂直方向上的卷積步長為
,卷集核寬高分別為
,則輸出特征圖的尺寸計算公式如下:
根據此公式,可以計算得到:
所以,輸出feature map的尺寸是24*24,
卷積算力計算

每做一次卷積,生成一個右圖中的黃色方塊,假設卷積核個數為M,通道數為C,所以卷積總的浮點計算量如下:

所以,帶入資料得到:
![]()
之所以乘以2是因為每次卷積都要分成乘法和加法兩次運算,也就是總共需要576000次的浮點數運算,
實際測量
前面我們已經計算出lenet第二層卷積層的理論浮點計算量為28800.pegasus有分析工具也可以對模型進行算力分析,我們用分析工具來驗證一下,上面的計算是否正確:
測驗命令為:
pegasus measure --model lenet.json
輸出結果如下圖所示:

最后輸出總的結果為:
sum_macc:2.29M sum_param:420.41K sum_activation:20.51K
同時生成了analysis.json檔案,里面列出了各層的算力需求清單,我們直接看第二層conv層面的分析資料,注意看第40行,macc值為:288000,和理論值差著一個因子2,原因何在?

這里直接計算macc表示MAC而不是FOPS了,如果計算FOPS,需要乘以2,計算MACC,就不需要了,應該是這樣的吧,
![]()
這樣就和工具分析一致了,
結束!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/423861.html
標籤:AI
上一篇:Anchor free系列網路之YOLOX原始碼逐行講解篇(四)--coco資料載入及分布式訓練
下一篇:深度學習C語言——結構體
