ONNX Runtime 怎样查看模型输入名称与形状
ONNX Runtime 里不要靠猜测模型输入名来构造 feeds。加载模型后,直接遍历 InferenceSession.get_inputs(),就能拿到每个输入的 NodeArg 元数据:name 是输入键,type 是 ONNX 类型描述,shape 是静态或动态形状。读取这些信息后,再用同一个名称建立输入字典,能避开“输入名不存在”和“数组维度不匹配”两类常见问题。
官方文档:https://onnxruntime.ai/docs/api/python/api_summary.html
最小做法是先创建InferenceSession,再遍历session.get_inputs();每个NodeArg的name、type、shape就是构造输入映射前应确认的契约。
先把模型输入契约读出来
InferenceSession 是 ONNX Runtime 加载和运行模型的主要对象。本文只关注元数据查询,不讨论执行提供者、GPU 绑定或性能调优。下面的代码只负责读取模型描述,适合放在接入新模型时的准备阶段。
import onnxruntime as ort
# 只加载模型并读取会话信息,不在这里执行推理。
session = ort.InferenceSession("model.onnx")
# 输入节点按模型中的定义返回,每一项都是 NodeArg。
for node in session.get_inputs():
print(node.name, node.type, node.shape)
关键点是 get_inputs() 返回一个输入元数据列表,而不是已经准备好的数组。列表中的每个元素对应模型图的一个输入节点,因此它适合先用于生成接入层的配置或调试日志。

逐项读取 name、type 和 shape
NodeArg 里最常用的三个属性分别解决不同问题:
name:构造输入字典时使用的键,必须与模型输入名称一致。type:模型声明的 ONNX 类型,例如tensor(float),用于检查输入数据类型方向。shape:张量各维度的描述,可能是整数,也可能包含None或字符串形式的动态维度。
为了让结果更容易复制到日志或配置中,可以把元数据整理成普通字典。这里不把动态维度强行转成整数,因为它们代表模型允许在运行时决定的尺寸。
def collect_input_metadata(session):
"""收集输入元数据,保留动态维度的原始表达。"""
metadata = []
for node in session.get_inputs():
# name 用来做 feeds 的键,type 和 shape 用来做输入契约提示。
metadata.append({
"name": node.name,
"type": node.type,
"shape": list(node.shape),
})
return metadata
for item in collect_input_metadata(session):
print(item)
这段代码的输出只描述模型接口,不代表模型已经成功推理。若要保存到配置文件,建议保留原始的维度值,以便后续区分固定批大小和动态批大小。
动态维度不要当成固定数字
常见的动态形状会把批大小、序列长度或图像尺寸写成 None、batch、height 之类的占位信息。读取时可以把“是否动态”单独标记出来,而不是使用一个固定样例形状覆盖所有情况。
def describe_shape(shape):
"""为每个维度保留值,并标出需要运行时决定的维度。"""
dimensions = []
for index, value in enumerate(shape):
# 整数表示静态尺寸,其他值只作为动态维度的提示。
is_dynamic = not isinstance(value, int)
dimensions.append({
"index": index,
"value": value,
"dynamic": is_dynamic,
})
return dimensions
for node in session.get_inputs():
print(node.name, describe_shape(node.shape))
如果后续业务只允许某个批大小或某个分辨率,应在业务层明确限制并给出错误提示;不能把模型元数据中的动态维度误读成“任意形状都可以”。类型、维度数量和具体元素数量仍然要与模型算子约束相容。

