HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

深度学习为什么要选择 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


2020-04-16 11:333348

评论

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

kubernetes indexer源码解析

欢乐的阿苏

golang DevOps cache 源码阅读 #Kubernetes#

Java程序控制结构

timerring

Java

Unity 之 使用原生UGUI实现随手移动摇杆功能经典实例

陈言必行

Unity 三周年连更

Java数组、排序和查找

timerring

Java

影驰 GeForce RTX 4070显卡正式开售!星曜 OC系列首发评测抢先看

Geek_2d6073

程序员如何保住自己的饭碗?| 社区征文

liuzhen007

程序员 三周年征文

kubernetes fifo源码解析

欢乐的阿苏

golang DevOps 后端 源码阅读 #Kubernetes#

从ReentrantLock角度解析AQS

Java AQS 并发

C生万物 | 反汇编深挖【函数栈帧】的创建和销毁

Fire_Shield

C语言 汇编 三周年连更 函数栈帧

ContentProvider介绍

梦笔生花

ContextClassLoader 三周年连更

专注写作:Ulysses for Mac中文版

真大的脸盆

Mac markdown编辑器 Mac 软件 文本编辑 文本管理工具

Unity 之 转微信小游戏本地数据存储

陈言必行

Unity 三周年连更

Go语言开发小技巧&易错点100例(三)

闫同学

Go 三周年连更

openEuler、龙蜥Anolis、统信UOS系统下编译GreatSQL二进制包

GreatSQL

vivo全球商城:电商交易平台设计

vivo互联网技术

分布式事务 订单管理 架构设计 多租户 交易平台

一文掌握 Go 文件的读取操作

陈明勇

Go golang 文件读取 三周年连更

论程序员的为码之“道”

酱紫的小白兔

kubernetes delta_fifo源码解析

欢乐的阿苏

golang DevOps 后端 源码阅读 #Kubernetes#

一定是疯了!在M1的Mac上玩OpenVINO,让Intel怎么看我?

IT蜗壳-Tango

OpenVINO Stable Diffusion 三周年连更

AI日课@20230412:Prompt Engineering

无人之路

ChatGPT

数据库原理及MySQL应用 | 约束

TiAmo

数据库 MySQL数据库 三周年连更 数据库约束

【Linux】之【磁盘】相关的命令及解析[df、du、iostat、iotop]

A-刘晨阳

Linux 三周年连更 磁盘空间

跨平台应用开发进阶(四十三)一文走近网络层抓包工具:WhireShark

No Silver Bullet

网络层 抓包工具 三周年连更

【坚果派-坚果】获取OpenHarmony 3.2 Release源码的两种方式

坚果

HarmonyOS OpenHarmony OpenHarmony3.2 三周年连更

RabbitMQ组件介绍

穿过生命散发芬芳

RabbitMQ 三周年连更

Spider实战-抓取视频

浅辄

三周年连更

危中蕴机:Oi! Network展现出的勇气和决心

股市老人

不要过于吹捧ChatGPT:人工智能生成文字还有很大提升空间

石头IT视角

如何使用 taosKeeper 做好监控工作,时序数据库 TDengine 3.0 监控工具详解

TDengine

大数据 tdengine 物联网 时序数据库 数据监控

Golang并发编程实战:使用ring buffer实现高效的阻塞队列

Jack

成都.NET线下技术沙龙倒计时一天

MASA技术团队

.net 开发者 MASA Stack

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