摘要:我第一次读到ResNet时,完全不敢相信152层的残差网络,竟然在时间复杂度(计算量)上和16层的VGG是一样大的。当然,对于初学者而言,直接分析ResNet的时间复杂度是有点难度的。这篇文章我将以VGG为例,介绍深度网络的复杂度计算方法。掌握这些计算方法后,再去看Inception、ResNet、MobileNet、SqueezeNet等论文,你就能明白这些网络结构的精妙之处。
关键字:深度网络, VGG, 复杂度分析, 计算量, 参数量
本文是我旧博客中的博文,在CSDN图片显示不正常,请移步旧博客查看:
https://imlogm.github.io/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/vgg-complexity/
1. VGG的结构
VGG的结构如下图所示:
图1 不同VGG网络的结构
我们选取其中的VGG-16(上图中的D列)来进行计算量和参数量的分析。VGG-16每个卷积操作后,图像大小变化情况如下图所示:
图2 VGG-16的结构
2. 卷积操作的计算量和参数量
对于卷积操作的计算量(时间复杂度)和参数量(空间复杂度)可以看这篇文章:卷积神经网络的复杂度分析-Michael Yuan的文章
注意,这些复杂度计算都是估算,并非精确值。
我们以VGG-16的第一层卷积为例:输入图像224×224×3,输出224×224×64,卷积核大小3×3。
计算量:
T i m e s ≈ 224 × 224 × 3 × 3 × 3 × 64 = 8.7 × 1 0 7 Times\approx 224\times 224\times 3\times 3\times 3\times 64=8.7\times 10^7 Times≈224×224×3×3×3×64=