您好,欢迎访问上海聚搜信息技术有限公司官方网站!

华为云国际站:onnx opset13中的Loop算子该如何自定义实现?

时间:2023-08-31 13:45:38 点击:

  onnx opset13中的Loop算子该如何自定义实现?

  【聚搜云】是上海聚搜信息技术有限公司旗下品牌,坐落于魔都上海,服务于全球、2019年成为阿里云代理商生态合作伙伴。与阿里云代理商腾讯云华为云、西部数码、美橙互联、AWS亚马逊云国际站渠道商、聚搜云,长期战略合作的计划!华为云国际站代理商专业的云服务商!

  【本文由华为云渠道商[聚搜云] [ www.4526.cn]撰写。】

  在深度学习领域的模型转换与优化过程中,ONNX已经被广泛应用,并且其已开放的opset13版本提供了一系列核心算子,可以实现大部分常见的深度学习运算。其中,基于循环的神经网络(recurrent neural network,RNN)是深度学习的重要分支之一。而在ONNX opset13中,即使已经支持基于循环神经网络的计算图生成,但是,若用户需要自行定制Loop算子时,如何实现呢?

  首先,要了解Loop算子的具体作用和基本原理。Loop算子主要用于将循环网络中的RNN轮廓替换为在计算图中展开的静态流程。关于Loop算子,最终会将循环展开成独立的子图,并且通过“Scan”节点来执行每个循环体。在自定义Loop算子时,用户需要实现两个函数:scan_loop_state和loop_body。前者是根据循环的状态信息来计算所有元素的初始状态;后者则指定了单独的句柄函数,并且可以实现循环体内的操作。

  然后,根据循环展开成独立子图的特性,自定义Loop算子也需要在展开的子图中设置对应的计算流程。可以参考ONNX opset13提供的Loop算子,在子图中通过“If”节点、广播广告机、Gather或者Scatter等节点进行流程控制和数据操作。

u=3318190119,2022363773&fm=253&fmt=auto&app=120&f=JPEG.jpg

  最后,需要注意的是,ONNX opset13 中提供的 Loop 算子仅支持常规 RNN 类型的循环网络,因此,在自定义 Loop 算子时存在多种情况下需要对原 Loop 算子进行扩展。同时,由于神经网络模型的复杂性,自定义 Loop 算子是一项高难度的工作,需要开发者有较为深厚的扫描抽象表达、高性能计算和实际应用场景等多方面知识技能。


阿里云优惠券领取
腾讯云优惠券领取
QQ在线咨询
售前咨询热线
133-2199-9693
售后咨询热线
4000-747-360

微信扫一扫

加客服咨询