最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

深度学习为什么要选择 PyTorch

  • 2020-04-16
  • 本文字数:3658 字

    阅读完需:约 12 分钟

深度学习为什么要选择 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 示例(计算机视觉和自然语言处理)的代码都有一个共同的结构:


data/experiments/model/    net.py    data_loader.pytrain.pyevaluate.pysearch_hyperparams.pysynthesize_results.pyevaluate.pyutils.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 发回给你。


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__[](pretrained=True)        else:            print(("=> creating model '{}'".format(arch)))            model = models.__dict__<a href="">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</a href="">
复制代码

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 模型,使之成为其他框架可以集成的开放格式。


import torch.onnximport 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 摇摆不定的人做出选择。


作者简介:


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


原文链接:


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


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2020-04-16 11:333229

评论

发布
暂无评论
发现更多内容

《键值型数据库系统技术及节能要求》团体标准发布,腾讯、京东、北邮等联合发起

科技热闻

如何快速开发一个健康助手,实时守护用户健康

HMS Core

博睿数据入选《2022爱分析· 银行数字化厂商全景报告》

博睿数据

银行 智能运维 博睿数据

flstudio21版本有什么新功能?

茶色酒

FL Studio

基于keil5新建STM32F10x寄存器版本工程

DS小龙哥

8月月更

那些你不知道的 CSS 自定义形状网格布局

南城FE

CSS 前端 布局

快速搞懂Mysql中BufferPool底层原理

知识浅谈

Buffer Pool 8月月更

压力测试-JMeter常用插件、服务器硬件监控

程序知音

Java 程序员 后端 后端技术

手摸手告诉 UI 妹子数据可视化 20 条优化细则【切图仔直接收藏】

掘金安东尼

前端 UI 8月月更

在线XML转TSV工具

入门小站

工具

SAFe Day 2022 中国规模化敏捷大会即将开启

Scrum中文网

敏捷 safe 规模化敏捷 大规模敏捷 SAFeDay

RocketMQ高可用设计之同步刷盘

急需上岸的小谢

8月月更

阿里云携手卫宁健康发布WinCloud智慧医疗云联合解决方案,打造新一代智慧医疗系统

阿里云弹性计算

云服务器 分布式云 云盒 本地化部署

MySQL数据库之数据查询

乌龟哥哥

8月月更

Spring进阶(五):Spring事务管理(详解+实例)

No Silver Bullet

spring 事务管理 8月月更

SpringMvc如何同时支持Jsp和Json接口?

xiaoxi666

为什么程序员都不喜欢使用 switch ,而是大量的 if……else if ?

TimeFriends

8月月更

从 Angular Component 和 Directive 的实例化,谈谈 Angular forRoot 方法的命令由来

Jerry Wang

typescript 前端开发 angular web开发 8月月更

flstudio21水果软件更新内容V21版本

茶色酒

FL Studio

使用 Presto 和 Alluxio 在 AWS 上搭建高性能平台来支持实时游戏服务

Alluxio

游戏 AWS presto Alluxio 8月月更

你以为的推荐系统,其实只是推荐模型

OneFlow

机器学习 推荐系统 推荐模型

云原生(二十一) | Kubernetes篇之深入了解Ingress

Lansonli

云原生 8月月更

三个线程交替打印ABC100次问题思考

越长大越悲伤

面试 线程 后端 JUC

[极致用户体验] 我做的《联机五子棋》是如何追求极致用户体验的?(下)

HullQin

CSS JavaScript html 前端 8月月更

一套优秀的直播系统源码是什么样的?起码要有这五个模块

开源直播系统源码

软件开发 直播系统 直播系统源码 钠斯直播系统

​DTSE Tech Talk丨第3期:解密数据隔离方案,让SaaS应用开发更轻松

华为云开发者联盟

SaaS 企业 华为云

【LeetCode】爱吃香蕉的珂珂Java题解

Albert

LeetCode 8月月更

leetcode 304. Range Sum Query 2D - Immutable 二维区域和检索 - 矩阵不可变(中等)

okokabcd

LeetCode 数据结构与算法

spark实战之:分析维基百科网站统计数据(java版)

程序员欣宸

Java spark 8月月更

计算机网络(三、数据链路层)

计算机网络 8月月更

深度解读 | 关于SBOM最基础元素,你需要知道的(Part II)

安势信息

#开源 #SBOM 软件供应链安全 SBOM最基础元素 开源安全与治理

深度学习为什么要选择 PyTorch_文化 & 方法_Claire D._InfoQ精选文章