线性回归
回归:预测一个数值;分类:预测数据属于?组类别中的哪?个。
线性回归的基本元素
- 首先线性指预测的目标值可以表示为特征的加权和。
- 线性模型:给定训练数据特征X和对应的已知
标签y,线性回归的?标是找到?组权重向量w和偏置b:当给定从X的同分布中取样的新样本特征时,这组权重向量和偏置能够使得新样本预测标签的误差尽可能?。在开始寻找最好的模型参数(model parameters)w和b之前,我们还需要两个东西:(1)?种模型质量的度 量?式;(2)?种能够更新模型以提?模型预测质量的?法。 通常使用“尖角”符号表示估计值。 - 损失函数(loss function)能够量化?标的实际值与预测值之间的差距。回归问题中最常?的损失函数是平方误差函数。
- 用梯度下降的方法来优化模型,梯度下降最简单的?法是计算损失函数(数据集中所有样本的损失均值)关于模型参数的导数(在这里也可以称为梯度)。
- 通过手动调整而不是在训练过程中更新的参数叫做超参数,调参(hyperparameter tuning)是选择超参数的过程。超参数通常是我们根据训练迭代结果来调整的,而训练迭代结果是在独?的验证数据集(validation dataset)上评估得到的。
线性回归从零开始实现
- 生成数据集:利用线性模型来生成一个人造数据集,利用torch.normal来生成正态分布随机数。
- 读取数据集:训练模型时我们要对数据集进行遍历,我们通过每次抽取一小批量样本Batch来更新我们的模型。
- 初始化模型参数 权重和偏置:可以利用随机数来初始化来初始化权重,在初始化参数之后,根据梯度下降来更新这些梯度。
- 定义模型:将模型的输入和参数同模型的输出关联起来,例:
def linreg(X, w, b):
"""线性回归模型"""
return torch.matmul(X, w) + b
- 定义损失函数:定义损失函数来计算损失函数的梯度。
- 定义优化算法:来更新模型参数,这里面一般包括两部分,更新参数和梯度置零。
- 训练:在前面的步骤完成之后,我们就开始训练我们的模型。设置训练次数和学习率这两个超参数。
线性回归的简洁实现
利用深度学习框架来简洁地实现线性回归模型。对于标准深度学习模型,我们可以使?框架的预定义好的层。这使我们只需关注使?哪些层来构造模型,而不必关注层的实现细节。 Sequential类以及在Linear类
sofxmax回归
分类问题有两个问题:1. 我们只对样本的“硬性”类别感兴趣,即属于哪个类别;2. 我们希望得到“软性”类别,即得到属于每个类别的概率。
分类问题
如果类别间有自然顺序,表示标签就可以用类似{1,2,3}这种方式来表示标签;若没有自然顺序,就可以用独热编码(one-hot encoding)来表示标签。独热编码是?个向量,它的分量和类别?样多。类别对应的分量设置为1,其他所有分量设置为0。例如我们对图像来分类,属于猫、狗和鸡这三类,标签y将是?个三维向量,其中(1, 0, 0)对应于“猫”、(0, 1, 0)对应于“鸡”、(0, 0, 1)对应于“狗”。 我们希望模型的输出y?j可以视为属于类j的概率,然后选择具有最?输出值的类别argmaxjyj作为我们的预测。但模型的输出 y?j不能直接作为我们的输出,因为这些输出数字的总和可能不为1,并且可能为负值。softmax函数将未规范化的预测变换为?负并且总和为1,同时要求模型保持可导。我们?先对每个未规范化的预测求幂,这样可以确保输出?负。为了确保最终输出的总和为1,我们再对每个求幂后的结果除以它们的总和。我们将softmax函数的输出作为最终的预测概率。
图像分类数据集
将文本标签和数字标签索引进行转换:
def get_fashion_mnist_labels(labels):
"""返回Fashion-MNIST数据集的?本标签"""
text_labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat',
'sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']
return [text_labels[int(i)] for i in labels]
|