目录
1. 卷积神经网络的结构
1.1 卷积神经网络
1.1.1 基本结构
(卷积层 + (可选)池化层)* N + 全连接层 * M
全连接层:
将上一层输出展开并连接到每一个神经元上
即普通神经网络层
相比于卷积层,参数数目较大(参数数目=Ci*Co,Ci /Co为输入输出通道数目)
1.1.2 作用
分类任务
回归任务
1.2 全卷积神经网络
1.2.1 基本结构
(卷积层 + (可选)池化层)* N + 反卷积层*K
Q: 做pooling使图像变小,最后怎样得到和输入图像同等大小的输出呢?
利用反卷积层,当卷积层的步长>1时,使图像size变小,若设置卷积层步长<1,就能使得一个比较小的二维特征图——>大特征图(即反卷积)
1.2.2 作用
物体分割
2. 卷积网络解决的问题
参数过多:计算资源不足;容易过拟合,需要更多训练数据;收敛到较差的局部极值。
神经网络全连接&卷积局部连接
图像的特点:
图像的区域性,即某一区域内像素点特征类似。(某一像素为头发,其周围的的像素点也为头发的特征值)——>局部连接。
图像特征和位置无关(比如:人像在图片区域向左移或向右移,代表眼睛特征的像素点的位置就有了变化,即某一特征值的位置不是固定的)——>参数共享(强制每个神经元和图像的连接都使用同样的参数)
2.1 局部连接——图像的区域性
相邻区域的像素所代表的信息很接近。
举例:
- 图像大小1000 * 1000
- 下一层神经元为10^6
- 局部连接范围为10*10
- 全连接参数为10*10*10^6=10^8
2.2 参数共享——图像特征与位置无关
(脸在图片上的哪个位置都可以)
即每个卷积核的参数都是一样的。
举例:
- 图像大小1000 * 1000
- 下一层神经元为10^6
- 局部连接范围为10*10
- 全连接参数为10*10=10^2
3. 卷积操作
3.1 卷积
3.2 步长
3.3 padding
卷积核在图像上划过之后,输出的size相对于输入的size来说变小了。若有多个卷积层,每个卷积层图像都变小一点。
Case1: 当图像本来就比较小时,多加几个卷积层,图像的size可能为1,很不直观。
Case2: 对于1个大的图像来说,图像size本来是整数,经过卷积层,变为非整数。
故,需要用到padding,使得输出的size不变或者不出现case1,case2的现象。(padding的size和卷积核的size有关)
3.4 多通道的处理
每个通道上卷积的参数不共享。在做计算的过程中,每个通道上的卷积的参数和相应的通道上的输入做内积,然后将3个通道上得到的同样位置上的内积的结果相加来作为输出神经元的值。
对于单通道:通过点积乘法得到结果。
对于多通道:每个通道通过点积乘法得到结果,再将每个通道的结果相加。最终得到单通道的输出。
3.5 多个卷积核
多个卷积核,提取多个特征,多个卷积核的参数不共享。
3.6 池化
池化的默认步长 == kernel_size, 不补零,若不用padding,将多余的值直接去掉。
3.6.1 最大值池化
3.6.2 平均值池化
3.6.3 池化特点
- 常使用不重叠,不补零
- 没有用于求导的参数
- 池化层参数为步长和池化核大小
- 用于减少图像尺寸,从而减少计算量
- 一定程度平移鲁棒(比如猫在图像上平移了一段,池化操作之后和平移前的结果是一样的)
- 损失了空间位置精度(精度和计算量之间的权衡)
3.7 激活函数
激活函数有哪些,详见:深度学习基础知识_zhao_crystal的博客-CSDN博客
一般在卷积中,使用RELU激活函数。
3.8 总结
p = 边距(padding)
s = 步长(stride)
输出尺寸 = (输入大小 - 卷积核 + padding)/stride + 1 (有待验证)
参数数目 = Kw * Kh * Ci * Co
Ci:输入通道数
Co:输出通道数
Kw,Kh:卷积核的长宽
4. 实战
代码详见:https://github.com/crystal30/Deep-learning convnet.ipynb # 卷积神经网络