zoukankan      html  css  js  c++  java
  • 深度学习模型组网

    深度学习模型组网

    完成数据集的构建后,需要构建网络模型。首先介绍飞桨组网相关的API,主要是paddle.nn下的API介绍,然后介绍动态图下飞桨框架支持的两种组网方式,分别为 Sequential 组网与 SubClass 组网,最后,介绍飞桨框架内置的算法模型。

    一、paddle.nn 简介

    飞桨框架2.0中,组网相关的API都在paddle.nn目录下,可以通过 Sequential 或 SubClass 的方式构建具体的模型。组网相关的API类别与具体的API列表如下表:

    功能

    API名称

    Conv

    Conv1D、Conv2D、Conv3D、Conv1DTranspose、Conv2DTranspose、Conv3DTranspose

    Pool

    AdaptiveAvgPool1D、AdaptiveAvgPool2D、AdaptiveAvgPool3D、 AdaptiveMaxPool1D、AdaptiveMaxPool2D、AdaptiveMaxPool3D、 AvgPool1D、AvgPool2D、AvgPool3D、MaxPool1D、MaxPool2D、MaxPool3D

    Padding

    Pad1D、Pad2D、Pad3d

    Activation

    ELU、GELU、Hardshrink、Hardtanh、HSigmoid、LeakyReLU、LogSigmoid、 LogSoftmax、PReLU、ReLU、ReLU6、SELU、Sigmoid、Softmax、Softplus、 Softshrink、Softsign、Tanh、Tanhshrink

    Normlization

    BatchNorm、BatchNorm1D、BatchNorm2D、BatchNorm3D、GroupNorm、 InstanceNorm1D、InstanceNorm2D、InstanceNorm3D、LayerNorm、SpectralNorm、 SyncBatchNorm

    Recurrent NN

    BiRNN、GRU、GRUCell、LSTM、LSTMCell、RNN、RNNCellBase、SimpleRNN、 SimpleRNNCell

    Transformer

    Transformer、TransformerDecoder、TransformerDecoderLayer、 TransformerEncoder、TransformerEncoderLayer

    Dropout

    AlphaDropout、Dropout、Dropout2d、Dropout3d

    Loss

    BCELoss、BCEWithLogitsLoss、CrossEntropyLoss、CTCLoss、KLDivLoss、L1Loss MarginRankingLoss、MSELoss、NLLLoss、SmoothL1Loss

    二、Sequential 组网

    针对顺序的线性网络结构你可以直接使用Sequential来快速完成组网,可以减少类的定义等代码编写。具体代码如下:

    import paddle

    # Sequential形式组网

    mnist = paddle.nn.Sequential(

        paddle.nn.Flatten(),

        paddle.nn.Linear(784, 512),

        paddle.nn.ReLU(),

        paddle.nn.Dropout(0.2),

        paddle.nn.Linear(512, 10)

    )

    三、SubClass 组网

    针对一些比较复杂的网络结构,就可以使用Layer子类定义的方式来进行模型代码编写,在__init__构造函数中进行组网Layer的声明,在forward中使用声明的Layer变量进行前向计算。子类组网方式也可以实现sublayer的复用,针对相同的layer可以在构造函数中一次性定义,在forward中多次调用。

    # Layer类继承方式组网

    class Mnist(paddle.nn.Layer):

        def __init__(self):

            super(Mnist, self).__init__()

     

            self.flatten = paddle.nn.Flatten()

            self.linear_1 = paddle.nn.Linear(784, 512)

            self.linear_2 = paddle.nn.Linear(512, 10)

            self.relu = paddle.nn.ReLU()

            self.dropout = paddle.nn.Dropout(0.2)

     

        def forward(self, inputs):

            y = self.flatten(inputs)

            y = self.linear_1(y)

            y = self.relu(y)

            y = self.dropout(y)

            y = self.linear_2(y)

     

            return y

     

    mnist_2 = Mnist()

    四、飞桨框架内置模型

    除了可以通过上述方式组建模型外,还可以使用飞桨框架内置的模型,路径为 paddle.vision.models ,具体列表如下:

    print('飞桨框架内置模型:', paddle.vision.models.__all__)

    飞桨框架内置模型: ['ResNet', 'resnet18', 'resnet34', 'resnet50', 'resnet101', 'resnet152', 'VGG', 'vgg11', 'vgg13', 'vgg16', 'vgg19', 'MobileNetV1', 'mobilenet_v1', 'MobileNetV2', 'mobilenet_v2', 'LeNet']

    使用方式如下:

    lenet = paddle.vision.models.LeNet()

    你可以通过paddle.summary()方法查看模型的结构与每一层输入输出形状,具体如下:

    paddle.summary(lenet, (64, 1, 28, 28))

    ---------------------------------------------------------------------------

     Layer (type)       Input Shape          Output Shape         Param #

    ===========================================================================

       Conv2D-1      [[64, 1, 28, 28]]     [64, 6, 28, 28]          60

        ReLU-1       [[64, 6, 28, 28]]     [64, 6, 28, 28]           0

      MaxPool2D-1    [[64, 6, 28, 28]]     [64, 6, 14, 14]           0

       Conv2D-2      [[64, 6, 14, 14]]     [64, 16, 10, 10]        2,416

        ReLU-2       [[64, 16, 10, 10]]    [64, 16, 10, 10]          0

      MaxPool2D-2    [[64, 16, 10, 10]]     [64, 16, 5, 5]           0

       Linear-1         [[64, 400]]           [64, 120]           48,120

       Linear-2         [[64, 120]]            [64, 84]           10,164

       Linear-3          [[64, 84]]            [64, 10]             850

    ===========================================================================

    Total params: 61,610

    Trainable params: 61,610

    Non-trainable params: 0

    ---------------------------------------------------------------------------

    Input size (MB): 0.19

    Forward/backward pass size (MB): 7.03

    Params size (MB): 0.24

    Estimated Total Size (MB): 7.46

    ---------------------------------------------------------------------------

    人工智能芯片与自动驾驶
  • 相关阅读:
    把本地的jar包安装到maven库中
    mybatis 查询
    freemarker
    python——线程相关
    【python-sql】sql操作时遇到的坑
    专项测试——移动app安装包检测
    【Android端 adb相关】adb相关总结
    for 语句
    Python2.x与3​​.x版本区别
    Python 运算符
  • 原文地址:https://www.cnblogs.com/wujianming-110117/p/14397318.html
Copyright © 2011-2022 走看看