【ONNX】构建

抛开pytorch,抛开一切,从现在开始,我们只关注ONNX

完全用 ONNX 的 Python API 构造简单的两个输入一个输出的 ONNX 模型。

1. 构建输入和输出的信息

helper.make_tensor_value_info 

可以看到这个函数需要[name, elem_type, shape, doc_string, shape_denotation]

name :自定义名称

elem_type :定义类型,我们用FLOAT 

 shape :[600,200,8,1,64]   我们假模假样的给一个

后面两个参数先不管了,本文这三个参数就够用;

开始构建

input_0 = helper.make_tensor_value_info('input_0', TensorProto.FLOAT, [600,200,8,1,64])
input_1 = helper.make_tensor_value_info('input_1', TensorProto.FLOAT, [600,1,8,64,1])
output = helper.make_tensor_value_info('output', TensorProto.FLOAT, [600,200,8,1,1])

2. 构建节点信息

helper.make_node

op_type :  算子类型  :这里有坑,但不影响本文的学习,所以先不管。

inputs : 列表,包含了所有输入的name,我们这里是两个

outputs :列表, 包含了所有输出的name,标准的ONNX都是一个输出

name :  自定义节点名称

够用了

matmul = helper.make_node('MatMul', ['input_0', 'input_1'], ['output'], 'MatMul_0')

3. 构建图信息

helper.make_graph

nodes :  节点信息

name : 自定义图名称

inputs : 输入的名称

output : 输出的名称

够了

graph = helper.make_graph([matmul], 'torch-jit-export', [input_0, input_1], [output])

4. 构建模型

model = helper.make_model(graph) 

5. 保存导出

onnx.save(model, 'Gemv.onnx') 

6. 查看效果

7. 代码

import onnx
from onnx import helper
from onnx import TensorProto

# 两个输入一个输出
input_0 = helper.make_tensor_value_info('input_0', TensorProto.FLOAT, [600,200,8,1,64])
input_1 = helper.make_tensor_value_info('input_1', TensorProto.FLOAT, [600,1,8,64,1])
output = helper.make_tensor_value_info('output', TensorProto.FLOAT, [600,200,8,1,1])


# 构建节点信息
matmul = helper.make_node('MatMul', ['input_0', 'input_1'], ['output'], 'MatMul_0')


# 构建图信息
graph = helper.make_graph([matmul], 'torch-jit-export', [input_0, input_1], [output])


# 构建模型
model = helper.make_model(graph) 

# onnx.checker.check_model(model) 

print(model) 

onnx.save(model, 'Gemv.onnx') 

百练成砖,一起成长。

### 解决 ONNX 构建失败的方法 当遇到 ONNX 构建失败的情况时,可能由多种因素引起。为了有效解决问题,建议按照以下方面逐一排查: #### 1. 环境配置检查 确保开发环境中的依赖项版本兼容至关重要。对于 TensorFlow 的集成问题,虽然网络上存在诸多关于降级 TensorFlow 版本的说法[^1],但这并非唯一解决方案。应首先确认所使用的 Python 和其他相关库(如 NumPy、SciPy)的版本是否与 ONNX 官方文档推荐的一致。 #### 2. 编译器和工具链设置 编译过程中可能会因为缺少必要的 Visual C++ 运行库或其他特定平台所需的组件而导致错误。如果是在 Windows 上构建,则需确保已安装最新版的 Microsoft Visual Studio 及其配套的 Build Tools。此外,针对不同操作系统下的具体需求也需要注意,比如 Linux 用户应当关注 CUDA 工具包的支持情况;例如,在 Ubuntu 20.04 中支持最高至 CUDA 12.3,而从 CUDA 12.4 开始仅限于 Ubuntu 22.04[^4]。 #### 3. 检查硬件加速特性 某些情况下,CPU 是否具备 AVX 指令集会影响程序执行效率甚至能否正常启动。然而这并不是造成 ONNX 构建失败的主要原因。更常见的是 GPU 驱动更新不及时或显卡型号不受当前框架支持等问题。 #### 4. 使用官方提供的调试手段 利用 Azure Machine Learning SDK 提供的功能可以帮助定位并修复潜在的问题。通过返回 SDK 版本来辅助诊断可能是由于 API 更改引起的冲突[^3]。同时也可以尝试启用详细的日志记录来获取更多线索。 ```bash pip install --upgrade azureml-sdk[notebooks,automl] ``` #### 5. 考虑替代方案的选择 考虑到部分深度学习框架的发展状态,如 Theano 不再活跃维护以及 Caffe 存在灵活性不足等情况[^2],可以考虑切换到更为稳定和支持广泛的框架来进行模型转换工作,从而间接绕过原生 ONNX 构建难题。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值