模型层

image0image1image2

概述

在讲述了Cell的使用方法后可知,MindSpore能够以Cell为基类构造网络结构。

为了方便用户的使用,MindSpore框架内置了大量的模型层,用户可以通过接口直接调用。

同样,用户也可以自定义模型,此内容在“构建自定义网络”中介绍。

内置模型层

MindSpore框架在mindspore.nn的layer层内置了丰富的接口,主要内容如下:

  • 激活层

    激活层内置了大量的激活函数,在定义网络结构中经常使用。激活函数为网络加入了非线性运算,使得网络能够拟合效果更好。

    主要接口有SoftmaxReluEluTanhSigmoid等。

  • 基础层

    基础层实现了网络中一些常用的基础结构,例如全连接层、Onehot编码、Dropout、平铺层等都在此部分实现。

    主要接口有DenseFlattenDropoutNormOneHot等。

  • 容器层

    容器层主要功能是实现一些存储多个Cell的数据结构。

    主要接口有SequentialCellCellList等。

  • 卷积层

    卷积层提供了一些卷积计算的功能,如普通卷积、深度卷积和卷积转置等。

    主要接口有Conv2dConv1dConv2dTransposeConv1dTranspose等。

  • 池化层

    池化层提供了平均池化和最大池化等计算的功能。

    主要接口有AvgPool2dMaxPool2dAvgPool1d

  • 嵌入层

    嵌入层提供word embedding的计算功能,将输入的单词映射为稠密向量。

    主要接口有EmbeddingEmbeddingLookupEmbeddingLookUpSplitMode等。

  • 长短记忆循环层

    长短记忆循环层提供LSTM计算功能。其中LSTM内部会调用LSTMCell接口,LSTMCell是一个LSTM单元,对一个LSTM层做运算,当涉及多LSTM网络层运算时,使用LSTM接口。

    主要接口有LSTMLSTMCell

  • 标准化层

    标准化层提供了一些标准化的方法,即通过线性变换等方式将数据转换成均值和标准差。

    主要接口有BatchNorm1dBatchNorm2dLayerNormGroupNormGlobalBatchNorm等。

  • 数学计算层

    数学计算层提供一些算子拼接而成的计算功能,例如数据生成和一些数学计算等。

    主要接口有ReduceLogSumExpRangeLinSpaceLGamma等。

  • 图片层

    图片计算层提供了一些矩阵计算相关的功能,将图片数据进行一些变换与计算。

    主要接口有ImageGradientsSSIMMSSSIMPSNRCentralCrop等。

  • 量化层

    量化是指将数据从float的形式转换成一段数据范围的int类型,所以量化层提供了一些数据量化的方法和模型层结构封装。

    主要接口有Conv2dBnActDenseBnActConv2dBnFoldQuantLeakyReLUQuant等。

应用实例

MindSpore的模型层在mindspore.nn下,使用方法如下所示:

[5]:
import mindspore.nn as nn

class Net(nn.Cell):
    def __init__(self):
        super(Net, self).__init__()
        self.conv = nn.Conv2d(3, 64, 3, has_bias=False, weight_init='normal')
        self.bn = nn.BatchNorm2d(64)
        self.relu = nn.ReLU()
        self.flatten = nn.Flatten()
        self.fc = nn.Dense(64 * 222 * 222, 3)

    def construct(self, x):
        x = self.conv(x)
        x = self.bn(x)
        x = self.relu(x)
        x = self.flatten(x)
        out = self.fc(x)
        return out

依然是上述网络构造的用例,从这个用例中可以看出,程序调用了Conv2dBatchNorm2dReLUFlattenDense模型层的接口。

Net初始化方法里被定义,然后在construct方法里真正运行,这些模型层接口有序的连接,形成一个可执行的网络。