You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何测量训练好的Keras/PyTorch模型预测时各节点的激活水平?

获取预训练模型节点激活值的实现方案

以下分别提供Keras、PyTorch两大框架的可落地实现方案,可直接提取所有节点/卷积核的激活程度数值:

需求示意图

节点激活程度需求示意图


Keras 框架实现

Keras可通过构建多输出的激活提取模型,一次性获取所有层的输出值:

  1. 加载已训练完成的模型
from tensorflow import keras
model = keras.models.load_model("your_trained_model.h5")
  1. 定义需要提取激活值的层输出(默认取所有层,可自行筛选目标层)
# 提取所有层的输出
target_layer_outputs = [layer.output for layer in model.layers]
# 构建激活值提取模型
activation_extractor = keras.Model(inputs=model.input, outputs=target_layer_outputs)
  1. 输入待推理数据,获取所有层的激活值
# input_data为预处理后的输入样本,shape匹配模型输入要求
all_activations = activation_extractor.predict(input_data)

返回的all_activations为列表,每个元素对应一个层的输出矩阵:

  • 全连接层:维度为(batch_size, 节点数),每个数值即为对应节点的激活强度
  • 卷积层:维度为(batch_size, 特征图高, 特征图宽, 卷积核数),每个卷积核对应的所有特征图数值的平均值/最大值即为该卷积核的激活强度

PyTorch 框架实现

PyTorch通过前向钩子(Forward Hook)机制,无需修改模型结构即可获取任意层的输出激活值:

  1. 加载已训练完成的模型,切换为评估模式
import torch
model = torch.load("your_trained_model.pth")
model.eval()
  1. 定义钩子函数与激活值存储容器
activations = {}
def get_activation_hook(layer_name):
    def hook(module, input, output):
        # 存储当前层的激活值,detach切断梯度回传链路
        activations[layer_name] = output.detach().cpu().numpy()
    return hook
  1. 给目标层注册钩子(默认给所有层注册,可自行筛选)
for layer_name, module in model.named_modules():
    module.register_forward_hook(get_activation_hook(layer_name))
  1. 输入数据完成前向推理,自动收集所有层激活值
# input_tensor为预处理后的输入张量,shape匹配模型输入要求
with torch.no_grad(): # 关闭梯度计算节省资源
    output = model(input_tensor)

推理完成后activations字典的键为层名,值为对应层的激活矩阵,读取规则和Keras一致。


激活强度量化参考

你可以根据需求选择以下量化方式:

  • 单节点激活强度:直接取对应位置的输出数值即可
  • 卷积核激活强度:取对应卷积核所有特征图位置的最大值/平均值作为量化指标
  • 层激活稀疏度:统计当前层中激活值大于0(针对ReLU激活)的节点占比,判断层的激活效率

内容的提问来源于stack exchange,提问作者김종명

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 22:51:02