keract
Keract 是一款专为 Keras 和 TensorFlow 模型设计的轻量级开源工具,旨在让开发者轻松获取神经网络中每一层的激活值(输出)与梯度。在深度学习模型调试、可解释性研究或知识蒸馏等场景中,用户往往需要深入观察模型内部状态,但原生框架提取这些中间层数据通常代码繁琐且容易出错。Keract 通过简洁的 API 一键解决这一痛点,支持将任意层的输出转换为 NumPy 数组,并提供热力图可视化功能,直观展示卷积神经网络关注图像的区域。
该工具特别适合 AI 研究人员、算法工程师及深度学习爱好者使用。无论是分析 LSTM、卷积网络还是复杂的预训练模型(如 VGG、MobileNet),Keract 都能帮助用户快速洞察模型行为。其技术亮点在于灵活的输出格式配置(支持按层名、全名或序号索引),以及对多输入模型的良好支持。此外,它还具备将激活数据持久化存储为 JSON 的功能,便于后续离线分析。需要注意的是,目前 Keract 主要兼容 TensorFlow 2.9 至 2.15 版本,尚未适配最新的 2.16+ 版本,使用前请确认环境匹配。通过 Keract,探索黑盒模型内部机制变得简单高效。
使用场景
某计算机视觉团队正在调试一个基于 Keras 构建的复杂多输入缺陷检测模型,试图定位为何模型对微小划痕的识别率突然下降。
没有 keract 时
- 黑盒调试困难:开发者无法直接查看中间层(如卷积块或拼接层)的具体输出数值,只能盲目猜测是哪一层特征提取失效。
- 代码侵入性强:为了获取特定层的激活值,必须手动修改模型架构,重新定义包含中间输出的新模型,过程繁琐且容易破坏原有计算图。
- 梯度分析缺失:难以直观获取权重梯度或特征图梯度,无法判断是数据输入问题还是反向传播过程中出现了梯度消失/爆炸。
- 可视化门槛高:将内部张量转换为可观察的热力图或数值数组需要编写大量样板代码,严重拖慢迭代速度。
使用 keract 后
- 一键透视内部:调用
get_activations即可直接获取任意指定层甚至所有层的输出 NumPy 数组,无需改动原模型一行代码。 - 精准定位故障:通过对比正常与异常样本在各层的激活值分布,迅速发现是某个 concatenate 层后的特征发生了异常饱和。
- 深度梯度洞察:利用
get_gradients_of_activations直接分析关键特征图的梯度响应,确认了模型确实“看”到了划痕但未能有效传递信号。 - 即时可视化诊断:配合
display_heatmaps功能,直接将激活值以热力图形式叠加在原图上,直观验证了模型关注区域是否偏离缺陷点。
keract 将原本需要数小时的黑盒摸索工作缩短为几分钟的透明化诊断,让开发者能像做 CT 扫描一样清晰掌控模型的每一次神经冲动。
运行环境要求
未说明
未说明

