当前位置: 首页 > news >正文

建设网站策划书查权重的软件

建设网站策划书,查权重的软件,公司注册网站查询,洛阳400电话洛阳网站seo文章目录1 背景介绍2 实验环境3 paddle.onnx.export函数简介4 代码实操4.1 PaddlePaddle与ONNX模型导出4.2 ONNX正确性验证4.3 PaddlePaddle与ONNX的一致性检查4.4 多输入的情况5 ONNX模型可视化6 ir_version和opset_version修改7 致谢原文来自于地平线开发者社区,未…

文章目录

  • 1 背景介绍
  • 2 实验环境
  • 3 paddle.onnx.export函数简介
  • 4 代码实操
    • 4.1 PaddlePaddle与ONNX模型导出
    • 4.2 ONNX正确性验证
    • 4.3 PaddlePaddle与ONNX的一致性检查
    • 4.4 多输入的情况
  • 5 ONNX模型可视化
  • 6 ir_version和opset_version修改
  • 7 致谢

原文来自于地平线开发者社区,未来会持续发布深度学习、板端部署的相关优质文章与视频,如果文章对您有帮助,麻烦给点个赞,如果您有兴趣一起学习,欢迎点个关注:寻找永不遗憾(CSDN用户名)

1 背景介绍

使用深度学习开源框架Pytorch训练完网络模型后,在部署之前通常需要进行格式转换,地平线工具链模型转换目前支持Caffe1.0和ONNX(opset_version=10/11 且 ir_version≤7)两种。ONNX(Open Neural Network Exchange)格式是一种常用的开源神经网络格式,被较多推理引擎支持,例如Pytorch、PaddlePaddle、TensorFlow等。本文将详细介绍如何将PaddlePaddle格式的模型导出到ONNX格式。

2 实验环境

本教程的实验环境如下:

Python库Version
paddlepaddle2.4.1
paddle2onnx1.0.5
onnx1.13.0
onnxruntime1.14.0

3 paddle.onnx.export函数简介

paddle.onnx.export函数可以将PaddlePaddle模型导出为ONNX模型,函数介绍如下,其中x_spec用于配置paddle.onnx.export的input_spec参数。

x_spec = paddle.static.InputSpec(shape=None, dtype='float32', name=None)
#shape:   声明维度信息,默认为 None
#dtype:   数据类型,默认为 float32
#name:    网络输入节点名称paddle.onnx.export(layer, path, input_spec=[x_spec], opset_version=11, **configs)
#layer:          导出的Layer对象,即需要转换的网络模型
#path:           存储模型的路径前缀,导出后会自动添加后缀“.onnx”
#input_spec:     用于配置模型输入属性
#opset_version:  默认为9,请手动配置10或11

关于paddle.onnx.export的更多详细介绍,可以查阅PaddlePaddle的API文档:
https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/onnx/export_cn.html

4 代码实操

4.1 PaddlePaddle与ONNX模型导出

以下代码展示了搭建一个简单分类模型并以PaddlePaddle和ONNX格式保存的过程。

import paddle
import paddle.nn as nnclass MyNet(nn.Layer):def __init__(self, num_classes=10):super(MyNet, self).__init__()self.num_classes = num_classesself.features = nn.Sequential(nn.Conv2D(in_channels=1, out_channels=2,kernel_size=3, stride=1, padding=1),nn.ReLU())self.linear = nn.Sequential(nn.Linear(98, num_classes))def forward(self, inputs):x = self.features(inputs)x = paddle.flatten(x, 1)x = self.linear(x)return xmodel = MyNet()#准备输入数据
x_spec = paddle.static.InputSpec([1, 1, 7, 7], 'float32', 'input1')
#将模型以PaddlePaddle的格式保存,以验证和ONNX模型推理的一致性
paddle.jit.save(layer=model, path='./pd_model/pdmodel',input_spec=[x_spec])
#将模型导出为ONNX格式保存
paddle.onnx.export(layer=model, path='./model',input_spec=[x_spec], opset_version=11)

4.2 ONNX正确性验证

可以用以下代码验证ONNX模型的正确性,会检查模型的版本,图的结构,节点及输入输出。若输出为 Check: None 则表示无报错信息,模型导出正确。

import onnxonnx_model = onnx.load("./model.onnx")
check = onnx.checker.check_model(onnx_model)
print('Check: ', check)

4.3 PaddlePaddle与ONNX的一致性检查

可以使用以下代码检查导出的ONNX模型和原始的PaddlePaddle模型是否有相同的计算结果。

import numpy as np
import onnxruntime
import paddleinput1 = np.random.random((1, 1, 7, 7)).astype('float32')ort_sess = onnxruntime.InferenceSession("./model.onnx")
ort_inputs = {ort_sess.get_inputs()[0].name: input1}
ort_outs = ort_sess.run(None, ort_inputs)model = paddle.jit.load("./pd_model/pdmodel")
model.eval()
paddle_input = paddle.to_tensor(input1)
paddle_outs = model(paddle_input)print(ort_outs[0])
print(paddle_outs.numpy())
np.testing.assert_allclose(tf_outs.numpy(), ort_outs[0], rtol=1e-03, atol=1e-05)
print("onnx model check finsh.")

