資料內(nèi)容:
在訓(xùn)練了預(yù)先確定的若?迭代次數(shù)后(或者直到滿?某些其他停?條件后),我們記錄下模型參數(shù)的估計(jì)值,
表?為
ˆ
w
, ˆ
b。但是,即使我們的函數(shù)確實(shí)是線性的且?噪聲,這些估計(jì)值也不會(huì)使損失函數(shù)真正地達(dá)到最?
值。因?yàn)樗惴〞?huì)使得損失向最?值緩慢收斂,但卻不能在有限的步數(shù)內(nèi)?常精確地達(dá)到最?值。
線性回歸恰好是?個(gè)在整個(gè)域中只有?個(gè)最?值的學(xué)習(xí)問題。但是對(duì)像深度神經(jīng)?絡(luò)這樣復(fù)雜的模型來說,
損失平?上通常包含多個(gè)最?值。深度學(xué)習(xí)實(shí)踐者很少會(huì)去花費(fèi)???尋找這樣?組參數(shù),使得在訓(xùn)練集上
的損失達(dá)到最?。事實(shí)上,更難做到的是找到?組參數(shù),這組參數(shù)能夠在我們從未?過的數(shù)據(jù)上實(shí)現(xiàn)較低的
損失,這?挑戰(zhàn)被稱為泛化(generalization)。
?模型進(jìn)?預(yù)測(cè)
給定“已學(xué)習(xí)”的線性回歸模型
ˆ
w
?x + ˆ
b,現(xiàn)在我們可以通過房屋?積x1和房齡x2來估計(jì)?個(gè)(未包含在訓(xùn)
練數(shù)據(jù)中的)新房屋價(jià)格。給定特征估計(jì)?標(biāo)的過程通常稱為預(yù)測(cè)(prediction)或推斷(inference)。
本書將嘗試堅(jiān)持使?預(yù)測(cè)這個(gè)詞。雖然推斷這個(gè)詞已經(jīng)成為深度學(xué)習(xí)的標(biāo)準(zhǔn)術(shù)語,但其實(shí)推斷這個(gè)詞有些?
詞不當(dāng)。在統(tǒng)計(jì)學(xué)中,推斷更多地表?基于數(shù)據(jù)集估計(jì)參數(shù)。當(dāng)深度學(xué)習(xí)從業(yè)者與統(tǒng)計(jì)學(xué)家交談時(shí),術(shù)語的
誤?經(jīng)常導(dǎo)致?些誤解。
3.1.2 ?量化加速
在訓(xùn)練我們的模型時(shí),我們經(jīng)常希望能夠同時(shí)處理整個(gè)?批量的樣本。為了實(shí)現(xiàn)這?點(diǎn),需要我們對(duì)計(jì)算進(jìn)
??量化,從?利?線性代數(shù)庫,?不是在Python中編寫開銷?昂的for循環(huán)。
%matplotlib inline
import math
import time
import numpy as np
import torch
from d2l import torch as d2l
為了說明?量化為什么如此重要,我們考慮對(duì)向量相加的兩種?法。我們實(shí)例化兩個(gè)全為1的10000維向量。
在?種?法中,我們將使?Python的for循環(huán)遍歷向量;在另?種?法中,我們將依賴對(duì)+的調(diào)?。
n = 10000
a = torch.ones([n])
b = torch.ones([n])
3.1. 線性回歸
89由于在本書中我們將頻繁地進(jìn)?運(yùn)?時(shí)間的基準(zhǔn)測(cè)試,所以我們定義?個(gè)計(jì)時(shí)器:
class Timer:
#@save
"""記錄多次運(yùn)?時(shí)間"""
def __init__(self):
self.times = []
self.start()
def start(self):
"""啟動(dòng)計(jì)時(shí)器"""
self.tik = time.time()
def stop(self):
"""停?計(jì)時(shí)器并將時(shí)間記錄在列表中"""
self.times.append(time.time() - self.tik)
return self.times[-1]
def avg(self):
"""返回平均時(shí)間"""
return sum(self.times) / len(self.times)
def sum(self):
"""返回時(shí)間總和"""
return sum(self.times)
def cumsum(self):
"""返回累計(jì)時(shí)間"""
return np.array(self.times).cumsum().tolist()