ops.md 4.3 KB
Newer Older
1
# ops模块
T
Ting Wang 已提交
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

<!-- TOC -->

- [ops模块](#ops模块)
    - [mindspore.ops.operations](#mindsporeopsoperations)
    - [mindspore.ops.functional](#mindsporeopsfunctional)
    - [mindspore.ops.composite](#mindsporeopscomposite)

<!-- /TOC -->

<a href="https://gitee.com/mindspore/docs/blob/master/api/source_zh_cn/programming_guide/ops.md" target="_blank"><img src="../_static/logo_source.png"></a>

MindSpore的ops模块主要存放算子相关接口,同时包含算子的校验和正反向关联的逻辑。

ops主要包括operations、functional和composite,可通过ops直接获取到这三类算子。  
- operations提供单个的Primtive算子。一个算子对应一个原语,是最小的执行对象,需要实例化之后使用。
- composite提供一些预定义的组合算子,以及复杂的涉及图变换的算子,如`GradOperation`
- functional提供operations和composite实例化后的对象,简化算子的调用流程。

## mindspore.ops.operations

23
operations提供了所有的Primitive算子接口,是开放给用户的最低阶算子接口。算子支持情况可查询[算子支持列表](https://www.mindspore.cn/docs/zh-CN/master/operator_list.html#mindspore-ops-operations)
T
Ting Wang 已提交
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

Primitive算子也称为算子原语,它直接封装了底层的Ascend、GPU、AICPU、CPU等多种算子的具体实现,为用户提供基础算子能力。

Primitive算子接口是构建高阶接口、自动微分、网络模型等能力的基础。

代码样例如下:
```python
import numpy as np
import mindspore
from mindspore import Tensor
import mindspore.ops.operations as P

input_x = mindspore.Tensor(np.array([1.0, 2.0, 4.0]), mindspore.float32)
input_y = 3.0
pow = P.Pow()
output = pow(input_x, input_y)
L
lvmingfu 已提交
40
print("output =", output)
T
Ting Wang 已提交
41 42 43 44 45 46 47 48 49
```

输出如下:
```
output = [ 1.  8. 64.]
```

## mindspore.ops.functional

50
为了简化没有属性的算子的调用流程,MindSpore提供了一些算子的functional版本。入参要求参考原算子的输入输出要求。算子支持情况可以查询[算子支持列表](https://www.mindspore.cn/docs/zh-CN/master/operator_list.html#mindspore-ops-functional)
T
Ting Wang 已提交
51 52 53 54 55 56 57 58 59 60 61 62 63 64

例如`P.Pow`算子,我们提供了functional版本的`F.tensor_pow`算子。

使用functional的代码样例如下:

```python
import numpy as np
import mindspore
from mindspore import Tensor
from mindspore.ops import functional as F

input_x = mindspore.Tensor(np.array([1.0, 2.0, 4.0]), mindspore.float32)
input_y = 3.0
output = F.tensor_pow(input_x, input_y)
L
lvmingfu 已提交
65
print("output =", output)
T
Ting Wang 已提交
66 67 68 69 70 71 72 73 74 75 76 77 78
```

输出如下:
```
output = [ 1.  8. 64.]
```

## mindspore.ops.composite

composite提供了一些算子的组合,包括clip_by_value和random相关的一些算子,以及涉及图变换的函数(`GradOperation``HyperMap``Map`等)。

算子的组合可以直接像一般函数一样使用,例如使用`normal`生成一个随机分布:
```python
L
lvmingfu 已提交
79 80 81 82
from mindspore.common import dtype as mstype
from mindspore.ops import composite as C
from mindspore import Tensor

T
Ting Wang 已提交
83 84
mean = Tensor(1.0, mstype.float32)
stddev = Tensor(1.0, mstype.float32)
L
lvmingfu 已提交
85 86 87 88 89 90 91
output = C.normal((2, 3), mean, stddev, seed=5)
print("ouput =", output)
```
输出如下:
```
output = [[2.4911082  0.7941146  1.3117087]
 [0.30582333  1.772938  1.525996]]
T
Ting Wang 已提交
92 93
```

L
lvmingfu 已提交
94 95
> 以上代码运行于MindSpore的GPU版本。

T
Ting Wang 已提交
96 97 98 99
针对涉及图变换的函数,用户可以使用`MultitypeFuncGraph`定义一组重载的函数,根据不同类型,走到不同实现。

代码样例如下:
```python
L
lvmingfu 已提交
100 101 102 103 104
import numpy as np
from mindspore.ops.composite import MultitypeFuncGraph
from mindspore import Tensor
from mindspore.ops import functional as F

T
Ting Wang 已提交
105 106
add = MultitypeFuncGraph('add')
@add.register("Number", "Number")
L
lvmingfu 已提交
107 108
def add_scalar(x, y):
    return F.scalar_add(x, y)
T
Ting Wang 已提交
109 110 111

@add.register("Tensor", "Tensor")
def add_tensor(x, y):
L
lvmingfu 已提交
112
    return F.tensor_add(x, y)
T
Ting Wang 已提交
113 114 115

tensor1 = Tensor(np.array([[1.2, 2.1], [2.2, 3.2]]).astype('float32'))
tensor2 = Tensor(np.array([[1.2, 2.1], [2.2, 3.2]]).astype('float32'))
L
lvmingfu 已提交
116 117
print('tensor', add(tensor1, tensor2))
print('scalar', add(1, 2))
T
Ting Wang 已提交
118 119 120
```
输出如下:
```
L
lvmingfu 已提交
121 122 123
tensor [[2.4, 4.2] 
 [4.4, 6.4]]
scalar 3
T
Ting Wang 已提交
124 125
```

126
此外,高阶函数`GradOperation`提供了根据输入的函数,求这个函数对应的梯度函数的方式,详细可以参阅[API文档](https://www.mindspore.cn/api/zh-CN/master/api/python/mindspore/mindspore.ops.composite.html#mindspore.ops.composite.GradOperation)