首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深度学习为什么要选择 PyTorch

过去几年来,深度学习和机器学习是公众最热门的词汇,对此我们有一个完美的解释。

正是因为有了机器学习,系统才能够从经验中学习;而深度学习,则利用庞大的数据集将机器学习带到了更大的规模。

在机器学习和深度学习的推动下,各种编程语言和库应运而生,并使程序员、研究人员和数据科学家们实现了不可思议的成就。

在深度学习领域,TensorFlow和PyTorch两个库之间的最强者之争由来已久,在本文中,我们将更多地关注 PyTorch。

2016 年,Facebook 发布了面向编程场景的 PyTorch,它是基于 Lua 的 Torch 库。

PyTorch 是一个免费的开源机器学习库,当前版本为 1.4。PyTorch 已发布近三年,经多番改进,现已处于最佳状态。创建 PyTorch 是为了让人感觉比其他竞争对手更快,更 “Python 化”。Pytorch也支持 C、C++ 和张量计算。

Google Trend:Python 热度随时间变化的趋势

选择 PyTorch 进行深度学习的原因

在谈到为什么不试试 PyTorch 之前,让我们先看看下面列举的几个独特而令人兴奋的深度学习项目和库,这些都是 PyTorch 促成的:

  • CheXNet:利用深度学习技术在胸片上进行放射科医师级别的肺炎检测。
  • Horizon:应用强化学习平台(Applied RL)。
  • PYRO:Pyro 是一种通用的概率编程语言(probabilistic programming language ,PPL),用 Python 编写,后端由 PyTorch 支持。
  • NVIDIA 的 Kaolin:作为加速 3D 深度学习的 PyTorch 库,用于加速 3D 深度学习。
  • TorchCV:将计算机视觉应用到项目中。
  • PyDLT:一套深度学习工具。
  • fastai 库:用来优化神经网络训练过程。
  • 以及更多。

这些都是建立在 TensorFlow 和 PyTorch 之上的框架和项目。

PyTorch的优越性

在 TensorFlow 的世界里, PyTorch 能够凭借自己的强项坚守自己。下面是 PyTorch 的一些亮点,解释了为什么 PyTorch 适合深度学习项目。

1. PyTorch 更 “Python 化”

PyTorch 是一个实用框架,它可以让我们以更 “Python 化” 的方式编写代码。此外,它使用朴素的 Python 代码所支持的那种动态特性是非常了不起的。

与任何其他库相比,PyTorch 更倾向于 Python。这是因为 PyTorch 相对容易理解,而且感觉更自然、更原生,和 Python 代码一致。对于任何使用过 PyTorch 的人来说,他们都会对 PyTorch 的一切有一种亲切的感觉,比如损失函数、优化器、转换、数据加载器以及更多的类。

每个 PyTorch 示例(计算机视觉和自然语言处理)的代码都有一个共同的结构:

代码语言:javascript
复制
data/
experiments/
model/
    net.py
    data_loader.py
train.py
evaluate.py
search_hyperparams.py
synthesize_results.py
evaluate.py
utils.py
  • model/net.py:指定神经网络架构、损失函数和评估指标。
  • model/data_loader.py:指定数据应如何馈送到网络。
  • train.py:包含主训练循环。
  • evaluate.py:包含用于评估模型的主循环。
  • utils.py:用于处理超参数/日志/存储模型的实用功能。

2. 易于使用

与 PyTorch 相比,TensorFlow 的学习曲线相对较徒。Python 程序员需要较少的时间即可使用 PyTorch,因为对他们来说,PyTorch 更像是 Python 框架的扩展。简单的调试和一套优秀的简单 API 就能使程序员轻松驾驭 PyTorch。

3. 有用的库

在社区的大力支持下,人们的社区的热情和贡献也越来越大。程序员使用 PyTorch 创建了一些项目,有兴趣的读者可以去看看。下面是一个综合列表,列出了计算机视觉、自然语言处理和生成库等不同领域的一些项目:

  • pro_gan_pytorch:利用 ProGAN 功能。
  • BoTorch:使用贝叶斯优化。
  • ParlAI:用于共享、训练和测试对话模型。
  • OpenNMT-py:用于实现神经机器翻译系统。
  • MUSE:用于多语言词嵌入。
  • skorch:用于将 scikit-learn 代码与 PyTorch 融合。

4. 轻松实现数据并行

PyTorch 中的数据并行(Data Parallel)非常高效,可以将数据分成若干批,然后发送到多个 GPU 进行处理。使用这种技术,PyTorch 可以将很大一部分工作负载从 CPU 转移到 GPU。为了实现数据并行,它使用了 torch.nn.DataParallel 类。

Distributed Data-Parallel(分布式数据并行)是 PyTorch 的一项特性,你可以将其与 Data-Parallel(数据并行)结合使用来处理需要大型数据集和模型的用例,这些数据集和模型对单个 GPU 来说过于庞大。当 GPU 池上的所有任务完成之后,结果将被收集、合并,再由 Data-Parallel 发回给你。

