ONNX 维度标注(Dimension Denotation)机制解析:为张量轴赋予语义的类型检查方案
人工智能深度学习机器学习【免费下载链接】onnxOpen standard for machine learning interoperability项目地址https://gitcode.com/gh_mirrors/onn/onnx点击查看免费下载维度标注Dimension Denotation是 ONNX 中一套实验性的机制用于为张量的每一个轴axis附加语义描述进而为模型提供基于语义的类型检查能力。本文以 docs/DimensionDenotation.md 为主体结合 ONNX 的 proto 定义、Python 辅助 API 与算子注册源码完整讲解其动机、七种标准标注的定义、传播与验证流程以及在模型构建中的实际用法。为什么需要维度标注一个 NCHW 布局错误的典型案例在当前的神经网络描述范式中张量轴通常只携带长度信息shape而不携带含义信息。考虑如下线性神经网络片段假设模型输入为 NCHW 格式input_in_NCHW - Transpose(input, perm[0, 2, 1, 3]) - AveragePool(input, ...)该网络将 NCHW 输入转置成了怪异的 NHCW 格式随后却将其送入一个假定输入为 NCHW 的空间池化算子。这显然是一个错误——用户误以为 Transpose 不会破坏 NCHW 布局但实际上perm[0, 2, 1, 3]将通道维C与高度维H互换了位置。然而现有基础设施不会向用户报告任何错误Transpose 和 AveragePool 都只检查张量秩与元素类型不关心第 1 维是通道还是空间特征。对依赖类型检查作为程序正确性保证的开发者而言这种真空令人不安。维度标注机制正是为了填补这一空白而提出的通过给每个轴打上语义标签使 ONNX 能够检测并报告此类布局错误。七种标准维度标注Denotation Definition维度标注的定义遵循三条原则足够细粒度以消除潜在陷阱必须区分通道维与空间特征维才能保证 AveragePool 这类算子执行正确见上文动机示例足够粗粒度以减轻用户心智负担例如池化、卷积等操作通常不区分宽W与高H因此将所有空间维度统一归纳为特征维度模型无关作为第 2 条的推论RNN 中特征维与 CNN 中空间维的语义几乎不可区分因此允许用户和开发者将二者都描述为特征维度。基于以上原则ONNX 在首个提案中定义了如下七种标准标注标注语义对应关系DATA_BATCH训练数据的 batch 维度对应NCHW记法中的NDATA_CHANNEL训练数据的通道维度对应NCHW记法中的CDATA_TIME时间维度时间序列数据的时序轴DATA_FEATURE特征维度对应H、W维或 RNN 中的特征维FILTER_IN_CHANNEL卷积核输入通道维度其大小与输入特征图的通道维相同FILTER_OUT_CHANNEL卷积核输出通道维度其大小与输出特征图的通道维相同FILTER_SPATIAL卷积核空间维度卷积核的 kH、kW 等空间轴这些标准标注在源码中被定义为字符串常量见 onnx/common/constants.h// For dimension denotation. constexpr const char* DATA_BATCH DATA_BATCH; constexpr const char* DATA_CHANNEL DATA_CHANNEL; constexpr const char* DATA_TIME DATA_TIME; constexpr const char* DATA_FEATURE DATA_FEATURE; constexpr const char* FILTER_IN_CHANNEL FILTER_IN_CHANNEL; constexpr const char* FILTER_OUT_CHANNEL FILTER_OUT_CHANNEL; constexpr const char* FILTER_SPATIAL FILTER_SPATIAL;值得注意的设计细节是这些标注采用与NCHW等布局记法解耦的命名方式标注表达的是语义而不是物理位置这正是实现模型无关性的关键。维度标注在模型文件中的落点维度标注存储在每个维度Dimension之上。在 ONNX 的 protobuf 定义中TensorShapeProto.Dimension除了dim_value具体数值和dim_param符号变量之外还包含一个可选的字符串字段denotation见 onnx/onnx-ml.protomessage TensorShapeProto { message Dimension { oneof value { int64 dim_value 1; string dim_param 2; // namespace Shape }; // Standard denotation can optionally be used to denote tensor // dimensions with standard semantic descriptions to ensure // that operations are applied to the correct axis of a tensor. // Refer to docs/DimensionDenotation.md#denotation-definition // for pre-defined dimension denotations. optional string denotation 3; }; repeated Dimension dim 1; }同一份onnx-ml.proto中还定义了类型标注Type Denotation字段TypeProto.denotationfield 6用于描述整个输入/输出是什么如IMAGE、TEXT与维度标注形成互补类型标注回答这是什么维度标注回答每个轴的含义是什么。两者常配合使用详见 docs/TypeDenotation.md。标注传播Denotation Propagation当某个算子对输入张量执行置换permute、销毁或创建维度时输出的维度标注需要根据输入标注重新推断这一过程称为标注传播。其核心思想是为每个涉及维度变换的算子实现定制化的、与操作相关的推断函数根据输入张量的维度标注推导输出张量的维度标注。以 Transpose 算子为例输出维度标注的推断伪代码可直接表示为输入维度标注的映射函数for i, j in enumerate(perm): out_dim_denotaion[i] in_dim_denotation[j]即输出第i个轴的标注等于输入第perm[i]个轴的标注。这样[DATA_BATCH, DATA_CHANNEL, DATA_FEATURE, DATA_FEATURE]的输入在perm[0, 2, 1, 3]转置后会得到[DATA_BATCH, DATA_FEATURE, DATA_CHANNEL, DATA_FEATURE]标注忠实跟随轴的运动轨迹为后续的验证步骤保留语义线索。标注验证Denotation Verification当某个算子期望输入以特定格式到达时需要对输入标注进行校验这一过程称为标注验证。若期望标注与实际标注不匹配则应报告错误。以 AveragePool 为例该算子在 2D 情况下期望输入标注为[DATA_BATCH, DATA_CHANNEL, DATA_FEATURE, DATA_FEATURE]。结合上文动机示例转置后的张量标注变为[DATA_BATCH, DATA_FEATURE, DATA_CHANNEL, DATA_FEATURE]验证阶段即可据此判定通道维被放到了特征维的位置从而向用户报告错误——这正是原始 NCHW 布局错误示例中缺失的能力。这种期望标注在算子 schema 文档中亦有明文约定。在 onnx/defs/nn/defs.cc 中AveragePool 的输入X文档写道Optionally, if dimension denotation is in effect, the operation expects the input data tensor to arrive with the dimension denotation of[DATA_BATCH, DATA_CHANNEL, DATA_FEATURE, DATA_FEATURE ...].卷积算子Conv的 schema 则同时约定了输入与权重的期望标注见 onnx/defs/nn/defs.cc输入X期望标注[DATA_BATCH, DATA_CHANNEL, DATA_FEATURE, DATA_FEATURE ...]权重W期望标注[FILTER_OUT_CHANNEL, FILTER_IN_CHANNEL, FILTER_SPATIAL, FILTER_SPATIAL ...]。这与FILTER_IN_CHANNEL、FILTER_OUT_CHANNEL的定义与输入/输出特征图通道维大小相同形成闭环当标注生效时卷积不仅检查形状数值关系如X.shape[1] W.shape[1] * group还可以在语义层面确认通道对通道、空间对空间的轴对齐。从源码结构看标注传播与标注验证机制目前仍处于实验阶段——它们在算子 schema 中体现为可选生效if dimension denotation is in effect的约定尚未在全部算子中得到强制实施docs/DimensionDenotation.md亦将其定位为实验性尝试experimental attempt。在 Python 中为模型添加维度标注ONNX 的 Python API 提供了便捷的构建辅助函数来设置维度标注。核心入口是 onnx/helper.py 中的make_tensor_type_proto它接受可选的shape_denotation参数def make_tensor_type_proto( elem_type: int, shape: Sequence[str | int | None] | None, shape_denotation: list[str] | None None, ) - TypeProto:该函数的约束与行为shape_denotation与shape必须等长否则抛出ValueError(Invalid shape_denotation. Must be of the same length as shape.)见 onnx/helper.py在构建每个dim时若提供了标注则将dim.denotation shape_denotation[i]逐一写入见 onnx/helper.py。一个典型的 NCHW 图像输入声明如下import onnx from onnx import helper, TensorProto # shape 与 shape_denotation 一一对应 tensor_type helper.make_tensor_type_proto( elem_typeTensorProto.FLOAT, shape[1, 3, 224, 224], # N, C, H, W shape_denotation[ DATA_BATCH, # N DATA_CHANNEL, # C DATA_FEATURE, # H空间特征维 DATA_FEATURE, # W空间特征维 ], ) value_info helper.make_value_info( namedata_0, type_prototensor_type, doc_stringNCHW image input, )make_value_info、make_tensor_value_info等上层辅助函数均透传shape_denotation参数见 onnx/helper.py因此在实际建模中只需在声明输入输出时附带标注列表即可将语义信息写入ValueInfoProto的形状中。若需要为输入输出声明更完整的语义例如声明这是一个 BGR 8 位、0-255 像素范围、sRGB 色彩空间的图像应进一步结合类型标注Type Denotation与模型元数据metadata_props详见 docs/TypeDenotation.md 与 docs/MetadataProps.md。小结与展望维度标注为 ONNX 模型提供了一条通往轴级类型检查的路径定义层七种标准标注DATA_BATCH、DATA_CHANNEL、DATA_TIME、DATA_FEATURE、FILTER_IN_CHANNEL、FILTER_OUT_CHANNEL、FILTER_SPATIAL在 onnx/common/constants.h 中统一定义并落位到TensorShapeProto.Dimension.denotation字段传播层对 Transpose 等维度变换算子按out_dim_denotation[i] in_dim_denotation[perm[i]]的规则传递标注验证层对 AveragePool、Conv 等对轴语义有要求的算子按其 schema 中声明的期望标注如[DATA_BATCH, DATA_CHANNEL, DATA_FEATURE, DATA_FEATURE]校验输入不匹配即报错。作为实验性机制维度标注目前更多体现为一种可选约束但其价值在于它让 ONNX 生态中的工具链转换器、推理引擎、模型检查器第一次有了在语义层面发现轴被放错位置这类错误的可能性。配合 docs/TypeDenotation.md 中描述的IMAGE、TEXT等类型标注模型作者可以为输入输出提供是什么 每个轴是什么的完整描述让模型消费者无需猜测即可正确地喂入数据。赞分享人工智能深度学习机器学习【免费下载链接】onnxOpen standard for machine learning interoperability项目地址https://gitcode.com/gh_mirrors/onn/onnx点击查看免费下载相关推荐ONNX 类型标注Type Denotation完全指南用语义类型与元数据描述模型输入输出ONNX 类型标注Type Denotation完全指南用语义类型与元数据描述模型输入输出 导读 ONNXOpen Neural Network Exc人工智能深度学习机器学习如何在5分钟内掌握Mermaid在线图表编辑器面向初学者的终极指南如何在5分钟内掌握Mermaid在线图表编辑器面向初学者的终极指南 你是否厌倦了复杂的图表制作工具想要快速创建流程图、时序图或甘特图却不想学习复杂的软件前端开发者工具数据可视化CANN PyPTO Tensor 类型标注完全指南GM 多维张量声明、动态/静态维度与别名语义CANN PyPTO Tensor 类型标注完全指南GM 多维张量声明、动态/静态维度与别名语义 导读 pypto_pro.language.Tensor 是人工智能编译器模型编译高性能计算深度学习CANN上一篇手把手教你训练R2CNN_Faster-RCNN_Tensorflow单GPU到多GPU分布式训练完整实战下一篇Ultimate Vocal Remover 完整上手指南10 分钟免费分离人声与伴奏创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

