news 2026/8/6 19:52:48

hook来获取模型每层的激活值输出

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
hook来获取模型每层的激活值输出

import sys

import os

from pathlib import Path

# 解决 OpenMP 库冲突问题

os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE'

# 添加项目根目录到 Python 路径

project_root = Path(__file__).parent.parent

sys.path.insert(0, str(project_root))

import torch

import torch.nn as nn

import matplotlib.pyplot as plt

import torchvision

from models.UNeXt.UNeXt_Stripe_Conv import UNext_Stripe_Conv

# ========== 1. 准备一个存储激活值的字典 ==========

activations = {}

#x1.detach()的意思是:把张量从计算图中"剪断",不再追踪梯度

def get_activation(name):

"""定义hook函数"""

def hook(model, input, output):

activations[name] = output.detach()

return hook

# ========== 2. 给模型的层注册hook ==========

model = UNext_Stripe_Conv(num_classes=1)

model.eval()

# 给所有卷积层注册hook

for name, layer in model.named_modules():

if isinstance(layer, nn.Conv2d):

layer.register_forward_hook(get_activation(name))

# ========== 3. 前向传播,自动捕获激活值 ==========

input_image = torch.randn(1, 3, 224, 224)

with torch.no_grad():

output = model(input_image)

# ========== 4. 可视化任意层 ==========

def visualize_layer(layer_name, num_channels=16):

"""显示某层的前num_channels个通道"""

act = activations[layer_name][0] # [C, H, W]

fig, axes = plt.subplots(4, 4, figsize=(10, 10))

for i, ax in enumerate(axes.flat):

if i < min(num_channels, act.shape[0]):

ax.imshow(act[i].cpu(), cmap='viridis')

ax.set_title(f'Ch {i}')

ax.axis('off')

plt.suptitle(f'{layer_name}')

plt.show()

# 使用

print(f"捕获了 {len(activations)} 层")

first_conv = list(activations.keys())[0]

visualize_layer(first_conv)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/6 7:22:14

学习周报7

本周主要对动态规划进行了初步的学习并在力扣上进行了练习内容我认为动态规划有两大要点1.找到相应的递推公式。 2.找到i&#xff0c;j&#xff0c;dp[i][j]的含义。 在其中有 63.不同路径IIint** inidp(int n, int m, int** obstacleGrid){int** dp (int**)malloc(m * sizeof…

作者头像 李华
网站建设 2026/8/6 8:23:22

OneBlog完整入门指南:5步快速搭建专业Java博客系统

OneBlog完整入门指南&#xff1a;5步快速搭建专业Java博客系统 【免费下载链接】OneBlog :alien: OneBlog&#xff0c;一个简洁美观、功能强大并且自适应的Java博客 项目地址: https://gitcode.com/gh_mirrors/on/OneBlog OneBlog是一个基于Java开发的简洁美观且功能强…

作者头像 李华
网站建设 2026/8/6 5:12:50

终极指南:如何零障碍安装ta-lib-python技术分析库

终极指南&#xff1a;如何零障碍安装ta-lib-python技术分析库 【免费下载链接】ta-lib-python Python wrapper for TA-Lib (http://ta-lib.org/). 项目地址: https://gitcode.com/gh_mirrors/ta/ta-lib-python 还在为安装ta-lib-python而烦恼吗&#xff1f;作为量化交易…

作者头像 李华
网站建设 2026/8/5 16:24:18

从move和forward到完美转发(深度 !!)

std::move 和 std::forward 到底有什么区别&#xff1f; 在 C11 引入移动语义后&#xff0c;std::move 和 std::forward 成为了高频使用的工具。很多开发者都知道&#xff1a;std::move 用于移动对象&#xff0c;std::forward 用于完美转发。 但是&#xff0c;当你打开 C 标准库…

作者头像 李华
网站建设 2026/8/5 0:59:17

自创获利比副图再次优化更美观更实用 源码

{}MA3:MA(三,3); 七:SUM(获利比,7)/7; 十三:SUM(获利比,13)/13,COLORLIRED; 二五:SUM(获利比,25)/25,COLORWHITE; 金叉点:CROSS(获利比,三),COLORRED,NODRAW; 三七金叉:CROSS(获利比,七),COLORYELLOW,NODRAW; 底部:获利比<15,NODRAW;{} 选底:REF(获利比,1)>15 AND 获利比…

作者头像 李华