快速开始
Keract: Keras 激活值 + 梯度
寻求贡献者将此库升级至 Tensorflow 2.16+
已在 Tensorflow 2.9、2.10、2.11、2.12、2.13、2.14 和 2.15 上测试过(2023年11月17日)。
不兼容 Tensorflow 2.16 及以上版本。
pip install keract
您刚刚找到了一种方法,可以获取 TensorFlow/Keras 模型(LSTM、卷积网络等)中每一层的激活值(输出)和梯度。
重要提示:嵌套模型支持不佳。TensorFlow 的最新版本使得可靠地提取层输出变得极其困难。请参阅示例部分,了解可行的操作。
API
- get_activations
- display_activations
- display_heatmaps
- get_gradients_of_trainable_weights
- get_gradients_of_activations
- persist_to_json_file
- load_activations_from_json_file
获取激活值(节点/层的输出为 NumPy 数组)
keract.get_activations(model, x, layer_names=None, nodes_to_evaluate=None, output_format='simple', nested=False, auto_compile=True)
为 Keras 模型和输入 X 获取激活值(节点/层的输出为 NumPy 数组)。默认情况下,会返回所有层的所有激活值。
model: 已编译的 Keras 模型,或以下之一:['vgg16', 'vgg19', 'inception_v3', 'inception_resnet_v2', 'mobilenet_v2', 'mobilenetv2', ...]。x: 作为输入馈送到模型的 NumPy 数组。如果是多输入,则x应为 List 类型。layer_names: (可选)要返回激活值的单个层名或层名列表。在非常大的网络中,计算评估所有层/节点的开销较高时,此参数很有用。nodes_to_evaluate: (可选)要评估的 Keras 节点列表。output_format: 更改函数输出字典的键。simple: 输出键将与 Keras 层的名称匹配。例如 Dense(1, name='d1') 将返回 {'d1': ...}。full: 输出键将与输出层的完整名称匹配。在上述示例中,它将返回 {'d1/BiasAdd:0': ...}。numbered: 输出键将是基于模型中各层定义顺序的索引范围。
nested: 如果指定,将递归遍历模型定义以检索嵌套层。递归将在模型树的叶层或layer_names中指定名称的层处结束。例如,一个 Sequential 模型嵌套在另一个 Sequential 模型中被视为嵌套。auto_compile: 如果设置为 True,将在需要时自动编译模型。
返回值:字典 {层名(由 output_format 指定)-> 层输出/节点的激活值(NumPy 数组)}。
示例
import numpy as np
from tensorflow.keras import Input, Model
from tensorflow.keras.layers import Dense, concatenate
from keract import get_activations
# 模型定义
i1 = Input(shape=(10,), name='i1')
i2 = Input(shape=(10,), name='i2')
a = Dense(1, name='fc1')(i1)
b = Dense(1, name='fc2')(i2)
c = concatenate([a, b], name='concat')
d = Dense(1, name='out')(c)
model = Model(inputs=[i1, i2], outputs=[d])
# 模型输入
x = [np.random.uniform(size=(32, 10)), np.random.uniform(size=(32, 10))]
# 调用以获取模型的激活值。
activations = get_activations(model, x, auto_compile=True)
# 打印激活值的形状。
[print(k, '->', v.shape, '- Numpy array') for (k, v) in activations.items()]
# 输出:
# i1 -> (32, 10) - Numpy array
# i2 -> (32, 10) - Numpy array
# fc1 -> (32, 1) - Numpy array
# fc2 -> (32, 1) - Numpy array
# concat -> (32, 2) - Numpy array
# out -> (32, 1) - Numpy array
显示您获得的激活值
keract.display_activations(activations, cmap=None, save=False, directory='.', data_format='channels_last', fig_size=(24, 24), reshape_1d_layers=False)
使用 matplotlib 绘制各层的激活值。
输入参数:
activations: 字典 - 将层映射到其激活值的字典(get_activations 的输出)。cmap: (可选)字符串 - 有效的 matplotlib 颜色映射。save: (可选)布尔值 - 如果为 True,则保存激活值图像而不是显示。directory: (可选)字符串 - 保存激活值的位置(如果 save 为 True)。data_format: (可选)字符串 - 取值为 "channels_last"(默认)或 "channels_first"。reshape_1d_layers: (可选)布尔值 - 尝试将大型 1D 层重塑为正方形或矩形。fig_size: (可选)(float, float) - 宽度、高度,单位为英寸。
输入数据的维度顺序。"channels_last" 对应于形状为 (batch, steps, channels) 的输入(Keras 中时间序列数据的默认格式),而 "channels_first" 对应于形状为 (batch, channels, steps) 的输入。
将激活值以热图形式叠加在图像上显示
keract.display_heatmaps(activations, input_image, directory='.', save=False, fix=True, merge_filters=False)
为每层的所有滤波器绘制激活值热图,并将其叠加在输入图像上。
输入参数:
activations: 将层映射到其激活值的字典(get_activations 的输出)。input_image: NumPy 数组 - 作为 x 传递给 get_activations 的图像。directory: (可选)字符串 - 存储热图的位置(如果 save 为 True)。save: (可选)布尔值 - 如果为 True,则保存热图而不是显示。fix: (可选)布尔值 - 如果为 True,将对错误的图像进行自动检查和修复。merge_filters: (可选)布尔值 - 如果为 True,则为每层生成一张包含所有滤波器平均值的热图;如果为 False,则为每层中的每个滤波器分别生成一张热图。
获取可训练权重的梯度
keract.get_gradients_of_trainable_weights(model, x, y)
model: 一个keras.models.Model对象。x: 作为输入馈送到模型的 NumPy 数组。如果是多输入,则x应为 List 类型。y: 标签(NumPy 数组)。遵循 Keras 规范。
输出是一个字典,将每个可训练权重映射到其关于 x 和 y 的梯度值。
获取激活值的梯度
keract.get_gradients_of_activations(model, x, y, layer_name=None, output_format='simple')
model: 一个keras.models.Model对象。x: 用于作为模型输入的 NumPy 数组。如果是多输入情况,x应为列表类型。y: 标签(NumPy 数组)。遵循 Keras 的约定。layer_name: (可选)指定要返回激活值的层名称。output_format: 改变函数输出字典的键名格式。simple: 输出键将与 Keras 层的名称一致。例如,Dense(1, name='d1') 将返回 {'d1': ...}。full: 输出键将与输出层的完整名称匹配。在上述例子中,它将返回 {'d1/BiasAdd:0': ...}。numbered: 输出键将是基于模型中各层定义顺序的索引范围。
返回值:字典 {层名称(由 output_format 指定) -> 该层输出/节点的梯度激活值(NumPy 数组)}。
输出是一个字典,将每一层映射到其关于输入 x 和标签 y 的梯度值。
将激活值保存为 JSON 文件
keract.persist_to_json_file(activations, filename)
activations: 激活值(层到数值的字典)filename: 输出文件名(JSON 格式)
从 JSON 文件加载激活值
keract.load_activations_from_json_file(filename)
filename: 要读取激活值的文件名(JSON 格式)
返回激活值。
示例
提供了以下示例:
keras.models.Sequential- mnist.pykeras.models.Model- multi_inputs.py- 循环神经网络 - recurrent.py
以 LeNet 网络处理 MNIST 数据集为例,我们可以获取批次大小为 128 的激活值:
conv2d_1/Relu:0
(128, 26, 26, 32)
conv2d_2/Relu:0
(128, 24, 24, 64)
max_pooling2d_1/MaxPool:0
(128, 12, 12, 64)
dropout_1/cond/Merge:0
(128, 12, 12, 64)
flatten_1/Reshape:0
(128, 9216)
dense_1/Relu:0
(128, 128)
dropout_2/cond/Merge:0
(128, 128)
dense_2/Softmax:0
(128, 10)
我们可以对这些激活值进行可视化。以下是使用 VGG16 的另一个示例:
cd examples
pip install -r examples-requirements.txt
python vgg16.py
一只猫。
VGG16 第一卷积层的输出。
此外,我们还可以可视化激活值的热图:
cd examples
pip install -r examples-requirements.txt
python heat_map.py
限制与改进方向
在某些特定情况下,Keract 对包含子模型的复杂模型支持不够完善。欢迎 fork 本仓库并提交 PR 来修复这些问题!
引用
@misc{Keract,
author = {Philippe Remy},
title = {Keract:用于可视化激活值和梯度的库},
year = {2020},
publisher = {GitHub},
journal = {GitHub 仓库},
howpublished = {\url{https://github.com/philipperemy/keract}},
}
贡献者
版本历史
4.5.02021/06/194.3.42020/12/304.3.12020/08/232.5.62019/05/312.5.42019/04/172.5.32019/04/162.5.02019/03/182.4.02019/03/122.2.12019/02/042.1.12019/01/09常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

