4.5 构建onnx结构模型-Reshape

news2024/11/18 15:43:16

前言

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

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

方式

方法一:pytorch --> onnx

固定shape
import  torch
import torch.nn as nn 

class JustPow(nn.Module):
    def __init__(self):
        super(JustPow,self).__init__()

    def forward(self,x):
        x = torch.pow(x, 2)
        return x

net = JustPow()
model_name = 'JustPow.onnx'#保存ONNX的文件名字
dummy_input = torch.randn(4, 778, 1500)
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_helper

def run():
    print("run start....\n")
    # 待完成

   
    return model

if __name__ == "__main__":
    model = run()
    onnx.save(model, "./test_rpow.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(4,778,1500).astype(np.float32)
    print(f'input_data1 shape:{input_data1.shape}\n')

    output_name1 = session.get_outputs()[0].name

    pred_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 = "./pow_dynamic_sim.onnx"
    model = onnx.load("./pow_dynamic_sim.onnx")
    check_onnx(model)
    run(path)
    

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言之初阶指针

一、指针: 其实按照我的理解,当我们写c语言程序的时候,创建的变量,数组等都要在内存上开辟空间。而每一个内存都有一个唯一的编号,这个编号也被称为地址编号,就相当于,编号地址指针。 二、指针…

STM32F4 GPIO端口二极管作用——二极管钳位作用

如上图所示,有两个保护二极管,用于保护内部电路,防止I\O引脚外部过高或者过低的电压输入时造成内部电路损坏。 具体来讲:当引脚输入电压高于VDD时,上面的二极管导通,输入点电压被钳位到约VDD0.7V&#xff…

python打包部署脚本

linux可使用expect来实现自动交互,windows想要写出同样的功能脚本,只能使用python或者安装ActiveTcl 1、安装python Microsoft Store搜索python直接安装,默认会直接添加到环境变量https://www.python.org/官网下载,点击安装时会提…

比尔·盖茨谈他对软件应用和人工智能代理未来的见解

比尔盖茨在他的 Gatesnotes 网站中发表了一篇文章,分享了他对软件应用和人工智能代理未来的见解。他认为人工智能代理将大行其道,在接下来的五年里,这将完全改变。你不需要为不同的任务使用不同的应用程序。你只需用日常语言告诉你的设备你想…

基于Python优化图片亮度与噪点

支持添加噪点类型包括:添加高斯噪点、添加椒盐噪点、添加波动噪点、添加泊松噪点、添加周期性噪点、添加斑点噪点、添加相位噪点,还提供清除噪点的功能。 我们先看一下实测效果:(test.jpg为原图,new.jpg为添加后的图片…

基于JavaWeb+SSM+校园零售商城微信小程序系统的设计和实现

基于JavaWebSSM校园零售商城微信小程序系统的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 摘 要 在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应…

HRNet关键点检测

HRNet是一种用于关键点检测的网络架构,它具有一些优点和缺点。 优点: 可以保持高分辨率:HRNet将高分辨率到低分辨率的子网并联连接,而不是像大多数现有解决方案那样串联连接。因此,HRNet能够保持高分辨率&#xff0c…

动态修改hosts

前言 因工作需要频繁变更hosts, 故须自己实现一个动态管理器, 市面上其实已经有了类似的软件,比如switchhosts!但因为不好集成其他功能(如远程连接KVM),所以还是决定自己开发一套。 原理 使用之前强烈建…

tcpdump抓包的字节数量与ethtool统计数据不同的原因

情况介绍 在进行RDMA抓包流量分析时,我使用ethtool工具统计了RDMA网卡的流量发送数据数量,然后使用tcpdump进行抓包。 经过分析发现,tcpdump得到的数据数量总是大于ethtool得到的数据数量,而且每个数据包会多出4个字节。 分析 …

Juniper PPPOE双线路冗余RPM配置

------------------ 浮动静态路由 set routing-options static route 0.0.0.0/0 next-hop pp0.0 qualified-next-hop pp0.1 preference 10 ----------------- RPM测试的内容,包括从哪个接口发起测试,测试ping等等 #指定探针类型用ICMP请求 #探测的目标地址 #探测间隔 #探测阈…

Java第十八章Swing程序设计

一、Swing概述 Swing 是 Java 平台的用户界面(UI)工具包,它是一种现代化的、跨平台的 UI 工具包,可以使用各种操作系统上的 Java 虚拟机(JVM)来实现,包括 Windows、Linux 和 MacOS 等。Swing 提…

CopyOnWriteArrayList内存占用过多

目录 一、CopyOnWriteArrayList二、CopyOnWriteArrayList的适用场景三、CopyOnWriteArrayList内存占用过多的解决方法四、CopyOnWriteArrayList.add()源码分析 大家好,我是哪吒。 一、CopyOnWriteArrayList CopyOnWriteArrayList是Java中的一个线程安全的ArrayLis…

docker小技能

文章目录 I 预备知识Docker组成命名空间 (进程隔离)II 常用命令2.1 案例:流水线docker 部署2.2 删除没有使用的镜像2.3 shell 不打印错误输出2.4 阿里云流水线/jenkins忽略shell步骤中的报错https://www.runoob.com/docker/docker-architecture.html I 预备知识 Docker组成…

ElementUI表格el-table自适应高度(表头表尾固定不动)

ElementUI表格el-table自适应高度&#xff08;表头表尾固定不动&#xff09;&#xff0c;内容只在中间滚动&#xff0c;效果如图&#xff1a; 实现代码 <div class"mt-10" :style"{height:tableHeight}"><div class"operation-bar">…

15年之后再回低价的双十一,几分像从前?

文 | 螳螂观察 作者 | 易不二 今年双十一&#xff0c;全网铺天盖地的“低价”字眼&#xff0c;让人有种时空错乱的感觉。 犹记得&#xff0c;2009年双十一也是以一刀直砍到5折的低价&#xff0c;推开了一扇新世界的大门。在那个车马邮件还有网速都很慢的年月&#xff0c;人们…

深入理解强化学习——马尔可夫决策过程:随机过程和马尔可夫性质

分类目录&#xff1a;《深入理解强化学习》总目录 下图介绍了强化学习里面智能体与环境之间的交互&#xff0c;智能体得到环境的状态后&#xff0c;它会采取动作&#xff0c;并把这个采取的动作返还给环境。环境得到智能体的动作后&#xff0c;它会进入下一个状态&#xff0c;把…

【Transformer从零开始代码实现 pytoch版】(三)Decoder编码器组件:多头自注意力+多头注意力+全连接层+规范化层

解码器组件 解码器部分&#xff1a; 由N个解码器层堆叠而成每个解码器层由三个子层连接结构组成第一个子层连接结构包括一个多头自注意力子层和规范化层以及一个残差连接第二个子层连接结构包括一个多头注意力子层和规范化层以及一个残差连接第三个子层连接结构包括一个前馈全…

牛客网上收藏题目总结及重写(C语言)(3)

每日一言 如果预计中的不幸没有发生的话&#xff0c;我们就会收获意外的喜悦。 --人生的智慧 题目BC84 错因&#xff1a;忘记要使用小数除法 代码 #include <stdio.h> int main() {int i 0;int n 0;scanf("%d",&n);double sum 0;for(i1;i<n;i){su…

分享一些有趣的MATLAB提示音(代码可直接复制)

先做一个声明&#xff1a;文章是由我的个人公众号中的推送直接复制粘贴而来&#xff0c;因此对智能优化算法感兴趣的朋友&#xff0c;可关注我的个人公众号&#xff1a;启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法&#xff0c;经典的&#xff0c;或者是近几年…

联想笔记本Fn + A可以全选,Ctrl失效

问题&#xff1a;联想笔记本Fn A可以全选&#xff0c;ctrl失效。 原因&#xff1a;BIOS启用了Fn键和Ctrl键互换。 解决操作&#xff1a; 1.开机时一直按F2&#xff0c;进入BIOS 2.点击More Settings > 2.选取Configuration 3.将Fool Proof Fn Ctrl 设定变更为Disabled 4.按…