引言
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.Modul 是torch.nn提供的一个类,是pytorch中我们自定义网络的一个基类,在这个类中定义了很多有用的方法,让我们在继承这个类定义网络的时候非常简单。
当我们自定义网络的时候,有两个方法需要特别注意:
-
__init__需要调用super方法,继承父类的属性和方法 -
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)

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





