神經網絡中參數量以及計算量的計算

轉自知乎: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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章