DAY48 Grad-CAM与Hook函数

目录

[1. 回调函数 (Callback Function)](#1. 回调函数 (Callback Function))

[2. lambda 函数](#2. lambda 函数)

[3. Hook 函数:模块钩子与张量钩子](#3. Hook 函数:模块钩子与张量钩子)

张量钩子 (Tensor Hook)

模块钩子 (Module Hook)

[4. Grad-CAM 的示例](#4. Grad-CAM 的示例)

核心逻辑流程:


1. 回调函数 (Callback Function)

回调函数是一种编程模式,简单来说就是"待会儿再调用的函数"。

  • 定义 :你把函数 A 作为参数传给函数 B,当函数 B 完成了某些任务或触发了某个条件时,它会反过来调用函数 A

  • 通俗比喻:你去商店买东西,现在没货,你留下电话号码(注册回调函数)。等货到了(触发条件),营业员拨打你的电话通知你(调用回调)。

  • 用途:常用于异步操作、GUI 事件处理、或者像 PyTorch 这种深度学习框架中的训练监控(比如每训练一个 epoch 回调一次保存模型)。

2. lambda 函数

lambda 函数也称为匿名函数

  • 定义 :它是一种不需要显式定义函数名(即不用 def)的简短函数。在 Python 中,语法为:lambda 参数: 表达式

  • 特点

    • 只能有一行表达式。

    • 会自动返回该表达式的结果。

  • 示例

    python 复制代码
    # 普通函数
    def square(x): return x**2
    
    # 等价的 lambda 函数
    square_lambda = lambda x: x**2
  • 用途 :通常用于需要一个临时小函数但不想正式定义的场景,比如作为 map()filter() 的参数,或者在 PyTorch 钩子中快速定义简单的逻辑。

3. Hook 函数:模块钩子与张量钩子

Hook(钩子)是 PyTorch 中用于拦截并获取/修改中间层信息的强大工具。它不需要修改模型的前向传播逻辑就能操作梯度或输出。

张量钩子 (Tensor Hook)
  • 作用对象:特定的张量(Tensor),通常是计算图中的中间梯度。

  • 注册方法tensor.register_hook(hook_fn)

  • 触发时机:在反向传播(Backward)过程中,该张量的梯度被计算出来时立即调用。

  • 用途:拦截、修改或打印特定张量的梯度。

模块钩子 (Module Hook)
  • 作用对象 :神经网络的层(如 nn.Conv2dnn.Linear)。

  • 注册方法

    • module.register_forward_hook(hook_fn):获取该层在前向传播时的输入和输出

    • module.register_full_backward_hook(hook_fn):获取该层在反向传播时的输入梯度和输出梯度

  • 用途:提取特征图(Feature Map)用于可视化、分析每一层的权重梯度等。

4. Grad-CAM 的示例

Grad-CAM(梯度加权类激活映射)是 Hook 函数最经典的应用场景之一,用于分析卷积神经网络(CNN)"看"到了图像的哪个部分才做出的分类决定。

核心逻辑流程:
  1. 注册 Forward Hook :在指定的卷积层(通常是最后一层)注册钩子,提取该层的前向特征图 (Feature Maps)

  2. 注册 Backward Hook :在该层注册钩子,获取该层在反向传播时的梯度 (Gradients)

  3. 计算权重:对梯度的每个通道求平均值,作为每个特征图的重要性权重。

  4. 生成热力图:将权重与特征图加权相加,经过 ReLU 处理后缩放到原始图像大小。

  5. 叠加显示:将生成的"热力图"叠加在原始图片上。

  • 原始图像:你要识别的物体(如一只狗)。

  • Grad-CAM 热力图:一张颜色斑斓的图,红色代表模型做出判断最依赖的区域。

  • 叠加热力图:你会看到红色区域正好覆盖在图像中物体的关键特征上(比如狗的头部或身躯),从而解释了模型的决策逻辑。

相关推荐
郝学胜-神的一滴13 小时前
Effective Python 条款 10 :海象运算符_=
开发语言·python·程序人生·开源
wuyk55513 小时前
Python零基础入门第十四章:异常处理(try-except)
开发语言·python
2601_9620781914 小时前
Appium+Python+pytest自动化测试框架详解
自动化测试·python·appium·pytest·移动应用
卷无止境17 小时前
智能体开发环境ADE浅析,编程工具的下一次范式跃迁
后端·python
2601_9623008121 小时前
机器学习贴士:使用Python编写MapReduce
hadoop·python·机器学习·mapreduce·数据处理
xyz_CDragon21 小时前
GitHub上4个爆款AI开源Skill:拍照后不用P图,用Codex一键生成高级海报(附效果图+使用教程)
人工智能·python·github·codex·skill
weixin1997010801621 小时前
[特殊字符]《跨境二手ERP对接Back Market:标准化API + 7~10工作日技术合规审核实录》(附Python源码)
开发语言·python·pandas
持敬chijing1 天前
Python-数据类型-列表
开发语言·python·青少年编程
2601_962301011 天前
Python环境搭建及PyCharm破解使用技巧
python·pycharm·环境搭建·避坑技巧·破解使用
2601_962099461 天前
Python中的find()函数:用法和示例
python·字符串·索引·子字符串·find函数