用Pytorch实现线性回归模型

这篇具有很好参考价值的文章主要介绍了用Pytorch实现线性回归模型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

回顾

前面已经学习过线性模型相关的内容,实现线性模型的过程并没有使用到Pytorch。
这节课主要是利用Pytorch实现线性模型。
学习器训练:

  • 确定模型(函数)
  • 定义损失函数
  • 优化器优化(SGD)

之前用过Pytorch的Tensor进行Forward、Backward计算。
现在利用Pytorch框架来实现。

Pytorch实现

步骤

  1. 准备数据集
  2. 设计模型(计算预测值y_hat):从nn.Module模块继承
  3. 构造损失函数和优化器:使用PytorchAPI
  4. 训练过程:Forward、Backward、update

1. 准备数据

在PyTorch中计算图是通过mini-batch形式进行,所以X、Y都是多维的Tensor。
用Pytorch实现线性回归模型,PyTorch深度学习实践,pytorch,线性回归,人工智能

import torch
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[2.0], [4.0], [6.0]])

2. 设计模型

在之前讲解梯度下降算法时,我们需要自己计算出梯度,然后更新权重。
用Pytorch实现线性回归模型,PyTorch深度学习实践,pytorch,线性回归,人工智能
而使用Pytorch构造模型,重点时在构建计算图和损失函数上。
用Pytorch实现线性回归模型,PyTorch深度学习实践,pytorch,线性回归,人工智能

class LinearModel

通过构造一个 class LinearModel类来实现,所有的模型类都需要继承nn.Module,这是所有神经网络模块的基础类。
class LinearModel这种定义的模型类必须包含两个部分:

  • init():构造函数,进行初始化。
    def __init__(self):
        super(LinearModel, self).__init__()#调用父类构造函数,不用管,照着写。
        # torch.nn.Linear(in_featuers, in_featuers)构造Linear类的对象,其实就是实现了一个线性单元
        self.linear = torch.nn.Linear(1, 1)

用Pytorch实现线性回归模型,PyTorch深度学习实践,pytorch,线性回归,人工智能

  • forward():进行前馈计算
    (backward没有被写,是因为在这种模型类里面会自动实现)

Class nn.Linear 实现了magic method call():它使类的实例可以像函数一样被调用。通常会调用forward()。

    def forward(self, x):
        y_pred = self.linear(x)#调用linear对象,输入x进行预测
        return y_pred

代码

class LinearModel(torch.nn.Module):
    def __init__(self):
        super(LinearModel, self).__init__()#调用父类构造函数,不用管,照着写。
        # torch.nn.Linear(in_featuers, in_featuers)构造Linear类的对象,其实就是实现了一个线性单元
        self.linear = torch.nn.Linear(1, 1)
    def forward(self, x):
        y_pred = self.linear(x)#调用linear对象,输入x进行预测
        return y_pred

model = LinearModel()#实例化LinearModel()

3. 构造损失函数和优化器

采用MSE作为损失函数

torch.nn.MSELoss(size_average,reduce)

  • size_average:是否求mini-batch的平均loss。
  • reduce:降维,不用管。

用Pytorch实现线性回归模型,PyTorch深度学习实践,pytorch,线性回归,人工智能SGD作为优化器torch.optim.SGD(params, lr):

  • params:参数
  • lr:学习率

用Pytorch实现线性回归模型,PyTorch深度学习实践,pytorch,线性回归,人工智能

criterion = torch.nn.MSELoss(size_average=False)#size_average:the losses are averaged over each loss element in the batch.
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)#params:model.parameters(): w、b

4. 训练过程

  1. 预测
  2. 计算loss
  3. 梯度清零
  4. Backward
  5. 参数更新
    简化:Forward–>Backward–>更新
#4. Training Cycle
for epoch in range(100):
    y_pred = model(x_data)#Forward:预测
    loss = criterion(y_pred, y_data)#Forward:计算loss
    print(epoch, loss)
    optimizer.zero_grad()#梯度清零
    loss.backward()#backward:计算梯度
    optimizer.step()#通过step()函数进行参数更新

5. 输出和测试

# Output weight and bias
print('w = ', model.linear.weight.item())
print('b = ', model.linear.bias.item())

