pytorch神經(jīng)網(wǎng)絡(luò)從零開始實(shí)現(xiàn)多層感知機(jī)
我們已經(jīng)在數(shù)學(xué)上描述了多層感知機(jī),現(xiàn)在讓我們嘗試自己實(shí)現(xiàn)一個(gè)多層感知機(jī)。為了與我們之前使用softmax回歸獲得的結(jié)果進(jìn)行比較,我們將繼續(xù)使用Fashion-MNIST圖像分類數(shù)據(jù)集。
import torch from torch import nn from d2l import torch as d2l
batch_size = 256 train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
初始化模型參數(shù)
Fashion-MNIST中的每個(gè)圖像由 28 × 28 = 784個(gè)灰度圖像值組成。所有圖像共分為10個(gè)類別。忽略像素之間的空間結(jié)構(gòu),我們可以將每個(gè)圖像視為784個(gè)輸入特征和10個(gè)類的簡(jiǎn)單分類數(shù)據(jù)集。
首先,我們將實(shí)現(xiàn)一個(gè)具有單隱藏層的多層感知機(jī),它包含256個(gè)隱藏單元。注意我們可以將這兩個(gè)量都視為超參數(shù)。通常,我們選擇2的若干次冪作為層的寬度。
我們用幾個(gè)張量來表示我們的參數(shù)。注意,對(duì)于每一層我們都需要記錄一個(gè)權(quán)重矩陣和一個(gè)偏置向量。跟以前一樣,我們要為這些參數(shù)的損失梯度分配內(nèi)存。
num_inputs, num_outputs, num_hiddens = 784, 10, 256 W1 = nn.Parameter(torch.randn( num_inputs, num_hiddens, requires_grad=True) * 0.01) b1 = nn.Parameter(torch.zeros(num_hiddens, requires_grad=True)) W2 = nn.Parameter(torch.randn( num_hiddens, num_outputs, requires_grad=True) * 0.01) b2 = nn.Parameter(torch.zeros(num_outputs, requires_grad=True)) params = [W1, b1, W2, b2]
激活函數(shù)
為了確保我們知道一切是如何工作的,我們將使用最大值函數(shù)自己實(shí)現(xiàn)ReLU激活函數(shù),而不是直接調(diào)用內(nèi)置的relu函數(shù)。
def relu(X): a = torch.zeros_like(X) return torch.max(X, a)
模型
因?yàn)槲覀兒雎粤丝臻g結(jié)構(gòu),所示我們使用reshape將每個(gè)二維圖像轉(zhuǎn)換為一個(gè)長(zhǎng)度為num_inputs的向量。我們只需幾行代碼就可以實(shí)現(xiàn)我們的模型。
def net(X): X = X.reshape((-1, num_inputs)) H = relu(X@W1 + b1) # 這里“@”代表矩陣乘法 return (H@W2 + b2)
損失函數(shù)
為了確保數(shù)值的穩(wěn)定性,同時(shí)由于我們已經(jīng)從零實(shí)現(xiàn)過softmax函數(shù),因此在這里我們直接使用高級(jí)API中的內(nèi)置函數(shù)來計(jì)算softmax和交叉熵?fù)p失。
loss = nn.CrossEntropyLoss()
訓(xùn)練
幸運(yùn)的是,多層感知機(jī)的訓(xùn)練過程與softmax回歸的訓(xùn)練過程完全相同??梢灾苯诱{(diào)用d2l包的train_ch3函數(shù),將迭代周期設(shè)置為10,并將學(xué)習(xí)率設(shè)置為0.1。
num_epochs, lr = 10, 0.1 updater = torch.optim.SGD(params, lr=lr) d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, updater)

為了對(duì)學(xué)習(xí)到的模型進(jìn)行評(píng)估,我們將在一些 測(cè)試數(shù)據(jù)上應(yīng)用這個(gè)模型。
d2l.predict_ch3(net, test_iter)

以上就是pytorch神經(jīng)網(wǎng)絡(luò)從零開始實(shí)現(xiàn)多層感知機(jī)的詳細(xì)內(nèi)容,更多關(guān)于pytorch神經(jīng)網(wǎng)絡(luò)多層感知機(jī)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python通過Schema實(shí)現(xiàn)數(shù)據(jù)驗(yàn)證方式
這篇文章主要介紹了Python通過Schema實(shí)現(xiàn)數(shù)據(jù)驗(yàn)證方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
Python實(shí)現(xiàn)數(shù)字的格式化輸出
這篇文章主要介紹了Python如何實(shí)現(xiàn)數(shù)字的格式化輸出,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-08-08
Python基于PycURL實(shí)現(xiàn)POST的方法
這篇文章主要介紹了Python基于PycURL實(shí)現(xiàn)POST的方法,涉及Python實(shí)現(xiàn)curl傳遞post數(shù)據(jù)的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
pandas對(duì)dataFrame中某一個(gè)列的數(shù)據(jù)進(jìn)行處理的方法
這篇文章主要介紹了pandas對(duì)dataFrame中某一個(gè)列的數(shù)據(jù)進(jìn)行處理的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
python 辦公自動(dòng)化——基于pyqt5和openpyxl統(tǒng)計(jì)符合要求的名單
前幾天接到的一個(gè)需求,因?yàn)閷W(xué)校給的名單是青年大學(xué)習(xí)已學(xué)習(xí)的名單,然而要知道未學(xué)習(xí)的名單只能從所有團(tuán)員中再排查一次,過程相當(dāng)麻煩。剛好我也學(xué)過一些操作辦公軟件的基礎(chǔ),再加上最近在學(xué)pyqt5,所以我決定用python寫個(gè)自動(dòng)操作文件的腳本給她用用。2021-05-05

