JoyBeanRobber

导航

李沐动手学深度学习7——pytorch线性回归

李沐动手学深度学习,有视频、有中文电子书(含配套代码),推荐!

视频(B站搜一大堆):https://www.bilibili.com/video/BV1fsmyYnEfw?spm_id_from=333.788.videopod.episodes&vd_source=0199f117e2bdbb60970034d4f33ff67d

官网电子书:https://zh.d2l.ai/index.html

 

使用pytorch实现求解线性回归问题,主要知识点有:

1.torch.utils.data ——Pytorch中的数据加载和处理模块,代码中使用到了其包含的数据集类data.TensorDataset,和数据集批量加载迭代器类data.DataLoader

2.torch.nn——Pytorch中的神经网络模块,代码中使用到了其包含的神经网络层容器nn.Sequential,线性变换层nn.Linear,L2范数类MSELoss

3.torch.optim——Pytorch中的优化算法模块,代码中使用到了其包含的随机梯度下降优化器类optim.SGD

代码如下:

import torch
from torch.utils import data
from p1_LinerRegression import synthetic_data
from torch import nn


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)


if __name__ == "__main__":
    true_w = torch.tensor([2, -3.4])
    true_b = 4.2
    features, labels = synthetic_data(true_w, true_b, 1000)

    batch_size = 10
    data_iter = load_array((features, labels), batch_size)
    print(next(iter(data_iter)))

    # nn是pytorch的神经网络模块
    # Sequential是存放神经网络层的容器
    # nn.Linear是线性变换层
    # 输入维度为2,输出维度为1
    net = nn.Sequential(nn.Linear(2, 1))

    # 初始化线性变换层的模型参数
    net[0].weight.data.normal_(0, 0.01)
    net[0].bias.data.fill_(0)

    # MSELoss类,返回平方L2范数
    loss = nn.MSELoss()

    # 定义优化算法
    # SGD:Stochastic Gradient Descent 是实现随机梯度下降的优化器类
    trainer = torch.optim.SGD(net.parameters(), lr=0.3)

    # 训练
    num_epochs = 3
    for epoch in range(num_epochs):
        for X,y in data_iter:
            l = loss(net(X), y)
            trainer.zero_grad()
            l.backward()
            # step函数执行参数更新
            trainer.step()
        l = loss(net(features), labels)
        print(f'epoch {epoch + 1}, loss {l:f}')

 

 

posted on 2025-04-19 22:36  欢乐豆掠夺者  阅读(18)  评论(0)    收藏  举报