[快速学习] Pytorch简介(XNUMX):实现MLP回归并学习PyTorch的基础知识

上次,我回顾了如何处理火炬,这是PyTorch的基础。

这次,我想在PyTorch中实现多层感知器(MLP)回归,并查看主要的PyTorch软件包。

总流量

模型实现的总体流程如下。 括号中的数字是当时使用的PyTorch软件包。

  • 输入数据集的创建,迭代处理(数据集,数据加载器)
  • 神经网络的定义(模块)
  • 损耗计算,梯度传播到网络参数(nn.Module)
  • 更新网络权重(优化器)

主要的PyTorch软件包

与PyTorch无关,许多深度学习框架提供了各种程序包来简化实现。 PyTorch中的主要项目是:

火炬张量多维数组。 PyTorch中使用的数据结构。
火炬自动档实施正向/反向传播。支持Tensor的自动微分操作,例如向后传播(backward())。
火炬.utils.data它包括实用程序,例如“数据集”和“数据加载器”,这些工具收集要输入的数据并将其标签作为一组,而“数据加载器”则以小批量的形式从数据集中提取数据并将其传递给模型。
火炬模块用于构建神经网络。负责参数封装,例如保存和加载模型以及移至GPU。
火炬优化允许您使用参数优化算法,例如SDG和Adam。
主要的PyTorch软件包

模型实施

创建数据集

这次,我们将使用numpy准备sin(5x)加随机数作为练习数据。from_numpy()转换为torch.tensor。

型号定义

在pytorch中,模型定义为从nn.Module类继承的“ python类”。

MLP类(nn.Module):定义的MLP类继承自父类nn.Module
def init():接收参数并实例化
超级(MLP,self).init():使用父函数继承父类
def转发(自己,x):实例化后调用该函数时有效。 定义前向功能时,也会自动定义后向功能(梯度计算)。

.parameters()您可以通过它获得网络的结构和参数。

损耗计算/反向传播/重量更新

为了理解个体行为,我们将从x中获取一条数据并将其输入到神经网络中,以查看由于误差计算和权重更新而导致的参数变化。

尝试改变学习循环

对每个批次执行上述流程以训练神经网络。
Dataset返回一组数据和相应的标签,DataLoader是一个以批处理大小返回数据的类。

可视化计算图

可以使用称为torchviz的python包来可视化此次创建的3层MLP的结构。parameters()当还不够的时候请。

到目前为止,我们已经通过实施MLP回归确定了PyTorch及其主要PyTorch软件包。