3.1 线性回归
3.1.1 基本元素
训练数据集/样本/标签/特征
3.1.1.1 线性模型
一个线性模型有权重,偏移量,权重决定特征对预测值的影响,偏移量则是当特征为0时说明预测值为多少
3.1.1.2 损失函数
损失函数能够量化目标的实际值与预测值之间的差距(损失函数以及部分函数前面的二分之一用来简化形式)
度量整个数据集质量,需要对n个样本求损失均值
3.1.1.3 解析解
对于这个解析解的转化,w* = ?(3.18公式)右侧的解是矩阵进行转置变换后得到的。
3.1.1.4 随机梯度下降
梯度下降用法:计算损失函数关于模型参数的导数。但由于每次更新参数之前需要便利整个数据集,因此通常会在每次需要计算更新时抽取一小批样本,
叫做小批量随机梯度下降。
至于每次迭代更新的过程:对3.1.9的公式进行分析即可。要把偏导区分,第i个损失函数l要明确。
η为学习率。
泛化:找到一组参数能在从未见过的数据上实现较低的损失。
3.1.2 矢量化加速
矢量化代码会加速运算,对代码要思考优化。
3.1.3 正态分布于平方损失
均方差误差损失可用于线性回归:假设观测中包含噪声,且噪声服从正态分布。
这里有一个极大似然估计法,有需要要重新来这里理解。
3.2 线性回归从零开始实现
3.2.1 生成数据集
def synthetic_data(w, b, num_examples): #@save
"""生成y=Xw+b+噪声"""
X = torch.normal(0, 1, (num_examples, len(w)))
y = torch.matmul(X, w) + b
y += torch.normal(0, 0.01, y.shape)#添加噪声,防止过拟合,添加随机性。
return X, y.reshape((-1, 1))#-1表示自动推断该维度的大小,1表示这里想要一个列向量。该函数最后返回特征X与标签y。
true_w = torch.tensor([2, -3.4])#权重,为2与-3.4
true_b = 4.2 #偏移量 4.2
features, labels = synthetic_data(true_w, true_b, 1000) #特征,标签生成
3.2.2 读取数据集
def data_iter(batch_size, features, labels): #batch_size 每行样本数量 features 特征矩阵 labels 标签向量或矩阵
num_examples = len(features) #数据集中样本的数量,通过计算特征矩阵的长度来确定样本数
indices = list(range(num_examples))#创建列表,索引长度为从0到num_examples-1的长度
random.shuffle(indices)#打乱索引
for i in range(0, num_examples, batch_size):#以batch_size为步长,遍历整个数据集,i为索引。
batch_indices = torch.tensor(
indices[i: min(i + batch_size, num_examples)])#从第i个索引到第i+batch_size之间的索引子列表,如果超过num_examples,则取最后一个样本索引即停,并通过torch.tensor转化为张量
yield features[batch_indices], labels[batch_indices]#yield关键字,允许函数每次调用时返回一个值,但保留函数的执行状态,以便下次继续执行。本段用来生成批量数据。
3.2.3 初始化模型参数
标签:第三章,torch,batch,indices,神经网络,num,examples,3.1,线性 From: https://www.cnblogs.com/bflq/p/18363836