Paddle内置的网络模型
Posted 卓晴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Paddle内置的网络模型相关的知识,希望对你有一定的参考价值。
简 介: 本文根据文档 模型组网 中给出的信息,总结了在Paddle建立常见到的网络的三种方法。
关键词
: paddle,net,内置网络
§01 内置模型
1.1 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 |
1.2 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)
)
1.3 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()
1.4 飞桨内置函数
你除了可以通过上述方式组建模型外,还可以使用飞桨框架内置的模型,路径为 paddle.vision.models
。
1.4.1 列出所有内置函数
具体列表如下:
import sys,os,math,time
import matplotlib.pyplot as plt
from numpy import *
import paddle
print("Inner Model of Paddle:", paddle.vision.models.__all__)
Inner Model of Paddle: ['ResNet', 'resnet18', 'resnet34', 'resnet50', 'resnet101', 'resnet152', 'VGG', 'vgg11', 'vgg13', 'vgg16', 'vgg19', 'MobileNetV1', 'mobilenet_v1', 'MobileNetV2', 'mobilenet_v2', 'LeNet']
ResNet resnet18
resnet34 resnet50
resnet101 resnet152
VGG vgg11
vgg13 vgg16
vgg19 MobileNetV1
mobilenet_v1 MobileNetV2
mobilenet_v2 LeNet
from headm import *
strid = 8
strall = tspgetdopstring(strid)
strall = strall.replace(':', '')
strall = strall.replace('\\'', '').replace(']','').replace('[','').replace(':','').split(',')
maxlen = max(len(s.strip(' ')) for s in strall)
strall = [s.strip(' ')+' '*(maxlen - len(s)) for s in strall]
for s in list(zip(*([iter(strall)]*2))):
printff(*s)
1.4.2 显示网络结构
(1)LeNet
lenet = paddle.vision.models.LeNet()
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
---------------------------------------------------------------------------
'total_params': 61610, 'trainable_params': 61610
通过测试,初步使用 summary显示网络结构,只有LeNet是可以,其它的网络都不可以。
※ 模型总结 ※
本文根据文档 模型组网 中给出的信息,总结了在Paddle建立常见到的网络的三种方法。
■ 相关文献链接:
以上是关于Paddle内置的网络模型的主要内容,如果未能解决你的问题,请参考以下文章
森说AI:用paddle2.x完成resnet50模型转写并实现前向对齐
森说AI:用paddle2.x完成resnet50模型转写并实现前向对齐
模型压缩75%,推理速度提升20%,Paddle Lite v2.3发布