DAY41 简单CNN

发布于:2025-08-13 ⋅ 阅读:(28) ⋅ 点赞:(0)

@浙大疏锦行
知识点:

  1. 数据增强
  2. 卷积神经网络定义的写法
  3. batch归一化:调整一个批次的分布,常用与图像数据
  4. 特征图:只有卷积操作输出的才叫特征图
  5. 调度器:直接修改基础学习率

作业:尝试手动修改下不同的调度器和CNN的结构,观察训练的差异。


1 数据增强

为了提升数据多样性,可以通过几何变换、像素变换、语义增强等方法扩展模型训练的样本空间多样性。

# 训练集:使用多种数据增强方法提高模型泛化能力
train_transform = transforms.Compose([
    # 随机裁剪图像,从原图中随机截取32x32大小的区域
    transforms.RandomCrop(32, padding=4),
    # 随机水平翻转图像(概率0.5)
    transforms.RandomHorizontalFlip(),
    # 随机颜色抖动:亮度、对比度、饱和度和色调随机变化
    transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.1),
    # 随机旋转图像(最大角度15度)
    transforms.RandomRotation(15),
    # 将PIL图像或numpy数组转换为张量
    transforms.ToTensor(),
    # 标准化处理:每个通道的均值和标准差,使数据分布更合理
    transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010))
])

注意数据增强一般是不改变每个批次的数据量,是对原始数据修改后替换原始数据。其中该数据集事先知道其均值和标准差,如果不知道,需要提前计算下。

2 CNN模型

卷积的本质:通过卷积核在输入通道上的滑动乘积,提取跨通道的空间特征。所以只需要定义几个参数即可

  1. 卷积核大小:卷积核的大小,如3x3、5x5、7x7等。
  2. 输入通道数:输入图片的通道数,如1(单通道图片)、3(RGB图片)、4(RGBA图片)等。
  3. 输出通道数:卷积核的个数,即输出的通道数。如本模型中通过 32→64→128 逐步增加特征复杂度
  4. 步长(stride):卷积核的滑动步长,默认为1。

2.1 batch归一化

通常位于卷积层后,BatchNorm 应在池化前对空间维度的特征完成归一化

  1. 输入 → 卷积层 → Batch归一化层(可选) → 池化层 → 激活函数 → 下一层
  2. Flatten -> Dense (with Dropout,可选) -> Dense (Output)

深度学习的归一化有2类:

  1. Batch Normalization:一般用于图像数据,因为图像数据通常是批量处理,有相对固定的 Batch Size ,能利用 Batch 内数据计算稳定的统计量(均值、方差 )来做归一化。
  2. Layer Normalization:一般用于文本数据,本数据的序列长度往往不同,像不同句子长短不一,很难像图像那样固定 Batch Size 。如果用 Batch 归一化,不同批次的统计量波动大,效果不好。层归一化是对单个样本的所有隐藏单元进行归一化,不依赖批次。

2.2 特征图

卷积层输出的叫做特征图,通过输入尺寸和卷积核的尺寸、步长可以计算出输出尺寸。
特征图就代表着在之前特征提取器上提取到的特征,可以通过 Grad-CAM方法来查看模型在识别图像时,特征图所对应的权重是多少。-----深度学习可解释性

2.3 调度器

在每个 epoch 结束后,需要手动调用调度器来更新学习率,可以在训练过程中调用 scheduler.step()
ReduceLROnPlateau调度器适用于当监测的指标(如验证损失)停滞时降低学习率。是大多数任务的首选调度器,尤其适合验证集波动较大的情况

优化器(Optimizer) 调度器(Scheduler)
直接更新模型参数 调整优化器的学习率参数
决定参数更新的方向和步长 决定学习率随时间的变化策略
必须存在才能训练模型 可选组件,用用于提升训练效率

网站公告

今日签到

点亮在社区的每一天
去签到