FLOPs 計算
FLOPs ? FLOPS ?
FLOPS ( Floating-point operations per second ) 是拿來衡量電腦計算能力的一個指標,常在超級電腦的介紹上看到。
FLOPs ( Floating point operations ) 是用來計算網路模型需要計算的次數。
我們今天要介紹的是 FLOPs 的計算方式 ( 兩者的差異在最後的 s 大小寫 )。
1. Cov. layer ( 卷積層 )
( 2 x Cinput x k2 -1 ) x Row x Col x Cout
上方公式中,
Cinput = 輸入的 channel 數 ; k = kernel size ; Row = 輸出的列數 ; Col = 輸出的行數 ; Cout = 輸出的 channel數
公式我們可以分成兩個部分來看
1 . 前面的括號 可以拆成 ( Cinput x k2 ) + ( Cinput x k2 -1 ) ,第一個括號代表 kernel 中每個點與圖片上同區域的每個點相乘,再乘以多少個 channel 。 後面的括號代表,乘完後的點相加,減一是因為例如 9 個點相加,會執行 8 次的加法,故減一。 執行完這部分得到一個輸出的 pixel 。
2. 後面的 乘以 Row x Col x Cout 代表執行了多少次的與 kernel 相乘。
( 此公式表示沒有 bias的情況 ,如有 bias 則去掉 -1 即可,如下所示 ↓ )
沒 bias : 2 x Cinput x k2 x Row x Col x Cout
2.Fully connected layer ( 全連結層 )
2 x I x O
I = input neurons ; O = output neurons
下圖為一個輸入為2輸出為2的網路,我們可以知道輸出的每個節點會執行 2 次的乘法 ( input 有兩個 neurons ),與 2 次的加法 ( 1次為把乘完的數字相加 ,1 次為加上 bias ) ,有兩個節點所以再乘以 2 ,得到 8 次的計算。
假設沒有 bias 公式則為 ( 2 x I -1 ) x O