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è)類的簡單分類數(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è)長度為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)估,我們將在一些 測試數(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系統(tǒng)指定文件的查找只輸出目錄下所有文件及文件夾
這篇文章主要介紹了python系統(tǒng)指定文件的查找只輸出目錄下所有文件及文件夾,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01django admin實(shí)現(xiàn)動(dòng)態(tài)多選框表單的示例代碼
借助django-admin,可以快速得到CRUD界面,但若需要?jiǎng)?chuàng)建多選標(biāo)簽字段時(shí),需要對(duì)表單進(jìn)行調(diào)整,本文通過示例代碼給大家介紹django admin多選框表單的實(shí)現(xiàn)方法,感興趣的朋友跟隨小編一起看看吧2021-05-05Python使用機(jī)器學(xué)習(xí)模型實(shí)現(xiàn)溫度預(yù)測詳解
使用?Python?可以使用機(jī)器學(xué)習(xí)模型進(jìn)行溫度預(yù)測。常用的模型有回歸分析、隨機(jī)森林等。本文就來和大家來了具體實(shí)現(xiàn)方法,希望對(duì)大家有所幫助2023-01-01Python爬蟲實(shí)戰(zhàn)案例之爬取喜馬拉雅音頻數(shù)據(jù)詳解
這篇文章主要介紹了Python爬蟲實(shí)戰(zhàn)案例之取喜馬拉雅音頻數(shù)據(jù)詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12關(guān)于python中不同函數(shù)讀取圖片格式的區(qū)別淺析
這篇文章主要給大家介紹了關(guān)于python中不同函數(shù)讀取圖片格式的區(qū)別,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-03-03Python 日期時(shí)間datetime 加一天,減一天,加減一小時(shí)一分鐘,加減一年
這篇文章主要介紹了Python 日期時(shí)間datetime 加一天,減一天,加減一小時(shí)一分鐘,加減一年,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04