4.1 构建onnx结构模型-Reshape

前言

构建onnx方式通常有两种:
1、通过代码转换成onnx结构,比如pytorch —> onnx
2、通过onnx 自定义结点,图,生成onnx结构

本文主要是简单学习和使用两种不同onnx结构,
下面以reshape 结点进行分析

方式

方法一:pytorch --> onnx

固定shape
import torchclass JustReshape(torch.nn.Module):def __init__(self):super(JustReshape, self).__init__()def forward(self, x):# x = x.view((x.shape[3], x.shape[1], x.shape[0], x.shape[2]))x= x.reshape(x.shape[3], x.shape[1], x.shape[0], x.shape[2])return x net = JustReshape()
model_name = 'just_reshape.onnx'#保存ONNX的文件名字
dummy_input = torch.randn(1, 31, 42, 5)
torch.onnx.export(net, dummy_input, model_name, input_names=['input'], output_names=['output'])

结果如图所示:
请添加图片描述

动态shape

将第一维度设置为动态shape

# 只需要在这里对应位置修改即可
torch.onnx.export(net, dummy_input, model_name, input_names=['input'], output_names=['output'],dynamic_axes={'input': {0: 'batch_size'},'output': {0: 'batch_size'}})# 可以将得到的模型,进一步进行简化处理
onnxsim 方式

方法二: onnx

import onnx 
from onnx import TensorProto, helper, numpy_helperdef run():print("run start....\n")reshape = helper.make_node("Reshape",name="Reshape_0",inputs=["input", "shape"],outputs=["output"],)initializer = [ helper.make_tensor("shape", TensorProto.INT64, [4], [5,31,1,42])
]graph = helper.make_graph(nodes=[reshape],name="test_graph",inputs=[helper.make_tensor_value_info("input", TensorProto.FLOAT, [1,31,42,5])],outputs=[helper.make_tensor_value_info("output",TensorProto.FLOAT, [5,31,1,42])],initializer=initializer,)op = onnx.OperatorSetIdProto()op.version = 11model = helper.make_model(graph, opset_imports=[op])print("run done....\n")return modelif __name__ == "__main__":model = run()onnx.save(model, "./test_reshape.onnx")

运行onnx

import onnx
import onnxruntime
import numpy as np# 检查onnx计算图
def check_onnx(mdoel):onnx.checker.check_model(model)# print(onnx.helper.printable_graph(model.graph))def run(model):print(f'run start....\n')session = onnxruntime.InferenceSession(model,providers=['CPUExecutionProvider'])input_name1 = session.get_inputs()[0].name  input_data1= np.random.randn(24,31,42,5).astype(np.float32)print(f'input_data1 shape:{input_data1.shape}\n')output_name1 = session.get_outputs()[0].namepred_onx = session.run([output_name1], {input_name1: input_data1})[0]print(f'pred_onx shape:{pred_onx.shape} \n')print(f'run end....\n')if __name__ == '__main__':path = "./reshape_dynamic_sim.onnx"model = onnx.load("./reshape_dynamic_sim.onnx")check_onnx(model)run(path)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/161965.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM虚拟机:JVM的垃圾回收清除算法(GC)有哪些

垃圾回收清除算法 引用计数法 标记清除 拷贝算法 标记压缩 引用计数法 有一个引用指向对象,那么引用计数就加1,少一个引用指向,那么引用计数就减1,这种方法了解一下就好,JVM机会不会使用这种方法,因为它在每次对象赋值的时候都要维护引用计数器,且计数器本身也有一定的…

苹果加大对印度的扶持,提高在其生产iphone的比重

KlipC报道:跟踪苹果产业链,有分析师预计2023年全球约12%-14%的iphone在印度生产,预计2024年,印度将生产20%-25%的iphone。 KlipC的合伙人Andi D表示:“近年来随着苹果对中国的以来,印度已经成为高科技制造和…

使用Nokogiri库的Python程序

python import requests from bs4 import BeautifulSoup import os # 设置 proxies {"http": "", "https": ""} # 设置headers headers { User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (K…

Pycharm-community-2021版安装和配置

一、下载Pycharm-community-2021 1.从官网下载pycharm-community Pycharm 版本官网 二、安装PyCharm 1.打开下载完成的安装包,点击Next 2.安装PyCharm到其他位置,点击Next 3.一定把更新PATH变量勾上,可以创建桌面快捷方式,创建关联,最后…

【C语法学习】13 - fscanf()函数

文章目录 1 函数原型2 参数3 返回值4 比较5 示例5.1 示例15.2 示例2 1 函数原型 fscanf():从指定流stream读取格式化输入,函数原型如下: int fscanf(FILE *stream, const char *format, ...)2 参数 fscanf()函数参数包括三部分&#xff1a…

VR全景技术在文化展示与传播中有哪些应用?

引言: 随着科技的不断进步,虚拟现实(VR)全景技术已经成为文化展示与传播领域的一项重要工具。那么VR全景技术是如何改变文化展示与传播方式,VR全景技术又如何推动文化的传承和普及呢? 一.VR技术…

【MongoDB】MongoExport如何过滤数据导出

问题 使用MongoDB处理导出数据时,想增加数据过滤操作。 例如:导出所有isGirl为true的所有数据。 分析 在mongoexport说明文档中找到了query字段和queryFile字段,用来进行数据查询匹配导出。 query字段 后面直接跟 json格式数据。 queryF…

GPT技术的崛起:改变生活与挑战未来

GPT的广泛使用引发了许多关于其影响的讨论,包括可能对就业和互联网公司的存活造成挑战。在这篇博客中,我们将探讨这些问题,并分享我们自己在日常生活中如何使用GPT的经验。 1 GPT技术的广泛应用 GPT,或者通用预训练模型&#x…

NOIP2005提高组第二轮T3:传纸条

题目链接 NOIP2005提高组第二轮T3:传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排坐成一个 m m m 行 n n n 列的矩阵,而小渊和小轩被安排在矩阵对角线的两端…

什么是数据可视化,为什么数据可视化很重要?

数据可视化是数据的图形表示,可以帮助人们更轻松地理解和解释复杂的信息。它涉及创建数据的视觉表示,例如图表、图形、地图和其他视觉元素,以传达数据中的见解、模式和趋势。数据可视化是将原始数据转化为可操作知识的关键工具。 以下是数据…

实用篇-MQ消息队列

一、初识MQ 通讯分为同步通讯和异步通讯,同步通讯就比如我们日常生活中的打电话,看直播,能够得到及时的反馈。而异步通讯则类似于聊天软件聊天,不需要建立实时的连接,并且可以进行建立多个业务一起异步执行 1. 同步通…

Python之函数

函数介绍 函数:是组织好的,可重复使用的,用来实现特定功能的代码段。 就比如我们使用过的:input()、print()、str()、int()、len()等都是Python的内置函数 函数的定义 函数的调用 函数使用时的注意事项: ① 参数如…