4.6 构建onnx结构模型-Gather

前言

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

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

采用onnx方式构建

from onnx import TensorProto, helper
import onnx
import onnxruntime
import numpy as npdef construct_model_gather(input_shape0,input_shape1, axis, output_shape, indices):print("construct model start... \n")initializer = [helper.make_tensor("indices", TensorProto.INT64, input_shape1, indices)]Gather = helper.make_node("Gather", inputs=["data", "indices"], outputs=["output"], name="Gather_test")Gather.attribute.extend([onnx.helper.make_attribute("axis", axis)])graph = helper.make_graph(nodes=[Gather],name="test_graph",inputs=[helper.make_tensor_value_info("data", TensorProto.FLOAT, tuple(input_shape0))],  # use your inputoutputs=[helper.make_tensor_value_info("output", TensorProto.FLOAT, tuple(output_shape))],initializer=initializer,)opset_imports = [onnx.helper.make_operatorsetid("", version=12)]model = onnx.helper.make_model(graph, opset_imports=opset_imports)model.ir_version = onnx.IR_VERSIONonnx.checker.check_model(model)print("construct model done... \n")return modeldef run(model_file, input_data1):print(f'run start....\n')session = onnxruntime.InferenceSession(model_file, providers=['CPUExecutionProvider'])input_name1 = session.get_inputs()[0].name  print(f'input_data1:{input_data1}')pred_onx = session.run( None, {input_name1: input_data1})print(f'pred_onx:{pred_onx}\n')print(f'pred_onx[0].shape:{pred_onx[0].shape}\n')print(f'run done....\n')return pred_onx[0]if __name__ == '__main__':test_cases = [([3, 3], [1, 2], 1, [3, 1, 2]),([8, 32, 51, 80], [15, 37], 2, [8, 32, 15, 37, 80]),([8, 32, 15, 37, 80], [15, 66], 4, [8, 32, 15, 37, 15, 66]),]for input_shape0, input_shape1, axis, output_shape in test_cases:index_max = input_shape0[axis]indices = np.random.randint(index_max, size=tuple(input_shape1)).astype(np.int64)model = construct_model_gather(input_shape0,input_shape1, axis, output_shape, indices)model_file = "test_gather_normal.onnx"onnx.save(model, model_file)input_data1= np.random.random(tuple(input_shape0)).astype(np.float32)onnx_output = run(model_file, input_data1)np_out = np.take(input_data1, indices, axis=axis)diff = np.abs(np_out - onnx_output).max()print(f"test_Gather input_shape: {input_shape0} ,shape:{input_shape1}, axis:{axis} max diff:{diff}\n") 

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

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

相关文章

Spring之@Autowired 属性多实现和单实现源码解析

Autowired使用过程中遇到疑问,通过源码解析原因 一、起因1、当person只有一个实现类时,TestController中,Person属性随意取名。2、当有Person两个实现类时,TestController中,属性名称必须和实现类名一致(ma…

B 树和 B+树 的区别

文章目录 B 树和 B树 的区别 B 树和 B树 的区别 了解二叉树、AVL 树、B 树的概念 B 树和 B树的应用场景 B 树是一种多路平衡查找树,为了更形象的理解。 二叉树,每个节点支持两个分支的树结构,相比于单向链表,多了一个分支。 …

Zookeeper(一)在WSL单机搭建Zookeeper伪集群

目录 Zookeeper1 启动单个Zookeeper实例1.1 下载Zookeeper安装包并解压1.2 添加环境变量1.3 修改默认配置1.4 新建数据存储目录和日志目录1.5 启动Zookeeper1.6 停止Zookeeper 2 搭建Zookeeper集群2.1 新建集群目录2.2 配置环境变量2.3 创建节点目录2.4 修改配置2.5 创建节点ID…

vue2路由切换时取消上个页面的异步请求

背景:我们经常会遇到当前页面未加载完毕时跳转路由或者返回操作, 但是通过network会发现, 若网络环境较差的情况下, 会一直pending, 切换路由后在network中添加新的请求但是正在pending的请求依然存在. 当我们在项目中做了一个上拉加载分页的时候会一直加载中, 用户…

使用C#和HtmlAgilityPack打造强大的Snapchat视频爬虫

概述 Snapchat作为一款备受欢迎的社交媒体应用,允许用户分享照片和视频。然而,由于其特有的内容自动消失特性,爬虫开发面临一些挑战。本文将详细介绍如何巧妙运用C#和HtmlAgilityPack库,构建一个高效的Snapchat视频爬虫。该爬虫能…

vulfocus apache-cve_2021_41773 漏洞复现

vulfocus apache-cve_2021_41773 漏洞复现 名称: vulfocus/apache-cve_2021_41773 描述: Apache HTTP Server 2.4.49、2.4.50版本对路径规范化所做的更改中存在一个路径穿越漏洞,攻击者可利用该漏洞读取到Web目录外的其他文件,如系统配置文件、网站源码…

Mybatis入门(二)

从 SqlSessionFactory 中获取 SqlSession 我们从SqlSessionFactory中获取SqlSession实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。例如: try (SqlSession session sqlSessionFactory.o…

tabs切换,当点击tabItem时候,改变选中样式,以及content内容区域

效果图展示&#xff1a; html原生代码&#xff1a; <div><div class"buttons-row nav-select riskType" style"padding: 10px;"><div class"shoucang-title-box flex-start"><div class"shoucang-title-item active&q…

案例034:基于微信小程序的课堂助手系统

文末获取源码 开发语言&#xff1a;PHP 框架&#xff1a;PHP 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序运行软件&#xff1a;微信开…

【Python数据结构与算法】--- 递归算法的应用 ---[乌龟走迷宫] |人工智能|探索扫地机器人工作原理

&#x1f308;个人主页: Aileen_0v0 &#x1f525;系列专栏:PYTHON数据结构与算法学习系列专栏&#x1f4ab;"没有罗马,那就自己创造罗马~" 目录 导言 解决过程 1.建立数据结构 2.探索迷宫: 算法思路 递归调用的“基本结束条件” 3.乌龟走迷宫的实现代码: …

链表K个节点的组内逆序调整问题

链表K个节点的组内逆序调整问题 作者&#xff1a;Grey 原文地址&#xff1a; 博客园&#xff1a;链表K个节点的组内逆序调整问题 CSDN&#xff1a;链表K个节点的组内逆序调整问题 题目描述 LeetCode 25. Reverse Nodes in k-Group 本题的 follow up 是&#xff1a; Fol…

Python大数据考题

Python大数据考题&#xff1a; 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle&#xff0c;尤其sql要…

【线性代数与矩阵论】坐标变换与相似矩阵

坐标变换与相似矩阵 2023年11月4日 #algebra 文章目录 坐标变换与相似矩阵1. 基变换与坐标变换2. 相似变换下链 1. 基变换与坐标变换 坐标变换与基变换都要通过过渡矩阵 A A A 来实现。设有一向量 f ⃗ \vec f f ​ &#xff0c; x x x 是在基 α \alpha α 下该向量的坐标…

RCS2000发布任务

得有货架 任务配置-任务模板配置-编辑 任务配置-任务模板配置-配置 状态已完成 复制呼叫站点 运营管理-控制调度-任务调度 主任务类型编号是任务模板编号&#xff08;任务配置-任务模板配置&#xff09; AGV编号是agv设备编号&#xff08;AGV配置-AGV配置&#xff09; 货架编…

408—电子笔记分享

一、笔记下载 链接&#xff1a;https://pan.baidu.com/s/1bFz8IX6EkFMWTfY9ozvVpg?pwddeng 提取码&#xff1a;deng b站视频&#xff1a;408-计算机网络-笔记分享_哔哩哔哩_bilibili 包含了408四门科目&#xff08;数据结构、操作系统、计算机组成原理、计算机网络&#xff09…

三、Lua变量

文章目录 一、变量分类二、变量赋值三、索引 一、变量分类 lua变量分为全局变量&#xff0c;局部变量。 全局变量&#xff1a;默认&#xff0c;全局有效。 局部变量&#xff1a;从作用范围开始到作用范围结束&#xff0c;需加local 修饰。 a1function ff()local b1 endprint(a…

4G自动变焦云台球机摄像头如何解决低功耗问题?

目前也很多4G球机&#xff0c;不过对于工业的应用&#xff0c;可能还需要有针对性的球机方案&#xff1f; 比如,大家关心的功耗问题&#xff0c;在无电无网的情况下&#xff0c;偏远山区&#xff0c;对于一些油田的管控&#xff0c;输线电路可视化监控&#xff0c;天然气管道的…

Spring如何在多线程下保持事务的一致性

Spring如何在多线程下保持事务的一致性 方法&#xff1a;每个线程都开启各自的事务去执行相关业务&#xff0c;等待所有线程的业务执行完成&#xff0c;统一提交或回滚。 下面我们通过具体的案例来演示Spring如何在多线程下保持事务的一致性。 1、项目结构 2、数据库SQL CR…

MYSQL基础知识之【LIKE子句的使用 ,NULL值的处理,空值的处理】

文章目录 前言MySQL LIKE 子句在PHP脚本中使用 LIKE 子句 MySQL NULL 值处理在命令提示符中使用 NULL 值使用PHP脚本处理 NULL 值 后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Mysql &#x1f431;‍&#x1f453;博主在前端领域还有…

pinia 使用pinia-plugin-persist插件无法切换localStorage存储

问题描述 使用pinia-plugin-persist 插件&#xff0c;当配置项storage设置为localStorage&#xff0c;但仍然向sessionStorage中存储数据 persist: {enabled: true, // 开启缓存 storage: localStorage // 缓存使用方式 }解决方案 不使用pinia-plugin-persist 插件&#xf…