目录
一、什么是卷积神经网络CNN
1.1、核心概念
1.2、卷积层
二、什么是卷积计算
2.1、卷积计算的例子:
2.2、点积
2.3、卷积与点积的关系
2.4、Padding(填充)
2.4.1、Padding的主要作用
1、控制输出特征图尺寸
2、保留边缘信息
3. 支持深层网络训练
2.4.2、Stride
2.5、多通道卷积计算
2.6、多卷积核卷积计算
2.6.1、基本工作原理
2.6.2、具体操作方法
2.7、特征图大小
三、卷积核是如何检测特定模式或特征的?
3.1、边缘检测的原理
3.2、不同类型的特征检测
3.3、卷积层API
四、池化层
4.1、什么是池化层
4.2、如何进行池化层的计算
4.3、多通道池化计算
4.4、池化层API
五、图像分类案例
5.1、CIFAR10 数据集
5.2、搭建图像分类网络
5.3、编写训练函数
5.4、加载训练好的模型
5.5、模型优化
1. 增加卷积核输出通道
2. 增加全连接层的参数量
3. 调整学习率
4. 调整优化方法
5. 修改激活函数
6、其他重要改进
一、什么是卷积神经网络CNN
1.1、核心概念
卷积神经网络(Convolutional Neural Network)是含有卷积层的神经网络,卷积层的作用是用来自动学习,提取图像特征,CNN网络主要由三部分构成:卷积层,池化层和全连接成构成:
- 卷积层负责提取图像中的局部特征;
- 池化层用来大幅降低参数量级(降维);
- 全连接层用来输出想要的结果。
1.2、卷积层
主要功能是通过卷积运算从输入数据中提取特征,卷积层使用一组科学系的滤波器(filters)或者卷积核(kernels),这些滤波器在输入数据上滑动并计算卷积,每个滤波器会检测输入数据中的特定模式,如边缘,纹理等,主要参数:
- 滤波器大小:通常为3×3、5×5等
- 步长(stride):滤波器每次移动的像素数
- 填充(padding):在输入边缘添加像素以控制输出尺寸
卷积核其实就是一个小的数值矩阵,通常是正方形,比如3*3,5*5等大小,这个矩阵中的每个数值都是可以学习和调整的参数
- 如果卷积核是3×3大小,那它就像一个小窗口,一次只能看到图像的一小部分(3×3像素区域)
- 这个窗口在整个图像上滑动,每到一个位置就计算一次"匹配度"(点积)
在神经网络中,卷积核的值不是手动设计的,而是通过训练自动学习的
二、什么是卷积计算
卷积是数学中的一种特殊运算,在信号处理和深度学习领域有广泛的应用,
- 开始时,卷积核的值是随机初始化的
- 网络通过大量图像进行训练
- 根据任务的需要,卷积核的值会被逐渐调整
- 训练完成后,第一层的卷积核通常会学习到边缘、纹理等低级特征
- 更深层的卷积核则会学习到更复杂的特征,如眼睛、鼻子、轮廓等
在图像处理和卷积神经网络中,使用的是二位离散卷积:
(I * K)[i,j] = ∑∑ I[i+m,j+n]K[m,n]
卷积计算是:
- 将卷积核翻转180度
- 将翻转后的卷积核在输入数据上滑动
- 在每个位置计算卷积核与对应输入区域的元素乘积之和
在卷积神经网络中实际使用的是互相关(cross-correlation)而非严格数学定义的卷积,区别在于互相关不需要翻转卷积核
2.1、卷积计算的例子:
假设我们有一个5×5的输入矩阵和一个3×3的卷积核:
输入;
1 2 3 1 2
3 1 2 1 3
2 3 1 2 1
1 2 3 1 2
3 1 2 1 3
卷积核:
1 0 1
0 1 0
1 0 1
计算单个输出位置的值,例如输出的[0,0]位置:
- 取输入的左上角3×3区域
- 将其与卷积核对应元素相乘后求和
- 结果为: 1×1 + 2×0 + 3×1 + 3×0 + 1×1 + 2×0 + 2×1 + 3×0 + 1×1 = 8
2.2、点积
在代数形式中,点积等于对应元素的乘积和:
A·B = a₁×b₁ + a₂×b₂ + ... + aₙ×bₙ
点积可以理解为:
- 一个向量在另一个向量方向上的投影长度与另一向量长度的乘积
- 两个向量相似度的度量(夹角余弦)
- 对应位置元素乘积的总和
假设有两个三维向量:
- A = [2, 3, 4]
- B = [1, 5, 2]
它们的点积为:
A·B = 2×1 + 3×5 + 4×2 = 2 + 15 + 8 = 25
2.3、卷积与点积的关系
在卷积运算中,我们实际上是在计算卷积核与输入的局部区域之间的点积:
- 卷积核可以视为一个向量(将矩阵展平)
- 输入的每个局部区域也可以视为一个向量
- 卷积结果中的每个元素是对应局部区域与卷积核的点积
总的来说,点积是卷积计算的基础操作,而卷积则是在不同位置重复应用点积的过程,用于检测输入数据中的局部模式或特征
2.4、Padding(填充)
Padding是指在输入数据(通常是图像)的边缘的周围添加额外的像素值,再进行卷积操作,在卷积操作中,卷积核(滤波器)会在输入上滑动并计算卷积值,当卷积核位于边缘时,如果不使用padding,卷积核会“悬空”,无法完全覆盖输入数据,导致输出特征图的尺寸小于输入,padding最常见的填充值是0(zero padding)
2.4.1、Padding的主要作用
1、控制输出特征图尺寸
Padding最重要的作用是控制卷积操作后输出特征图的空间尺寸
如果不适用padding,输出特征图的尺寸会按照以下公式计算:
输出尺寸 = (输入尺寸 - 卷积核尺寸) / 步长 + 1
例如,对于32×32的输入图像,使用5×5的卷积核和步长为1时,输出特征图将是28×28。
而当添加padding后,可以保持输出特征图与输入相同尺寸("Same padding"),计算公式为:
padding = (卷积核尺寸 - 1) / 2 (当步长为1时)
2、保留边缘信息
不使用padding时,图像边缘的像素只被卷积操作使用一次,而中心区域的像素则被多次使用,这导致模型对边缘信息的学习不足。
添加padding后,边缘像素参与的卷积计算次数增加,使得模型能够更好地保留和学习图像边缘的特征信息,提高特征提取的效果。
3. 支持深层网络训练
在深层CNN中,如果每次卷积都不使用padding,特征图的尺寸会迅速减小,可能只经过几层就变得很小,限制了网络的深度。
使用padding可以保持特征图尺寸,使得我们能够构建更深的网络架构,从而学习更复杂的特征表示。
2.4.2、Stride
按照步长为1来移动卷积核,计算特征图:
如果把Stride增大为2,也可以提取特征图:
2.5、多通道卷积计算
实际中的图像是几多个通道组成的,多通道卷积就是使用一组滤波器(filter)在多个通道上同时滑动,每个滤波器负责检查自己对应的那一层,每个滤波器在各自位置上计算卷积,然后将各自卷积计算的值相加,得到一个新的特征图
2.6、多卷积核卷积计算
当使用多个卷积核进行特征提取时,每个卷积核就像是一个专门的"探测器",负责寻找输入数据中的不同模式或特征
2.6.1、基本工作原理
使用多个卷积核时,特征提取的过程是这样的:
- 并行探测:每个卷积核独立地在输入数据上滑动,生成自己的特征图。
- 特征图集合:假设有N个卷积核,就会产生N个特征图,每个特征图代表输入数据中一种特定的特征。
- 特征整合:这N个特征图组合在一起,形成下一层的输入,包含了丰富的特征信息
2.6.2、具体操作方法
- 卷积核设计:
-
- 使用不同初始权重的多个卷积核
- 每个卷积核尺寸通常相同,但内部权重不同
- 常见的卷积核数量从几个到几百个不等
- 特征图生成:
-
- 每个卷积核产生一个特征图
- 如果有64个卷积核,就会得到64个特征图
- 批量规范化和激活:
-
- 对特征图应用批量规范化使训练更稳定
- 通过ReLU等激活函数引入非线性
- 特征组合:
-
- 将所有特征图在通道维度上堆叠
- 得到的多通道输出传递给下一层
多个卷积核工作就像多个专家同时分析同一个问题
- 有的卷积核可能专注于检测边缘
- 有的可能擅长识别纹理
- 有的可能对特定颜色变化敏感
- 有的可能检测特定形状
通过这种"集体智慧"的方式,网络能够提取更全面、更丰富的特征信息,为后续的分类或检测任务提供更好的基础。
2.7、特征图大小
输出特征图的大小与以下参数息息相关:
- size: 卷积核/过滤器大小,一般会选择为奇数,比如有 11 、33、5*5
- Padding: 零填充的方式
- Stride: 步长
计算方法:
- 输入图像大小: W x W
- 卷积核大小: F x F
- Stride: S
- Padding: P
- 输出图像大小: N x N