云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!
过去几年来,深度学习和机器学习是公众最热门的词汇,对此我们有一个完美的解释。
正是因为有了机器学习,系统才能够从经验中学习;而深度学习,则利用庞大的数据集将机器学习带到了更大的规模。
在机器学习和深度学习的推动下,各种编程语言和库应运而生,并使程序员、研究人员和数据科学家们实现了不可思议的成就。
在深度学习领域, 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 适合深度学习项目。
- PyTorch 更 “Python 化”
PyTorch 是一个实用框架,它可以让我们以更 “Python 化” 的方式编写代码。此外,它使用朴素的 Python 代码所支持的那种动态特性是非常了不起的。
与任何其他库相比,PyTorch 更倾向于 Python。这是因为 PyTorch 相对容易理解,而且感觉更自然、更原生,和 Python 代码一致。对于任何使用过 PyTorch 的人来说,他们都会对 PyTorch 的一切有一种亲切的感觉,比如损失函数、优化器、转换、数据加载器以及更多的类。
每个 PyTorch 示例(计算机视觉和自然语言处理)的代码都有一个共同的结构:
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:用于处理超参数 / 日志 / 存储模型的实用功能。
- 易于使用
与 PyTorch 相比,TensorFlow 的学习曲线相对较徒。Python 程序员需要较少的时间即可使用 PyTorch,因为对他们来说,PyTorch 更像是 Python 框架的扩展。简单的调试和一套优秀的简单 API 就能使程序员轻松驾驭 PyTorch。 - 有用的库
在社区的大力支持下,人们的社区的热情和贡献也越来越大。程序员使用 PyTorch 创建了一些项目,有兴趣的读者可以去看看。下面是一个综合列表,列出了计算机视觉、自然语言处理和生成库等不同领域的一些项目:
- pro_gan_pytorch:利用 ProGAN 功能。
- BoTorch:使用贝叶斯优化。
- ParlAI:用于共享、训练和测试对话模型。
- OpenNMT-py:用于实现神经机器翻译系统。
- MUSE:用于多语言词嵌入。
- skorch:用于将 scikit-learn 代码与 PyTorch 融合。
- 轻松实现数据并行
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__ 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
- 至少 70% 开发者使用 PyTorch
PyTorch 是研究人员的神器,因为事实证明,开发框架的研究人员至少有 70% 都在使用 PyTorch。尽管 TensorFlow 是业界领先的应用开发选择,但它在这方面还没有赶上 PyTorch。这背后的一个原因可能是 PyTorch 的简单易用性和更好的性能。 - 移动开发就绪
从版本 1.3 开始,PyTorch 就增加了对 Android 和 iOS 设备部署的支持。这一特性,为边缘设备带来了 PyTorch 的所有优势,以满足需要较低延迟的应用。PyTorch mobile 背后的目标是通过支持移动平台的基础 API 来缩短开发周期,从而无需导出到诸如 Caffe2 之类的移动框架。这样可以大大减少设备上的占用空间。此外,为了更好地控制,还增加了对构建脚本的精确调优的支持。
PyTorch Mobile 入门:
- 易于调试
当你可以选择访问每一行,并在每一行后打印的常规方式,PyTorch 调试起来很容易。锦上添花的是,PyTorch 中的对象和操作包含了实际的数据而不是符号引用,这让程序员的工作变得更加轻松。PyTorch 的一些标准调试器是:
- ipdb
- pdb
- PyCharm
例如,你可以使用 pdb 的 pdb.set.trace() 函数在代码中放置断点,从而深入到错误的根源。此外,PyTorch 的动态计算图允许在代码执行时进行动态修改和快速调试。
- 支持 ONNX
开放神经网络交换格式(Open Neural Network Exchange,OONX)作为人工智能的开源生态系统,为人工智能程序员提供了一个共同的平台,让他们可以在各种框架、工具和库上进行互换工作。ONNX 通过提供可跨多个框架和硬件工作的标准文件格式来实现这一目标。
说到 PyTorch,ONNX 内置了对 PyTorch 和其他一系列框架的支持,如 Caffe2、MXNet、TensorFlow 等等。ONNX 使开发人工智能的程序员更容易导出和迁移他们的 PyTorch 模型,使之成为其他框架可以集成的开放格式。
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 提供了一种定义计算图的动态方法。虽然其他框架也允许静态图定义,但 PyTorch 还支持创建动态计算图,你可以随时对其进行操作。从 PyTorch 的动态特性中获益最多的一个元素是递归神经网络。 - 强大的社区支持
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://yqh.aliyun.com/zhibo立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK
原文发布时间:2020-04-16
本文作者:Claire D.
本文来自:“InfoQ”,了解相关信息可以关注“InfoQ”