欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Pytorch深度学习笔记②:线性回归模型的简单实现

程序员文章站 2022-05-26 21:32:56
...

本文参考:08 线性回归 + 基础优化算法【动手学深度学习v2】_哔哩哔哩_bilibili

一、整体思路

利用深度学习Pytorch框架来实现线性回归模型的简洁实现

二、代码框架

首先,导入所需要的包,并生成数据集。

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

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

再定义load_array函数,其目的是实现小批量随机梯度下降法中的小批量的选取,实现对数据集按照batch_size进行分批,并随机进行读取。

def load_array(data_arrays, batch_size, is_train=True):
    '''构造一个数据迭代器'''
    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)
next(iter(data_iter))

 接下来即可构建模型

from torch import nn
net = nn.Sequential(nn.Linear(2, 1))

# 实现对模型中参数的初始化
net[0].weight.data.normal_(0, 0.01)  # 将模型中的w初始化为均值为0,方差为0.01的分布
net[0].bias.data.fill_(0)  # 将模型中的b初始化为0

# 定义损失函数为均方误差
loss = nn.MSEloss()

# 定义优化方法:实例化SGD实例来实现对模型的参数更新
trainer = torch.optim.SGD(net.parameters(), lr=0.03)

开始训练

num_epoch = 3  # 训练次数为3
for epoch in range(num_epoch):
    for X, y in data_iter:  # 随机抽取10个小批量样本进行训练
        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}")
        

最终得到结果为:

Pytorch深度学习笔记②:线性回归模型的简单实现