# Test Model
x_test = torch.Tensor([[4.0]])
y_test = model(x_test)
print('y_pred = ', y_test.data)

完整代码

import torch
#1. Prepare dataset
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[2.0], [4.0], [6.0]])

#2. Design Model
class LinearModel(torch.nn.Module):
    def __init__(self):
        super(LinearModel, self).__init__()#调用父类构造函数,不用管,照着写。
        # torch.nn.Linear(in_featuers, in_featuers)构造Linear类的对象,其实就是实现了一个线性单元
        self.linear = torch.nn.Linear(1, 1)
    def forward(self, x):
        y_pred = self.linear(x)#调用linear对象,输入x进行预测
        return y_pred

model = LinearModel()#实例化LinearModel()

# 3. Construct Loss and Optimize
criterion = torch.nn.MSELoss(size_average=False)#size_average:the losses are averaged over each loss element in the batch.
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)#params:model.parameters(): w、b

#4. Training Cycle
for epoch in range(100):
    y_pred = model(x_data)#Forward:预测
    loss = criterion(y_pred, y_data)#Forward:计算loss
    print(epoch, loss)
    optimizer.zero_grad()#梯度清零
    loss.backward()#backward:计算梯度
    optimizer.step()#通过step()函数进行参数更新

# Output weight and bias
print('w = ', model.linear.weight.item())
print('b = ', model.linear.bias.item())

# Test Model
x_test = torch.Tensor([[4.0]])
y_test = model(x_test)
print('y_pred = ', y_test.data)

输出结果:

85 tensor(0.2294, grad_fn=)
86 tensor(0.2261, grad_fn=)
87 tensor(0.2228, grad_fn=)
88 tensor(0.2196, grad_fn=)
89 tensor(0.2165, grad_fn=)
90 tensor(0.2134, grad_fn=)
91 tensor(0.2103, grad_fn=)
92 tensor(0.2073, grad_fn=)
93 tensor(0.2043, grad_fn=)
94 tensor(0.2014, grad_fn=)
95 tensor(0.1985, grad_fn=)
96 tensor(0.1956, grad_fn=)
97 tensor(0.1928, grad_fn=)
98 tensor(0.1900, grad_fn=)
99 tensor(0.1873, grad_fn=)
w = 1.711882472038269
b = 0.654958963394165
y_pred = tensor([[7.5025]])

可以看到误差还比较大,可以增加训练轮次,训练1000次后的结果:

980 tensor(2.1981e-07, grad_fn=)
981 tensor(2.1671e-07, grad_fn=)
982 tensor(2.1329e-07, grad_fn=)
983 tensor(2.1032e-07, grad_fn=)
984 tensor(2.0737e-07, grad_fn=)
985 tensor(2.0420e-07, grad_fn=)
986 tensor(2.0143e-07, grad_fn=)
987 tensor(1.9854e-07, grad_fn=)
988 tensor(1.9565e-07, grad_fn=)
989 tensor(1.9260e-07, grad_fn=)
990 tensor(1.8995e-07, grad_fn=)
991 tensor(1.8728e-07, grad_fn=)
992 tensor(1.8464e-07, grad_fn=)
993 tensor(1.8188e-07, grad_fn=)
994 tensor(1.7924e-07, grad_fn=)
995 tensor(1.7669e-07, grad_fn=)
996 tensor(1.7435e-07, grad_fn=)
997 tensor(1.7181e-07, grad_fn=)
998 tensor(1.6931e-07, grad_fn=)
999 tensor(1.6700e-07, grad_fn=)
w = 1.9997280836105347
b = 0.0006181497010402381
y_pred = tensor([[7.9995]])

练习

用以下这些优化器替换SGD,得到训练结果并画出损失曲线图。
用Pytorch实现线性回归模型,PyTorch深度学习实践,pytorch,线性回归,人工智能
比如说:Adam的loss图:
用Pytorch实现线性回归模型,PyTorch深度学习实践,pytorch,线性回归,人工智能文章来源地址https://www.toymoban.com/news/detail-805024.html

