如何自动生成ONNX模型?

如何自动生成ONNX模型?​​

实际开发中,我们通常​​从现有深度学习框架自动导出ONNX模型​​,而非手动编写。以下是主流框架的自动转换方法:

​​1. PyTorch → ONNX(最常用)​​

PyTorch内置了ONNX导出功能,只需一行代码:

python 复制代码
import torch
import torch.nn as nn

假设有一个PyTorch模型

python 复制代码
class MyModel(nn.Module):
    def __init__(self):
        super().__init__()
        self.linear = nn.Linear(10, 5)
    def forward(self, x):
        return self.linear(x)

model = MyModel()
dummy_input = torch.randn(1, 10)  # 虚拟输入(用于追踪计算图)

自动导出为ONNX

python 复制代码
torch.onnx.export(
    model,               # PyTorch模型
    dummy_input,         # 示例输入(用于确定输入形状)
    "model.onnx",        # 输出文件名
    input_names=["X"],   # 输入节点名称
    output_names=["Y"],  # 输出节点名称
    dynamic_axes={
        "X": {0: "batch"},  # 动态维度(如可变batch_size)
        "Y": {0: "batch"}
    }
)

​​关键点​​:

torch.onnx.export会自动追踪模型的计算图并转换为ONNX格式。

dynamic_axes允许定义动态维度(如可变batch_size)。

​​2. TensorFlow/Keras → ONNX​​
使用 tf2onnx工具自动转换

python 复制代码
import tensorflow as tf
import tf2onnx

model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(5, input_shape=(10,))
])

保存为SavedModel格式(或直接转换)

python 复制代码
tf.saved_model.save(model, "tmp_model")

转换为ONNX

python 复制代码
cmd = f"python -m tf2onnx.convert --saved-model tmp_model --output model.onnx"
!{cmd}  # 在Jupyter中执行命令行(或直接在终端运行)

​​总结​​

​​95%的实战场景​​:直接用 torch.onnx.export或 tf2onnx自动转换。

​​特殊需求​​才需要手动编写ONNX(如你的代码),但需注意手动编写容易出错(例如形状不匹配)。需要熟悉ONNX的算子规范(如支持哪些操作、属性如何设置)。

相关推荐
人工智能训练1 小时前
【极速部署】Ubuntu24.04+CUDA13.0 玩转 VLLM 0.15.0:预编译 Wheel 包 GPU 版安装全攻略
运维·前端·人工智能·python·ai编程·cuda·vllm
源于花海1 小时前
迁移学习相关的期刊和会议
人工智能·机器学习·迁移学习·期刊会议
DisonTangor3 小时前
DeepSeek-OCR 2: 视觉因果流
人工智能·开源·aigc·ocr·deepseek
薛定谔的猫19823 小时前
二十一、基于 Hugging Face Transformers 实现中文情感分析情感分析
人工智能·自然语言处理·大模型 训练 调优
发哥来了3 小时前
《AI视频生成技术原理剖析及金管道·图生视频的应用实践》
人工智能
数智联AI团队3 小时前
AI搜索引领开源大模型新浪潮,技术创新重塑信息检索未来格局
人工智能·开源
不懒不懒4 小时前
【线性 VS 逻辑回归:一篇讲透两种核心回归模型】
人工智能·机器学习
冰西瓜6004 小时前
从项目入手机器学习——(四)特征工程(简单特征探索)
人工智能·机器学习
Ryan老房4 小时前
未来已来-AI标注工具的下一个10年
人工智能·yolo·目标检测·ai
丝斯20115 小时前
AI学习笔记整理(66)——多模态大模型MOE-LLAVA
人工智能·笔记·学习