速学10分钟让你了解PyTorch框架(附代码)

Posted Major术业

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了速学10分钟让你了解PyTorch框架(附代码)相关的知识,希望对你有一定的参考价值。

导  读

由于使用了强大的GPU加速的Tensor计算(类似numpy)和基于tape的autograd系统的深度神经网络,PyTorch成为了深度学习者们口中的新流行框架。许多新的论文在发表过程中都加入了PyTorch代码。本文作者10分钟带你了解PyTorch代码。



#小M说#



【作者】Hamidereza saghir 

【编译】小M


本文共 1141 字,阅读需 10 分钟


PyTorch 构 成


PyTorch由以下4个主要包组成

1)Torch:一个类似于Numpy的通用数组库,可以将张量类型转换为(torch.cuda.TensorFloat)并在GPU上进行计算;

2)torch.autograd:用于构建计算图形并自动获取梯度;

3)torch.nn:具有共同层和成本函数的神经网络库;

4)torch.optim:具有通用优化算法(如SGD,Adam等)的优化包。


你可以这样导入PyTorch


PyTorch 特 点


1. torch数组取代numpy ndarray ,可在GPU支持下提供线性代数


PyTorch提供了一个像Numpy数组一样的多维数组。当数据类型转换为三维数组(torch.cuda.TensorFloat)时即可以在GPU上进行处理,这个数组及它的关联函数都是一般的科学计算工具。这极大的提高了GPU的利用效率。

大家可以比较Torch和numpy并了解它们之间的关系。


【速学】10分钟让你了解PyTorch框架(附代码)

【速学】10分钟让你了解PyTorch框架(附代码)

【速学】10分钟让你了解PyTorch框架(附代码)

【速学】10分钟让你了解PyTorch框架(附代码)



2. torch.autograd可以生成一个计算图 ,自动计算梯度


autograd包提供了定义计算图的能力,这使得我们可以自动计算渐变梯度。在计算图中,一个节点是一个数组,边(edge)是on数组的一个操作。


要做一个计算图,我们需要(torch.aurograd.Variable())函数中打包数组来创建一个节点。我们对这个节点上所做的所有操作都将被定义为边,它们将成为计算图中新的节点。图中的每个节点都有一个(node.data)属性,它是一个多维数组和一个(node.grad)属性,这是相对于一些标量值的梯度(node.grad也是一个.Variable()) 。在定义计算图之后,我们可以使用单个命令(loss.backward())来计算图中所有节点的损耗梯度。

  • 使用torch.autograd.Variable()将张量转换为计算图中的节点。

  •     使用x.data访问其值。

  •     使用x.grad访问其梯度。

  • 在.Variable()上执行操作,绘制图形的边缘。


【速学】10分钟让你了解PyTorch框架(附代码)

【速学】10分钟让你了解PyTorch框架(附代码)

【速学】10分钟让你了解PyTorch框架(附代码)

【速学】10分钟让你了解PyTorch框架(附代码)

【速学】10分钟让你了解PyTorch框架(附代码)

【速学】10分钟让你了解PyTorch框架(附代码)


3. torch.nn包含多种NN层(张量行的线性映射)+(非线性)


torch.nn是高级神经网络库,帮助构建神经网络计算图,避免手动操纵张量和参数的麻烦


torch.nn抽象出了神经网络层中的所有参数处理,在使用一些命令(如torch.nn.conv)时能够更容易地定义NN。这个包也带有流行的损失函数的功能(如torch.nn.MSEloss)。我们首先定义一个模型容器,例如使用(torch.nn.Sequential)的分层序列模型,然后在序列中列出我们期望的层。这个高级神经网络库也可以处理其他的事情,我们可以使用(model.parameters())访问参数(Variable())。


【速学】10分钟让你了解PyTorch框架(附代码)

【速学】10分钟让你了解PyTorch框架(附代码)

【速学】10分钟让你了解PyTorch框架(附代码)

【速学】10分钟让你了解PyTorch框架(附代码)


我们还可以通过子类(torch.nn.Module)定义自定义层,并启用(forward())函数:(Variable())作为输入,并产生(Variable())作为输出。我们也可以通过定义一个时间变化的层来做一个动态网络。

  • 定义自定义层时,需要启用2个函数:

  • init_函数必须始终被继承,然后层的所有参数必须在这里定义为类变量(self.x)

  • 正向函数是我们通过层传递输入的函数,使用参数对输入进行操作并返回输出。输入需要是一个autograd.Variable(),以便pytorch可以构建图层的计算图。

【速学】10分钟让你了解PyTorch框架(附代码)


5.torch.optim可以做优化


最后一个特色是与NN库一起工作的优化软件包(torch.optim)。该库包含复杂的优化器,如Adam,RMSprop等。我们可以使用torch.nn构建一个nn计算图,用torch.autograd来计算梯度,然后将它们提供给torch.optim来更新网络参数


我们定义一个优化器并传递网络参数和学习率(opt =torch.optim.Adam(model.parameters(),lr = learning_rate)),然后我们调用(opt.step())对我们的参数进行近一步更新。【速学】10分钟让你了解PyTorch框架(附代码)

【速学】10分钟让你了解PyTorch框架(附代码)


建立神经网络很容易,但是如何协同工作并不容易。下面的示例表明了如何协同工作:




【附:相关推荐】


1.

2.

3.

4.




以上是关于速学10分钟让你了解PyTorch框架(附代码)的主要内容,如果未能解决你的问题,请参考以下文章

强大的PyTorch:10分钟让你了解深度学习领域新流行的框架

手把手教你由TensorFlow上手PyTorch(附代码)

干货|10分钟入门PyTorch~附源码

为何如此简单,让你20天吃透 PyTorch(附下载)

深度学习之30分钟快速入门PyTorch(附学习资源推荐)

带你测试对比深度学习框架!TensorFlow,Keras,PyTorch...哪家强?(附数据集)