代码语言:javascript
复制
def get_cnn(self, arch, pretrained):
        """Load a pretrained CNN and parallelize over GPUs
        """
        if pretrained:
            print(("=> using pre-trained model '{}'".format(arch)))
            model = models.__dict__arch
        else:
            print(("=> creating model '{}'".format(arch)))
            model = models.__dict__arch

        if arch.startswith('alexnet') or arch.startswith('vgg'):
            model.features = nn.DataParallel(model.features)
            model.cuda()
        else:
            model = nn.DataParallel(model).cuda()

        return model

5. 至少70%开发者使用PyTorch

PyTorch 是研究人员的神器,因为事实证明,开发框架的研究人员至少有 70% 都在使用 PyTorch。尽管 TensorFlow 是业界领先的应用开发选择,但它在这方面还没有赶上 PyTorch。这背后的一个原因可能是 PyTorch 的简单易用性和更好的性能。

6. 移动开发就绪

从版本 1.3 开始,PyTorch 就增加了对 Android 和 iOS 设备部署的支持。这一特性,为边缘设备带来了 PyTorch 的所有优势,以满足需要较低延迟的应用。PyTorch mobile 背后的目标是通过支持移动平台的基础 API 来缩短开发周期,从而无需导出到诸如 Caffe2 之类的移动框架。这样可以大大减少设备上的占用空间。此外,为了更好地控制,还增加了对构建脚本的精确调优的支持。

PyTorch Mobile 入门:

7. 易于调试

当你可以选择访问每一行,并在每一行后打印的常规方式,PyTorch 调试起来很容易。锦上添花的是,PyTorch 中的对象和操作包含了实际的数据而不是符号引用,这让程序员的工作变得更加轻松。PyTorch 的一些标准调试器是:

  • ipdb
  • pdb
  • PyCharm

例如,你可以使用 pdb 的 pdb.set.trace() 函数在代码中放置断点,从而深入到错误的根源。此外,PyTorch 的动态计算图允许在代码执行时进行动态修改和快速调试。

使用 pdb 进行 PyTorch 调试

8. 支持 ONNX

开放神经网络交换格式(Open Neural Network Exchange,OONX)作为人工智能的开源生态系统,为人工智能程序员提供了一个共同的平台,让他们可以在各种框架、工具和库上进行互换工作。ONNX 通过提供可跨多个框架和硬件工作的标准文件格式来实现这一目标。

说到 PyTorch,ONNX 内置了对 PyTorch 和其他一系列框架的支持,如 Caffe2、MXNet、TensorFlow 等等。ONNX 使开发人工智能的程序员更容易导出和迁移他们的 PyTorch 模型,使之成为其他框架可以集成的开放格式。

代码语言:javascript
复制
import torch.onnx
import torchvision

  dummy_input = torch.randn(1, 3, 224, 224)
  model = torchvision.models.alexnet(pretrained=True)
  torch.onnx.export(model, dummy_input, "alexnet.onnx")

PyTorch 原生 ONNX 支持

9. 支持动态计算图

通过将每个模型视为有向无环图,PyTorch 提供了一种定义计算图的动态方法。虽然其他框架也允许静态图定义,但 PyTorch 还支持创建动态计算图,你可以随时对其进行操作。从 PyTorch 的动态特性中获益最多的一个元素是递归神经网络。

10. 强大的社区支持

PyTorch 还提供了优秀的社区支持。PyTorch 的主页上就有关于它每个特性的详细文档。对库的所有最新更新都作了很好的解释。对于每个新添加的内容,都可以找到辅导教程和相关资源,易于上手。

PyTorch 论坛是一个非常好的、值得强烈推荐的地方,新手可以在论坛发帖提问,资深工程师也可以在论坛与程序员朋友分享自己的想法。每天都有超过 100 个帖子,这个社区非常活跃,并鼓励人们加入 PyTorch。

下面是一些 PyTorch 开发人员社区、资源和教程,你可以通过这些资源和教程来贡献、学习和解惑:

● PyTorch Discuss form

● PyTorch Slack Community

● PyTorch Examples

● PyTorch Docs

● Github Pytorch Tutorials

● PyTorch Beginner Cheatsheet

● PyTorch Release Notes

● Deep Learning With Pytorch : A 60 Minute Blitz

● Using Tutorial data from Google Drive in Colab

● Docs and Tutorials in Chinese

● Tutorials in Korean

结语

PyTorch 为深度学习程序员提供了大量直观的功能,它为不同技能水平的人们提供了很多帮助。尽管提供了一个简单的切入点,但 PyTorch 也不容小觑,因为它提供的功能不仅在某些方面提供了更好的性能,还提供了额外的独特功能。我们在本文讨论了一些最常被提及的 PyTorch 的特性,以帮助你最终选择 PyTorch,而你此前对 PyTorch 一直持怀疑态度。

作者简介:

Claire D.,Digitalogy 内容专员,帮助企业在 48 小时内与前 5% 的预先筛选的软件人才建立联系。

原文链接:

https://towardsdatascience.com/reasons-to-choose-pytorch-for-deep-learning-c087e031eaca

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/7Azz9NMpjuI4zmV4S4oC
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券