day47

@浙大疏锦行

1.回调函数

概念:是一种 "被动触发" 的函数 ------ 它不会主动执行,而是在某个特定事件(如模型训练到某一轮、损失下降到阈值)发生时,被程序自动调用。

核心作用:用于在流程中插入自定义逻辑(比如训练时保存最优模型、记录中间结果)

示例场景:训练模型时,每轮结束后自动计算验证集精度,若精度提升则保存当前模型。

  1. lambda 函数

概念:Python 中的匿名函数(没有正式函数名),

核心特点:简洁、临时使用,适合替代简单的小函数。在深度学习中常作为 Hook 函数的 "回调逻辑"(因为 Hook 需要传入一个简单的处理函数)。

实例:

  1. Hook 函数的模块钩子和张量钩子

Hook 函数在PyTorch 中用于修改张量或模块中间结果,核心是在不修改模型结构的前提下,获取模型前向 / 反向传播中的中间数据(如特征图、梯度)。

(1)模块钩子(Module Hook)

作用:绑定到模型的某个模块(如nn.Conv2d、nn.Linear),在模块执行前 / 后触发。

常见类型:

register_forward_hook:模块前向传播完成后触发,可获取模块的输入和输出张量;

register_backward_hook:模块反向传播完成后触发,可获取模块的输入梯度、输出梯度。

示例(获取某卷积层的输出特征图):

(2)张量钩子(Tensor Hook)

作用:绑定到某个张量(如模型的输入张量、参数张量),在张量的梯度计算完成后触发。

常见类型:register_hook:张量的梯度计算完成后,可获取 / 修改该张量的梯度。

示例(修改某参数的梯度):

  1. Grad-CAM

Grad-CAM(Gradient-weighted Class Activation Mapping)是用于可视化模型 "关注哪些区域做出预测" 的方法,核心是结合 "特征图" 和 "对应类别的梯度",生成热力图。

Grad-CAM 的核心步骤(结合 Hook 实现):

获取目标层的特征图:用forward_hook捕获模型最后一个卷积层的输出特征图;

获取目标类别的梯度:用backward_hook捕获该特征图对目标类别的梯度;

计算梯度权重:对梯度在空间维度(H×W)取平均,得到每个通道的权重;

生成热力图:用通道权重加权求和特征图,再通过 ReLU 和上采样,得到与输入图片同尺寸的热力图。

热力图中颜色越红的区域,是模型做出预测时 "重点关注" 的区域,可用于解释模型的决策逻辑。

相关推荐
AI攻城狮2 小时前
用 Playwright 实现博客一键发布到稀土掘金
python·自动化运维
曲幽2 小时前
FastAPI分布式系统实战:拆解分布式系统中常见问题及解决方案
redis·python·fastapi·web·httpx·lock·asyncio
孟健17 小时前
Karpathy 用 200 行纯 Python 从零实现 GPT:代码逐行解析
python
码路飞19 小时前
写了个 AI 聊天页面,被 5 种流式格式折腾了一整天 😭
javascript·python
曲幽1 天前
FastAPI压力测试实战:Locust模拟真实用户并发及优化建议
python·fastapi·web·locust·asyncio·test·uvicorn·workers
敏编程1 天前
一天一个Python库:jsonschema - JSON 数据验证利器
python
前端付豪1 天前
LangChain记忆:通过Memory记住上次的对话细节
人工智能·python·langchain
databook1 天前
ManimCE v0.20.1 发布:LaTeX 渲染修复与动画稳定性提升
python·动效
花酒锄作田2 天前
使用 pkgutil 实现动态插件系统
python