共计 1856 个字符,预计需要花费 5 分钟才能阅读完成。
理解 CIFAR100 与过拟合
CIFAR100 是一个包含 100 个类别的图像分类数据集,每个类别有 600 张 32×32 的彩色图像。由于图像尺寸小、类别多,模型容易记住训练样本的噪声而非学习通用特征,表现为:

- 训练准确率持续上升(如 >95%),但验证准确率停滞(如 60%)
- 验证损失在某个 epoch 后开始反弹上升
过拟合根源分析
- 数据维度诅咒:32×32 的低分辨率限制了特征丰富性,而 100 类别需要高度区分的特征
- 样本绝对数量少:每类仅 500 训练样本,远少于 ImageNet 等大数据集
- 模型复杂度失衡:为提升准确率使用过深 / 过宽的架构(如 ResNet50),参数量远超数据信息量
综合解决方案对比
1. 数据增强:超越传统方法
-
CutMix:随机裁剪图像区域并与另一张图像混合,同时调整标签比例
def cutmix(image, label, alpha=1.0): lam = np.random.beta(alpha, alpha) batch_size = image.shape[0] index = np.random.permutation(batch_size) # 计算裁剪区域 ... return mixed_image, mixed_label -
AutoAugment:搜索最优增强策略组合,需注意:
- CIFAR100 专用策略比 ImageNet 策略效果提升 3 -5%
- 计算成本较高,建议使用预定义策略
2. 模型正则化三重奏
- Dropout 2.0:
- 对卷积层使用 SpatialDropout2D(丢弃整个通道)
- 全连接层 Dropout 率设为 0.3-0.5
- L2 正则化:
- 卷积核正则化系数 1e-4
- 偏置项通常不加正则
- 权重约束:
model.add(Conv2D(64, (3,3), kernel_constraint=max_norm(3.)))
3. 学习率智能调度
- Cosine 衰减 +warmup:
def cosine_with_warmup(epoch): if epoch < 5: # warmup return (epoch + 1) / 5 * initial_lr progress = (epoch - 5) / (epochs - 5) return 0.5 * initial_lr * (1 + math.cos(math.pi * progress))
完整实现框架
import tensorflow as tf
from tensorflow.keras import layers, regularizers
SEED = 42
tf.random.set_seed(SEED)
def build_model():
model = tf.keras.Sequential([
# 数据增强层
layers.experimental.preprocessing.RandomFlip("horizontal"),
layers.experimental.preprocessing.RandomRotation(0.1),
# 主干网络
layers.Conv2D(64, 3, padding='same',
kernel_regularizer=regularizers.l2(1e-4)),
layers.BatchNormalization(),
layers.SpatialDropout2D(0.2),
# 更多层...
layers.GlobalAvgPool2D(),
layers.Dense(100, activation='softmax',
kernel_constraint=max_norm(3.))
])
return model
性能对比实验
| 方案 | 验证准确率 | 过拟合程度 |
|---|---|---|
| 基线模型 | 58.2% | 严重 |
| + 基础数据增强 | 63.1% | 中等 |
| +CutMix+AutoAugment | 67.5% | 轻微 |
| 全方案组合 | 70.3% | 可控 |
生产环境避坑指南
- BatchNorm 与数据增强:
- 使用增强后,BN 的 momentum 应调小(如 0.9→0.8)
-
验证时关闭增强但保持 BN 在推理模式
-
正则化调参经验:
- 先用小强度 (如 1e-5) 测试模型敏感性
-
L2 正则和 Dropout 不要同时用最大强度
-
资源 - 效果权衡:
- CutMix 在 TPU 上效率更高
- AutoAugment 策略可先在小模型上测试
开放思考方向
- 如何设计消融实验评估各技术的贡献度?建议:
- 固定其他超参数,每次只启用一项技术
-
绘制验证准确率变化曲线
-
样本量减半时如何调整?可尝试:
- 增强强度加倍
- 使用 MixUp+CutMix 混合策略
- 更激进的 Early Stopping
过拟合防控是系统工程,需要根据具体任务特性组合不同技术。建议从简单方案开始,逐步叠加技巧并监控验证指标,找到最适合当前数据分布的方案组合。
正文完
