检视问题一览2修改 (#235)

This commit is contained in:
longvoyage
2022-04-02 10:14:13 +08:00
committed by GitHub
parent 7f18af395f
commit bdc9fc278b
3 changed files with 8 additions and 6 deletions

View File

@@ -40,7 +40,8 @@ Binding。在Pybind11出现以前将C和C++函数进行Python绑定的手
- 算子属性:构造函数\_\_init\_\_中初始化属性因加法没有属性因此\_\_init\_\_不需要额外输入。
- 算子输入输出及合法性校验infer_shape方法中约束两个输入维度必须相同输出的维度和输入维度相同。infer_dtype方法中约束两个输入数据必须是float32类型输出的数据类型和输入数据类型相同。
算子输出
- 算子输出
MindSpore中实现注册TensorAdd代码如下
```python

View File

@@ -3,7 +3,7 @@
机器学习系统编程模型的首要设计目标是:对开发者的整个工作流进行完整的编程支持。一个常见的机器学习任务一般包含如 :numref:`img_workflow`所示的流程。这个工作流完成了训练数据集的读取模型的训练测试和调试。通过归纳我们可以将这一工作流中用户所需要自定义的部分通过定义以下API来支持我们这里假设用户的高层次API以Python函数的形式提供
- **数据处理:**
首先用户需要数据处理API来支持将数据集从磁盘读入。进一步用户需要对读取数据进行数据预处理,从而可以将数据输入后续的机器学习模型中。
首先用户需要数据处理API来支持将数据集从磁盘读入。进一步用户需要对读取数据进行预处理,从而可以将数据输入后续的机器学习模型中。
- **模型结构:**
完成数据的读取后用户需要模型定义API来定义机器学习模型。这些模型带有模型参数可以对给定的数据进行推理。
@@ -43,7 +43,7 @@ AI处理器上则--device_target选择Ascend代码运行在CPU、GPU同理
### 数据处理
配置好运行信息后首先讨论数据处理API的设计。这些API提供了大量Python函数支持用户用一行命令即可读入常见的训练数据集如MNISTCIFARCOCO等
在加载之前需要下载数据集存放在./datasets/MNIST_Data路径中MindSpore提供了用于数据处理的API模块
在加载之前需要下载数据集存放在./datasets/MNIST_Data路径中MindSpore提供了用于数据处理的API模块
mindspore.dataset用于存储样本和标签。在加载数据集前通常会对数据集进行一些处理mindspore.dataset也集成了常见的数据处理方法。
以下代码读取了MNIST的数据是大小为$28 \times 28$的图片返回DataSet对象。
@@ -125,7 +125,7 @@ net = MLPNet()
**SGD**的更新是对每个样本进行梯度下降因此计算速度很快但是单样本更新频繁会造成震荡为了解决震荡问题提出了带有Momentum的SGD该方法的参数更新不仅仅由梯度决定也和累计的梯度下降方向有关使得增加更新梯度下降方向不变的维度减少更新梯度下降方向改变的维度从而速度更快也减少震荡。
自适应学习率**AdaGrad**是通过以往的梯度自适应更新学习率不同的参数$W_i$具有不同的学习率。AdaGrad对频繁变化的参数以更小的步长更新而稀疏的参数以更大的步长更新。因此对稀疏的数据表现比较好。**Adadelta**是对AdaGrad的改进解决了AdaGrad优化过程中学习率$\alpha$单调减少问题Adadelta不对过去的梯度平方进行累加用指数平均的方法计算二阶动量避免了二阶动量持续累积导致训练提前结束。**Adam**可以理解为Adadelta和Momentum的结合对一阶二阶动量均采用指数平均的方法计算。
自适应学习率**AdaGrad**是通过以往的梯度自适应更新学习率不同的参数$W_i$具有不同的学习率。AdaGrad对频繁变化的参数以更小的步长更新而稀疏的参数以更大的步长更新。因此对稀疏的数据表现比较好。**Adadelta**是对AdaGrad的改进解决了AdaGrad优化过程中学习率$\alpha$单调减少问题Adadelta不对过去的梯度平方进行累加用指数平均的方法计算二阶动量避免了二阶动量持续累积导致训练提前结束。**Adam**可以理解为Adadelta和Momentum的结合对一阶二阶动量均采用指数平均的方法计算。
MindSpore提供了丰富的API来让用户导入损失函数和优化器。在下面的例子中计算了输入和真实值之间的softmax交叉熵损失导入Momentum优化器。
```python

View File

@@ -119,7 +119,7 @@ Cell和Module是模型抽象方法也是所有网络的基类。
:width:`800px`
:label:`cell_abs`
神经网络接口层基类实现,仅做了简化的描述,在实际实现时,执行计算的\_\_call\_\_方法并不会让用户直接重载它往往在\_\_call\_\_之外定义一个执行操作的方法对于神经网络模型该方法是实现网络结构的连接对于神经网络层则是实现计算过程然后在\_\_call\_\_调用如MindSpore的Cell因为动态图和静态图的执行是不一样的因此在\_\_call\_\_里定义动态图和计算图的计算执行在construct方法里定义层或者模型的操作过程。
神经网络接口层基类实现,仅做了简化的描述,在实际实现时,执行计算的\_\_call\_\_方法并不会让用户直接重载它往往在\_\_call\_\_之外定义一个执行操作的方法对于神经网络模型该方法是实现网络结构的连接对于神经网络层则是实现计算过程\_\_call\_\_调用如MindSpore的Cell因为动态图和静态图的执行是不一样的因此在\_\_call\_\_里定义动态图和计算图的计算执行在construct方法里定义层或者模型的操作过程。
### 自定义神经网络层
@@ -146,7 +146,8 @@ class Conv2D(Cell):
```
有了上述定义在使用卷积层时,就不需要创建训练变量了。
如我们需要对$30 \times 30$大小10个通道的输入使用$3 \times 3$的卷积核做卷积卷积后输出通道为20调用方式如下:
如我们需要对$30 \times 30$大小10个通道的输入使用$3 \times 3$的卷积核做卷积卷积后输出通道为20
调用方式如下:
```python
conv = Conv2D(in_channel=10, out_channel=20, filter_size=3, stride=2, padding=0)
output = conv(input)