失效链接处理 |
动手学深度学习(PyTorch版)_文字版 PDF 下载
相关截图:
主要内容:
在训练了预先确定的若⼲迭代次数后(或者直到满⾜某些其他停⽌条件后),我们记录下模型参数的估计值,
表⽰为
ˆ
w
, ˆ
b。但是,即使我们的函数确实是线性的且⽆噪声,这些估计值也不会使损失函数真正地达到最⼩
值。因为算法会使得损失向最⼩值缓慢收敛,但却不能在有限的步数内⾮常精确地达到最⼩值。
线性回归恰好是⼀个在整个域中只有⼀个最⼩值的学习问题。但是对像深度神经⽹络这样复杂的模型来说,
损失平⾯上通常包含多个最⼩值。深度学习实践者很少会去花费⼤⼒⽓寻找这样⼀组参数,使得在训练集上
的损失达到最⼩。事实上,更难做到的是找到⼀组参数,这组参数能够在我们从未⻅过的数据上实现较低的
损失,这⼀挑战被称为泛化(generalization)。
⽤模型进⾏预测
给定“已学习”的线性回归模型
ˆ
w
⊤x + ˆ
b,现在我们可以通过房屋⾯积x1和房龄x2来估计⼀个(未包含在训
练数据中的)新房屋价格。给定特征估计⽬标的过程通常称为预测(prediction)或推断(inference)。
本书将尝试坚持使⽤预测这个词。虽然推断这个词已经成为深度学习的标准术语,但其实推断这个词有些⽤
词不当。在统计学中,推断更多地表⽰基于数据集估计参数。当深度学习从业者与统计学家交谈时,术语的
误⽤经常导致⼀些误解。
3.1.2 ⽮量化加速
在训练我们的模型时,我们经常希望能够同时处理整个⼩批量的样本。为了实现这⼀点,需要我们对计算进
⾏⽮量化,从⽽利⽤线性代数库,⽽不是在Python中编写开销⾼昂的for循环。
%matplotlib inline
import math
import time
import numpy as np
import torch
from d2l import torch as d2l
为了说明⽮量化为什么如此重要,我们考虑对向量相加的两种⽅法。我们实例化两个全为1的10000维向量。
在⼀种⽅法中,我们将使⽤Python的for循环遍历向量;在另⼀种⽅法中,我们将依赖对+的调⽤。
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()
|