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 热力图:一张颜色斑斓的图,红色代表模型做出判断最依赖的区域。

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

相关推荐
西红市杰出青年2 小时前
CSS 选择器详细教程:原理、语法、方向/“轴”与实战
css·python
tudficdew2 小时前
使用Flask快速搭建轻量级Web应用
jvm·数据库·python
爱学习的阿磊2 小时前
使用XGBoost赢得Kaggle比赛
jvm·数据库·python
智航GIS2 小时前
ArcGIS Python零基础脚本开发教程---1.1 Describe 函数
开发语言·python·arcgis
Dreaming_of_you2 小时前
pytorch/cv2/pil/torchvision处理图像缩小的最佳方案
人工智能·pytorch·python·opencv
Testopia2 小时前
走一遍 AI 学习之路 —— AI实例系列说明
开发语言·人工智能·python
机 _ 长2 小时前
YOLO26 改进 | 训练策略 | 知识蒸馏 (Response + Feature + Relation)
python·深度学习·yolo·目标检测·机器学习·计算机视觉
草青工作室3 小时前
java-FreeMarker3.4自定义异常处理
java·前端·python
hrrrrb3 小时前
【算法设计与分析】随机化算法
人工智能·python·算法