本文是對卷積神經(jīng)網(wǎng)絡模型參數(shù)量和浮點運算量的計算推導公式和方法绣夺,使用API自動計算這些數(shù)據(jù)請移步另一篇博客:自動計算模型參數(shù)量森篷、FLOPs酝陈、乘加數(shù)以及所需內(nèi)存等數(shù)據(jù)
1.對CNN而言,每個卷積層的參數(shù)量計算如下:
其中表示輸出通道數(shù)翼虫,表示輸入通道數(shù)屑柔,表示卷積核寬,表示卷積核高珍剑。
括號內(nèi)的表示一個卷積核的權重數(shù)量掸宛,+1表示bias,括號表示一個卷積核的參數(shù)量招拙,表示該層有個卷積核唧瘾。
若卷積核是方形的,即别凤,則上式變?yōu)椋?br>
需要注意的是饰序,使用Batch Normalization時不需要bias,此時計算式中的+1項去除规哪。
2.對CNN而言求豫,每個卷積層的運算量計算如下:
FLOPs是英文floating point operations的縮寫,表示浮點運算量,中括號內(nèi)的值表示卷積操作計算出feature map中一個點所需要的運算量(乘法和加法)蝠嘉, 表示一次卷積操作中的乘法運算量最疆,表示一次卷積操作中的加法運算量,+ 1 表示bias蚤告,W和H分別表示feature map的長和寬努酸,表示feature map的所有元素數(shù)。
若是方形卷積核罩缴,即蚊逢,則有:
上面是乘運算和加運算的總和,將一次乘運算或加運算都視作一次浮點運算箫章。
在計算機視覺論文中烙荷,常常將一個‘乘-加’組合視為一次浮點運算,英文表述為'Multi-Add'檬寂,運算量正好是上面的算法減半终抽,此時的運算量為:
3.對全連接層而言,其參數(shù)量非常容易計算:
值得注意的是桶至,最初由feature map flatten而來的向量視為第一層全連接層昼伴,即此處的。
可以這樣理解上式:每一個輸出神經(jīng)元連接著所有輸入神經(jīng)元镣屹,所以有個權重圃郊,每個輸出神經(jīng)元還要加一個bias。
也可以這樣理解:每一層神經(jīng)元(O這一層)的權重數(shù)為女蜈,bias數(shù)量為O持舆。
4.對全連接層而言,其運算量計算如下:
其中
中括號的值表示計算出一個神經(jīng)元所需的運算量伪窖,第一個表示乘法運算量逸寓,表示加法運算量,+1表示bias覆山,表示計算O個神經(jīng)元的值竹伸。
分組卷積和深度分離卷積的情況待更……