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

哈尔滨网站开发公司排行榜网络维护员是做什么的

哈尔滨网站开发公司排行榜,网络维护员是做什么的,WordPress根目录是什么,WordPress速度优化2019在实际部署模型时有时可能会遇到想用的算子无法导出onnx,但实际部署的框架是支持该算子的。此时可以通过自定义onnx算子的方式导出onnx模型(注:自定义onnx算子导出onnx模型后是无法使用onnxruntime推理的)。下面给出个具体应用中的…

在实际部署模型时有时可能会遇到想用的算子无法导出onnx,但实际部署的框架是支持该算子的。此时可以通过自定义onnx算子的方式导出onnx模型(注:自定义onnx算子导出onnx模型后是无法使用onnxruntime推理的)。下面给出个具体应用中的示例:需要导出pytorch的affine_grid算子,但在pytorch的2.0.1版本中又无法正常导出该算子,故可通过如下自定义算子代码导出。

import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.autograd import Function
from torch.onnx import OperatorExportTypesclass CustomAffineGrid(Function):@staticmethoddef forward(ctx, theta: torch.Tensor, size: torch.Tensor):grid = F.affine_grid(theta=theta, size=size.cpu().tolist())return grid@staticmethoddef symbolic(g: torch.Graph, theta: torch.Tensor, size: torch.Tensor):return g.op("AffineGrid", theta, size)class MyModel(nn.Module):def __init__(self) -> None:super().__init__()def forward(self, x: torch.Tensor, theta: torch.Tensor, size: torch.Tensor):grid = CustomAffineGrid.apply(theta, size)x = F.grid_sample(x, grid=grid, mode="bilinear", padding_mode="zeros")return xdef main():with torch.inference_mode():custum_model = MyModel()x = torch.randn(1, 3, 224, 224)theta = torch.randn(1, 2, 3)size = torch.as_tensor([1, 3, 512, 512])torch.onnx.export(model=custum_model,args=(x, theta, size),f="custom.onnx",input_names=["input0_x", "input1_theta", "input2_size"],output_names=["output"],dynamic_axes={"input0_x": {2: "h0", 3: "w0"},"output": {2: "h1", 3: "w1"}},opset_version=16,operator_export_type=OperatorExportTypes.ONNX_FALLTHROUGH)if __name__ == '__main__':main()

在上面代码中,通过继承torch.autograd.Function父类的方式实现导出自定义算子,继承该父类后需要用户自己实现forward以及symbolic两个静态方法,其中forward方法是在pytorch正常推理时调用的函数,而symbolic方法是在导出onnx时调用的函数。对于forward方法需要按照正常的pytorch语法来实现,其中第一个参数必须是ctx但对于当前导出onnx场景可以不用管它,后面的参数是实际自己传入的参数。对于symbolic方法的第一个必须是g,后面的参数任为实际自己传入的参数,然后通过g.op方法指定具体导出自定义算子的名称,以及输入的参数(注:上面示例中传入的都是Tensor所以可以直接传入,对与非Tensor的参数可见下面一个示例)。最后在使用时直接调用自己实现类的apply方法即可。使用netron打开自己导出的onnx文件,可以看到如下所示网络结构。
在这里插入图片描述

有时按照使用的推理框架导出自定义算子时还需要设置一些参数(非Tensor)那么可以参考如下示例,例如要导出int型的参数k那么可以通过传入k_i来指定,要导出float型的参数scale那么可以通过传入scale_f来指定,要导出string型的参数clockwise那么可以通过传入clockwise_s来指定:

import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.autograd import Function
from torch.onnx import OperatorExportTypesclass CustomRot90AndScale(Function):@staticmethoddef forward(ctx, x: torch.Tensor):x = torch.rot90(x, k=1, dims=(3, 2))  # clockwise 90x *= 1.2return x@staticmethoddef symbolic(g: torch.Graph, x: torch.Tensor):return g.op("Rot90AndScale", x, k_i=1, scale_f=1.2, clockwise_s="yes")class MyModel(nn.Module):def __init__(self) -> None:super().__init__()def forward(self, x: torch.Tensor):return CustomRot90AndScale.apply(x)def main():with torch.inference_mode():custum_model = MyModel()x = torch.randn(1, 3, 224, 224)torch.onnx.export(model=custum_model,args=(x,),f="custom_rot90.onnx",input_names=["input"],output_names=["output"],dynamic_axes={"input": {2: "h0", 3: "w0"},"output": {2: "w0", 3: "h0"}},opset_version=16,operator_export_type=OperatorExportTypes.ONNX_FALLTHROUGH)if __name__ == '__main__':main()

使用netron打开自己导出的onnx文件,可以看到如下所示信息。
在这里插入图片描述

http://www.yayakq.cn/news/908314/

相关文章:

  • 网站建设的收获免费建个人网站步骤
  • 建一个收费网站 怎么收费作业网站建设方案
  • 如何做网站 frontpage个人如何做微商城网站
  • 视频网站费用全渠道营销
  • 推广做网站莱芜哪个建站软件比较好带论坛
  • 古典风格网站模版全国各地感染高峰进度
  • 做网站电话号码wordpress评论白名单
  • 安卓手机app开发教程网站排名优化需要多久
  • 微信建设网站哪家好义乌外发加工网是正规的吗
  • 网站开发公司 苏州wordpress 谷歌字体 360插件
  • 做网站 合肥网易严选的网站建设
  • 二级域名做网站好不好手机软件开发公司排名
  • 整站优化网站高平市规建设局网站
  • 营销型网站案例展示深圳网站建设方案
  • 从网址下载的文件乱码怎么办深圳网站营销seo电话
  • 静安区网站建设注册公司一年要交多少税
  • 做网站好比做房子wordpress get_posts
  • 外管局网站上做存量权益登记做服装外单的网站有哪些内容
  • 十年专业网站建设常德百度推广
  • 眉山北京网站建设网站域名解析查询
  • 大型网站设计方案东莞搜索seo网站关键词优化
  • 扁平化网站特效公众号模板网站
  • 建设银行银行官网网站2022年10月国内最新新闻
  • 宝安网站设计哪家好网站安装出现dir
  • 网络公司怎么做网站黄冈网站推广代运营
  • 上海先进网站建设公司搜索引擎平台有哪些
  • 建设通网站公路查询好看开源企业网站模板
  • html页面能做成网站吗保定网站设计优势
  • 广东网站定制seo数据优化教程
  • 优秀公司网站腾讯云服务器免费体验