DAY 43

一、Hook 机制与 Grad-CAM

1. 核心概念铺垫

  • 回调函数:将函数作为参数,在特定事件触发时执行,实现解耦和延迟执行。
  • 装饰器:对原函数进行包装,增强其功能,代码结构更优雅。
  • lambda 函数:单行匿名函数,常用于 Hook 中的简单逻辑。

2. PyTorch Hook

Hook 基于动态计算图,在不修改模型代码的情况下监听/修改中间数据。

类型 钩子注册方法 作用
模块前向钩子 register_forward_hook 获取模块的输入/输出(只读)
模块反向钩子 register_backward_hook 获取模块的输入/输出梯度
张量钩子 register_hook 查看或修改张量梯度

使用后务必通过 handle.remove() 释放资源,避免内存泄漏。

3. Grad-CAM 原理与实现

  • 目标:生成热力图,显示 CNN 对特定类别关注的图像区域。

  • 核心步骤

    1. 选定目标卷积层,利用 Hook 捕获前向输出(特征图)反向梯度
    2. 对梯度做全局平均池化,得到每个通道的权重
    3. 权重与特征图加权求和,经 ReLU 去除负贡献,得到原始热力图。
    4. 双线性插值到原图尺寸,归一化后叠加到原始图像。
  • 作用:帮助判断模型决策是否合理(如通过腿和头部识别青蛙),以及发现潜在偏见(如通过性别判断职业)。


二、从 MLP 到 CNN 的进化

1. MLP 的局限性

  • 将图像展平为一维向量,丢失空间结构,无法捕获局部特征(边缘、纹理)。
  • 参数量巨大,易过拟合,CIFAR-10 准确率通常仅 50%--55%。

2. CNN 的优势

  • 卷积层:局部感知 + 权值共享,有效提取层次化空间特征。
  • 池化层:下采样缩小尺寸,增强平移不变性,减少计算量。
  • 参数量显著减少(如简单 CNN 约 10 万参数),准确率大幅提升至 70%--80% 以上。

3. 提升 CNN 性能的关键组件

  • 数据增强(训练集):随机裁剪、翻转、颜色抖动等,增加样本多样性,减轻过拟合。
  • Batch Normalization:置于卷积后,标准化 mini-batch 数据,加速收敛,允许更大学习率。训练时用 batch 统计量,推理时用全局滑动平均。
  • Dropout:放在全连接层间,随机失活神经元,进一步防过拟合。
  • 学习率调度器 (如 ReduceLROnPlateau):动态调整基础学习率,先快后慢精细调优。
  • 输出层 返回 logits,配合 CrossEntropyLoss 使用。

4. 典型 CNN 结构(图像分类)

复制代码
Conv2d → BatchNorm → ReLU → MaxPool  (重复 2~3 次,通道数递增 32→64→128)
→ Flatten → Linear → ReLU → Dropout → Linear(输出 logits)

三、图像分类任务的规范流程

1. 数据处理

  • transforms.Compose 组合 ToTensorNormalize,训练集与测试集一致。
  • DataLoaderbatch_size,训练时 shuffle=True

2. 模型构建

  • 继承 nn.Module,定义各层与 forward 流程。
  • 损失:nn.CrossEntropyLoss();优化器:Adam 等。
  • 设备迁移:模型和数据均需 .to(device)

3. 训练与测试模块化

  • 封装 train()test() 函数,提高复用性。
  • 训练循环:optimizer.zero_grad()forwardloss.backward()optimizer.step()
  • 测试时用 torch.no_grad(),并切换到 model.eval()
  • 记录损失、准确率,可绘制迭代曲线。

4. 验证集与早停

  • 划分训练集/验证集/测试集,验证集用于调参和早停,测试集仅最终评估。

总结

Hook 与 Grad-CAM 揭示模型关注区域,到 CNN 替换 MLP 解决空间信息丢失问题,再到 规范化训练流程,构成了深度学习图像任务的完整链条------理解原理、构建高效模型、并保持代码健壮可复用。

相关推荐
DeepVisionary4 小时前
谷歌 Gemini Omni 1.1 Flash 正式发布:4K 视频、40 秒场景延伸,视频生成进入按 token 计费时代
python·自动化
阡之尘埃5 小时前
Python数据分析案例85——大模型微调全流程(SFT的LoRA微调)
人工智能·python·深度学习·语言模型·llm·微调·千问
海兰5 小时前
【应用】基于 Next.js 16 + Python mplfinance的金融K线图与技术指标可视化平台(三)
javascript·python·金融
cvcode_study5 小时前
Ollama+ComfyUI 多模态
大数据·人工智能·python
星核0penstarry6 小时前
试一试用gr.Workflow把AI多步骤串联变成可视化画布
人工智能·python·ai作画·api·ai编程·工作流·api聚合平台
taller_20007 小时前
【005】PiE 与传统 VBA 的核心区别
python·vba·pie·py
海兰7 小时前
【应用】基于 Next.js 16 + Python mplfinance的金融K线图与技术指标可视化平台(一)
javascript·python·金融
大衛說7 小时前
《Python 从入门到精通》系列总览与学习路线
开发语言·python·学习
小猴子爱上树7 小时前
跨境电商翻译工具推荐:批量图片翻译、视频字幕翻译、智能抠图一站式搞定
人工智能·python·音视频
丈剑走天涯8 小时前
基于 Python 3 语法的 PyCharm 练习示例,涵盖列表操作、类型判断及数据清洗等核心知识点
windows·python·pycharm