目錄
一、介紹
二、先決條件
三、代碼解釋
一、介紹
在深度學(xué)習(xí)領(lǐng)域,構(gòu)建復(fù)雜的神經(jīng)網(wǎng)絡(luò)模型可能是一項(xiàng)艱巨的任務(wù),尤其是當(dāng)您有許多層和操作需要組織時(shí)。幸運(yùn)的是,PyTorch提供了一個(gè)方便的工具,稱(chēng)為Sequential API,它簡(jiǎn)化了神經(jīng)網(wǎng)絡(luò)架構(gòu)的構(gòu)建過(guò)程。在本文中,將探討如何使用Sequential API構(gòu)建一個(gè)用于圖像分類(lèi)的卷積神經(jīng)網(wǎng)絡(luò)(CNN)。接下來(lái)將詳細(xì)探討每部分代碼,并討論每個(gè)組件,并清楚地了解如何在項(xiàng)目中充分利用PyTorch的Sequential API。
二、先決條件
- 對(duì)神經(jīng)網(wǎng)絡(luò)和PyTorch有基本了解。
- 安裝了PyTorch的Python環(huán)境。
三、代碼解釋
import torch
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
from torch.utils.tensorboard import SummaryWriter
在此代碼片段中,導(dǎo)入了必要的庫(kù),包括PyTorch及其用于神經(jīng)網(wǎng)絡(luò)操作的模塊,以及用于TensorBoard可視化的SummaryWriter。
class Tudui(nn.Module):
def __init__(self):
super(Tudui, self).__init__()
self.model1 = Sequential(
Conv2d(3, 32, 5, padding=2),
MaxPool2d(2),
Conv2d(32, 32, 5, padding=2),
MaxPool2d(2),
Conv2d(32, 64, 5, padding=2),
MaxPool2d(2),
Flatten(),
Linear(1024, 64),
Linear(64, 10),
)
Tudui
類(lèi)定義了神經(jīng)網(wǎng)絡(luò)模型。并使用Sequential API創(chuàng)建一系列層和操作,而不是逐一定義每個(gè)層并分別管理它們。在這種情況下,我們有三個(gè)卷積層,每個(gè)卷積層后跟一個(gè)最大池化層。然后,將輸出展平并添加兩個(gè)全連接(線性)層。這些層是按順序定義的,使代碼更加簡(jiǎn)明和可讀。
def forward(self, x):
x = self.model1(x)
return x
在forward
方法中,通過(guò)模型構(gòu)造函數(shù)傳遞輸入張量x
。由于層在self.model1
中按順序組織,并不需要在前向傳遞中單獨(dú)調(diào)用每個(gè)層。這簡(jiǎn)化了代碼并增強(qiáng)了其清晰度。
tudui = Tudui()
創(chuàng)建了Tudui
模型的一個(gè)實(shí)例。
input = torch.ones((64, 3, 32, 32))
output = tudui(input)
生成一個(gè)形狀為(64, 3, 32, 32)的示例輸入張量,并將其通過(guò)模型傳遞以獲得輸出。
writer = SummaryWriter("logs")
writer.add_graph(tudui, input)
writer.close()
為了使用TensorBoard可視化模型的架構(gòu)和計(jì)算圖,所以創(chuàng)建了一個(gè)SummaryWriter并添加了圖形。這一步對(duì)于調(diào)試和理解數(shù)據(jù)流經(jīng)網(wǎng)絡(luò)的過(guò)程非常有價(jià)值。
完整代碼如下:
"""
輸入大小為3*32*32
經(jīng)過(guò)3次【5*5卷積核卷積-2*2池化核池化】操作后,輸出為64*4*4大小
展平后為1*1024大小
經(jīng)過(guò)全連接層后輸出為1*10
"""
import torch
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
from torch.utils.tensorboard import SummaryWriter
class Tudui(nn.Module):
def __init__(self):
super(Tudui,self).__init__()
# self.conv1 = Conv2d(3,32,5,padding=2)
# # self.maxpool1 = MaxPool2d(2)
# # self.conv2 = Conv2d(32,32,5,padding=2)
# # self.maxpool2 = MaxPool2d(2)
# # self.conv3 = Conv2d(32,64,5,padding=2)
# # self.maxpool3 = MaxPool2d(2)
# # self.flatten = Flatten()
# # self.linear1 = Linear(1024,64)
# # self.linear2 = Linear(64,10)
# 構(gòu)建一個(gè)序列化的container,可以把想要在神經(jīng)網(wǎng)絡(luò)中添加的操作都放進(jìn)去,按順序進(jìn)行執(zhí)行。
self.model1 =Sequential(
Conv2d(3, 32, 5, padding=2),
MaxPool2d(2),
Conv2d(32, 32, 5, padding=2),
MaxPool2d(2),
Conv2d(32, 64, 5, padding=2),
MaxPool2d(2),
Flatten(),
Linear(1024, 64),
Linear(64, 10),
)
"""
可以看到上面神經(jīng)網(wǎng)絡(luò)進(jìn)行搭建時(shí)非常繁瑣,在init中進(jìn)行了多個(gè)操作的定以后需要在forward中逐次進(jìn)行調(diào)用,
因此我們使用sequential方法,在init方法中直接定義一個(gè)model,然后在下面的forward方法中直接使用一次model即可。
"""
def forward(self,x):
# x = self.conv1(x)
# x = self.maxpool1(x)
# x = self.conv2(x)
# x = self.maxpool2(x)
# x = self.conv3(x)
# x = self.maxpool3(x)
# x = self.flatten(x)
# x = self.linear1(x)
# x = self.linear2(x)
x = self.model1(x)
return x
tudui = Tudui()
print(tudui)
input = torch.ones((64,3,32,32))
output = tudui(input)
print(output.shape)
writer = SummaryWriter("logs")
writer.add_graph(tudui,input)
writer.close()
參考資料:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-744024.html
視頻教程:PyTorch深度學(xué)習(xí)快速入門(mén)教程(絕對(duì)通俗易懂?。拘⊥炼选?span toymoban-style="hidden">文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-744024.html
到了這里,關(guān)于PyTorch入門(mén)學(xué)習(xí)(十二):神經(jīng)網(wǎng)絡(luò)-搭建小實(shí)戰(zhàn)和Sequential的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!