详解使用pytorch实现线性回归

本文通过构建线性回归模型,介绍了PyTorch的基本使用流程,包括模型定义、数据准备、模型训练及评估等内容。

引言

pytorch作为一门主流的深度学习框架,API是非常多的,但使用pytorch搭建神经网络模型时,往往套路又较为固定。因此通过一些实际的例子去熟悉如何搭建模型、如何训练、测试数据,在实践中学习的效果往往要比漫无目的的学语法和API要好的多。

本文主要从最为基础的线性回归着手,严格来说线性回归更多的在机器学习中讨论,但是我们也能搭建一个简单的“神经网络”,用深度学习的套路来解决这个问题,而这个基本套路,即使是在搭建极为复杂的神经网络中也是适用的。

本文不会对深度学习的一些基本概念做过多的阐述,主要是以应用为导向,穿插着介绍pytorch的一些常用方法。

任务目标

线性回归的式子满足:y = w*x + b,其中w和b均为参数,x,y可以理解成特征值和目标值,在程序中我们指定x,w,b,目标值y也随之确定了下来。然后将x通过神经网络进行训练,我们希望通过训练,使得随机初始化的参数w和b能够逼近一开始我们指定的w,b,使得预测值pred和实际的目标值y能够无限接近。

初始化数据

这里我们假设有50个数据,采用随机赋值的方式定义x,然后取w=3,b=0.8,得到的y = 3 * x + 0.8作为目标值,这里x的随机赋值用pytorch的rand()方法实现:

# 1. 定义数据
x = torch.rand([50,1])
y = x*3 + 0.8

这里我们观察到,x的形状是[50,1],也就是50行1列的数据,50代表一共有50条数据,相当于batch_size,这里由于样本数量本身就不多,所以并没有分成多个batch,而是一次性将所有样本放到神经网络中去训练。

y通过上面的运算,形状也是[50,1],对应着x的目标值

构建模型

nn.Modultorch.nn提供的一个类,是pytorch中我们自定义网络的一个基类,在这个类中定义了很多有用的方法,让我们在继承这个类定义网络的时候非常简单。

当我们自定义网络的时候,有两个方法需要特别注意:

  1. __init__需要调用super方法,继承父类的属性和方法

  2. farward方法必须实现,用来定义我们的网络的向前计算(前向传播)的过程

用前面的y = wx+b的模型举例如下:

from torch import nn
class Lr(nn.Module):
    def __init__(self):
        super(Lr, self).__init__()  #继承父类init的参数
        self.linear = nn.Linear(1, 1) 

    def forward(self, x):
        out = self.linear(x)
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值