線性回歸的從零開始實(shí)現(xiàn)
在了解線性回歸的關(guān)鍵思想之后,我們可以開始通過代碼來動(dòng)手實(shí)現(xiàn)線性回歸了。 在這一節(jié)中,我們將從零開始實(shí)現(xiàn)整個(gè)方法, 包括數(shù)據(jù)流水線、模型、損失函數(shù)和小批量隨機(jī)梯度下降優(yōu)化器。 雖然現(xiàn)代的深度學(xué)習(xí)框架幾乎可以自動(dòng)化地進(jìn)行所有這些工作,但從零開始實(shí)現(xiàn)可以確保我們真正知道自己在做什么。 同時(shí),了解更細(xì)致的工作原理將方便我們自定義模型、自定義層或自定義損失函數(shù)。 在這一節(jié)中,我們將只使用張量和自動(dòng)求導(dǎo)。 在之后的章節(jié)中,我們會(huì)充分利用深度學(xué)習(xí)框架的優(yōu)勢,介紹更簡潔的實(shí)現(xiàn)方式。
%matplotlib inline
import random
import torch
from d2l import torch as d2l
生成數(shù)據(jù)集
為了簡單起見,我們將根據(jù)帶有噪聲的線性模型構(gòu)造一個(gè)人造數(shù)據(jù)集。 我們的任務(wù)是使用這個(gè)有限樣本的數(shù)據(jù)集來恢復(fù)這個(gè)模型的參數(shù)。 我們將使用低維數(shù)據(jù),這樣可以很容易地將其可視化。 在下面的代碼中,我們生成一個(gè)包含1000個(gè)樣本的數(shù)據(jù)集, 每個(gè)樣本包含從標(biāo)準(zhǔn)正態(tài)分布中采樣的2個(gè)特征。 我們的合成數(shù)據(jù)集是一個(gè)矩陣\(\mathbf{X}\in \mathbb{R}^{1000 \times 2}\)。
我們使用線性模型參數(shù)\(\mathbf{w} = [2, -3.4]^\top\)、\(b = 4.2\)?和噪聲項(xiàng)\(\epsilon\)生成數(shù)據(jù)集及其標(biāo)簽:
(3.2.1)\[\mathbf{y}= \mathbf{X} \mathbf{w} + b + \mathbf\epsilon.\]
\(\epsilon\)可以視為模型預(yù)測和標(biāo)簽時(shí)的潛在觀測誤差。 在這里我們認(rèn)為標(biāo)準(zhǔn)假設(shè)成立,即\(\epsilon\)服從均值為0的正態(tài)分布。 為了簡化問題,我們將標(biāo)準(zhǔn)差設(shè)為0.01。 下面的代碼生成合成數(shù)據(jù)集。
def synthetic_data(w, b, num_examples): #@save
"""生成y=Xw+b+噪聲"""
X = torch.normal(0, 1, (num_examples, len(w)))
y = torch.matmul(X, w) + b
y += torch.normal(0, 0.01, y.shape)
return X, y.reshape((-1, 1))
true_w = torch.tensor([2, -3.4])
true_b = 4.2
features, labels = synthetic_data(true_w, true_b, 1000)
注意,features
中的每一行都包含一個(gè)二維數(shù)據(jù)樣本,?labels
中的每一行都包含一維標(biāo)簽值(一個(gè)標(biāo)量)。
features: tensor([1.4632, 0.5511])
label: tensor([5.2498])
通過生成第二個(gè)特征features[:,?1]
和labels
的散點(diǎn)圖, 可以直觀觀察到兩者之間的線性關(guān)系。文章來源:http://www.zghlxwxcb.cn/news/detail-713499.html
d2l.set_figsize()
d2l.plt.scatter(features[:, (1)].detach().numpy(), labels.detach().numpy(), 1);
文章來源地址http://www.zghlxwxcb.cn/news/detail-713499.html
到了這里,關(guān)于人工智能-線性回歸的從零開始實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!