本文是對卷積神經網絡模型參數量和浮點運算量的計算推導公式和方法,使用API自動計算這些數據請移步另一篇博客:自動計算模型參數量、FLOPs、乘加數以及所需內存等數據
1.對CNN而言,每個卷積層的參數量計算如下:
其中表示輸出通道數,
表示輸入通道數,
表示卷積核寬,
表示卷積核高。
括號內的表示一個卷積核的權重數量,+1表示bias,括號表示一個卷積核的參數量,
表示該層有
個卷積核。
若卷積核是方形的,即,則上式變為:
需要注意的是,使用Batch Normalization時不需要bias,此時計算式中的+1項去除。
2.對CNN而言,每個卷積層的運算量計算如下:
FLOPs是英文floating point operations的縮寫,表示浮點運算量,中括號內的值表示卷積操作計算出feature map中一個點所需要的運算量(乘法和加法), 表示一次卷積操作中的乘法運算量,
表示一次卷積操作中的加法運算量,+ 1 表示bias,W和H分別表示feature map的長和寬,
表示feature map的所有元素數。
若是方形卷積核,即,則有:
上面是乘運算和加運算的總和,將一次乘運算或加運算都視作一次浮點運算。
在計算機視覺論文中,常常將一個‘乘-加’組合視為一次浮點運算,英文表述為'Multi-Add',運算量正好是上面的算法減半,此時的運算量為:
3.對全連接層而言,其參數量非常容易計算:
值得注意的是,最初由feature map flatten而來的向量視為第一層全連接層,即此處的。
可以這樣理解上式:每一個輸出神經元連接著所有輸入神經元,所以有個權重,每個輸出神經元還要加一個bias。
也可以這樣理解:每一層神經元(O這一層)的權重數為,bias數量為O。
4.對全連接層而言,其運算量計算如下:
其中
中括號的值表示計算出一個神經元所需的運算量,第一個表示乘法運算量,
表示加法運算量,+1表示bias,
表示計算O個神經元的值。
分組卷積和深度分離卷積的情況待更……