ONNX加载和保存模型

2024-08-29 18:28
文章标签 加载 保存 模型 onnx

本文主要是介绍ONNX加载和保存模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ONNX

ONNX(Open Neural Network Exchange)是一个开放的格式,用于表示机器学习模型。它使得不同框架之间的模型可以互操作,方便模型的迁移和部署。以下是一些关于 ONNX 的基本介绍和使用方法。

在这里插入图片描述

  1. 模型转换:ONNX 允许你将模型从一个深度学习框架(如 PyTorch、TensorFlow)转换为 ONNX 格式。
  2. 互操作性:ONNX 模型可以在支持 ONNX 的不同平台和工具之间共享。
  3. 优化:ONNX 提供了工具来优化模型,以提高推理性能。

将模型转换为 ONNX 格式

以下是将 PyTorch 模型转换为 ONNX 模型的步骤:

  1. 安装 ONNX

安装了 ONNX 和相关的转换工具:

pip install onnx
pip install onnxruntime  # 用于运行 ONNX 模型
pip install torch  # PyTorch
  1. 转换 PyTorch 模型

一个已训练的 PyTorch 模型,可以使用以下代码将其转换为 ONNX 格式:

import torch
import torch.onnx
import torchvision.models as models# 加载预训练的 PyTorch 模型
model = models.resnet18(pretrained=True)
model.eval()  # 设置模型为推理模式# 创建示例输入张量
dummy_input = torch.randn(1, 3, 224, 224)# 将模型导出为 ONNX 格式
torch.onnx.export(model, dummy_input, "resnet18.onnx", verbose=True)

在这个示例中,将一个预训练的 ResNet-18 模型转换为 ONNX 格式并保存为 resnet18.onnx 文件。

加载和运行 ONNX 模型

使用 ONNX Runtime 来加载和运行转换后的 ONNX 模型:

import onnx
import onnxruntime as ort
import numpy as np# 加载 ONNX 模型
onnx_model = onnx.load("resnet18.onnx")
onnx.checker.check_model(onnx_model)  # 检查模型是否有效# 创建 ONNX Runtime 会话
ort_session = ort.InferenceSession("resnet18.onnx")# 创建输入数据
dummy_input = np.random.randn(1, 3, 224, 224).astype(np.float32)# 运行模型
outputs = ort_session.run(None, {"input": dummy_input})
print(outputs[0])

检查和优化 ONNX 模型

ONNX 提供了一些工具来检查和优化模型:

1. 检查模型

使用 onnx.checker 来验证模型的有效性:

import onnxonnx_model = onnx.load("resnet18.onnx")
onnx.checker.check_model(onnx_model)

2. 优化模型

使用 onnx.optimizer 来优化模型:

import onnx
import onnx.optimizeronnx_model = onnx.load("resnet18.onnx")# 定义优化通道
passes = ["fuse_consecutive_transposes", "eliminate_deadend"]# 优化模型
optimized_model = onnx.optimizer.optimize(onnx_model, passes)# 保存优化后的模型
onnx.save(optimized_model, "resnet18_optimized.onnx")

其他常用工具和库

  • Netron:用于可视化 ONNX 模型的工具。可以下载并使用 Netron 打开 .onnx 文件进行模型可视化。
  • ONNX Model Zoo:ONNX 模型库,包含许多预训练的 ONNX 模型,可以直接下载和使用。

小结

ONNX 作为一个开放的模型格式,可以极大地提高模型在不同框架和平台之间的可移植性。通过学习如何将模型转换为 ONNX 格式,并使用 ONNX Runtime 进行推理和优化,你可以更高效地部署和管理你的机器学习模型。


只有一个元素的时候才能够使用item()转为scalar,无论是一个0维度张量,还是1维张量,还是2维度

x_t = torch.tensor([1.0])
x2_t =torch.tensor(1.0)
x4_t = torch.tensor([[[1.0]]])x_n = x_t.item()       # 1.0
x2_n = x2_t.item()     # 1.0
x3_n = x3_t.item()     # 1.0

这篇关于ONNX加载和保存模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1118610

相关文章

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

DeepSeek模型本地部署的详细教程

《DeepSeek模型本地部署的详细教程》DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私,在本地成功部署DeepSe... 目录一、环境准备(一)硬件需求(二)软件依赖二、安装Ollama三、下载并部署DeepSeek模型选

vscode保存代码时自动eslint格式化图文教程

《vscode保存代码时自动eslint格式化图文教程》:本文主要介绍vscode保存代码时自动eslint格式化的相关资料,包括打开设置文件并复制特定内容,文中通过代码介绍的非常详细,需要的朋友... 目录1、点击设置2、选择远程--->点击右上角打开设置3、会弹出settings.json文件,将以下内

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe