每过一段时间,总会有一个python库被开发出来,改变深度学习领域。而PyTorch就是这样一个库。
在过去的几周里,我一直在尝试使用PyTorch。我发现它非常好上手。迄今为止,在我所有的各种深度学习库中,PyTorch一直是最灵活和容易的。
在本文中,我们将探索PyTorch的实际应用,其中包括基础知识和案例研究。我们还将比较使用numpy和PyTorch构建的神经网络,以查看它们在实现中的相似之处。
PyTorch概述
PyTorch的创作者说他们信奉的道理是 – 解决当务之急。这意味着我们立即运行我们的计算。这恰好适合python的编程方法,因为我们不必等待所有代码都写完才能知道它是否有效。我们可以运行部分代码并实时检查它。对于我,一个神经网络调试器来说,这无意是一个福音!
PyTorch是一个基于python的库,旨在提供灵活的深度学习开发平台。PyTorch的工作流程很可能接近python的科学计算库 – numpy。
那么,为什么我们要使用PyTorch来构建深度学习模型?:易于使用的API – 如Python一样简单。
Python支持 – 如上所述,PyTorch平滑地与Python数据科学堆栈结合。它与numpy非常相似,你甚至很难注意到他们的差异。
动态计算图 – PyTorch并没有为特定功能预定义图形,而是为我们提供了一个框架,可以随时随地构建计算图,甚至在运行时更改计算图。我们不知道创建一个神经网络需要多少内存时,这非常有用。
使用PyTorch的还有其他的优点,它能够支持multiGPU,自定义数据加载和简化的预处理程序。
自2016年1月初发布以来,许多研究人员已将其作为一种实现库,因为它易于构建新颖甚至非常复杂的计算图。话虽如此,PyTorch仍然需要一段时间才能被大多数数据科学从业者所采用,因为它是新的并且正在建设中。
在深入细节之前,让我们了解PyTorch的工作流程。
PyTorch使用命令式/热切式范式。也就是说,构建图形的每行代码都定义了该图的一个组件。即使在图形完全构建之前,我们也可以独立地对这些组件进行计算。这被称为运行时定义(define-by-run)法。
安装PyTorch非常简单。您可以按照它的官方文档操作,并根据自己的系统规格运行命令。例如,下面是我根据我的情况使用的命令:
1conda install pytorch torchvision cuda91 -c pytorch
我们在开始使用PyTorch时应该了解的主要元素是:PyTorch张量
数学运算
Autograd模块
Optim模块
nn模块
PyTorch张量
张量不过是多维数组。PyTorch中的张量与numpy的ndarray相似,张量也可以在GPU上使用。PyTorch支持很多类型的张量。
你可以定义一个简单的一维矩阵如下:
1# import pytorch
2import torch
3
4# define a tensor
5torch.FloatTensor([2])
12
2[torch.FloatTensor of size1]
数学运算
与numpy一样,科学计算库需要高效的实现数学函数。PyTorch提供了一个相似的接口,可以使用超过200多种数学运算。
以下是PyTorch中一个简单加法操作的例子:
1a= torch.FloatTensor([2])
2b= torch.FloatTensor([3])
3
4a+ b
5
[torch.FloatTensor of size 1]
这看起来不像是一种quinessential python方法吗?我们也可以对我们定义的PyTorch张量执行各种矩阵运算。例如,我们将转置一个二维矩阵:
1matrix= torch.randn(3,3)
2matrix
1-1.3531 -0.5394 0.8934
2 1.7457 -0.6291 -0.0484
3-1.3502 -0.6439 -1.5652
4[torch.FloatTensor of size3x3]
1matrix.t()
1-2.1139 1.8278 0.1976
2 0.6236 0.3525 0.2660
3-1.4604 0.8982 0.0428
4[torch.FloatTensor of size3x3]
Autograd模块
PyTorch使用一种称为自动微分(automatic differentiation)的技术。也就是说,有一个记录我们所执行的操作的记录器,然后它会反向回放以计算我们的梯度。这种技术在建立神经网络时尤为有效,因为我们可以通过计算正向传递过程中参数的微分来节省一个周期的时间。
1from torch.autogradimport Variable
2
3x= Variable(train_x)
4y= Variable(train_y, requires_grad=False)
Optim模块
torch.optim 是一个实现构建神经网络的各种优化算法的模块。大多数常用的方法已经被支持,因此我们不必从头开始构建它们(除非你乐意这么做)。
以下是使用Adam优化的代码&#x