Netron 怎么查看模型结构?打开 ONNX 并核对输入输出

生成一个两特征 ONNX 小模型,在 Netron 打开并核对输入输出、算子路径、权重与版本,说明模型图查看能证明什么,以及后续如何验证推理。

Netron 可以把 ONNX 模型里的算子、连线、输入输出和权重展示出来。最适合先回答“这个文件接收什么输入、经过哪些运算、输出什么”,再去做推理或转换排查。能看懂模型图,不等于证明模型预测准确或运行兼容。

下面先生成一个只有两项输入特征的 ONNX 教学模型,再在 Netron 中逐项核对;你不需要下载大型模型,也不用准备 GPU。模型是人工构造的 sigmoid 打分示例,没有经过真实任务训练。

Netron 怎么查看模型结构?打开 ONNX 并核对输入输出

准备一个可直接打开的小模型

本文生成脚本在 Windows、Python 3.11.15、ONNX 1.23.1、NumPy 2.4.6 下运行核验;Netron 本地服务使用 9.3.0。建立并激活独立 Python 环境后安装:

python -m venv .venv
# Windows PowerShell
.\.venv\Scripts\Activate.ps1
python -m pip install "onnx==1.23.1" "numpy==2.4.6" "netron==9.3.0"

ONNX 的 官方 helper API提供图、节点和张量声明方法。保存下面代码为 make_demo.py,它声明输入为 features: float32 [batch, 2],输出为 probability: float32 [batch, 1]。

import numpy as np
import onnx
from onnx import helper, TensorProto, numpy_helper

x = helper.make_tensor_value_info("features", TensorProto.FLOAT, ["batch", 2])
y = helper.make_tensor_value_info("probability", TensorProto.FLOAT, ["batch", 1])
w = numpy_helper.from_array(np.array([[2.0], [-1.0]], dtype=np.float32), "weight")
b = numpy_helper.from_array(np.array([0.25], dtype=np.float32), "bias")
nodes = [
    helper.make_node("MatMul", ["features", "weight"], ["linear"], name="linear_score"),
    helper.make_node("Add", ["linear", "bias"], ["logit"], name="add_bias"),
    helper.make_node("Sigmoid", ["logit"], ["probability"], name="sigmoid_probability")]
graph = helper.make_graph(nodes, "two-feature-demo", [x], [y], initializer=[w, b])
model = helper.make_model(graph, producer_name="tutorial",
                          opset_imports=[helper.make_opsetid("", 13)])
model.ir_version = 8
onnx.checker.check_model(model)
onnx.save(model, "demo_sigmoid.onnx")
print("saved demo_sigmoid.onnx")
print("input: features float32 [batch, 2]")
print("output: probability float32 [batch, 1]")
print("operators:", [node.op_type for node in model.graph.node])
python make_demo.py

成功后生成 demo_sigmoid.onnx,终端应依次列出 MatMul、Add、Sigmoid。onnx.checker.check_model 检查模型结构合法性;它不会评估准确率,也不会运行这些算子。

选择本地或浏览器入口

Netron 官方项目说明列出浏览器入口、Windows 安装包与 Python 用法。查看自己的模型时,可用 Python 包从本地启动:

netron demo_sigmoid.onnx

保持终端运行,浏览器打开终端打印的本地地址。另一种方式是在 Windows 桌面版使用 Open,或进入 Netron 浏览器版本后打开文件。本文不以浏览器版本的隐私或网络行为作为承诺;有保密要求的模型按组织规则使用经过批准的本地方式。

若需要指定地址且不自动弹出浏览器,可以保存下面代码为 view_model.py 并运行:

python -c "import netron; netron.start('demo_sigmoid.onnx', address=('127.0.0.1', 8080), browse=False); netron.wait()"

这组 start/address/browse 参数与 wait() 来自 官方本地服务实现。打开本地 8080 端口的地址后查看模型;停止查看时,在启动终端按 Ctrl+C。

打开后逐项核对哪些信息

要看什么 本例应看到 这项信息能解决什么
图输入 features,float32,batch×2 确认需要二维数值数组,而不是图像或文字
图输出 probability,float32,batch×1 确认每条输入对应一个分数
运算路径 MatMul → Add → Sigmoid 核对线性打分、偏置和概率映射是否齐全
权重 weight 形状 2×1,值 2 和 −1 核对两项输入的系数与预期一致
偏置 bias 形状 1,值 0.25 确认偏置在 sigmoid 之前加入
  1. 打开图信息或点击输入、输出项,核对名称、类型和维度。不同 Netron 版本的面板位置会有变化,以字段名为准。
  2. 沿着输入往输出查看三个节点,点击 MatMul 与 Add,检查它们接入的是正确权重和偏置。
  3. 对照生成脚本的 initializer。权重是图的初始化张量,图形界面可能在节点属性或输入列表中展示,不能只数屏幕上大方框的数量。
  4. 查看模型信息中的 opset 13 与 IR 8。它们分别是算子集版本和模型格式版本,不能当作模型精度或运行速度指标。

batch 是符号维度,说明声明没有固定这一维的数量;它不是一个必须输入的字符串。中间张量的维度若没有完整显示,可用 ONNX shape inference 进一步分析;没有显示某个尺寸,不足以判定模型损坏。

用一条输入验证自己读懂了图

假设一条输入为 [1, 2],按图应先算 1×2 + 2×(−1) + 0.25 = 0.25,然后计算 sigmoid(0.25),约为 0.5622。这是由明确权重手算的预期值,不是 Netron 的推理结果;Netron 是查看器,不能把这个数字当成它测出的模型性能。

实际运行 ONNX 推理需要另外的运行时。如果你已有模型和匹配的输入,可以继续看站内 ONNX Runtime CPU 推理教程;若要研究量化后的运算图,再看 ONNX 动态量化与输出比较。先核对图,再核对运行结果,两步分别解决结构与执行问题。

打开失败或图与预期不符时

文件不存在时核对当前目录和扩展名;解析失败时先确认不是下载错误的网页,并尝试 ONNX checker。模型依赖外部权重文件时,把这些文件按模型记录的相对位置一起保存;只拿到一个小 .onnx 文件可能并没有完整权重。

如果你预期有某层而图中没有,先核对导出的模型版本、导出时是否融合了算子、是否遗漏预处理;不要根据框的数量推断代码一定少了一层。能打开 ONNX 也不能推断所有目标设备支持其算子。

本文实测了 ONNX 文件生成、结构检查、输入输出声明及 Netron 本地服务响应;模型图的人工点击路径按官方入口说明,没有把服务可访问写成完整交互测试。没有验证大型模型、外部权重模型或特殊算子的展示兼容性。文档核验日期:2026-10-01。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30460.html

赞 (0)
AI小管家的头像AI小管家
PyTorch 模型怎么在本地重新加载?保存 state_dict 并核对推理输出
上一篇 3小时前
PyTorch 怎么读取 CSV 训练数据?自定义 Dataset 并检查 DataLoader 批次
下一篇 3小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部