Python与PyTorch系列(五) 本文(5万字) | 解析PyTorch中Hook函数 |

141 篇文章 7 订阅

已下架不支持订阅


点击进入专栏:
《人工智能专栏》 Python与Python | 机器学习 | 深度学习 | 目标检测 | YOLOv5及其改进 | YOLOv8及其改进 | 关键知识点 | 各种工具教程


文章目录

  • 前言
    • 如何在不改变模型结构的基础上获取特征图、梯度等信息呢?
    • register_hook_一
    • register_hook_二
  • register_forward_hook`和`register_backward_hook
    • register_forward_hook_二
    • register_backward_hook_二
    • 注意事项
  • forward_register_forward_pre_hook
    • 示例
    • 可视化特征图
    • 1. 机器学习
    • 2. 深度学习与目标检测
    • 3. YOLOv5
    • 4. YOLOv5改进
    • 5. YOLOv8及其改进
    • 6. Python与PyTorch
    • 7. 工具
    • 8. 小知识点
    • 9. 杂记


前言

为了更深入地理解神经网络模型,有时候我们需要观察它训练得到的卷积核、特征图或者梯度等信息,这在CNN可视化研究中经常用到。其中,卷积核最易获取,将模型参数保存即可得到;特征图是中间变量,所对应的图像处理完即会被系统清除,否则将严重占用内存;梯度跟特征图类似,除了叶子结点外,其它中间变量的梯度都被会内存释放,因而不能直接获取。
最容易想到的获取方法就是改变模型结构,在forward的最后不但返回模型的预测输出,还返回所需要的特征图等信息。

如何在不改变模型结构的基础上获取特征图、梯度等信息呢?

Pytorch的hook编程可以在不改变网络结构的基础上有效获取、改变模型中间变量以及梯度等信息。
hook可以提取或改变Tensor的梯度,也可以获取nn.Module的输出和梯度(这里不能改变)。因此有4个hook函数用于实现以上功能:


                
  • 26
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

已下架不支持订阅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小酒馆燃着灯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值