博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PyTorch入门教程
阅读量:5956 次
发布时间:2019-06-19

本文共 3364 字,大约阅读时间需要 11 分钟。

介绍

PyTorch是一个非常有可能改变深度学习领域前景的Python库。我尝试使用了几星期PyTorch,然后被它的易用性所震惊,在我使用过的各种深度学习库中,PyTorch是最灵活、最容易掌握的。

pytorch-logo-flat-300x210.png

在本文中,我们将讲解如何入门PyTorch,包括基础知识和案例研究。还将分别在numpy和PyTorch中从零开始构建神经网络,以了解它们在实践中的相似处与区别。

目录

·PyTorch的概述

·深入研究技术细节

·在Numpy和PyTorch中分别构建神经网络并进行对比

·与其它深度学习库比较

·案例研究——用PyTorch解决图像识别问题

PyTorch的概述

PyTorch的创始人说过他们创作的一个准则——他们想成为当务之急。这意味着我们可以立即执行计算。这正好符合Python的编程方法,不需要完成全部代码才能运行,可以轻松的运行部分代码并实时检查。对于我来说把它作为一个神经网络调试器是一件非常幸福的事。

PyTorch是一个基于Python的库,用来提供一个具有灵活性的深度学习开发平台。PyTorch的工作流程非常接近Python的科学计算库——numpy。

现在你可能会问,为什么我们要用PyTorch来建立深度学习模型呢?我可以列出三件有助于回答的事情:

·易于使用的API—它就像Python一样简单。

·Python的支持—如上所述,PyTorch可以顺利地与Python数据科学栈集成。它非常类似于numpy,甚至注意不到它们的差别。

·动态计算图—取代了具有特定功能的预定义图形,PyTorch为我们提供了一个框架,以便可以在运行时构建计算图,甚至在运行时更改它们。在不知道创建神经网络需要多少内存的情况下这非常有价值。

PyTorch的其他一些优点还包括:多gpu支持,自定义数据加载器和简化的预处理器。

自从2016年1月发布以来,许多研究人员将其作为一种“go-to”库,因为它可以轻松地构建新颖的甚至是极其复杂的图形。虽说如此,PyTorch仍有一段时间没有被大多数数据科学实践者采用,因为它是新的而且处于“正在建设”的状态。

深入技术细节

在深入讨论细节之前,让我们先看看PyTorch的工作流程。

PyTorch使用了命令式/热切的范例。也就是说,在构建一个图形时,每一行代码都定义了改图的一个组件。我们甚至能在图形构建完成前,独立的对这些组件进行计算。这就是所谓的“逐运行”方法。

dynamic_graph-768x432.gif

来源:

安装PyTorch非常简单。您可以按照中提到的步骤操作,并根据您的系统规格运行命令。例如,这是我根据我选择的选项使用的命令:

3-768x368.png
 

在开始使用PyTorch时应该了解的主要元素:

·PyTorch张量

·数学运算

·Autograd模块

·Optim模块

·神经网络模块

下面让我们依次介绍这些元素吧。

PyTorch张量

张量只是多维数组。PyTorch中的张量类似于numpy的ndarrays,另外,张量也可以在GPU上使用。PyTorch支持。

你可以如下定义一个简单的一维矩阵:

8da9d95d2b4ac4c42806d7c8970b182c06378a03

数学运算

与numpy一样,科学计算库非常重要的一点是能够实现高效的数学功能。而PyTorch提供了一个类似的借口,可以使用200个以上的数学运算。

下面是在PyTorch中实现一个简单的添加操作的例子:

9b928611438a1268106b4eca1b8855f14760e5c7
这和基本的python方法非常相似。我们还可以在定义的PyTorch张量上执行各种矩阵运算。例如,我们要转置一个二维矩阵:
f0e9206f87e0e5b484cdf3c6a17275b61ee3d32f

Autograd模块

PyTorch使用了一种叫做自动微分的技术。也就是说,它会有一个记录我们所有执行操作的记录器,之后再回放记录来计算我们的梯度。这一技术在构建神经网络时尤其有效,因为我们可以通过计算前路参数的微分来节省时间。

4.png

来源:

0e7c1155911f80f3f3a8e1d52556963944740708

Optim模块

Torch.optim是一个实现各种优化算法的模块,用于构建神经网络。它支持大多数常用的方法,因此我们不必从头开始构建它们。

下面是使用Adam优化器的代码:

optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)

神经网络模块

虽然PyTorch Autograd可以很容易的定义计算图形和使用梯度,但是对于定义复杂的神经网络来说可能有点太低级了。而这就需要神经网络模块来提供帮助。

nn包定义了一组模块,我们可以把它看作是一个神经网络层,它产生输入输出,并且可能有一些可训练的权重。

你可以把nn模块看作是PyTorch的内核!

a7e017f9a1d05503bb02c472ed39fc05107c8c1a

现在您已经了解了PyTorch的基本组件,那么可以轻松地从头构建自己的神经网络了。如果想知道怎么做,就继续往下看吧。

分别在Numpy和PyTorch中构建神经网络并比较

我之前提到过PyTorch和Numpy非常相似,现在让我们看看原因。在本节中,我们将通过实现一个简单的神经网络来解决二进制分类问题。

fbb6946e9cb1e6d660835616c522145336ea3d41

