深度神经网络识别手写字
独热编码(One-Hot Encoding)
关于独热编码的更多内容参考https://zhuanlan.zhihu.com/p/35287916
卷积神经网络
多层感知机(MLPs) | 卷积神经网络(CNNs) |
---|---|
只用全连接层 | 也 使用稀疏层 |
只接收向量作为输入 | 也 接收矩阵作为输入 |
卷积层
filer(卷积核)
同输入层中与卷积核重叠的部分进行求和运算, 而后将求和后的结果经过激活函数处理, 得到卷积后的结果(卷积层)中的一个像素的值
使用一个卷积核可以获得输入层的一种输入特征
使用多个卷积核可以获得输入层的多种输入特征, 从而使得到的特征更加丰富, 使模型更加准确
步长(stride)
卷积核每次移动的长度(几个像素)
填充(padding)
当卷积核移动到边缘时, 覆盖的像素数少于卷积核的像素数, 此时在空白处填0进行填充
在Keras中使用卷积层:
参考Keras中文文档
e.g.
1 | from keras.models import Sequential |
注意:
- activation如果不指定, 则不使用激活函数(即线性激活函数:
a(x) = x
)- input_shape, 当使用该层作为模型第一层时, 必须提供
- padding,
same
代表保留边界处的卷积结果, 即会padding, 而vaild
代表只进行有效的卷积, 对边界数据不处理, 即丢弃, 详细内容参考https://oldpan.me/archives/tf-keras-padding-vaild-same
池化层
是什么
在CNN网络中卷积层之后会跟上一个池化层, 根据计算出来的值不一样, 分为均值池化层和最大池化层, 一般常见的多为最大池化层
池化操作不改变通道数, 且不需要参数控制
池化层的种类(参考自https://blog.csdn.net/XX_123_1_RJ/article/details/86677482):
- 一般池化
- 平均池化
- 最大池化
- 重叠池化(OverlappingPooling): 相邻池化窗口之间有重叠区域, 此时一般
sizeX > stride
- 空金字塔池化(Spatial Pyramid Pooling):
- 空金字塔池化的思想源自
Spatial Pyramid Model
, 它将一个pooling变成了多个scale的pooling; 用不同大小池化窗口作用于上层卷积特征; 也就是活spatial pyramid pooling layer
就是把前一卷积层的feature maps的每一个图片上进行了3个卷积操作, 并把结果输出给全连接层; 其中每一个pool操作可以看成是一个空间金字塔的一层- 这样做的好处是, 空间金字塔池化可以把任意尺度的图像的卷积特征转化成相同维度, 这不仅可以让CNN处理任意尺度的图像, 还能避免cropping和warping操作, 导致一些信息的丢失, 具有非常重要的意义
为什么
池化层的作用https://blog.csdn.net/XX_123_1_RJ/article/details/86677482:
- 下采样(downsamping), 即缩小图像, 主要目的是(参考自https://blog.csdn.net/majinlei121/article/details/46742339)
- 使得图像符合显示区域的大小
- 生成对应图像的缩略图
- 降维, 去除冗余信息, 对特征进行压缩, 简化网络复杂度, 减小计算量, 减小内存消耗等等; 总之就是减少参数量
- 实现非线性
- 扩大感知野(感知野是卷积神经网络每一层输出的特征图上的像素点在原始图像上映射的区域的大小, 参考https://blog.csdn.net/m0_37561765/article/details/79943816)
- 实现不变性, 其中不变性包括: 平移不变性, 旋转不变性和尺度不变性
- 知乎相关问题