神經網絡的計算量和

1. 神經網絡的利用率

當一個CNN網絡做forward時,對於硬件資源的利用情況,稱之爲利用率。

如何計算利用率?

  • 計算網絡的計算量,通常是乘累加的次數
  • 測量網絡運行耗時
  • 乘累加次數除以耗時, 計算該網絡的GFLOPS
  • 用計算的網絡GFLOPS除以硬件資源的理論GFLOPS,即利用率

2. GFLOPS

全稱:float operations per second,每秒可做浮點操作的數量。用來衡量硬件性能,等價於運算速度。該值越大,說明硬件性能越高,速度越快。量級通常在M(10e6),G(10e9),T(10e12)。例如:9.6 GFLOPS 表示每秒可做 9.6 G 次浮點操作。

FLOPs:全稱是float operations,浮點運算次數,等價於運算量。可用來衡量網絡/模型的複雜度。該值越大,表示該網絡的計算複雜度越高。

3. 網絡計算量

網絡前向計算時,卷積運算佔據耗時90%以上。因此重點關注下如何計算卷積的運算量。

爲簡化問題,以下討論認爲:卷積採用滑動窗口且,忽略非線性計算的開銷。

有卷積層的參數包括:輸入 feature map 的 CinC_{in},寬 HinH_{in},高 WinW_{in} ,輸出 feature map 的 CoutC_{out},寬 HoutH_{out},高 WoutW_{out} ,卷積核的尺寸 KK,卷積核通道等於 CinC_{in},卷積核個數等於 CoutC_{out}。則該卷積核與feature map做卷積的運算量爲:

FLOPs=(KKCin2+1)WoutHoutCout FLOPs = (K * K * C_{in} * 2 + 1 ) * W_{out} * H_{out} * C_{out}

Wout=Win/stridew,Hout=Hin/strideh W_{out} = W_{in} / stride_w, H_{out} = H_{in} / stride_h

其中的1表示偏置量。偏置值每個卷積覈對應1個,共有 CoutC_{out} 個。(wx+b)

將 FLOPS 除以 10e9 得到 GFLOPS。

參考

[1] 神經網絡計算量FLOPs: https://blog.csdn.net/zhaoyin214/article/details/83616164
[2] print_model_parm_flops: https://blog.csdn.net/junmuzi/article/details/83109660

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章