位置: IT常识 - 正文

Pytorch复习笔记--导出Onnx模型为动态输入和静态输入(pytorch基础教程)

编辑:rootadmin
Pytorch复习笔记--导出Onnx模型为动态输入和静态输入

目录

1--动态输入和静态输入

2--Pytorch API

3--完整代码演示

4--模型可视化

5--测试动态导出的Onnx模型


1--动态输入和静态输入

推荐整理分享Pytorch复习笔记--导出Onnx模型为动态输入和静态输入(pytorch基础教程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:pytorch基础,pytorch技巧,pytorch技巧,pytorch基础,pytorch零基础入门,pytorch 快速入门,pytorch基础教程,pytorch基础教程,内容如对您有帮助,希望把文章链接给更多的朋友!

        当使用 Pytorch 将网络导出为 Onnx 模型格式时,可以导出为动态输入和静态输入两种方式。动态输入即模型输入数据的部分维度是动态的,可以由用户在使用模型时自主设定;静态输入即模型输入数据的维度是静态的,不能够改变,当用户使用模型时只能输入指定维度的数据进行推理。

        显然,动态输入的通用性比静态输入更强。

2--Pytorch APIPytorch复习笔记--导出Onnx模型为动态输入和静态输入(pytorch基础教程)

        在 Pytorch 中,通过 torch.onnx.export() 的 dynamic_axes 参数来指定动态输入和静态输入,dynamic_axes 的默认值为 None,即默认为静态输入。

        以下展示动态导出的用法,通过定义 dynamic_axes 参数来设置动态导出输入。dynamic_axes 中的 0、2、3 表示相应的维度设置为动态值;

# 导出为动态输入input_name = 'input'output_name = 'output'torch.onnx.export(model, input_data, "Dynamics_InputNet.onnx", opset_version=11, input_names=[input_name], output_names=[output_name], dynamic_axes={ input_name: {0: 'batch_size', 2: 'input_height', 3: 'input_width'}, output_name: {0: 'batch_size', 2: 'output_height', 3: 'output_width'}})3--完整代码演示

        在以下代码中,定义了一个网络,并使用动态导出和静态导出两种方式,将网络导出为 Onnx 模型格式。

import torchimport torch.nn as nnclass Model_Net(nn.Module): def __init__(self): super(Model_Net, self).__init__() self.layer1 = nn.Sequential( nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, stride=1, padding=1), nn.BatchNorm2d(64), nn.ReLU(inplace=True), nn.Conv2d(in_channels=64, out_channels=256, kernel_size=3, stride=1, padding=1), nn.BatchNorm2d(256), nn.ReLU(inplace=True), ) def forward(self, data): data = self.layer1(data) return dataif __name__ == "__main__": # 设置输入参数 Batch_size = 8 Channel = 3 Height = 256 Width = 256 input_data = torch.rand((Batch_size, Channel, Height, Width)) # 实例化模型 model = Model_Net() # 导出为静态输入 input_name = 'input' output_name = 'output' torch.onnx.export(model, input_data, "Static_InputNet.onnx", verbose=True, input_names=[input_name], output_names=[output_name]) # 导出为动态输入 torch.onnx.export(model, input_data, "Dynamics_InputNet.onnx", opset_version=11, input_names=[input_name], output_names=[output_name], dynamic_axes={ input_name: {0: 'batch_size', 2: 'input_height', 3: 'input_width'}, output_name: {0: 'batch_size', 2: 'output_height', 3: 'output_width'}})4--模型可视化

        通过 netron 库可视化导出的静态模型和动态模型,代码如下:

import netronnetron.start("./Dynamics_InputNet.onnx")

        静态模型可视化:

         动态模型可视化:

