分組卷積 計算量

2021-10-02 02:29:27 字數 1377 閱讀 3227

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_group = nn.conv2d(c_in,c_out,3,

1,padding=

0,bias=

false

,groups=2)

y = conv(x)

y_group = conv_group(x)

print

(y_group.size())

#輸出通道必須能被組數整除,形狀沒變,因為代表整體,最後合起來了

# print(y.size())

print

("常規卷積引數大小:{}"

.format

(sum

(param.numel(

)for param in conv.parameters())

))#conv.parameters()整個網路引數

#for遍歷網路層

#param.numel()返回元素個數

#param.numel() for param in conv.parameters(),列表推導式,返回list,表示每一層引數

#幾個卷積核,幾個偏移量

print

("分組卷積引數大小:{}"

.format

(sum

(param.numel(

)for param in conv_group.parameters())

))""" c_in 變為原來的一半,分組卷積計算量變為原來的1/2

分組卷積(group convolution)的用途

1.減少參數量,分成g組,則該層的引數量減少為原來的1g

2.group convolution可以看成是結構化稀疏(structured sparse),

每個卷積核的尺寸由c∗k∗k變為c/g∗k∗k,可以將其餘(c−c/g)∗k∗k的引數視為0,

有時甚至可以在減少參數量的同時獲得更好的效果(相當於正則)。

"""print

(list

(conv_group.parameters())

)"""

輸入通道為4,每個卷積核有4層,每個卷積核是3*3的矩陣,共有4個3*3的矩陣(第乙個核),

輸出通道為4,共4個卷積核

每個核的權重不一樣

"""

卷積層儲存量和計算量

儲存量 對某一層卷積層,卷積引數數量為 p c 上一層卷積數量 kh 卷積核高 kw 卷積核寬 n 卷積核數量 分解後則是 p p1 p2 c 上一層卷積數量 kh 卷積核高 d 分解核數量 d 分解核數量 kw 卷積核寬 n 卷積核數量 所以只有當 p1 p2 p 才有低秩分解能夠優化儲存效能的說...

幾種輕量化卷積網路計算量

就近年提出的四個輕量化模型進行學習和對比,四個模型分別是 mobilenet squeezenet shufflenet。m表示輸入特徵的通道數,n表示輸出特徵的通道數。卷積核大小為k k,輸出特徵圖大小為f f.1.普通卷積網路的計算量 k k m n f f.普通卷積網路的參數量 k k m n...

卷積核的參數量和計算量

通常只看乘法計算量 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的特徵圖上操作,故計...