caffe中卷積的實現,參數計算,FLOPS計算

內容

1. 卷積神經網絡中卷積核維度

2.caffe中卷積的實現

3. 卷積參數的計算

4. FLOPS 的計算

5.reference


1. 卷積神經網絡中卷積核維度

一個卷積核是三維的(channel×height×width),channel 其中表示輸入的維度, 每個卷積層有若干卷積核,一個卷積核輸出的feature map是二維的,每層輸出的feature map數量和卷積核數量相等。

以經典的AlexNet爲例

輸入圖像是227×227×3(注1),conv1的卷積核參數是:
kernel_size: 11
stride: 4
num_output: 96
因此實際的卷積核維度是11×11×3,channel是輸入的圖像的第三維(如果是後面的卷積層,其卷積核的channel是與之做卷積的輸入的feature map的數量),即3,做卷積的時候,是11×11×3的卷積核和輸入圖像裏的11×11×3的塊進行卷積,得到一個值,卷積的過程是在height和width上滑動,第三維上不滑動,因此得到的feature map是二維的。

下面這個動畫動態展示了卷積的過程:

2.caffe中卷積的實現

使用im2col(caffe源碼這裏)的方法將卷積轉爲矩陣相乘,圖如下:

preview

 

3. 卷積參數的計算

對於某一個卷積層的參數parameters個數爲: 

其中  +C_{out} 表示考慮偏置

對於某一個全連接層的參數parameters個數爲:N_{in} * N_{out} + N_{out}N_{in} * N_{out} + N_{out}

其中 +N_{out} 表示考慮偏置, 如果上層是卷積層,N_{in}就是上層的輸出三維矩陣元素個數,即三個維度相乘

4. FLOPS 的計算

FLOPS:全稱是floating point operations per second,意指每秒浮點運算次數

對於某個卷積層,它的FLOPs數量爲:[(K_h * K_w * C_{in}) * C_{out} + C_{out}] * (H * W) = num\_params * (H * W),其中num\_params表示該層參數的數目, H*W表示feature map的大小.

5.reference

1.http://caffecn.cn/?/question/158

2.https://www.zhihu.com/question/28385679

3.https://blog.csdn.net/sinat_34460960/article/details/84779219

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