《动手学深度学习》第三章——(2)linear-regression-concise的python实现

本文介绍了如何使用PyTorch库从头构建一个简单的线性回归模型,包括数据准备、模型定义、参数初始化、损失函数和优化器的选择,以及模型训练过程。每次运行由于权重初始化随机性,loss值会有变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者github

源码地址

线性回归模型的简洁实现

import torch
from d2l import torch as d2l
from torch import nn
from torch.utils import data

true_w = torch.tensor([2, -3.4])
true_b = 4.2
features, labels = d2l.synthetic_data(true_w, true_b, 1000)


def load_array(data_arrays, batch_size, is_train=True):  # @save
    """构造一个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)
# 使用框架预定义好的层


net = nn.Sequential(nn.Linear(2, 1))  # 输入是二维,输出是一维

# 初始化模型参数
net[0].weight.data.normal_(0, 0.01)
net[0].bias.data.fill_(0)

# 计算均方误差使用的是MELoss类,也称为L_2范数
loss = nn.MSELoss()
# 实例化SGD(随机梯度下降)实例
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)
        trainer.zero_grad()
        l.backward()
        trainer.step()
    l = loss(net(features), labels)
    print(f'epoch {epoch + 1},loss {l:f}')
    

输出:

epoch 1,loss 0.000229
epoch 2,loss 0.000091
epoch 3,loss 0.000091

每次运行输出会略有区别的原因:

因为我们的权重参数是随机初始化的,所以每次运行会有不同的loss.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值