CNN卷积神经网络(二)网络架构常见形式和参数设置

it2022-05-05  96

本文参考了 这篇教程

(一)网络架构

CNN的网络架构中最常见的形式就是堆叠好几个[CONV-RELU]层再跟上一个POOL层,重复几次,直到输入图像已经被转换为空间尺寸很小的输出 。即:

∗ * 表示重复 POOL?表示可能池化也可能不池化 0 ≤ N ≤ 3 0\leq N\leq3 0N3 0 ≤ K < 3 0\leq K<3 0K<3 0 ≤ M 0\leq M 0M

比如下面这几种网络形式:

几个Tips:

多个[CONV-RELU]层堆叠起来再POOL有利于大型的深度网络。

因为多个卷积和RELU非线性可以在灾难性池化之前尽量更多的提取输入中的信息,发现更复杂的特征。之所以用destructive 形容pooling是因为,常用的 2 ∗ 2 2*2 22步长为2的池化会直接删掉75%的数据实现降维和减参,虽然有利于实际需要,但太暴力,直接失去卷积层提取出来的有关输入的大量信息。

Prefer a stack of small filter CONV to one large receptive field CONV layer.堆叠几个小卷积核胜过一个大卷积核。

假设堆叠3个 3 ∗ 3 3*3 33的卷积核,卷积核之间当然是要引入非线性的(通过RELU)。

那么第一个卷积核可以看到输入体的 3 ∗ 3 3*3 33的空间范围,而第二个卷积核可以看到第一个卷积核的输出体的 3 ∗ 3 3*3 33范围,因此相当于能看到输入体的 5 ∗ 5 5*5 55范围,同理第三个卷积核可以看到输入体的 7 ∗ 7 7*7 77的范围。相比于直接只用一个接收域为 7 ∗ 7 7*7 77的卷积核,一样都是看到输入体的 7 ∗ 7 7*7 77空间范围,但前者有2个优点:

一是表达能力更强,一个大卷积核只有一次非线性操作,表达能力不如三个小卷积核堆叠的方案,后者多次引入非线性使得表达能力更强more expressive。 二是需要的参数更少,假设所有的volume都有C个channel(?),则一个 7 ∗ 7 7*7 77卷积核需要的参数的个数是 7 ∗ 7 ∗ C ∗ C = 49 C 2 7*7*C*C=49C^2 77CC=49C2,三个堆叠的 3 ∗ ∗ 3 3**3 33卷积核总共需要的参数个数是 3 ∗ C ∗ ( 3 ∗ 3 ∗ C ) = 27 C 2 3*C*(3*3*C)=27C^2 3C(33C)=27C2(由于没懂channel在这里代表什么,我没搞懂这个怎么算的···),所以需要的参数更少。


(二)每层参数设置(通用经验)

1.输入层

图像尺寸能被2整除很多次。如32,64,96,224,384,512。 一个原因是因为池化滤波器尺寸是2*2且步长为2。

2.卷积层

用小尺寸的滤波器,如 3 ∗ 3 3*3 33,最多用 5 ∗ 5 5*5 55,当然也有在第一个卷积层用 7 ∗ 7 7*7 77的,那是为了减少参数和对硬件存储量的要求,用的很少。

5 ∗ 5 5*5 55 7 ∗ 7 7*7 77的很少,最多只会在look at the input image 的第一个卷积层用!

步长S=1。卷积前要给输入体补0,保证卷积后空间大小不变。

3 ∗ 3 3*3 33则P=1,在边界一周补1个0,可保证卷积后空间大小不变;

5 ∗ 5 5*5 55则P=2,在边界一周补2个0,可保证卷积后空间大小不变;

其他尺寸, F ∗ F F*F FF,则 P = ( F − 1 ) / 2 P=(F-1)/2 P=(F1)/2,可保证卷积后空间大小不变;

3.池化层

最常用的就是 2 ∗ 2 2*2 22的步长为2 的最大池化max-pooling

没有其他,只用这个就行。

其他什么 3 ∗ 3 3*3 33的步长2的花哨的对性能也没什么用


最新回复(0)