【MindSpore第七期两日集群营】使用pyfunc方式开发自定义算子

举报
张辉 发表于 2022/09/21 09:12:46 2022/09/21
【摘要】 MindSpore第七期两日集群营

首先看视频:https://www.bilibili.com/video/BV1nW4y1b7HP/

学习下我们为啥要定义自定义算子:

cke_9231.png

我们希望自定义算子达到什么目标:

cke_15516.png

MindSpore自定义算子的接口是Custom

cke_16672.png

它支持六种定义自定义算子的方式(茴香豆的茴字有六种写法。。。)

pyfunc方式的具体写法如下:

cke_21500.png

参数含义:

cke_22530.png

cke_23375.png

cke_23918.png

理论知识差不多了,下面开始实操:

创建一个training的目录,下面编辑一个python文件:


import numpy as np
import mindspore as ms
from mindspore import ops
from mindspore.ops import ms_kernel
from mindspore.nn import Cell
import math

ms.set_context(mode=ms.GRAPH_MODE,device_target="CPU")

def custom_sin(x):
    return math.sin(x)

def infer_shape(x):
    return x

def infer_dtype(x):
    return x

class Net(Cell):
    def __init__(self):
        super(Net, self).__init__()

        self.cus_sin = ops.Custom(func = custom_sin,
                out_shape = infer_shape,
                out_dtype = infer_dtype,
                func_type="pyfunc")


    def construct(self,x):
        x = self.cus_sin(x)

        return x

x = np.array([30,60,90]).astype(np.float32)
out = Net()(ms.Tensor(x))
print (out)

执行下看看:

cke_31675.png

好像不能用math中的函数,那就换成numpy的看看:


def custom_sin(x):
    return np.sin(x)

重新执行:

cke_54641.png

好像可以了。

但是sin算的对不对呢?

找个计算器看看:

sin(30)

cke_72497.png

sin(60)

cke_72782.png

sin(90)

cke_75614.png

貌似是对的。。

不过我好像原意是要算sin30度,sin60度,sin90度的。。

sin30度应该写成Sin(pi/6)。那我们来试一下吧:


x = np.array([np.pi/6,np.pi/3,np.pi/2]).astype(np.float32)

这就是分别是sin30度,sin60度,sin90度的表示方法,计算下看看:

cke_3502.png

sin30度和sin90度都没问题,sin60度要看一下:

cke_7744.png

好像也是对的。

那这块就算成功了。。

(全文完,谢谢阅读)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。