AI智能体工作台WorkBuddy:从任务编排到自动化实战

AI智能体工作台WorkBuddy:从任务编排到自动化实战

这两年 AI Agent 工具越来越多了,但我发现多数人还是把 AI 当聊天框用:问一句答一句,用完就关。直到我花了两周时间把 WorkBuddy 塞进真实工作流里,才意识到“对话式 AI”和“工作台型 Agent”的差别有多大。WorkBuddy 不是又一个…

2026/9/21 5:42:34 阅读更多 →
细胞涂片机技术路线与临床应用全解析:从标准化制片到AI辅助诊断

细胞涂片机技术路线与临床应用全解析:从标准化制片到AI辅助诊断

细胞涂片机这几年在检验科和病理科的存在感越来越强,尤其是做宫颈癌筛查、胸腹水找肿瘤细胞这些场景,几乎绕不开它。很多人第一次接触这个设备,以为它就是一台“把标本涂在玻片上的机器”,实际上它解决的是细胞学制片标准化的问题…

2026/9/20 4:31:09 阅读更多 →
DataHub Snowplow 连接器本地集成测试环境搭建与验证指南(Option B:DuckDB + Mock BDP Server)

DataHub Snowplow 连接器本地集成测试环境搭建与验证指南(Option B:DuckDB + Mock BDP Server)

