1. 程式人生 > >神經網路的利用率和

神經網路的利用率和

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 的 C i

n C_{in} ,寬 H i n H_{in}
,高 W i n W_{in} ,輸出 feature map 的 C o u t C_{out} ,寬 H o u t H_{out} ,高 W o u t W_{out} ,卷積核的尺寸 K K ,卷積核通道等於 C i n C_{in} ,卷積核個數等於 C o u t C_{out} 。則該卷積核與feature map做卷積的運算量為:

F L O P s = ( K K C i n 2 + 1 ) W o u t H o u t C o u t FLOPs = (K * K * C_{in} * 2 + 1 ) * W_{out} * H_{out} * C_{out}

W o u t = W i n / s t r i d e w , H o u t = H i n / s t r i d e h W_{out} = W_{in} / stride_w, H_{out} = H_{in} / stride_h

其中的1表示偏置量。偏置值每個卷積核對應1個,共有 C o u t C_{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