4.4 多输入的情况

若您的模型存在多输入,则可参考下方代码保存成PaddlePaddle和ONNX格式。ONNX的正确性验证和PaddlePaddle与ONNX的一致性检查不再赘述,仿照上述代码编写即可。

import paddle
import paddle.nn as nnclass MyNet(nn.Layer):def __init__(self, num_classes=10):super(MyNet, self).__init__()self.num_classes = num_classesself.features_1 = nn.Sequential(nn.Conv2D(in_channels=1, out_channels=2,kernel_size=3, stride=1, padding=1),nn.ReLU())self.features_2 = nn.Sequential(nn.Conv2D(in_channels=1, out_channels=2,kernel_size=3, stride=1, padding=1),nn.ReLU())self.linear = nn.Sequential(nn.Linear(98, num_classes))def forward(self, inputs1, inputs2):x = self.features_1(inputs1)y = self.features_2(inputs2)z = paddle.concat((x, y), 1)z = paddle.flatten(z, 1)z = self.linear(z)return zmodel = MyNet()x_spec = paddle.static.InputSpec([1, 1, 7, 7], 'float32', 'input1')
y_spec = paddle.static.InputSpec([1, 1, 7, 7], 'float32', 'input2')
paddle.jit.save(layer=model, path='./pd_model/pdmodel',input_spec=[x_spec, y_spec])
paddle.onnx.export(layer=model, path='./model',input_spec=[x_spec, y_spec], opset_version=11)

5 ONNX模型可视化

导出成ONNX模型后,可以使用开源可视化工具Netron来查看网络结构及相关配置信息。Netron的使用方式主要分为两种,一种是使用在线网页版 https://netron.app/ ,另一种是下载安装程序 https://github.com/lutzroeder/netron 。此教程中模型的可视化效果为:

6 ir_version和opset_version修改

地平线工具链支持的ONNX模型需要满足 opset_version=10/11 且 ir_version≤7,当拿到的ONNX模型不满足这两个要求时,可以修改代码重新导出,或者尝试编写脚本直接修改ONNX模型的对应属性,第二种方式的示例代码如下:

import onnxmodel = onnx.load("./model.onnx")
model.ir_version = 6
model.opset_import[0].version = 10
onnx.save_model(model, "./model_version.onnx")

**注意:**高版本向低版本切换时可能会出现问题,这里只是一种可尝试的解决方案。
调整结束后,使用Netron可视化model_version.onnx,如下图所示:
在这里插入图片描述

此时,ONNX模型的ir_version=6,opset_version=10,满足地平线工具链的转换条件。

7 致谢

原文来自于地平线开发者社区,未来会持续发布深度学习、板端部署的相关优质文章与视频,如果文章对您有帮助,麻烦给点个赞,如果您有兴趣一起学习,欢迎点个关注:寻找永不遗憾(CSDN用户名)

http://www.ds6.com.cn/news/26772.html

相关文章:

  • 网站开发公司属于什么行业软文案例
  • 企业网站设计图近期重大新闻
  • 怎样做销售水蜜桃网站sem seo
  • 西宁做网站的有吗个人如何做百度推广
  • 怎么从网站知道谁做的优化网站打开速度
  • 广告传媒深圳百度seo公司
  • 关于国际贸易的网站太原seo排名
  • 自己做的网站加载慢的原因网络营销课程个人感悟
  • 新疆乌鲁木齐建设工程信息网百度seo排名点击软件
  • 山东超越建设集团网站网上商城建设
  • 南通网站制作公司搜搜
  • 莱芜做网站优化头条今日头条
  • 中国建设银行网站登录不上百度贴吧广告投放价格
  • php网站后台密码忘记了完整企业网站模板
  • 网络规划设计师是职业资格吗优化网站价格
  • wordpress免费主题cms关键词优化公司网站
  • 目前网站在初级建设阶段_需要大量数据丰富英文网站seo
  • 用什么程序做网站好百度帐号个人中心
  • 网站社区怎么创建黑帽seo是什么
  • 网站建设的主要技术指什么怎样在百度上发帖子
  • 做视频网站用哪个软件好在线bt种子
  • 产品网站用什么软件做清远今日头条最新消息
  • 网站名称管理高报师培训机构排名
  • 濮阳市网站建设五年级上册优化设计答案
  • 建设网站天下拼多多怎么查商品排名
  • 崇左网站建设竞价排名适合百度这样的网络平台吗
  • 安徽省工程建设项目信息网沧州seo公司
  • 成都网络优化网站建设百度 seo优化作用
  • 互联网网站如何做流量统计网络营销推广活动有哪些
  • 优而思 网站网络推广优化工具