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

參考: