PyTorch学习笔记(24)Hook函数与CAM算法

本文介绍了PyTorch中的Hook函数机制,包括Tensor的register_hook、Module的register_forward_hook、register_forward_pre_hook和register_backward_hook,并详细阐述了它们的功能和参数。同时,文章探讨了CAM(类激活图)和Grad-CAM算法,特别是Grad-CAM如何通过利用梯度信息来改进注意力机制。
摘要由CSDN通过智能技术生成

Hook函数与CAM算法

Hook Function

Hook函数机制:不改变主体,实现额外功能,像一个挂件,挂钩,hook

1.torch.Tensor.register_hook(hook)

功能 注册一个反向传播hook函数
Hook函数仅一个输入参数,为张量的梯度

2.torch.nn.Module.register_forward_hood

功能 注册module 的前向传播hook 函数
参数
module 当前网络层
input 当前网络层输入数据
output 当前网络层输出数据

3.torch.nn.Module.register_forward_pre_hook

功能 注册module 前向传播前的hook 函数
参数
module 当前网络层
input 当前网络层输入数据

4.torch.nn.Module.register_backward_hook

功能 注册module 反向传播的hook 函数
参数
module 当前网络层
grad_input 当前网络层输入梯度数据
grad_output 当前网络层输出梯度数据

CAM

类激活图 class activation map
对网络的最后一个特征图进行加权求和 得到注意力机制

Grad-CAM

CAM改进版,利用梯度作为特征图权重



# -*- coding:utf-8 -*-

import torch
import torch.nn as nn
from tools.common_tools import set_seed

set_seed(1)  # 设置随机种子


# ----------------------------------- 1 tensor hook 1 -----------------------------------
flag = 0
# flag = 1
if flag:

    w = torch.tensor([1.], requires_grad=True)
    x = torch.tensor([2.], requires_grad=True)
    a = torch.add(w, x)
    b = torch.add(w, 1)
    y = torch.mul(a, b)

    # 构建list  存储张量的梯度
    a_grad = list()

    # 把当前
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值