按读取到的名称构造输入映射
真正准备输入数组时,最容易犯的错是把自己熟悉的 input 当成键名。正确做法是使用 get_inputs() 读出的 name,再把数组放入字典。示例保留了一个固定形状,实际尺寸应以你读到的元数据和模型约定为准。
import numpy as np
input_nodes = session.get_inputs()
if len(input_nodes) != 1:
raise ValueError("示例只处理单输入模型,请先按名称分别准备多个输入")
input_node = input_nodes[0]
# 这里的形状只是示例,接入真实模型时应根据输入契约准备数据。
features = np.zeros((1, 3), dtype=np.float32)
feeds = {input_node.name: features}
# 需要执行推理时,再把 feeds 传给 session.run;本文不依赖运行结果。
print("feed key:", input_node.name)
print("feed shape:", features.shape)
如果模型有多个输入,就分别遍历节点并按名称建立映射。若数组的 dtype 与 node.type 不一致,或者数组形状与固定维度不一致,应在提交给运行时前主动报错,这比等到执行阶段看到笼统异常更容易定位。
输出元数据也可以一起确认
输入检查完成后,可以用同样方式读取 session.get_outputs()。这一步不需要运行模型,适合在服务启动时打印接口摘要,确认输出名称和后续解析逻辑一致。
def print_io_metadata(session):
"""同时打印输入和输出的接口元数据。"""
for label, nodes in (("input", session.get_inputs()), ("output", session.get_outputs())):
for node in nodes:
# NodeArg 的三个属性足够构成一条简洁的 IO 契约。
print(label, node.name, node.type, node.shape)
print_io_metadata(session)
可以把这份摘要写入应用日志或启动检查结果,但不要把日志里的示例值当作所有模型都适用的固定答案。模型换版后,输入数量、节点名称和动态维度都可能发生变化。
常见问题
为什么 feeds 的键名不能随便写?
因为键名对应模型图中的输入节点名称。应以 session.get_inputs() 返回的 name 为准,而不是依据文件名或业务字段名猜测。
shape 中出现字符串是不是读取失败?
不一定。字符串通常是动态维度的符号名称,表示该维度需要由实际输入决定。固定维度仍要按原值匹配,动态维度则要结合模型和业务约束处理。
只看输入元数据就能保证推理成功吗?
不能。它能确认输入名称、类型和形状契约,但数据内容、算子支持、运行设备和模型本身的完整性仍需由实际接入流程负责。
小结
ONNX Runtime 查看模型输入名称与形状的核心只有三步:创建 InferenceSession,遍历 get_inputs(),读取每个 NodeArg 的 name、type 和 shape。先把这份输入契约读清楚,再按真实名称构造 feeds,遇到多输入模型或动态维度时就能把问题拆成可定位的字段,而不是反复试错。
GitHub CLI 怎样为当前仓库切换默认远程
- 上一篇
- GitHub CLI 怎样为当前仓库切换默认远程
- 下一篇
- OpenAI API 怎样限制输出内容使用指定文本格式
-
- 科技周边 · 人工智能 | 43分钟前 |
- OpenAI API 怎样读取模型返回的使用量字段
- 234浏览 收藏
-
- 科技周边 · 人工智能 | 46分钟前 | 人工智能 · OpenAI Batch API batch status 批处理任务 API状态查询
- OpenAI Batch API 怎样查询批处理任务状态
- 292浏览 收藏
-
- 科技周边 · 人工智能 | 47分钟前 | Parquet Hugging Face Datasets shard to_parquet push_to_hub
- Hugging Face Datasets 导出 Parquet 时怎么控制分片大小
- 378浏览 收藏
-
- 科技周边 · 人工智能 | 51分钟前 | PyTorch DataLoader IterableDataset get_worker_info
- PyTorch IterableDataset 怎样为每个 worker 分配不同数据片段
- 455浏览 收藏
-
- 科技周边 · 人工智能 | 54分钟前 | python · 人工智能 · snapshot_download Hugging Face Hub HF_HUB_CACHE HF_HOME 模型缓存 huggingface_hub
- Hugging Face Hub 怎样用缓存目录管理模型文件
- 247浏览 收藏
-
- 科技周边 · 人工智能 | 55分钟前 |
- Hugging Face Transformers 怎样用 ignore_mismatched_sizes 加载分类模型
- 113浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- OpenAI API 怎样为请求设置幂等键
- 174浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- OpenAI Responses API 怎样让长任务异步运行
- 327浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 | temperature top_p OpenAI API reasoning.effort max_output_tokens 采样参数
- OpenAI API 怎样用 temperature 之外的参数控制采样
- 131浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- OpenAI API 怎样限制输出内容使用指定文本格式
- 268浏览 收藏
-
- 科技周边 · 人工智能 | 11小时前 |
- Hugging Face Datasets IterableDataset batch 丢弃尾批的配置方法
- 297浏览 收藏
-
- 科技周边 · 人工智能 | 11小时前 |
- Hugging Face Transformers generate 怎样用 max_new_tokens 控制输出长度
- 437浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 719次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 726次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 801次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 762次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 599次使用
-
- 量化模型本地推理的显存估算方法
- 2026-10-17 501浏览
-
- 本地大模型反复输出同一句话怎么调整生成参数
- 2026-09-06 501浏览
-
- Python 调用大模型时如何用结构化输出校验 JSON:从解析失败到可重试
- 2026-08-29 501浏览
-
- AI写作工具免费版安装教程(含豆包Clawdbot)
- 2026-05-30 501浏览
-
- WPS AI能自动生成PPT吗?输入主题一键制作演示文稿
- 2026-05-27 501浏览

