以VGG為例,分析深度網路的計算量和參數量

2021-08-19 23:37:39 字數 1990 閱讀 8525

摘要:我第一次讀到resnet時,完全不敢相信152層的殘差網路,竟然在時間複雜度(計算量)上和16層的vgg是一樣大的。當然,對於初學者而言,直接分析resnet的時間複雜度是有點難度的。這篇文章我將以vgg為例,介紹深度網路的複雜度計算方法。掌握這些計算方法後,再去看inception、resnet、mobilenet、squeezenet等**,你就能明白這些網路結構的精妙之處。

關鍵字:深度網路, vgg, 複雜度分析, 計算量, 參數量

vgg的結構如下圖所示:

圖1 不同vgg網路的結構

我們選取其中的vgg-16(上圖中的d列)來進行計算量和參數量的分析。vgg-16每個卷積操作後,影象大小變化情況如下圖所示:

圖2 vgg-16的結構

對於卷積操作的計算量(時間複雜度)和參數量(空間複雜度)可以看這篇文章:卷積神經網路的複雜度分析-michael yuan的文章

注意,這些複雜度計算都是估算,並非精確值。

我們以vgg-16的第一層卷積為例:輸入影象224×224×3,輸出224×224×64,卷積核大小3×3。

計算量:

t im

es

≈224

×224×3

×3×3

×64

=8.7×1

07

times≈

224×

224×

3×3×

3×64

=8.7

×107

參數量:

s pa

ce≈3

×3×3

×64

=1728

space≈

3×3×

3×64

=172

8再舉乙個例子,vgg-16的最後乙個卷積層:輸入14×14×512,輸出14×14×512,卷積核大小3×3。

計算量:

t im

es≈14

×14×3

×3

×512

×512

=4.6×1

08

times≈

14×1

4×3×

3×51

2×51

2=4.

6×10

8 參數量:

s pa

ce≈3

×3

×512

×512

=2.4×1

06

space≈

3×3×

512×

512=

2.4×

106考慮vgg-16的最後乙個全連線層:上層神經元數為4096,下層神經元數為1000。這樣的全連線層複雜度應該如何計算?

其實全連線層可以視為一種特殊的卷積層:上層為1×1×4096,下層為1×1×1000,使用的1×1的卷積核進行卷積。

那麼,計算量:

t im

es≈1

×1×1

×1

×4096

×1000=4

×106

times≈

1×1×

1×1×

4096

×100

0=4×

106

參數量:

s pa

ce≈1

×1

×4096

×1000=4

×106

space≈

1×1×

4096

×100

0=4×

1061、卷積層的時間複雜度大致是同一數量級的

2、隨著網路深度加深,卷積層的空間複雜度快速上公升(每層的空間複雜度是上層的兩倍)

3、全連線層的空間複雜度比卷積層的最後一層還大

當然,深度網路的複雜度是和網路結構緊密相關的,上述3個結論僅對vgg這種網路結構有效

隱語義分析,以LFM為例

隱語義分析,以lfm為例 乙個比較好的圖 對於乙個給定的使用者行為資料集 資料集包含的是所有的user,所有的item,以及每個user有過行為的item列表 使用lfm對其建模後,我們可以得到如下圖所示的模型 假設資料集中有3個user,4個item,lfm建模的分類數為4 r矩陣是user it...

keras構建以vgg16為模板的模型

構建模型 model vgg vgg16 include top false,weights imagenet inpute shape 48,48,3 for layer in model vgg.layers layer.trainable false model flatten name fl...

迴圈的巢狀,以for迴圈為例

include int main putchar 10 內迴圈執行一次後換行 return0 列印結果 注 1 一重迴圈解決線性問題 二重迴圈解決平面問題 三重迴圈解決立體問題。2 建議for語句的迴圈控制變數的取值採用 左閉右開 的寫法,因為這樣的做法跟後面的陣列下標,是完全吻合的。3 多重迴圈中...