1.矢量计算表达式
在模型训练或预测时,我们常常会同时处理多个数据样本并用到矢量计算。
在介绍线性回归的矢量计算表达式之前,让我们先考虑对两个向量相加的两种方法。
import torch
from time import time
#下面先定义两个1000维的向量。
a = torch.ones(1000)
b = torch.ones(1000)
"""向量相加的一种方法是,将这两个向量按元素逐一做标量加法。"""
start = time()
c = torch.zeros(1000)
for i in range(1000):
c[i] = a[i] + b[i]
print(time() - start)
0.17760944366455078
"""向量相加的另一种方法是,将这两个向量直接做矢量加法。"""
start = time()
d = a + b
print(time() - start)
0.0
结果很明显,后者比前者更省时。因此,应该尽可能采用矢量计算,以提升计算效率。
y = w ∗ x + b y = w*x + b y=w∗x+b,其中会涉及广播操作
- 和大多数深度学习模型一样,对于线性回归这样一种单层神经网络,它的基本要素包括模型、训练数据、损失函数和优化算法。
- 既可以用神经网络图表示线性回归,又可以用矢量计算表示该模型。
- 应该尽可能采用矢量计算,以提升计算效率。
2.线性回归的从零开始实现
本节将介绍如何只利用Tensor和autograd来实现一个线性回归的训练。
首先,导入本节中实验所需的包或模块,其中的matplotlib包可用于作图,且设置成嵌入显示。
%matplotlib inline
import torch
from IPython import display
from matplotlib import pyplot as plt
import numpy as np
import random
2.1生成数据集
我们构造一个简单的人工训练数据集,它可以使我们能够直观比较学到的参数和真实的模型参数的区别。设训练数据集样本数为1000,输入个数(特征数)为2。给定随机生成的批量样本特征 X ∈ R 1000 × 2 , 我 们 使 用 线 性 回 归 模 型 真 实 权 重 w = [ 2 , − 3.4 ] T 和 偏 差 b = 4.2 , 以 及 一 个 随 机 噪 声 项 ϵ 来 生 成 标 签 X\in R^{1000}\times2,我们使用线性回归模型真实权重 w=[2,−3.4]^T和偏差b=4.2,以及一个随机噪声项\epsilon来生成标签