Update index

This commit is contained in:
Eric_lai
2022-01-21 10:17:49 +08:00
parent 5e628c33aa
commit 9ed4413e36
6 changed files with 11 additions and 53 deletions

View File

@@ -1,20 +0,0 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="PyInterpreterInspection" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ignoredPackages">
<value>
<list size="6">
<item index="0" class="java.lang.String" itemvalue="numpy" />
<item index="1" class="java.lang.String" itemvalue="tensorflow" />
<item index="2" class="java.lang.String" itemvalue="opencv-python" />
<item index="3" class="java.lang.String" itemvalue="cython" />
<item index="4" class="java.lang.String" itemvalue="tensorlayer" />
<item index="5" class="java.lang.String" itemvalue="pycocotools" />
</list>
</value>
</option>
</inspection_tool>
</profile>
</component>

View File

@@ -1,6 +0,0 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

8
.idea/modules.xml generated
View File

@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/openmlsys-zh.iml" filepath="$PROJECT_DIR$/.idea/openmlsys-zh.iml" />
</modules>
</component>
</project>

View File

@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@@ -43,7 +43,7 @@ API从而可以快速导入已有的模型
## 机器学习工作流
机器学习系统编程模型的首要设计目标是:对开发者的整个工作流进行完整的编程支持。一个常见的机器学习任务一般包含如图numref:`img_workflow`所示的流程。这个工作流完成了训练数据集的读取模型的训练测试和调试。通过归纳我们可以将这一工作流中用户所需要自定义的部分通过定义以下API来支持我们这里假设用户的高层次API以Python函数的形式提供
机器学习系统编程模型的首要设计目标是:对开发者的整个工作流进行完整的编程支持。一个常见的机器学习任务一般包含如图:numref:`img_workflow`所示的流程。这个工作流完成了训练数据集的读取模型的训练测试和调试。通过归纳我们可以将这一工作流中用户所需要自定义的部分通过定义以下API来支持我们这里假设用户的高层次API以Python函数的形式提供
- **数据处理:**
首先用户需要数据处理API来支持将数据集从磁盘读入。进一步用户需要对读取数据进行数据预处理从而可以将数据输入后续的机器学习模型中。
@@ -246,20 +246,20 @@ output = model.predict(Tensor(data['image']))
神经网络层包含构建机器学习网络结构的基本组件,如计算机视觉领域常用到卷积(Convolution)、池化(Pooling)、全连接(Fully Connected);自然语言处理常用到循环神经网络(Recurrent Neural NetworkRNN)为了加速训练防止过拟合通常用到批标准化BatchNorm、Dropout等。
**全连接**是将当前层每个节点都和上一层节点一一连接,本质上是特征空间的线性变换;可以将数据从高维映射到低维,也能从低维映射到高维度。
图numref:`fc_layer`展示了全连接的过程对输入的n个数据变换到另一个大小为m的特征空间再从大小为m的特征空间变换到大小为p的特征空间可见全连接层的参数量巨大两次变换所需的参数大小为$n \times m$和$m \times p$。
:numref:`fc_layer`展示了全连接的过程对输入的n个数据变换到另一个大小为m的特征空间再从大小为m的特征空间变换到大小为p的特征空间可见全连接层的参数量巨大两次变换所需的参数大小为$n \times m$和$m \times p$。
![全连接层](../img/ch02/fc_layer_1.png)
:width:`400px`
:label:`fc_layer`
**卷积**操作是卷积神经网络中常用的操作之一卷积相当于对输入进行滑动滤波。根据卷积核Kernel、卷积步长Stride、填充Padding对输入数据从左到右从上到下进行滑动每一次滑动操作是矩阵的乘加运算得到的加权值。
如图numref:`conv_comp`卷积操作主要由输入、卷积核、输出组成输出又被称为特征图Feature Map
如图:numref:`conv_comp`卷积操作主要由输入、卷积核、输出组成输出又被称为特征图Feature Map
![卷积操作的组成](../img/ch02/conv_component.png)
:width:`400px`
:label:`conv_comp`
卷积的具体运算过程我们通过图numref:`single_conv`进行演示。该图输入为$4 \times 4$的矩阵,卷积核大小为$3 \times 3$卷积步长为1不填充最终得到的$2 \times 2$的输出矩阵。
卷积的具体运算过程我们通过图:numref:`single_conv`进行演示。该图输入为$4 \times 4$的矩阵,卷积核大小为$3 \times 3$卷积步长为1不填充最终得到的$2 \times 2$的输出矩阵。
计算过程为将$3 \times 3$的卷积核作用到左上角$3 \times 3$大小的输入图上;输出为$1 \times 1 + 2 \times 0 + 2 \times 1 + 3 \times 0 + 2 \times 1 + 3 \times 0 + 4 \times 1 + 1 \times 0 + 3 \ times 1 = 12$,
同理对卷积核移动1个步长再次执行相同的计算步骤得到第二个输出为11当再次移动将出界时结束从左往右执行从上往下移动1步再进行从左往右移动依次操作直到从上往下再移动也出界时结束整个卷积过程得到输出结果。我们不难发现相比于全连接卷积的优势是参数共享同一个卷积核遍历整个输入图和参数量小卷积核大小即是参数量
@@ -270,21 +270,21 @@ output = model.predict(Tensor(data['image']))
在卷积过程中如果我们需要对输出矩阵大小进行控制那么就需要对步长和填充进行设置。还是上面的输入图如需要得到和输入矩阵大小一样的输出矩阵步长为1时就需要对上下左右均填充一圈全为0的数。
在上述例子中我们介绍了一个输入一个卷积核的卷积操作。通常情况下我们输入的是彩色图片有三个输入这三个输入称为通道Channel分别代表红、绿、蓝RGB。此时我们执行卷积则为多通道卷积需要三个卷积核分别对RGB三个通道进行上述卷积过程之后将结果加起来。
具体如图numref:`channels_conv`描述了一个输入通道为3输出通道为1卷积核大小为$3 \times 3$卷积步长为1的多通道卷积过程需要注意的是每个通道都有各自的卷积核同一个通道的卷积核参数共享。如果输出通道为$out_c$,输入通道为$in_c$,那么需要$out_c$$\times$$in_c$个卷积核。
具体如图:numref:`channels_conv`描述了一个输入通道为3输出通道为1卷积核大小为$3 \times 3$卷积步长为1的多通道卷积过程需要注意的是每个通道都有各自的卷积核同一个通道的卷积核参数共享。如果输出通道为$out_c$,输入通道为$in_c$,那么需要$out_c$$\times$$in_c$个卷积核。
![多通道卷积](../img/ch02/channels_conv.png)
:width:`400px`
:label:`channels_conv`
**池化**是常见的降维操作有最大池化和平均池化。池化操作和卷积的执行类似通过池化核、步长、填充决定输出最大池化是在池化核区域范围内取最大值平均池化则是在池化核范围内做平均。与卷积不同的是池化核没有训练参数池化层的填充方式也有所不同平均池化填充的是0最大池化填充的是$-inf$。
图numref:`pooling`是对$4 \times 4$的输入进行$2 \times 2$区域池化步长为2不填充图左边是最大池化的结果右边是平均池化的结果。
:numref:`pooling`是对$4 \times 4$的输入进行$2 \times 2$区域池化步长为2不填充图左边是最大池化的结果右边是平均池化的结果。
![池化操作](../img/ch02/pooling.png)
:width:`400px`
:label:`pooling`
有了卷积、池化、全连接组件就可以构建一个非常简单的卷积神经网络了图numref:`nn_network`展示了一个卷积神经网络的模型结构。
给定输入$3 \times 64 \times 64$的彩色图片使用16个$3 \times 3$3大小的卷积核做卷积,得到大小为$16 \times 64 \times 64$
有了卷积、池化、全连接组件就可以构建一个非常简单的卷积神经网络了,图:numref:`nn_network`展示了一个卷积神经网络的模型结构。
给定输入$3 \times 64 \times 64$的彩色图片使用16个$3 \times 3$大小的卷积核做卷积,得到大小为$16 \times 64 \times 64$
再进行池化操作降维,得到大小为$16 \times 32 \times 32$的特征图;
对特征图再卷积得到大小为$32 \times 32 \times 32$特征图,再进行池化操作得到$3 \times 16 \times 16$大小的特征图;
我们需要对特征图做全连接此时需要把特征图平铺成一维向量这部操作称为Flatten压平后输入特征大小为$3\times 16 \times 16 = 768$
@@ -339,7 +339,7 @@ Transformer又是BERT模型架构的重要组成。随着深度神经网络的
如MindSpore提供的mindspore.nn.Cell、mindspore.nn.Conv2d、mindspore.dataset
PyTorch提供的torch.nn.Module、torch.nn.Conv2d、torch.utils.data.Datset。
图numref:`model_build`描述了神经网络构建过程中的基本细节。
:numref:`model_build`描述了神经网络构建过程中的基本细节。
神经网络层需要的功能有该层的训练参数(变量,包括初始化方法和训练状态)以及计算过程;
神经网络模型需要的功能是对神经网络层管理和神经网络层参数的管理。
在机器学习编程库中承担此功能有MindSpore的Cell、PyTorch的Module。
@@ -352,7 +352,7 @@ Cell和Module是模型抽象方法也是所有网络的基类。
:width:`400px`
:label:`model_build`
图numref:`cell_abs`展示了设计神经网络层抽象方法的通用表示。通常在构造器会选择使用Python中collections模块的OrderedDict来初始化神经网络层和神经网络层参数的存储它的输出是一个有序的相比与Dict更适合深度学习这种模型堆叠的模式。参数和神经网络层的管理是在\_\_setattr\_\_中实现的当检测到属性是属于神经网络层及神经网络层参数时就记录起来。神经网络模型比较重要的是计算连接过程可以在\_\_call\_\_里重载实现神经网络层时在这里定义计算过程。训练参数的返回接口是为了给优化器传所有训练参数。神经网络层返回为了遍历各层神经网络得到各个神经网络层的参数。这里只列出了一些重要的方法在自定义方法中通常需要实现参数插入删除方法、神经网络层插入删除、神经网络模型信息等。
:numref:`cell_abs`展示了设计神经网络层抽象方法的通用表示。通常在构造器会选择使用Python中collections模块的OrderedDict来初始化神经网络层和神经网络层参数的存储它的输出是一个有序的相比与Dict更适合深度学习这种模型堆叠的模式。参数和神经网络层的管理是在\_\_setattr\_\_中实现的当检测到属性是属于神经网络层及神经网络层参数时就记录起来。神经网络模型比较重要的是计算连接过程可以在\_\_call\_\_里重载实现神经网络层时在这里定义计算过程。训练参数的返回接口是为了给优化器传所有训练参数。神经网络层返回为了遍历各层神经网络得到各个神经网络层的参数。这里只列出了一些重要的方法在自定义方法中通常需要实现参数插入删除方法、神经网络层插入删除、神经网络模型信息等。
![神经网络基类抽象方法](../img/ch02/cell_abstract.png)
:width:`400px`

View File

@@ -5,5 +5,5 @@
:numbered:
chapter_introduction/index
chapter_programming_model/index
chapter_programming_interface/index
chapter_computational_graph/index