b83b5ef97d94a81103242451b1a3624ea792d806
57f5da3e9e2bde60be91fc2016335d02c2a0153f

现在,试着在PyTorch中以超级简单的方式发现差异(在下面的代码中用粗体表示差异)。

6572f32e204b34dd03b861782061b208b6c28517

0999795514a6688a4d9f2321af2fbd18b0026179
cd4ec39256bf2e3955691e358ea429b45e16cd31

与其它深度学习库比较

通过这个中可以看出,PyTorch训练一个长短期记忆网络(LSTM)的过程比其他所有主要的深度学习库都要出色,因为它在每个时代的中位时间都最低(参考下图)。

bars_1x320LSTM_ce.png?raw=true

PyTorch中用于数据加载的API设计的非常好,它的接口可以在数据集、采样器和数据加载器中指定。并且通过与TensorFlow(读取器、队列等)数据加载工具比较发现,PyTorch的数据加载模块非常容易使用。此外,PyTorch在构建神经网络时是无缝的,所以不必依赖像Keras这样的第三方高层库。

另一方面,我也不建议使用PyTorch进行部署。因为它还尚未发展完美。正如PyTorch开发者说:“我们能够看到,用户会首先创建一个PyTorch模型,当要把模型投入生产时会将其转换为Caffe2模型,之后再运送到移动平台或其他平台。”

案例研究——解决PyTorch中的图像识别问题

为了更加熟悉PyTorch,我们将实践解决分析Vidhya的深度学习问题——识别数字。让我们看看我们的问题陈述:

我们的问题是图像识别问题,从一个给定的28x28图像中识别数字。一部分图像用于训练,其余的用于测试模型。

首先下载train和测试文件。该数据集包含所有图像的压缩文件,以及具有相应train和测试图像名称的train.csv和test.csv文件。数据集只提供png格式原始图像,不提供其它附加功能。

现在让我们开始吧:

步骤0:准备

a)导入所有必要的库。

1ebda80ed8eb8d64d62c2fad883db6e061068653

b)设置一个种子值,这样我们就可以控制模型的随机性。

3cf0174a2c1c41276f1bf59d60539ec2b25d8a25

c)安全起见,第一步设置目录路径。

5c3503282272a17b9108f761d6efb48bc8001ab7

步骤1:数据加载和预处理

A)现在让我们看看这些数据集。它们都有相应标签文件名,并且是.csv格式。

b3f01639e352b3e426989a68a339e4bbeaa33c6b

B)让我们看看数据是什么样的,现在读取图像并显示。

7a361478573dd041dd75e5fb603368d5ce618585

3.png

C)为了更容易操作,让我们把所以图像存储为numpy数组。

5fb58c1284c28f180dbb46a154e4ab3fd687217d

D)由于这是一个典型的机器语言(ML)问题,为了测试模型的正常运行,我们创建了一个验证集。训练集与验证集比例为70:30。

b1d8d3fba7cb1d15ad49035d75849315c5b6ac27

步骤2:构建模型

A)这是最重要的部分!首先定义神经网络架构。我们定义了一个具有输入、隐藏和输出三层的神经网络。输入和输出中的神经元数目是固定的,因为输入是28x28的图像,输出是一个10x1向量的代表类,而在隐藏层我们采用了50个神经元。在这里,我们用Adam作为优化算法,这是梯度下降算法的有效变体。

9cb557363cf5c2f0274d5ae6293c134f53c3dc37

B)训练模型。

389d2698aeace165c9af38052c9d9bc3d6f06009

d0d4ce7c67a6d2246c52a62e43ccdb6561ff3b25

ec1fa9bb68014715b63367750e81b9b0f16c21ec

ca97439ba082aba53d9f16a563104633aa36583a

训练成绩如下:

0.8779008746355685

而验证分数为:

0.867482993197279

这是一个相当令人印象深刻的分数,尤其是这个非常简单的神经网络我们只训练了5次。

希望这篇文章能让您看到PyTorch是如何改变构建深度学习模型的。在本文中,我们只是触及了表面。要想深入研究,您可以从PyTorch官网下载相关和。

本文由北邮 老师推荐,组织翻译。

文章原标题《An Introduction to PyTorch - A Simple yet Powerful Deep Learning Library》

作者:Faizan Shaikh

译者:奥特曼,审校:袁虎。

文章为简译,更为详细的内容,请查看

转载地址:http://qarxx.baihongyu.com/

你可能感兴趣的文章
html5判断用户摇晃了手机(转)
查看>>
VS下Qt4.8.4安装
查看>>
Linux df命令
查看>>
redhat6.5 配置使用centos的yum源
查看>>
取得内表的数据数
查看>>
在一个程序中调用另一个程序并且传输数据到选择屏幕执行这个程序
查看>>
“=” “:=” 区别
查看>>
pwnable.kr lotto之write up
查看>>
python之UnittTest模块
查看>>
HDOJ_ACM_Rescue
查看>>
笔记纪录
查看>>
九、oracle 事务
查看>>
Git - 操作指南
查看>>
正则表达式的贪婪与非贪婪模式
查看>>
SqlServer存储过程调用接口
查看>>
DOM
查看>>
通过jQuery.support看javascript中的兼容性问题
查看>>
NYOJ-取石子
查看>>
AngularJS
查看>>
《zw版·Halcon-delphi系列原创教程》halconxlib控件列表
查看>>