CNN基礎--卷積層計算、卷積層引數量、卷積層計算量
【一、卷積層的計算】
(1)卷積核如何工作
如上圖,
的卷積核作用於輸入資料,
對應數值相乘再相加
,得到該次計算結果
,卷積核在輸入資料上按照步長
向右/向下移動,依次計算得到後續數值,如下圖:
(2)卷積層feature map大小計算:
卷積層輸出feature map大小計算公式:
(一般向下取整)。
下圖為卷積核的移動演示圖:
no padding, stride=1
padding=1, stride=2
【二、卷積層的引數量】
卷積層的引數:
filter
,若一個
的卷積核,其引數為
個;再加上通道數,其引數就是:
。
(1)普通卷積層引數計算:
有一張通道為
,大小為
的圖片,卷積核大小為:
,輸出通道數為
,則一個卷積核的引數
;則
個卷積核的引數為
, 其中最後的
為偏置項引數。
(2)池化層引數計算:
池化(Pooling):也稱為欠取樣或下采樣;主要用於特徵降維,壓縮資料和引數的數量,減小過擬合,同時提高模型的容錯性;pooling在不同的 depth 上是分開執行的,池化操作是分開應用到各個特徵圖的,因此池化不需要引數控制。
(3)全連線層引數計算:
例如某一網路最後一層卷積層輸出的大小為
,全連線層輸出尺寸為
;則需卷積層的尺寸為:
,所以所需引數為
。(引數量巨大,這也是為什麼說
全連線層引數冗餘
的原因,全連線層引數就可佔整個網路引數80%左右)
【三、卷積層的計算量】
(1)普通卷積層的計算量
進行一次卷積操作的計算量,應該如何計算呢?
卷積層計算量 = 卷積矩陣操作 + 融合操作 + 偏置項操作
注意:其中矩陣操作包括:先乘法,再加法
若有一張通道為
,大小為
的圖片,卷積核大小為:
,
為
為
輸出通道數為
,其輸出feature map的大小為
,feature map中的每一個畫素點,都是
個
共同作用於
的圖片計算一次得到的。
對於feature map上某一通道的某一點:
它的卷積矩陣操作計算量為
其中
代表矩陣乘法次數,
代表矩陣加法次數,
代表通道融合操作,偏置項操作計算量等於輸出通道數
所以feature map中某一通道的一個畫素點的計算量為:
。
對於整個feature map:
計算量 = 單個通道中單個畫素點的計算量 * feature map的大小*輸出通道數
即
,這僅僅是單張圖片的計算量,若是多張圖片,則需要乘以batch size。
(2)全連線層的計算量
若需對
的資料進行全連線操作,其輸出尺寸為
(即1*1024*1*1),其
,則所需計算量為:
其中
為輸出通道數,
為輸出feature map尺寸,
為某一通道feature map中某一畫素的矩陣操作乘法的計算量,
為某一通道feature map中某一畫素的矩陣操作加法的計算量,
為通道融合加法的計算量,最後的
為偏置項操作計算量。
因此可以發現:減少網路引數應主要針對全連線層;進行計算量最佳化時,重點應放在卷積層。
如有錯誤,還請指正。