深度学习模型组网
深度學(xué)習(xí)模型組網(wǎng)
完成數(shù)據(jù)集的構(gòu)建后,需要構(gòu)建網(wǎng)絡(luò)模型。首先介紹飛槳組網(wǎng)相關(guān)的API,主要是paddle.nn下的API介紹,然后介紹動態(tài)圖下飛槳框架支持的兩種組網(wǎng)方式,分別為 Sequential 組網(wǎng)與 SubClass 組網(wǎng),最后,介紹飛槳框架內(nèi)置的算法模型。
一、paddle.nn 簡介
飛槳框架2.0中,組網(wǎng)相關(guān)的API都在paddle.nn目錄下,可以通過 Sequential 或 SubClass 的方式構(gòu)建具體的模型。組網(wǎng)相關(guān)的API類別與具體的API列表如下表:
二、Sequential 組網(wǎng)
針對順序的線性網(wǎng)絡(luò)結(jié)構(gòu)你可以直接使用Sequential來快速完成組網(wǎng),可以減少類的定義等代碼編寫。具體代碼如下:
import paddle
Sequential形式組網(wǎng)
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 組網(wǎng)
針對一些比較復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu),就可以使用Layer子類定義的方式來進(jìn)行模型代碼編寫,在__init__構(gòu)造函數(shù)中進(jìn)行組網(wǎng)Layer的聲明,在forward中使用聲明的Layer變量進(jìn)行前向計(jì)算。子類組網(wǎng)方式也可以實(shí)現(xiàn)sublayer的復(fù)用,針對相同的layer可以在構(gòu)造函數(shù)中一次性定義,在forward中多次調(diào)用。
Layer類繼承方式組網(wǎng)
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()
四、飛槳框架內(nèi)置模型
除了可以通過上述方式組建模型外,還可以使用飛槳框架內(nèi)置的模型,路徑為 paddle.vision.models ,具體列表如下:
print(‘飛槳框架內(nèi)置模型:’, paddle.vision.models.all)
飛槳框架內(nèi)置模型: [‘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()方法查看模型的結(jié)構(gòu)與每一層輸入輸出形狀,具體如下:
總結(jié)