5--测试动态导出的Onnx模型import numpy as npimport onnximport onnxruntimeif __name__ == "__main__": input_data1 = np.random.rand(4, 3, 256, 256).astype(np.float32) input_data2 = np.random.rand(8, 3, 512, 512).astype(np.float32) # 导入 Onnx 模型 Onnx_file = "./Dynamics_InputNet.onnx" Model = onnx.load(Onnx_file) onnx.checker.check_model(Model) # 验证Onnx模型是否准确 # 使用 onnxruntime 推理 model = onnxruntime.InferenceSession(Onnx_file, providers=['TensorrtExecutionProvider', 'CUDAExecutionProvider', 'CPUExecutionProvider']) input_name = model.get_inputs()[0].name output_name = model.get_outputs()[0].name output1 = model.run([output_name], {input_name:input_data1}) output2 = model.run([output_name], {input_name:input_data2}) print('output1.shape: ', np.squeeze(np.array(output1), 0).shape) print('output2.shape: ', np.squeeze(np.array(output2), 0).shape)

         由输出结果可知,对应动态输入 Onnx 模型,其输出维度也是动态的,并且为对应关系,则表明导出的 Onnx 模型无误。

本文链接地址:https://www.jiuchutong.com/zhishi/295970.html 转载请保留说明!

上一篇:vue中使用wangeditor富文本编辑器(vue中使用require报错)

