【李沐深度学习笔记】线性回归的简洁实现

课程地址和说明

线性回归的简洁实现p4
本系列文章是我学习李沐老师深度学习系列课程的学习笔记,可能会对李沐老师上课没讲到的进行补充。

线性回归的简洁实现

通过使用深度学习框架来简洁地实现 线性回归模型 生成数据集

import numpy as np
import torch
from torch.utils import data
from d2l import torch as d2l

# 真实w和b
true_w = torch.tensor([2,-3,4],dtype=torch.float32)
true_b = 4.2
# 生成1000个训练样本
features , labels = d2l.synthetic_data(true_w, true_b, 1000)

调用框架中现有的API来读取数据

# 调用框架中现有的API来读取数据
def load_array(data_arrays, batch_size, is_train=True):
    # 构造一个PyTorch迭代器
    dataset = data.TensorDataset(*data_arrays)
    return data.DataLoader(dataset, batch_size, shuffle=is_train)

batch_size = 10
# 迭代器
data_iter = load_array((features, labels),batch_size)
# 和上节课一样,读第一组10个看看
next(iter(data_iter))

运行结果:

[tensor([[ 0.7387, 0.1532, 1.0885],
[ 1.1258, 0.3491, -2.4291],
[-1.3873, 0.5318, -0.6821],
[-1.1485, 0.6994, -1.8362],
[-1.2064, 0.3640, 0.1097],
[ 0.5053, -0.7316, -2.0487],
[-1.1591, -1.1890, -1.1080],
[ 1.1401, 0.3210, 0.3840],
[ 0.4739, 0.5967, -0.2293],
[ 1.0568, 0.5030, -0.1241]]),
tensor([[ 9.5699],
[-4.3101],
[-2.9045],
[-7.5574],
[ 1.1362],
[-0.7840],
[ 1.0235],
[ 7.0438],
[ 2.4473],
[ 4.2963]])]

使用框架的预定义好的层

# 使用框架的预定义好的层
from torch import nn # nn是神经网络的缩写
net = nn.Sequential(nn.Linear(3,1))# Sequential是神经网络一层,像list一样

初始化模型参数

# 初始化模型参数
# 访问第一层神经网络net[0](本节只有一层)
net[0].weight.data.normal_(0,0.01) # weight就是权重,data是真实数据,normal_是使用正态分布替换data的值
net[0].bias.data.fill_(0) # 设置偏差b为0

运行结果:
tensor([0.])

计算均方误差使用的是MSELoss类,也称为平方 L 2 L_{2} L2范数

# 计算均方误差使用的是MSELoss类,也称为平方L_2范数
loss = nn.MSELoss()

实例化SGD实例(小批量随机梯度下降)

# 实例化SGD实例
# net.parameters()拿出所有的参数
trainer = torch.optim.SGD(net.parameters(),lr=0.03)

训练过程代码与我们从零开始实现时所做的非常相似

# 训练过程代码与我们从零开始实现时所做的非常相似
num_epochs = 3 # 扫数据次数
for epoch in range(num_epochs):
    for X,y in data_iter:
        l = loss(net(X),y) # 均方损失,net自带模型参数,不需要自己把w和b放进去了
        trainer.zero_grad()
        l.backward() #均方损失求梯度
        trainer.step() # 按刚才设定的学习率梯度下降
    # 打印一下每次的均方损失
    l = loss(net(features), labels)
    print(f'epoch{epoch+1},loss{l:f}')

运行结果:
epoch1,loss0.000230
epoch2,loss0.000105
epoch3,loss0.000103

你可能感兴趣的:(李沐深度学习,深度学习,笔记,线性回归)