【MindSpore第七期两日集群营】使用pyfunc方式开发自定义算子
【摘要】 MindSpore第七期两日集群营
首先看视频:https://www.bilibili.com/video/BV1nW4y1b7HP/
学习下我们为啥要定义自定义算子:
我们希望自定义算子达到什么目标:
MindSpore自定义算子的接口是Custom
它支持六种定义自定义算子的方式(茴香豆的茴字有六种写法。。。)
pyfunc方式的具体写法如下:
参数含义:
理论知识差不多了,下面开始实操:
创建一个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)
执行下看看:
好像不能用math中的函数,那就换成numpy的看看:
def custom_sin(x):
return np.sin(x)
重新执行:
好像可以了。
但是sin算的对不对呢?
找个计算器看看:
sin(30)
sin(60)
sin(90)
貌似是对的。。
不过我好像原意是要算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度的表示方法,计算下看看:
sin30度和sin90度都没问题,sin60度要看一下:
好像也是对的。
那这块就算成功了。。
(全文完,谢谢阅读)
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)