下一篇:图文详解vue.js devtools插件使用方法(图文详解一本通)

  • iphone4s移动上网慢(iphone4s移动合约机)(iphone4移动卡怎么上网)

    iphone4s移动上网慢(iphone4s移动合约机)(iphone4移动卡怎么上网)

  • word审阅修订怎么用(word 审阅修订)

    word审阅修订怎么用(word 审阅修订)

  • 黑鲨4spro有耳机孔吗(黑鲨4spro耳机接口)

    黑鲨4spro有耳机孔吗(黑鲨4spro耳机接口)

  • 腾讯vip最多几个人用(腾讯vip最多几个设备登录)

    腾讯vip最多几个人用(腾讯vip最多几个设备登录)

  • 淘宝撤销换货改为退货(淘宝撤销换货改退货)

    淘宝撤销换货改为退货(淘宝撤销换货改退货)

  • i51035g1性能(i51035g1性能相当于台式机什么)

    i51035g1性能(i51035g1性能相当于台式机什么)

  • 自己打自己电话会提示什么(自己打自己电话提示关机)

    自己打自己电话会提示什么(自己打自己电话提示关机)

  • 华为nova7防水级别(华为nova 7的防水等级)

    华为nova7防水级别(华为nova 7的防水等级)

  • 拼多多申请了退款但是已经发货了怎么办(拼多多申请了退款货又收到)

    拼多多申请了退款但是已经发货了怎么办(拼多多申请了退款货又收到)

  • 佳能充电器charge灯一直闪(佳能充电器charge灯一直亮黄灯)

    佳能充电器charge灯一直闪(佳能充电器charge灯一直亮黄灯)

  • wpssmartart在哪里找(wps上的smartart在哪)

    wpssmartart在哪里找(wps上的smartart在哪)

  • 主码和外码的概念(举例说明什么是主码什么是外码)

    主码和外码的概念(举例说明什么是主码什么是外码)

  • 电话电池不耐用怎么办(电话手机电池不耐用了怎么办)

    电话电池不耐用怎么办(电话手机电池不耐用了怎么办)

  • lr6aa是什么电池

    lr6aa是什么电池

  • 华为手机p和mate系列的区别(华为手机p和mate系列哪个好)

    华为手机p和mate系列的区别(华为手机p和mate系列哪个好)

  • 超级nfc和全功能nfc区别(超级nfcsim)

    超级nfc和全功能nfc区别(超级nfcsim)

  • 抖音为什么没有权限设置了(抖音为什么没有特效功能了)

    抖音为什么没有权限设置了(抖音为什么没有特效功能了)

  • 红米6a可以扩展吗(红米6a怎么扩充存储空间)

    红米6a可以扩展吗(红米6a怎么扩充存储空间)

  • 一加7T是什么屏幕(一加7是什么屏幕)

    一加7T是什么屏幕(一加7是什么屏幕)

  • wps删除表格中文字(wps怎么删除表格中的文字)

    wps删除表格中文字(wps怎么删除表格中的文字)

  • 华为荣耀9x指纹识别在哪里(华为荣耀9x指纹设置不见了)

    华为荣耀9x指纹识别在哪里(华为荣耀9x指纹设置不见了)

  • 检索式怎么写(文献检索式怎么写)

    检索式怎么写(文献检索式怎么写)

  • 靓仔语塞是什么梗(女的对我说靓仔语塞是啥意思)

    靓仔语塞是什么梗(女的对我说靓仔语塞是啥意思)

  • 手机上的软件怎么保存到云盘(手机上的软件怎么传到ipad上)

    手机上的软件怎么保存到云盘(手机上的软件怎么传到ipad上)

  • 修改织梦管理员用户名(账户)的三种方法(织梦参数配置设置)

    修改织梦管理员用户名(账户)的三种方法(织梦参数配置设置)

  • 房产税如何进行税源采集
  • 破产企业发放工资要不要纳税?
  • 汇算清缴企业所得税弥补亏损明细表怎么填
  • 税控盘清卡失败
  • 一般纳税人印花税的计算公式
  • 转回存货跌价准备对递延所得税资产的影响
  • 拆迁补偿费返还政策
  • 房地产企业土地使用权入什么科目
  • 购买土地自建厂房的会计处理
  • 应交税费计提是借方还是贷方
  • 消费税征收范围注释
  • 发票反写是什么时候
  • 公司发手机奖励合法吗
  • 小规模纳税人申报表怎么填
  • 收到外币货款账务处理
  • 残疾小伙小强
  • 运输公司转包业务怎么开票
  • linux grub
  • 银行存款日记账怎么记账
  • 总公司固定资产包括哪些
  • php调用方法
  • uniapp cover-view
  • 京东最贵的商品排行
  • 其他应付款的会计科目
  • 2022最新廉洁警示语句
  • framework 4 client profile
  • 实收资本本年利润属于什么科目
  • 专票认证后可以不抵扣吗
  • 公司日常流水账
  • vue获取value值
  • 微信公众号开发用什么语言
  • 不得从销项税额中抵扣的是
  • 公积金会计分录怎么处理2019
  • 甲企业持有乙企业股票的市价为920000
  • 企业成立刻章流程
  • 开具利息收入发票需不需要有经营范围
  • 2022年山东省固定资产投资额
  • 企业的管理费用,财务费用和销售费用计不计成本呢
  • 分支机构注销后往来账如何处理?
  • 主营业务成本是什么科目
  • 进项税额转出的所有会计分录
  • 以前年度管理费用
  • 采购材料未付款填什么凭证
  • 已认证的红字发票要给购买方吗
  • 固定资产出售账面价值计入什么科目
  • 预收账款冲销账户怎么做
  • 购货方尚未偿付的货款属于什么会计科目
  • 2020公司年会奖品清单
  • 企业是否必须建立巡察制度
  • mysql服务1053
  • mac变得很卡很慢
  • 苹果正式推送ios
  • video for windows是什么
  • 360杀毒恢复区
  • 64位Windows XP系统盘空间占用很大空间怎么减肥
  • 要使用windows
  • 在Linux系统中安装虚拟window
  • msng.exe病毒
  • windows8.1界面
  • ubuntu14升级
  • win7系统浏览器不见了
  • win7打开软件总提示错误怎么解决
  • 如何在linux系统中卸载一个已装载的文件系统
  • opengl入门教程(精)
  • Jquery ajax 同步阻塞引起的UI线程阻塞问题
  • dos命令/s
  • js frameset
  • jquery模拟表单提交
  • Node.js中的事件循环是什么意思
  • javascript有哪些
  • MATLAB图像处理实例详解
  • shell脚本 -ne 0
  • jquery html函数
  • 通过jquery实现页面的动画效果(实例代码)
  • unity脚本api
  • js编写一个标准的单例模式类
  • jquery的实现原理
  • 动态表单的设计与实现
  • 鸿蒙2.0哪个版本续航好
  • 内蒙古一般纳税人查询网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设