How to use PyTorch1.4
PyTorch是由Yann LeCunn领导的Facebook AI Research (FAIR)小组开发的,第一个lpha版本于2016年9月发布。它提供与Python库的深度集成,如NumPy,可以用来扩展其功能,强大的GPU加速,并使用autograd系统自动差异化。它通过一个较低层次的API提供了比Keras更细粒度的控制,主要用作深度学习研究平台,但也可以取代NumPy,同时支持GPU计算
与诸如Theano或TensorFlow等使用的静态计算图相比,它采用了急切执行。而不是最初定义和编译一个网络快速但静态执行,它依赖于它的autograd包自动微分张量操作;也就是说,它“动态地”计算梯度,这样网络结构可以更容易地部分修改。这称为definition -byrun,这意味着反向传播是由代码的运行方式定义的,这反过来意味着每个迭代可以是不同的。PyTorch文档提供了这方面的详细教程。
由此产生的灵活性,加上直观的python优先接口和执行速度,促成了它的迅速流行,并导致开发了许多支持库来扩展它的功能。
让我们通过实现简单的网络架构来了解PyTorch和autograd是如何工作的(详情请参阅how_to_use_pytorch笔记本)。
如何创建一个PyTorch数据加载器
我们首先将Numpy或pandas输入数据转换为torch张量从它们到Numpy的转换非常简单。
我们可以使用pytorch张量首先实例化一个TensortDataset,然后在第二步实例化一个包含batch-size信息的dataloader
如何定义神经网络的结构
PyTorch使用Net()类定义了NN体系结构。中心元素是前向函数。
Autograd自动定义相应的反向函数来计算梯度。
任何合法的张量运算都是前向函数的公平博弈,提供了设计灵活性的日志。在
在我们简单的例子中,我们只需要在初始化张量的输入输出关系之后,将张量和属性联系起来
然后我们实例化一个Net()对象,并可以检查体系结构如下:
为了说明快速执行,我们还可以检查第一个张量中的初始化参数;
如果需要启用GPU处理,可以使用net。cuda()。请参阅PyTorch文档,了解如何在CPU和/或一个或多个GPU单元上放置张量。
我们还需要定义一个损失函数和优化器,使用一些内置选项:
如何训练模型
模型训练由每个阶段的外部循环组成,即每次传递训练数据,以及一个对DataLoader生成的批进行内部循环。执行向前和向后的操作通过学习算法完成。需要注意根据需求调整数据类型不同的对象和功能;例如,标签需要是整数,特性应该是类型的浮动:
该笔记本还包含一个示例,使用livelossplot包绘制整个培训过程中的损失,这是由Keras开箱即用提供的。
如何评估模型预测
为了从我们训练的模型中获得预测,我们将特征数据传递给它,并将预测转换为NumPy数组。我们得到了两个类的softmax概率:
从这里开始,我们可以像以前一样继续计算损失指标或可视化结果,再次重现我们之前发现的决策边界的一个版本。