hook函数与CAM可视化
一、hook函数
hook函数机制:不改变主体,实现额外功能,像一个挂件,挂钩,hook
hook函数与pytorch的动态图运行机制有关,动态图运算结束之后,中间变量有些会背释放掉,如特征图、非叶子节点梯度。可以用hook函数在前向传播或者反向传播中获取甚至改变这些变量。
针对张量的:
- torch.Tensor.register_hook(hook)
针对模型的:
2. torch.nn.Module.register_forward_hook
3. torch.nn.Module.register_forward_pre_hook
4. torch.nn.Module.register_backward_hook
1.1 Tensor.register_hook
功能:注册一个反向传播hook函数
Hook函数仅一个输入参数,为张量的梯度
计算图与梯度求导
y = (x+ w) * (w+1)
a = x + w b = w + 1
y = a * b
a,b为非叶子节点梯度会被释放掉,用hook函数捕获张量a的梯度。