PyTorch是深度学习的主流框架之一,新手入门相对容易。课程将算法、模型和基础理论知识进行有机结合,结合多个不同的CV与NLP实战项目,帮助大家掌握PyTorch框架的基础知识和使用方法,带大家较平稳地入门深度学习领域。我的图书馆留言交流
Python被确定为数据科学和机器学习的进入语言,部分感谢开源ML库Pytorch。 Pytorch的功能强大的深度神经网络建筑工具和易用性使其成为数据科学家的热门选择。随着其人气的发展,越来越多的公司正在从Tensorflow转移到Pytorch,现在开始使用Pytorch的最佳时间。 今天,我们将帮助了解Pytorch如此流行的是什么,使用Pytorch的一些基础,并帮助您制作第一个计算模型。 这是我们今天的封面:
什么是pytorch?PyTorch是一个开源机器学习Python库,用于深度学习实现,如计算机视觉(使用武器)和自然语言处理。它是由Facebook的AI Research Lab(Fair)于2016年开发的,自数据科学和ML领域以来已采用。 Pytorch为已经熟悉Python的人提供了直观的机器,并且具有oop支持和动态计算图等具有很大的功能。 除了构建深度神经网络之外,由于其GPU加速,Pytorch也非常适合复杂的数学计算。此功能允许Pytorch使用计算机的GPU来大量加速计算。
为什么要使用pytorch?在Pytorch之前,开发人员使用高级微积分来查找反向传播错误和节点加权之间的关系。更深的神经网络呼吁越来越复杂的操作,限制机器学习的规模和易在性。 现在,我们可以使用ML图书馆自动完成所有的微积分!ML库可以在几秒钟内计算任何大小或形状网络,允许更多开发人员构建更大和更好的网络。 Pytorch通过表现类似于标准Python来进一步逐步迈出此访问。您可以使用现有的Python知识来快速开始启动现有的Python知识而不是学习新的语法。此外,您可以使用Pytorch使用额外的Python库,例如Pycharm调试器等流行调试器。 pytorch与tensorflow.Pytorch和Tensorflow之间的主要区别是简单和性能之间的权衡:Pytorch更容易学习(特别是对于Python程序员),而Tensorflow具有学习曲线,但执行更好并且更广泛地使用。
pytorch基础知识张量Pytorch Tensors是作为所有高级操作的基础的多维阵列变量。与标准数字类型不同,可以分配张量以使用CPU或GPU加速操作。 它们与N维数量数量类似,甚至可以仅在单行中转换为Numpy数组。 张量有5种类型:
与所有数字类型一样,您希望使用适合您需要保存内存的最小类型。pytorch使用floattensor作为所有张量的默认类型,但您可以使用此使用
初始化两个FloatTensors: 在简单的数学运算中可以像其他数字类型一样使用张量。
您还可以使用移动GPU的CUDA处理张量。 随着张量在Pytorch中的矩阵,您可以设置Tensors以表示数字表:
在这里,我们指定了我们的张量应该是2x2平方。在使用rand()函数时使用vone()函数或随机数时,填充了广场。 神经网络由于其卓越的分类模型(如图像分类或卷积神经网络(CNN)),Pytorch通常用于构建神经网络。
神经网络仅与他们的培训一样好,因此需要大数据集和GAN框架,这基于已经由模型掌握的那些产生更具挑战性的培训数据。 Pytorch使用Torch.NN包定义神经网络,其中包含一组模块来表示网络的每层。 每个模块接收输入张量并计算输出张力,该输出张量在一起以创建网络。Torch.nn封装还定义了我们用于训练神经网络的损耗函数。建立神经网络的步骤是:
这是Pytorch中神经网络的示例: NN.Module指定这将是一个神经网络,然后我们用2个Conv2D层定义它,该层执行2D卷积,以及执行线性变换的3个线性层。 接下来,我们定义了向前概述转发传播的前向方法。我们不需要定义向后传播方法,因为Pytorch默认包括向后()功能。 别担心现在似乎令人困惑,我们将在本教程后面介绍更简单的Pytorch实现。 AutogradAutograd是一个用于计算神经网络操作所必需的衍生产品的Pytorch包。这些衍生物称为梯度。在转发通行证期间,Autograd在梯度的张量上记录所有操作,并创建一个非循环图,以找到张量和所有操作之间的关系。此操作集合称为自动差异化。 该图的叶子是输入张量,根部是输出张量。Autograd通过将图形从根到叶子跟踪并将每个梯度乘以使用链规则来计算渐变来计算梯度。 在计算梯度之后,衍生物的值被自动填充为张量的grad属性。
默认情况下,RESCEL_GRAD设置为FALSE,PyTorch不会跟踪渐变。在初始化期间指定RESECT_GRAD为TRUE将使您在执行某些操作的情况下对该特定张量进行PYTORCH跟踪梯度。 此代码查看Y并看到它来自(x-1)(x-2)(x-3),并自动制造梯度dy / dx,3x ^ 2 - 12x + 11 该指令还解决了该梯度的数值,并将其放置在张量x内,同时x,3.5的实际值。 渐变为3 (3.5 3.5) - 12 *(3.5)+ 11 = 5.75。 > Image Source: Author 渐变默认累计,如果未重置,则可能会影响结果。使用Model.zero_grad()在每个渐变后重新归零您的图形。 优化器优化器允许您在模型中更新权重和偏置以减少错误。这允许您编辑模型的工作原理,而无需重新制止整个事物。 所有Pytorch优化器都包含在Torch.optim包中,每个优化方案都设计用于特定情况。Torch.optim模块允许您通过刚刚传递参数列表来构建抽象优化方案。Pytorch有许多优化器可以选择,这意味着几乎总是一个最适合您的需求。 例如,我们可以实现公共优化算法,SGD(随机梯度下降),以平滑我们的数据。 更新模型后,使用优化器.step()告诉Pytorch来重新计算模型。使用优化器,我们需要使用循环手动更新模型参数:
总的来说,优化器通过允许您优化数据加权并改变模型而无需重新制定若需时间来节省大量时间。 使用pytorch计算图为了更好地了解Pytorch和神经网络,可以使用计算图来练习。这些图形本质上是一种简化版本的神经网络,用于有一系列操作,用于了解系统的输出如何受输入的影响。 换句话说,输入x用于找到y,然后用于找到输出z。 > Image Source: Author 想象一下,Y和Z计算如下: y = x ^ 2 z = 2Y + 3 但是,我们对输出Z如何使用Input X进行更改感兴趣,因此我们需要执行一些微积分: dz / dx =(dz / dy)*(dy / dx) dz / dx = 2.2x dz / dx = 4x 使用此,我们可以看到输入x = 3.5将使z = 14。 知道如何在其他情况下定义每个张量(根据x,z的y和z,y等方面等)允许pytorch构建这些张量如何连接的图像。 > Image Source: Author 这张照片称为计算图,可以帮助我们了解Pytorch如何在幕后工作。 使用此图形,我们可以看到每个张量如何受到任何其他张量的变化的影响。这些关系是梯度,用于在训练期间更新神经网络。 这些图更容易使用Pytorch比手工操作更容易,所以我们现在试试吧,我们了解幕后发生的事情。 这发现Z = 14就像我们用手发现的那样! 与Pytorch的实践:多路径计算图既然你已经看到了一个具有单一关系的计算图,让我们尝试一个更复杂的例子。 首先,定义两个张量,a和b,以用作我们的输入。确保设置RESECT_GRAD = TRUE,以便我们可以将渐变缩小到下线。
接下来,设置我们的输入和我们神经网络的每层之间的关系,x,y和z。请注意,z在x和y方面定义,而x和y使用我们的输入值a和b定义。 这构建了一个关系链,Pytorch可以遵循了解数据之间的所有关系。 我们现在可以通过从z向a追随z到a的路径来解决梯度Dz / da。 有两条路径,一个通过x和另一条通过y。您应该遵循它们并将两条路径的表达式添加在一起。这是有道理的,因为来自a到z的两条路径有助于z的值。 如果我们使用Chain规则的微积分法定了DZ / DA,我们已经找到了相同的结果。 > Image Source: Author 第一路径X给我们2 * 2,第二条路径通过Y给我们3 * 10A。因此,Z随着4 + 30A而变化的速率。 如果A是22,则DZ / DA为4 + 30 * 2 = 64。 我们可以通过从z添加向后传播然后询问a的梯度(或衍生)来确认它。
你学习的下一步恭喜,您现在已完成您的快速入门,并且是Pytorch和神经网络。完成计算图形是了解深度学习网络的重要组成部分。 当您了解高级深度学习技能和应用程序时,您将想要探索:
|