到了这里,关于用Pytorch实现线性回归模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度学习之pytorch实现线性回归

    作用j进行线性变换 Linear(1, 1) : 表示一维输入,一维输出 优化器对象 9961 tensor(4.0927e-12, grad_fn=) 9962 tensor(4.0927e-12, grad_fn=) 9963 tensor(4.0927e-12, grad_fn=) 9964 tensor(4.0927e-12, grad_fn=) 9965 tensor(4.0927e-12, grad_fn=) 9966 tensor(4.0927e-12, grad_fn=) 9967 tensor(4.0927e-12, grad_fn=) 9968 tensor(4.0927e-12, grad_fn

    2024年02月19日
    浏览(28)
  • Python和PyTorch深入实现线性回归模型:一篇文章全面掌握基础机器学习技术

    线性回归是一种统计学中的预测分析,该方法用于建立两种或两种以上变量间的关系模型。线性回归使用最佳的拟合直线(也称为回归线)在独立(输入)变量和因变量(输出)之间建立一种直观的关系。简单线性回归是输入变量和输出变量之间的线性关系,而多元线性回归

    2024年02月15日
    浏览(34)
  • 线性神经网路——线性回归随笔【深度学习】【PyTorch】【d2l】

    线性回归是显式解,深度学习中绝大多数遇到的都是隐式解。 3.1.1、PyTorch 从零实现线性回归 生成数据集及标签 d2l.plt.scatter(,,) ,使用d2l库中的绘图函数来创建散点图。 这个函数接受三个参数: features[:,1].detach().numpy() 是一个二维张量features的切片操作,选择了所有行的第二

    2024年02月15日
    浏览(48)
  • 【AI】《动手学-深度学习-PyTorch版》笔记(八):线性回归

    线性函数如下: y ^ = w 1 x 1 + . . . + w d x d

    2024年02月14日
    浏览(38)
  • 用Pytorch实现线性回归模型

    前面已经学习过线性模型相关的内容,实现线性模型的过程并没有使用到Pytorch。 这节课主要是利用Pytorch实现线性模型。 学习器训练: 确定模型(函数) 定义损失函数 优化器优化(SGD) 之前用过Pytorch的Tensor进行Forward、Backward计算。 现在利用Pytorch框架来实现。 准备数据集

    2024年01月19日
    浏览(37)
  • PyTorch深度学习实战 | 基于线性回归、决策树和SVM进行鸢尾花分类

    鸢尾花数据集是机器学习领域非常经典的一个分类任务数据集。它的英文名称为Iris Data Set,使用sklearn库可以直接下载并导入该数据集。数据集总共包含150行数据,每一行数据由4个特征值及一个标签组成。标签为三种不同类别的鸢尾花,分别为:Iris Setosa,Iris Versicolour,Iri

    2023年04月10日
    浏览(32)
  • 深度学习 -- 逻辑回归 PyTorch实现逻辑回归

    线性回归解决的是回归问题,而逻辑回归解决的是分类问题,这两种问题的区别是前者的目标属性是连续的数值类型,而后者的目标属性是离散的标称类型。 可以将逻辑回归视为神经网络的一个神经元,因此学习逻辑回归能帮助理解神经网络的工作原理。 逻辑回归是一种 广

    2024年02月06日
    浏览(31)
  • 深度学习之用PyTorch实现逻辑回归

    0.1 学习视频源于:b站:刘二大人《PyTorch深度学习实践》 0.2 本章内容为自主学习总结内容,若有错误欢迎指正! 代码(类比线性回归): BCEloss:   结果: 注:输出结果为类别是1的概率。

    2024年02月13日
    浏览(38)
  • 深度学习 -- pytorch 计算图与动态图机制 autograd与逻辑回归模型

    pytorch中的动态图机制是pytorch这门框架的优势所在,阅读本篇博客可以使我们对动态图机制以及静态图机制有更直观的理解,同时在博客的后半部分有关于逻辑回归的知识点,并且使用pytorch中张量以及张量的自动求导进行构建逻辑回归模型。 计算图是用来描述运算的有向无环

    2024年02月01日
    浏览(32)
  • 【pytorch】使用pytorch构建线性回归模型-了解计算图和自动梯度

    在 PyTorch 中,计算图(Computational Graph)是一种用于表示神经网络运算的数据结构。每个节点代表一个操作,例如加法、乘法或激活函数,而边则代表这些操作之间的数据流动。 计算图的主要优点是可以自动进行微分计算。当你在计算图上调用 .backward() 方法时,PyTorch 会自动

    2024年01月16日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包