开启成长之旅!这是我参加「日新方案 12 月更文挑战」的第17天,点击查看活动详情 这个是我个人学习笔记,跟着b站沐神学习,链接: 08 线性回归 + 根底优化算法【动手学深度学习v2】_哔哩哔哩_bilibili

我仅仅对代码进行一些解读,发现有解读不对的当地,欢迎大家来谈论区评论

我将其分为上下两篇来讲解

生成数据集

咱们将从零开端完成整个办法,包括数据流水线、模型、损失函数和小批量随机梯度下降优化器

第一步:导包

import torch
import random
from d2l import torch as d2l

若显示报错,没有d2l这个模块,在jupyter notebook中输入

!pip install -U d2l

第二步:结构函数

深度学习——线性回归实现笔记(上)

深度学习——线性回归实现笔记(上)

def synthetic_data(w,b,num_examples):
    '''生成y = wx + 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))
true_w = torch.tensor([2,-3.4])
true_b = 4.2
features,labels = synthetic_data(true_w,true_b,1000)
print("features:",features[0],"\nlabels:",labels[0])

1)此处b是个一维向量,当matmul的第一个参数是2维向量,第2个参数是一维向量时,返回的是矩阵和向量的乘积,结果是向量,因而,y需求reshape

2)reshape中-1表明主动计算,1表明固定,即列向量为1

3)创立一个形状为(3,4)的张量。 其中的每个元素都从均值为0、规范差为1的规范高斯分布(正态分布)中随机采样。

normal(0, 1, size=(3, 4))

结果

深度学习——线性回归实现笔记(上)

第三步:画图看一下是不是线性相关

d2l.set_figsize()
d2l.plt.scatter(features[:,-1].detach().numpy(),
               labels.detach().numpy(),1)

1)detach()分离出数值,不再含有梯度

2)scatter()函数最终的一个1是绘制点直径的巨细,假如改成50会看到一个个点非常粗

3)总的来说 生成第二个特征features[:,1]labels的散点图, 可以直观观察到两者之间的线性关系

深度学习——线性回归实现笔记(上)

读取数据集

第一步:界说函数

深度学习——线性回归实现笔记(上)
编辑

练习模型时要对数据集进行遍历,每次抽取一小批量样本,并使用它们来更新咱们的模型。 由于这个进程是练习机器学习算法的根底,所以有必要界说一个函数, 该函数能打乱数据集中的样本并以小批量方法获取数据。

鄙人面的代码中,咱们界说一个data_iter函数, 该函数接收批量巨细、特征矩阵和标签向量作为输入,生成巨细为batch_size的小批量。 每个小批量包括一组特征和标签

def data_iter(batch_size,features,labels):
    num_examples = len(features)
    indices = list(range(num_examples))
    #这些样本是随机读取的,没有特定的次序
    random.shuffle(indices)
    for i in range(0,num_examples,batch_size):
        batch_indices = torch.tensor(
        indices[i:min(i+batch_size,num_examples)])
        yield features[batch_indices],labels[batch_indices]

1)只是indices这个list被打乱了,features和labels都是次序的,用循环才干随机地放进去

2)min的作用 不让拜访越界 list超出会报错,out of index

3)经过 yield,创立生成器 链接:【python】根底知识稳固(一)_heart_6662的博客-CSDN博客

咱们不再需求编写读文件的迭代类,就可以轻松完成文件读取

第二步:感受一下小批量运算

咱们直观感受一下小批量运算:读取第一个小批量数据样本并打印。 每个批量的特征维度显示批量巨细和输入特征数。 同样的,批量的标签形状与batch_size持平

batch_size = 10
for X, y in data_iter(batch_size, features, labels):
    print(X, '\n', y)
    break

深度学习——线性回归实现笔记(上)