DataHub Snowplow 连接器本地集成测试环境搭建与验证指南(Option B:DuckDB Mock BDP Server) 【免费下载链接】datahub The Context Platform for your Data and AI Stack 项目地址: https://gitcode.com/GitHub_Trending/da/datahub …

2026/9/20 4:31:09 阅读更多 →

最新新闻

郑州seo顾问热狗hotdoger拆解3个实战案例教你搞定网站UI

郑州seo顾问热狗hotdoger拆解3个实战案例教你搞定网站UI

郑州seo顾问热狗hotdoger拆解3个实战案例教你搞定网站UI 不会写代码却想做个像样的官网?这种焦虑我懂。 很多老板或运营负责人,手里攥着预算,脑子里有画面,但对着设计师提的需求,心里直打鼓:这到底合不合理?怎么验收?怎么让网站既能留住人,又能被搜索引擎抓到?…

2026/9/21 6:44:12 阅读更多 →
2026最新wordpress调用字段避坑指南

2026最新wordpress调用字段避坑指南

2026最新wordpress调用字段避坑指南 找建站公司怕被坑高价?这是很多老板和运营新人的心头大患。很多公司报价动辄几万,说得天花乱坠,其实底层技术也就那样。2026最新的数据显示,超过60%的中小企业网站其实可以用更透明的开源方案搞定,比如WordPress。今天咱们不聊虚的,直接拆解Word…

