卷積層儲存量和計算量

2021-08-14 23:11:23 字數 1007 閱讀 8842

--- 《儲存量》 ---

對某一層卷積層,卷積引數數量為:

p = c(上一層卷積數量) * kh(卷積核高) * kw(卷積核寬) * n(卷積核數量)

分解後則是

p = p1+p2 = c(上一層卷積數量) * kh(卷積核高) * d(分解核數量) + d(分解核數量) * kw(卷積核寬) * n(卷積核數量)

所以只有當

p1 + p2 < p

才有低秩分解能夠優化儲存效能的說法。

在上述例子中若希望分解conv1優化儲存效能,

則有 d * ( 3 * 3 + 16 * 3) < 3 * 3 * 3 * 16

所以 d < 7.58 即分解層的卷積核不超過7個

--- 《計算量》 ---

對於某一卷積層,卷積計算量為:

t = c(上一層卷積數量) * kh(卷積核高) * kw(卷積核寬) * n(卷積核數量) * ho(輸出特徵圖高度) * wo(輸出特徵圖寬度)

分解後則是

t1 = c(上一層卷積數量) * kh(卷積核高) * d(分解層卷積核數量) * ho(輸出特徵圖高度) * w(原特徵圖寬度)

t2 = d(分解層卷積核數量) * kw(卷積核寬) * n(原卷積核數量) * ho(輸出特徵圖高度) * wo(輸出特徵圖寬度)

令 t1+t2 < t, 則計算量減少

設 r = t/(t1+t2), 得

r = c * kh * kw * n * wo / (c * kh * d * w + d * kw * n * wo )

一般實際應用中常用 kh=kw=3, 配合padding=1的話 則得

r = 3 * c * n / (c * d + d * n )

假設上述例子中,希望分解conv1使得計算量減半,則r=2,應設定d為

d = 3 * 3 *16 / (3 * 2 + 16 * 2) = 3.7 約等於 4 即設定分解層為4核卷積

分組卷積 計算量

import torch import torch.nn as nn 分組卷積 n,c in,h,w,c out 10,4,16,16,4 x torch.randn n,c in,h,w conv nn.conv2d c in,c out,3,1,padding 0,bias false conv...

卷積核的參數量和計算量

通常只看乘法計算量 c代表通道數,ci輸入通道數,c0為輸出通道數。h w為長寬 如下圖 當前特徵圖ci h w 把特徵圖複製c0個,分別與3 3 ci的卷積核進行卷積,輸出特徵圖大小c0 h w,用c0個3 3 ci的卷積核進行卷積操作,所以參數量為3 3 ci c0,在h w的特徵圖上操作,故計...

卷積神經網路參數量和計算量記憶體計算

每一次卷積的參數量和特徵圖的大小無關,僅和卷積核的大小,偏置及bn有關。1.每個卷積層的參數量,1表示偏置 co x kw x kh x cin 1 2.全連線層的參數量 d1 1 x d2 3.bn層的參數量 因為bn層需要學習兩個引數 gamma 和 beta 所以參數量是2xco 1.一次卷積...