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 的 ,寬 ,高 ,輸出 feature map 的 ,寬 ,高 ,卷積核的尺寸 ,卷積核通道等於 ,卷積核個數等於 。則該卷積核與feature map做卷積的運算量爲:
其中的1表示偏置量。偏置值每個卷積覈對應1個,共有 個。(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