2. 自己动手搭CNN
2.1 CNN网络结构
- CNN基本结构:输入层、卷积层、激活层、池化层、全连接层
2.1.1 输入层:
2.1.2 卷积层:
- 卷积的直觉:卷积计算=特征提取
- 灰度图像上使用单卷积核:单个特征的抽取
- 术语:feature map(特征映射)、activation map(激活映射)、convolved feature(卷积特征)、receptive field(感受野)
- RGB图像上使用单卷积核:单个特征的抽取
- 卷积核的深度=上一层数据输入的深度(channel数)
- RGB图像上使用多卷积核:多个不同特征的抽取
- 一个卷积核提取一种局部模式,多个卷积核提取多种不同局部模式
- 卷积隐层的堆叠
- 卷积核的个数=下一层数据的深度=下一卷积层卷积核的深度
- 卷积核的个数=提取特征的数量,超参数,可以调节
- 隐层的卷积:特征组合
- 多层卷积:一层卷积得到的特征只是局部的,层数越高,学到的特征越全局化
- 需要注意的参数:stride
- 一次滑动的步长,有height上的和width上的stride
- stride>1时,相当于在stride=1的卷积结果中做了下采样
- 需要注意的参数:padding
- padding=valid:不进行补零操作,s=1时,每卷积一次,宽和高数据维度下降F-1,F为卷积核大小
- padding=same:在输入的周围进行0或复制补充;卷积前后宽高不变
- 小结
- 输入:W1*H1*D1
- 超参数:①the number of filters:K②the dimension of filters:F③stride步长:S④padding:P
- 输出:W2*H2*D2 W=(W1+2P-F)/S+1 H2=(H1+2P-F)/S+1 D2=K
- 参数:(F*F*D1+1)*K
2.1.3 激活层
- 激活函数:sigmoid(x)、tanh(x)、relu(x)
2.1.4 池化层
- 在宽高维度进行下采样,不改变深度的维度
- 能成倍减少计算量
- 相比stride,池化层可以选择进行下采样的方式
- 最大池化(max-pooling):对邻域内特征点取最大作为最后的特征值
- 平均池化(mean-pooling):对邻域内特征点取平均作为最后的特征值
- 小结
- 输入:W1*H1*D1
- 超参数:the dimension offilters:F
- 输出:W2*H2*D2 W2=(W1-F)/S+1 H2=(H1-F)/S+1 D2=D1
- 参数:max-pooling和mean-pooling没参数
2.1.5 全连接层
- 将多层的特征映射伸直成一个一维的向量
- 采用全连接的方式将向量连接向输出层
- 输出层就是对应每个类别的得分
2.1.6 网络搭建小结
- 卷积神经网络的一般结构:
- CONV+ReLU和POOL的组合多次出现:提取特征
- 多个FC或特殊的CNN结构作为输出层:作分类器/检测器/分割器
2.2 CNN网络训练
2.3 如何用Paddle实现CNN