提交 1a32c638 编写于 作者: T Ting Wang

add ops and nn

Signed-off-by: NTing Wang <kathy.wangting@huawei.com>
上级 544adcd2
# nn模块
<a href="https://gitee.com/mindspore/docs/blob/master/api/source_zh_cn/programming_guide/nn.md" target="_blank"><img src="../_static/logo_source.png"></a>
MindSpore的nn模块是Python实现的模型组件,是对低阶API的封装,主要包括各种模型层、损失函数、优化器等。
同时nn也提供了部分与Primitive算子同名的接口,主要作用是对Primitive算子进行进一步封装,为用户提供更友好的API。
代码样例如下:
```python
import numpy as np
from mindspore.common.tensor import Tensor
import mindspore.nn as nn
import mindspore
net = nn.PSNR()
img1 = Tensor(np.random.random((1,3,16,16)), mindspore.float32)
img2 = Tensor(np.random.random((1,3,16,16)), mindspore.float32)
output = net(img1, img2)
print("output = ", output)
```
输出如下:
```
output = [7.6338434]
```
各种模型层、损失函数、优化器等代码样例正在完善中。
# ops模块
<!-- 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
operations提供了所有的Primitive算子接口,是开放给用户的最低阶算子接口。
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)
print("output = ", output)
```
输出如下:
```
output = [ 1. 8. 64.]
```
## mindspore.ops.functional
为了简化没有属性的算子的调用流程,MindSpore提供了一些算子的functional版本。入参要求参考原算子的输入输出要求。算子支持情况可以查询[算子支持列表](https://www.mindspore.cn/docs/zh-CN/master/operator_list.html#mindspore-ops-operations)
例如`P.Pow`算子,我们提供了functional版本的`F.tensor_pow`算子。
使用operations的代码样例如下:
```python
import numpy as np
import mindspore
from mindspore import Tensor
from mindspore.ops import 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)
print("output = ", output)
```
使用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)
print("output = ", output)
```
输出如下:
```
output = [ 1. 8. 64.]
```
## mindspore.ops.composite
composite提供了一些算子的组合,包括clip_by_value和random相关的一些算子,以及涉及图变换的函数(`GradOperation``HyperMap``Map`等)。
算子的组合可以直接像一般函数一样使用,例如使用`normal`生成一个随机分布:
```python
mean = Tensor(1.0, mstype.float32)
stddev = Tensor(1.0, mstype.float32)
output = C.normal((4, 16), mean, stddev, seed=5)
```
针对涉及图变换的函数,用户可以使用`MultitypeFuncGraph`定义一组重载的函数,根据不同类型,走到不同实现。
代码样例如下:
```python
add = MultitypeFuncGraph('add')
@add.register("Number", "Number")
def add_scala(x, y):
return scala_add(x, y)
@add.register("Tensor", "Tensor")
def add_tensor(x, y):
return tensor_add(x, y)
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'))
print('tensor', mainf(tensor1, tensor2))
print('scale', mainf(1, 2))
```
输出如下:
```
tensor [[2.4, 4.2], [4.4, 6.4]]
scale 3
```
此外,高阶函数`GradOperation`提供了根据输入的函数,求这个函数对应的求梯度的函数的方式,详细可以参阅[API文档](https://www.mindspore.cn/api/zh-CN/master/api/python/mindspore/mindspore.ops.composite.html#mindspore.ops.composite.GradOperation)
\ No newline at end of file
...@@ -7,7 +7,11 @@ ...@@ -7,7 +7,11 @@
- [Operator List](#operator-list) - [Operator List](#operator-list)
- [mindspore.nn](#mindsporenn) - [mindspore.nn](#mindsporenn)
- [mindspore.ops.operations](#mindsporeopsoperations) - [mindspore.ops.operations](#mindsporeopsoperations)
- [mindspore.ops.functional](#mindsporeopsfunctional)
- [Implicit Type Conversion](#implicit-type-conversion) - [Implicit Type Conversion](#implicit-type-conversion)
- [conversion rules](#conversion-rules)
- [data types involved in conversion](#data-types-involved-in-conversion)
- [support ops](#support-ops)
<!-- /TOC --> <!-- /TOC -->
...@@ -158,7 +162,7 @@ ...@@ -158,7 +162,7 @@
| [mindspore.ops.operations.ROIAlign](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.ROIAlign) | Supported | Supported | Doing | nn_ops | [mindspore.ops.operations.ROIAlign](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.ROIAlign) | Supported | Supported | Doing | nn_ops
| [mindspore.ops.operations.Adam](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Adam) | Supported | Supported | Doing | nn_ops | [mindspore.ops.operations.Adam](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Adam) | Supported | Supported | Doing | nn_ops
| [mindspore.ops.operations.BinaryCrossEntropy](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.BinaryCrossEntropy) | Supported | Supported | Doing | nn_ops | [mindspore.ops.operations.BinaryCrossEntropy](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.BinaryCrossEntropy) | Supported | Supported | Doing | nn_ops
| [mindspore.ops.operations.KLDivLoss](https://www.mindspore.cn/api/zh-CN/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.KLDivLoss) | Doing | Supported | Doing | nn_ops | [mindspore.ops.operations.KLDivLoss](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.KLDivLoss) | Doing | Supported | Doing | nn_ops
| [mindspore.ops.operations.LARSUpdate](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.LARSUpdate) | Supported | Doing | Doing | nn_ops | [mindspore.ops.operations.LARSUpdate](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.LARSUpdate) | Supported | Doing | Doing | nn_ops
| [mindspore.ops.operations.Softsign](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Softsign) | Supported | Doing | Doing | nn_ops | [mindspore.ops.operations.Softsign](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Softsign) | Supported | Doing | Doing | nn_ops
| [mindspore.ops.operations.TensorAdd](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.TensorAdd) | Supported | Supported | Supported | math_ops | [mindspore.ops.operations.TensorAdd](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.TensorAdd) | Supported | Supported | Supported | math_ops
...@@ -339,6 +343,42 @@ ...@@ -339,6 +343,42 @@
| [mindspore.ops.operations.Xdivy](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Xdivy) | Supported | Doing | Doing | math_ops | [mindspore.ops.operations.Xdivy](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Xdivy) | Supported | Doing | Doing | math_ops
| [mindspore.ops.operations.Xlogy](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Xlogy) | Supported | Doing | Doing | math_ops | [mindspore.ops.operations.Xlogy](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Xlogy) | Supported | Doing | Doing | math_ops
## mindspore.ops.functional
| Operation | functional Operation
| :----------- | :-----------
| [mindspore.ops.operations.Pack](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Pack) | pack
| [mindspore.ops.operations.TensorAdd](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.TensorAdd) | tensor_add
| [mindspore.ops.operations.AssignSub](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.AssignSub) | assign_sub
| [mindspore.ops.operations.AddN](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.AddN) | addn
| [mindspore.ops.operations.Square](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Square) | square
| [mindspore.ops.operations.Sqrt](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Sqrt) | sqrt
| [mindspore.ops.operations.Equal](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Equal) | equal
| [mindspore.ops.operations.NotEqual](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.NotEqual) | not_equal
| [mindspore.ops.operations.LogicalNot](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.LogicalNot) | logical_not
| [mindspore.ops.operations.LogicalAnd](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.LogicalAnd) | logical_and
| [mindspore.ops.operations.LogicalOr](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.LogicalOr) | logical_or
| [mindspore.ops.operations.ExpandDims](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.ExpandDims) | expand_dims
| [mindspore.ops.operations.DType](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.DType) | dtype
| [mindspore.ops.operations.Cast](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Cast) | cast
| [mindspore.ops.operations.Reshape](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Reshape) | reshape
| [mindspore.ops.operations.Shape](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Shape) | shape
| [mindspore.ops.operations.GatherV2](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.GatherV2) | gather
| [mindspore.ops.operations.Rank](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Rank) | rank
| [mindspore.ops.operations.Size](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Size) | size
| [mindspore.ops.operations.Fill](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Fill) | fill
| [mindspore.ops.operations.OnesLike](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.OnesLike) | ones_like
| [mindspore.ops.operations.Tile](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Tile) | tile
| [mindspore.ops.operations.Select](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Select) | select
| [mindspore.ops.operations.ScatterNd](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.ScatterNd) | scatter_nd
| [mindspore.ops.operations.GatherNd](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.GatherNd) | gather_nd
| [mindspore.ops.operations.ControlDepend](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.ControlDepend) | control_depend
| [mindspore.ops.operations.Print](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Print) | print
| [mindspore.ops.operations.Assign](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Assign) | assign
| [mindspore.ops.operations.Pow](https://www.mindspore.cn/api/en/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Pow) | tensor_pow
> At present, functional supports some operators without attributes, which will be further completed in the future.
## Implicit Type Conversion ## Implicit Type Conversion
### conversion rules ### conversion rules
* Scalar and Tensor operations: during operation, the scalar is automatically converted to Tensor, and the data type is consistent with the Tensor data type involved in the operation; * Scalar and Tensor operations: during operation, the scalar is automatically converted to Tensor, and the data type is consistent with the Tensor data type involved in the operation;
......
...@@ -5,14 +5,13 @@ ...@@ -5,14 +5,13 @@
<!-- TOC --> <!-- TOC -->
- [算子支持](#算子支持) - [算子支持](#算子支持)
- [mindspore.nn](#mindsporenn) - [mindspore.nn](#mindsporenn)
- [mindspore.ops.operations](#mindsporeopsoperations) - [mindspore.ops.operations](#mindsporeopsoperations)
- [functional 算子](#functional-算子) - [mindspore.ops.functional](#mindsporeopsfunctional)
- [functional算子列表](#functional算子列表) - [隐式类型转换](#隐式类型转换)
- [隐式类型转换](#隐式类型转换) - [转换规则](#转换规则)
- [转换规则](#转换规则) - [参与转换的数据类型](#参与转换的数据类型)
- [参与转换的数据类型](#参与转换的数据类型) - [支持算子](#支持算子)
- [支持算子](#支持算子)
<!-- /TOC --> <!-- /TOC -->
...@@ -344,31 +343,7 @@ ...@@ -344,31 +343,7 @@
| [mindspore.ops.operations.Xdivy](https://www.mindspore.cn/api/zh-CN/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Xdivy) | Supported | Doing | Doing | math_ops | [mindspore.ops.operations.Xdivy](https://www.mindspore.cn/api/zh-CN/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Xdivy) | Supported | Doing | Doing | math_ops
| [mindspore.ops.operations.Xlogy](https://www.mindspore.cn/api/zh-CN/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Xlogy) | Supported | Doing | Doing | math_ops | [mindspore.ops.operations.Xlogy](https://www.mindspore.cn/api/zh-CN/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Xlogy) | Supported | Doing | Doing | math_ops
## functional 算子 ## mindspore.ops.functional
为了简化没有属性的算子的调用流程,我们提供了一些算子的functional版本。入参要求参考原算子的输入输出要求。算子本身支持情况可以查询算子支持情况[mindspore.ops.operations](#mindsporeopsoperations)
例如`P.Pow`算子,我们提供了functional版本的`F.pow`算子。可以直接使用
```python
import mindspore
from mindspore.ops import operations as P
input_x = mindspore.Tensor(np.array([1.0, 2.0, 4.0]), mindspore.float32)
input_y = 3.0
pow = P.Pow()
pow(input_x, input_y)
```
->
```python
from mindspore.ops import functional as F
F.pow(input_x, input_y)
```
### functional算子列表
当前functional支持了一部分没有属性的算子,后续会进一步补齐完整。
| 操作名 | 对应functional算子 | 操作名 | 对应functional算子
| :----------- | :----------- | :----------- | :-----------
...@@ -400,6 +375,9 @@ F.pow(input_x, input_y) ...@@ -400,6 +375,9 @@ F.pow(input_x, input_y)
| [mindspore.ops.operations.ControlDepend](https://www.mindspore.cn/api/zh-CN/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.ControlDepend) | control_depend | [mindspore.ops.operations.ControlDepend](https://www.mindspore.cn/api/zh-CN/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.ControlDepend) | control_depend
| [mindspore.ops.operations.Print](https://www.mindspore.cn/api/zh-CN/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Print) | print | [mindspore.ops.operations.Print](https://www.mindspore.cn/api/zh-CN/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Print) | print
| [mindspore.ops.operations.Assign](https://www.mindspore.cn/api/zh-CN/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Assign) | assign | [mindspore.ops.operations.Assign](https://www.mindspore.cn/api/zh-CN/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Assign) | assign
| [mindspore.ops.operations.Pow](https://www.mindspore.cn/api/zh-CN/master/api/python/mindspore/mindspore.ops.operations.html#mindspore.ops.operations.Pow) | tensor_pow
> 当前functional支持了一部分没有属性的算子,后续会进一步补齐完整。
## 隐式类型转换 ## 隐式类型转换
### 转换规则 ### 转换规则
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册