亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

pytorch神經(jīng)網(wǎng)絡(luò)從零開始實(shí)現(xiàn)多層感知機(jī)

 更新時(shí)間:2021年10月11日 16:02:12   作者:Supre_yuan  
這篇文章主要為大家介紹了pytorch神經(jīng)網(wǎng)絡(luò)從零開始實(shí)現(xiàn)多層感知機(jī)的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步

我們已經(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)文章

最新評(píng)論