VGG-16 神经网络结构详解

视频:https://www.bilibili.com/video/BV1FT4y1E74V?p=120

0

这节课要讲的第三个,也是最后一个范例是VGG,也叫作VGG-16网络。

值得注意的一点是,VGG-16网络没有那么多超参数,这是一种只需要专注于构建卷积层的简单网络。首先用3×3,步幅为1的过滤器构建卷积层,padding参数为same卷积中的参数。然后用一个2×2,步幅为2的过滤器构建最大池化层。因此VGG网络的一大优点是它确实简化了神经网络结构,下面我们具体讲讲这种网络结构。

0

假设要识别这个图像,在最开始的两层用64个3×3的过滤器对输入图像进行卷积,输出结果是224×224×64,因为使用了same卷积,通道数量也一样。VGG-16其实是一个很深的网络,这里我并没有把所有卷积层都画出来。

0

假设这个小图是我们的输入图像,尺寸是224×224×3,进行第一个卷积之后得到224×224×64的特征图,接着还有一层224×224×64,得到这样2个厚度为64的卷积层,意味着我们用64个过滤器进行了两次卷积。正如我在前面提到的,这里采用的都是大小为3×3,步幅为1的过滤器,并且都是采用same卷积,所以我就不再把所有的层都画出来了,只用一串数字代表这些网络。


AlexNet 神经网络结构详解

视频:https://www.bilibili.com/video/BV1FT4y1E74V?p=120 

我要举例说明的第二种神经网络是AlexNet,是以论文的第一作者Alex Krizhevsky的名字命名的,另外两位合著者是Ilya Sutskever和Geoffery Hinton。

0

AlexNet首先用一张227×227×3的图片作为输入,实际上原文中使用的图像是224×224×3,但是如果你尝试去推导一下,你会发现227×227这个尺寸更好一些。

第一层我们使用96个11×11的过滤器,步幅为4,由于步幅是4,因此尺寸缩小到55×55,缩小了4倍左右。

(以下请有兴趣的同学一定要推导一下,算一算才有长进~)

然后用一个3×3的过滤器构建最大池化层,f=3,步幅s为2,卷积层尺寸缩小为27×27×96。接着再执行一个5×5的卷积,padding之后,输出是27×27×276。然后再次进行最大池化,尺寸缩小到13×13。

再执行一次same卷积,相同的padding,得到的结果是13×13×384,384个过滤器。

再做一次same卷积,就像这样。

再做一次同样的操作,最后再进行一次最大池化,尺寸缩小到6×6×256。

6×6×256等于9216,将其展开为9216个单元,然后是一些全连接层。

最后使用softmax函数输出识别的结果,看它究竟是1000个可能的对象中的哪一个。


LeNet-5 神经网络结构详解

卷积层的参数计算:

  1. 卷积后feature map边长: outputSize =(originalSize + paddingX2 – kernelSize)/ stride + 1 (其中outputSize是卷积之后得到的feature map的边长,originalSize是输⼊图的边长,padding是填充的⼤⼩,kernelSize是卷积核的边长,stride是步长)
  2. 卷积层的可训练的参数个数: trainNum = (outputSize X outputSize + 1) X kernelNum (其中kernelNum是卷积核的个数,加1是因为每⼀个卷积核有⼀个bias参数)
  3. 卷积层的连接数: connectNum = (kernelSize X kernelSize) X (outputSize X outputSize) X kernelNum
  4. 卷积层的神经元个数: neuralNum = (outputSzie X outputSize) X kernelNum

采样层的参数计算:

  1. 采样后map的边长: outputSize =(originalSize + paddingX2 – kernelSize)/ stride + 1 (其中outputSize是卷积之后得到的feature map的边长,originalSize是输⼊图的边长,padding是填充的⼤⼩,kernelSize是卷积核的边长,stride是步长)
  2. 采样层可训练的参数个数: trainNum = (1+ 1) X kernelNum (其中kernelNum是卷积核的个数)
  3. 采样层的连接数: connectNum = (kernelSize X kernelSize) X (outputSize X outputSize) X kernelNum
  4. 采样层的神经元个数: neuralNum = (outputSzie X outputSize) X kernelNum

0