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 和上采样,得到与输入图片同尺寸的热力图。

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

相关推荐
li99yo12 分钟前
3DGS的复现
图像处理·pytorch·经验分享·python·3d·conda·pip
Dontla4 小时前
用pip install -e .开发Python包时,Python项目目录结构(项目结构)(可编辑安装editable install)
python·pip
Thomas.Sir4 小时前
第三章:Python3 之 字符串
开发语言·python·字符串·string
威联通网络存储5 小时前
告别掉帧与素材损毁:威联通 QuTS hero 如何重塑影视后期协同工作流
前端·网络·人工智能·python
Dxy12393102166 小时前
Python 根据列表中某字段排序:从基础到进阶
开发语言·windows·python
splage6 小时前
Java进阶——IO 流
java·开发语言·python
cliffordl6 小时前
设计模式(python)
python·设计模式
always_TT6 小时前
从Python_Java转学C语言需要注意什么?
java·c语言·python
2301_793804696 小时前
定时任务专家:Python Schedule库使用指南
jvm·数据库·python