卷积神经网络入门

卷积神经网络入门

CNN 通过卷积层(特征提取)→ 归一化(稳定训练)→ 激活(非线性)→ 池化(降维)→ 全连接(分类)的协同流程实现端到端学习

卷积层

负责 局部特征提取,通过滑动窗口(卷积核)在输入数据上计算加权和,生成具有空间层次结构的特征图。

从卷积核开始,这是一个小的权值矩阵。这个卷积核在 2 维输入数据上「滑动」,对当前输入的部分元素进行矩阵乘法,然后将结果汇为单个输出像素。

参数 说明 默认值
kernel_size 卷积核大小(K,如 3(3, 5) -
stride 滑动步长 1
padding 边缘填充(像素数) 0
dilation 空洞卷积(控制核的稀疏性) 1
bias 是否添加偏置项(β True
in_channels 输入通道数(C_in -
out_channels 输出通道数(C_out -

输出矩阵的大小计算公式:

\[H_{out}=⌊\frac{H_{in}+2×padding−dilation×(K-1)+1}{stride}⌋+1 \]

场景1(常规场景)

kernel_size = 3

stride = 1

padding = 0

此时输出矩阵的大小为:

\[H_{out}=⌊\frac{5+2×0−1×(3-1)+1}{1}⌋ + 1 = 3 \]

场景2(边缘填充)

kernel_size = 3

stride = 1

padding = 1

在上图的卷积核滑动的过程中,将 5x5 特征矩阵转换为 3x3 的特征矩阵,边缘上的像素永远不在卷积核的中心。

Padding 做了一些非常机智的办法来解决这个问题:用额外的「假」像素(通常值为 0, 因此经常使用的术语「零填充」)填充边缘。这样,在滑动时的卷积核可以允许原始边缘像素位于其中心,同时延伸到边缘之外的假像素,从而产生与输入相同大小的输出。

此时输出矩阵的大小为:

\[H_{out}=⌊\frac{5+2×1−1×(3-1)+1}{1}⌋ + 1 = 5 \]

场景3(步长>1)

kernel_size = 3

stride = 2

padding = 0

Stride 是改变卷积核的移动步长跳过一些像素。Stride 是 1 表示卷积核滑过每一个相距是 1 的像素,是最基本的单步滑动,作为标准卷积模式。Stride 是 2 表示卷积核的移动步长是 2,跳过相邻像素,图像缩小为原来的 1/2。Stride 是 3 表示卷积核的移动步长是 3,跳过 2 个相邻像素,图像缩小为原来的 1/3。

此时输出矩阵的大小为:

\[H_{out}=⌊\frac{5+2×0−1×(3-1)+1}{2}⌋ + 1 = 2 \]

场景4(空洞卷积)

kernel_size = 3

stride = 2

padding = 0

dilation = 2

通过引入空洞率(dilation rate)来扩大卷积核感受野的特殊卷积方式,在不增加参数量或计算量的情况下捕捉更广范围的上下文信息

此时输出矩阵的大小为:

\[H_{out}=⌊\frac{7+2×0−2×(3-1)+1}{1}⌋ + 1 = 3 \]

归一化层

将每层的输入调整为均值为0、方差为1的分布,避免内部协变量偏移,对每个通道单独归一化,保留空间信息。
最常用的归一化层类型是 BatchNorm2d

参数

参数名 作用 默认值
num_features 输入通道数(C -
eps 数值稳定项(防止除零) 1e-5
momentum 运行统计量的动量(EMA衰减率) 0.1
affine 是否启用可学习的γ和β True
track_running_stats 是否跟踪运行统计量 True

num_features是最常用参数

输入输出

输入:(N, C, H, W)

N:Batch Size

C:通道数(需与 num_features 一致)

H, W:特征图高度和宽度

输出:(N, C, H, W)(尺寸不变)

仅对通道维度进行归一化,空间维度(H, W)完全保留。

激活层

作用

  • 引入非线性:突破线性模型的限制(否则多层网络等效于单层)。
  • 控制输出范围:如Sigmoid将输出压缩到(0,1),适合概率。
  • 稀疏激活:如ReLU的“单侧抑制”可增加稀疏性。

常用激活函数及特性

激活函数 适用场景 注意事项
ReLU 大多数CNN/全连接层 小心“神经元死亡”
LeakyReLU 需要缓解ReLU缺陷的深层网络 调参negative_slope
Sigmoid 二分类输出层 避免用于隐藏层
Tanh RNN、生成模型 梯度消失问题
Swish/GELU Transformer、现代CNN 计算量略高
Softmax 多分类输出层 需配合交叉熵损失

输入输出

  • 输入:任意形状张量(如 (N, C, H, W))
  • 输出:与输入形状完全相同,仅对每个元素独立应用激活函数

池化层

作用

  • 降维:减少特征图尺寸,降低计算量和内存消耗。
  • 平移不变性:对微小位置变化不敏感(如Max Pooling保留最强特征)。
  • 防止过拟合:减少参数数量,类似正则化效果。
  • 扩大感受野:通过降维,后续卷积层能覆盖更大输入区域

常见的池化层类型

  • 最大池化(Max Pooling)
  • 平均池化(Average Pooling)
  • 全局池化(Global Pooling)

参数

参数名 作用 默认值
kernel_size 池化窗口大小(如2x2) -
stride 滑动步长 kernel_size
padding 边缘填充(较少用) 0
ceil_mode 尺寸计算向上取整(True/False) False

输入输出

输入尺寸:(H_in, W_in)
输出尺寸:(H_out, W_out)

\[H_{out}=⌊\frac{H_{in}+2×padding−kernel\_size}{stride}⌋+1 \]

全连接

作用

  • 特征整合:将卷积层和池化层提取的 空间特征 转换为一维向量,并进行高阶组合。
  • 分类/回归:输出每个类别的概率(配合 Softmax)或回归值(如目标检测中的边界框坐标)。
  • 可学习参数:通过权重矩阵实现特征间的全局交互。

参数

参数名 作用 示例值
in_features 输入特征维度(需展平后大小) 1024
out_features 输出特征维度(如类别数) 10
bias 是否添加偏置项(True/False True

输入输出

  • 输入形状:一般为 (N, *, in_features),其中 * 表示可选的额外维度(需先展平)。
  • 输出:(N, out_features)N 为 Batch Size,out_features 如类别数)

posted on 2025-05-31 12:13  灰马非马  阅读(32)  评论(0)    收藏  举报

导航