轉自知乎:https://zhuanlan.zhihu.com/p/86587652
1、參數量的計算
1.1 卷積網絡
假設卷積核的大小爲 k*k, 輸入channel爲M, 輸出channel爲N。
(1)bias爲True時:
則參數數量爲:k×k×M×N + N(bias的數量與輸出channel的數量是一樣的)
(2)bias爲False時:
則參數數量爲:k×k×M×N
(3)當使用BN時,還有兩個可學習的參數α和β,參數量均爲N
則參數數量爲:k×k×M×N + 3×N
常用網絡架構的參數數量:
AlexNet:62369155
VGG16:138357544
ResNet10(BasicBlock):14356544
ResNet18(BasicBlock):33161024
ResNet34(BasicBlock):63470656
ResNet50(Bottleneck):46159168
ResNet101(Bottleneck):85205312
ResNet152(Bottleneck):117364032
1.2 全連接層
假設 輸入神經元數爲M,輸出神經元數爲N,則
(1)bias爲True時:
則參數數量爲:M*N + N(bias的數量與輸出神經元數的數量是一樣的)
(2)bias爲False時:
則參數數量爲:M×N
2、計算量
2.1 卷積
假設輸入特徵圖(B,C,H,W),卷積核大小爲K×K, 輸入通道爲C,輸出通道爲N,步長stride爲S, 輸出特徵圖大小爲H2,W2.
(1)一次卷積的計算量
一個k×k的卷積,執行一次卷積操作,需要k×k次乘法操作(卷積核中每個參數都要和特徵圖上的元素相乘一次),k×k−1 次加法操作(將卷積結果,k×k 個數加起來)。所以,一次卷積操作需要的乘加次數:(K×K)+(K×K−1)=2×K×K−1
(2)在一個特徵圖上需要執行卷積需要卷積的次數
在一個特徵圖上需要執行的卷積次數:((H-k+Ph)/S +1 )×((H-k+Pw)/S +1),Ph,Pw表示在高和寬方向填充的像素,此處假定了寬高方向滑動步長和核的寬高是一樣,若不同,調整一下值即可。若不能整除,可向下取整。
(3)C個特徵圖上進行卷積運算的次數
C個輸入特徵圖上進行卷積運算的次數爲C
(4)輸出一個特徵圖通道需要的加法次數
在C個輸入特徵圖上進行卷積之後需要將卷積的結果相加,得到一個輸出特徵圖上卷積結果,C個相加需要C-1次加法,計算量爲 :(C-1)×H2×W2
(5)輸出N個特徵圖需要計算的次數
N×((C-1)×H2×W2 + (2×K×K−1)×((H-k+Ph)/S +1 )×((H-k+Pw)/S +1) ×C)
(6)一個batch需要計算的次數
B×N×((C-1)×H2×W2 + (2×K×K−1)×((H-k+Ph)/S +1 )×((H-k+Pw)/S +1) ×C)
2.1 全連接
假設 輸入神經元數爲M,輸出神經元數爲N,則
(1)先執行M次乘法;
(2)再執行M-1次加法
(3)加上bias,計算出一個神經元的計算量爲 (M+M-1+1)
(4)N個輸出神經元,則總的計算量爲 2M×N