2026/9/21 6:29:22 阅读更多 →
实战案例揭秘:wordpress删除rss的3个关键坑

实战案例揭秘:wordpress删除rss的3个关键坑

实战案例揭秘:wordpress删除rss的3个关键坑 域名解析改错,服务器配置没跟上,导致后台能改前台打不开?这种“域名服务器搞不懂”的噩梦,我在给客户做运维时见过太多次。上个月刚处理的一个 实战案例…

2026/9/21 6:15:47 阅读更多 →
3个实战案例拆解i网站建设报价,拒绝被坑

3个实战案例拆解i网站建设报价,拒绝被坑

3个实战案例拆解i网站建设报价,拒绝被坑 网站做好了没人访问?这不仅是流量焦虑,更是建站前的预算盲区。很多老板拿着“i网站建设”这个模糊的概念去询价,结果被报出从几千到几十万不等的天价,心里直打鼓。…

2026/9/21 6:03:14 阅读更多 →
网站建设的探讨与研究速查手册

网站建设的探讨与研究速查手册

网站建设探讨与研究:5大费用陷阱与选型注意事项 网站做好了没人访问,这是无数甲方老板和运营负责人深夜里最真实的焦虑。钱花出去了,服务器租了,域名买了,甚至SEO优化都上了,结果后台流量曲线平得像心电图停搏。很多人以为技术决定成败,但在我看来, 注意事项 往往比技术本身更决定生死。…

2026/9/21 5:46:06 阅读更多 →
Simulink与FlightGear联合仿真:飞行器控制算法三维可视化验证平台搭建

Simulink与FlightGear联合仿真:飞行器控制算法三维可视化验证平台搭建

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 5:38:52 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件(Full-featured Plugin)是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →