1、网络的结构
网络的一般结构为:
INPUT -> [[CONV -> RELU]*N -> POOL?]*M -> [FC -> RELU]*K -> FC
INPUT:输入
CONV:卷积层
RELU:激活函数
POOL:池化层,这里的问号表示该层是可选的
FC:全连接层
N >= 0 (通常N <= 3), M >= 0, K >= 0 (通常 K < 3)
(1)尽量使用多层fliter尺寸小的卷积层代替一层filter较大的卷积层。
因为使用多层filter较小的卷积层所能观察到的区域大小和一层filter较大的卷积层是相同的,但是前者可以看到更加抽象的特征,提取的特征表达性能更佳。
此外,前者引入的参数规模相比后者更小。比如,使用3层filter为3X3的卷积层代替1层filter为7X7的卷积层,假设输入的volume为C个通道,则前者参数个数为3×(C×(3×3×C))=27C2,而后者为C×(7×7×C)=49C2,明显前者引入的参数更少。
(2)为什么使用padding?
使用padding的好处是使得卷积前后的图像尺寸保持相同,可以保持边界的信息。一般padding的大小为P=(F-1)/2,其中F为filter的尺寸。如果不使用paddding,则要仔细跟踪图像尺寸的变化,确保每一层filter和stride正确的被使用。
(3)为什么stride一般设为1?
stride设为1实际表现效果更好,将下采样的工作全部交给池化层。
(4)输入层(input layer)尺寸一般应该能被2整除很多次,比如32(CIFAR-10),64,96(STL-10),224(common ImageNet ConvNets),384和512。
(5)尽量使用filter较小(3x3 or 至多 5x5)的卷积层,如果要使用较大的filter(比如7x7),一般也只在第一个卷积层。
(6)有时候由于参数太多,内存限制,会在第一个卷积层使用较大filter(7x7)和stride(2)(参考 ZF Net),或者filter(11x11),stride(4)