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


    课程地址和说明

    线性回归的简洁实现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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    调用框架中现有的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))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    运行结果:

    [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一样
    
    • 1
    • 2
    • 3

    初始化模型参数

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

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

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

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

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

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

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

    # 训练过程代码与我们从零开始实现时所做的非常相似
    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}')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

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

  • 相关阅读:
    【论文笔记】Aleph_star
    JAVA小游戏 “拼图”
    计算机网络篇之TCP滑动窗口
    git 删除远程标签tag【杂记】
    django建站过程(4)创建文档显示页面
    【毕业设计】中文对话问答机器人系统 - python 深度学习
    css排版—— 一篇优雅的文章(中英文) vs 聊天框的特别排版
    使用Git将项目上传到GitHub(Windows+Linux双教程)【建议收藏】
    信号线多长算长呢——之上升沿与时延的爱恨情仇
    新一代开源免费的终端工具,太酷了
  • 原文地址:https://blog.csdn.net/qq_30204431/article/details/133357804