tensorflow
人工智能研究所在头条上的第一篇文章介绍的是tensorflow,tensorflow是Google旗下的开源深度学习框架,我们在往期的分享中,也介绍了其相关方面的文章,从安装到基础的CNN卷积神经网络到数字识别与图片分类等等,随着科技的发展,其深度学习框架也越来越成熟,facebook旗下的pytorch便是在众多框架中脱颖而出的一个优秀的深度学习框架。
pytorch
什么是 PyTorch?PyTorch 是一个基于Python 的开源深度学习库,它有助于构建深度学习模型并在各种应用程序中使用它们。但这不仅仅是另一个深度学习库。这是一个科学计算包,专门用于张量计算、自动微分和 GPU 加速。由于这些原因,PyTorch 是最受欢迎的深度学习库之一,与 Keras 和 TensorFlow等开源深度学习库竞争,让大家津津乐道的是谁是最好的开源深度学习库。PyTorch的前身是Torch,其底层和Torch框架一样,但是使用Python重新写了很多内容,不仅更加灵活,支持动态图,而且提供了Python接口。它是由Torch7团队开发,是一个以Python优先的深度学习框架,不仅能够实现强大的GPU加速,同时还支持动态神经网络。
PyTorch既可以看作加入了GPU支持的numpy,同时也可以看成一个拥有自动求导功能的强大的深度神经网络。除了Facebook外,它已经被Twitter、CMU和Salesforce等机构采用
PyTorch由于其 Pythonic 性质和易于扩展性(即实现自定义层类型、网络架构等),在研究社区中特别受欢迎。PyTorch 使用Tensor作为其核心数据结构,类似于 Numpy 数组。有了适当的软件和硬件,张量可以加速各种数学运算。在深度学习中大量执行这些操作时,速度会产生巨大的差异。PyTorch 与 Python 类似,侧重于易用性,即使具有非常基础的编程知识的用户也可以在其项目中使用深度学习
为什么要学习深受学习pytorchPyTorch是 基于 Lua 的科学计算框架 Torch。在 PyTorch 和 Keras/TensorFlow 之前,Caffe 和 Torch 等深度学习包是最受欢迎的。然而,随着深度学习开始彻底改变计算机科学的几乎所有领域,开发人员和研究人员需要一个高效、易于使用的库来构建、训练和评估。 Python 和 R 是数据科学家和机器学习最流行的两种编程语言,因此研究人员希望在其 Python 生态系统中使用深度学习算法是很自然的。
PyTorch 解决了研究人员在使用 Keras 和 TensorFlow 时遇到的许多问题。虽然 Keras 非常易于使用,另一方面,TensorFlow也可以处理类似的事前,但它们不是 Pythonic,而且通常很难梳理,PyTorch 通过创建一个 Pythonic 且易于定制的 API 解决了这些问题,允许实现新的层类型、优化器和新颖的架构。但是随着 PyTorch 1.x 和 TensorFlow 2.x 发布以来,各个库的 API 基本上已经融合。 PyTorch 和 TensorFlow 现在实现了基本相同的功能,并提供 API 和函数调用来完成相同的事情,这里不要纠结说那个是最好的深度学习开源框架。
PyTorch 在上述所有这些指标上的表现都非常出色。“ pythonic ”编码风格使其易于学习和使用。GPU 加速,支持分布式计算和自动梯度计算有助于从前向表达式开始自动执行后向传递。
当然,由于 Python,它面临着运行缓慢的风险,但高性能 C++ API (libtorch) 消除了这种速度的差异。
PyTorch 库概述现在我们已经了解了 PyTorch 以及它的独特之处,让我们来看看 PyTorch 项目的基本管道信息。下图描述了一个典型的工作流程以及与每个步骤相关的重要模块。
基本 PyTorch 工作流程
PyTorch 库深度学习流程1. 数据加载和处理
任何深度学习项目的第一步都是处理数据加载和处理。PyTorch 通过torch.utils.data提供相同的实用程序。该模块中的两个重要类是Dataset和DataLoader。如果我们可以访问多台机器或 GPU,我们也可以使用torch.nn.DataParallel和torch.distributed。
2. 构建神经网络
torch.nn模块用于创建神经网络。它提供了所有常见的神经网络层,如全连接层、卷积层、激活和损失函数等。一旦创建了网络架构并且准备好将数据馈送到网络,我们就需要更新权重和偏差的,以便网络开始学习。这些实用程序在torch.optim模块中提供。类似地,对于反向传递期间所需的自动微分,我们使用torch.autograd模块。
说到自动微分,PyTorch 让训练神经网络变得非常容易,PyTorch 能够:
组装神经网络图执行前向传递(即进行预测)计算损失/错误向后遍历网络(即反向传播)并调整网络参数,基于计算的损失/输出做出更准确的预测第 4 步始终是手动实施的最乏味和最耗时的步骤。幸运的是,PyTorch 会自动处理这一步。
3. 模型推断和兼容性
模型经过训练后,可用于预测测试,甚至测试新数据集的输出。这个过程被称为模型推理。
PyTorch 还提供TorchScript,可用于独立于 Python 运行时运行模型。这可以被认为是一个虚拟机,其指令主要针对张量。还可以将使用 PyTorch 训练的模型转换为 ONNX 等格式,这样就可以在其他 DL 框架(例如 MXNet、CNTK、Caffe2)中使用这些模型。还可以将onnx模型转换为 Tensorflow。
PyTorch 和张量
PyTorch 将多维数组表示为“张量”。张量构成了神经网络的基本构建块
PyTorch 将数据表示为称为张量的多维、类似 NumPy 的数组。张量存储神经网络的输入、隐藏层表示和输出。张量只是矩阵的一个奇特名称。如果您熟悉 NumPy 数组,那么理解和使用 PyTorch 张量将非常容易。标量值由 0 维张量表示。类似地,列/行矩阵使用一维张量等表示,在pytorch中,张量是一个重要的概念,我们后期将会分享类似的张量处理。