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