谷歌的 Tensorflow 与 Facebook 的 PyTorch 一直是颇受社区欢迎的两种深度学习框架。那么究竟哪一种框架最适宜本身手边的深度学习项目呢?本文做者从这两种框架各自的功能效果、优缺点以及安装、版本更新等诸多方面给出了本身的建议。
若是你在读这篇文章,那么你可能已经开始了本身的深度学习之旅。若是你对这一领域还不是很熟悉,那么简单来讲,深度学习使用了「人工神经网络」,这是一种相似大脑的特殊架构,这个领域的发展目标是开发出能解决真实世界问题的类人计算机。为了帮助开发这些架构,谷歌、Facebook 和 Uber 等科技巨头已经为 Python 深度学习环境发布了多款框架,这让人们能够更轻松地学习、构建和训练不一样类型的神经网络。本文将详细介绍和比较两种流行的框架:TensorFlow 与 PyTorch。git
谷歌的 TensorFlowgithub
Facebook 的 PyTorch编程
咱们能够用 TensorFlow 和 PyTorch 构建什么?后端
PyTorch 和 TensorFlow 对比api
PyTorch 和 TensorFlow 的优势和缺点数组
PyTorch 和 TensorFlow 安装、版本、更新bash
TensorFlow 仍是 PyTorch?个人建议服务器
TensorFlow 是谷歌的开发者创造的一款开源的深度学习框架,于 2015 年发布。官方研究发布于论文《TensorFlow:异构分布式系统上的大规模机器学习》。网络
TensorFlow 现已被公司、企业与创业公司普遍用于自动化工做任务和开发新系统,其在分布式训练支持、可扩展的生产和部署选项、多种设备(好比安卓)支持方面备受好评。数据结构
论文地址:https://openreview.net/pdf?id=BJJsrmfCZ
PyTorch 很简洁、易于使用、支持动态计算图并且内存使用很高效,所以愈来愈受欢迎。接下来还会更详细地介绍。
神经网络起初是被用于解决手写数字识别或用相机识别汽车注册车牌等简单的分类问题。但随着近来框架的发展以及英伟达高计算性能图形处理单元(GPU)的进步,咱们能够在 TB 级的数据上训练神经网络并求解远远更加复杂的问题。一个值得说起的成就是在 TensorFlow 和 PyTorch 中实现的卷积神经网络在 ImageNet 上都达到了当前最佳的表现。训练后的模型能够用在不一样的应用中,好比目标检测、图像语义分割等等。
尽管神经网络架构能够基于任何框架实现,但结果却并不同。训练过程有大量参数都与框架息息相关。举个例子,若是你在 PyTorch 上训练一个数据集,那么你可使用 GPU 来加强其训练过程,由于它们运行在 CUDA(一种 C++ 后端)上。TensorFlow 也能使用 GPU,但它使用的是本身内置的 GPU 加速。所以,根据你所选框架的不一样,训练模型的时间也老是各不相同。
TensorFlow 顶级项目
Magenta:一个探索将机器学习用做创造过程的工具的开源研究项目:https://magenta.tensorflow.org/
Sonnet:这是一个基于 TensorFlow 的软件库,可用于构建复杂的神经网络:https://sonnet.dev/
Ludwig:这是一个无需写代码就能训练和测试深度学习模型的工具箱:https://uber.github.io/ludwig/
PyTorch 顶级项目
PYRO:这是一种用 Python 编写的通用几率编程语言(PPL),后端由 PyTorch 支持:https://pyro.ai (https://pyro.ai/)
这些只是基于 TensorFlow 和 PyTorch 构建的少许框架和项目。你能在 TensorFlow 和 PyTorch 的 GitHub 和官网上找到更多。
PyTorch 和 TensorFlow 的关键差别是它们执行代码的方式。这两个框架都基于基础数据类型张量(tensor)而工做。你能够将张量看做是下图所示的多维数组。
机制:动态图定义与静态图定义
TensorFlow 框架由两个核心构建模块组成:
一个用于定义计算图以及在各类不一样硬件上执行这些图的运行时间的软件库。
一个具备许多优势的计算图(后面很快就会介绍这些优势)。
当你在 TensorFlow 中运行代码时,计算图是以静态方式定义的。与外部世界的全部通讯都是经过 tf.Sessionobject 和 tf.Placeholder 执行,它们是在运行时会被外部数据替换的张量。例如,看看如下代码段:
下图是 TensorFlow 中运行代码以前以静态方式生成计算图的方式。计算图的核心优点是能实现并行化或依赖驱动式调度(dependency driving scheduling),这能让训练速度更快,更有效率。
相似于 TensorFlow,PyTorch 也有两个核心模块:
计算图的按需和动态构建
Autograd:执行动态图的自动微分
根据你所用的框架,在软件领域有很大的不一样。TensorFlow 提供了使用 TensorFlow Fold 库实现动态图的方式,而 PyTorch 的动态图是内置的。
分布式训练
PyTorch 和 TensorFlow 的一个主要差别特色是数据并行化。PyTorch 优化性能的方式是利用 Python 对异步执行的本地支持。而用 TensorFlow 时,你必须手动编写代码,并微调要在特定设备上运行的每一个操做,以实现分布式训练。可是,你能够将 PyTorch 中的全部功能都复现到 TensorFlow 中,但这须要作不少工做。下面的代码片断展现了用 PyTorch 为模型实现分布式训练的简单示例:
可视化
在训练过程的可视化方面,TensorFlow 更有优点。可视化能帮助开发者跟踪训练过程以及实现更方便的调试。TensorFlow 的可视化库名为 TensorBoard。PyTorch 开发者则使用 Visdom,可是 Visdom 提供的功能很简单且有限,因此 TensorBoard 在训练过程可视化方面更好。
跟踪和可视化损失和准确度等指标
可视化计算图(操做和层)
查看权重、误差或其它张量随时间变化的直方图
展现图像、文本和音频数据
分析 TensorFlow 程序
Visdom 的特性
处理回调
绘制图表和细节
管理环境
生产部署
在将训练好的模型部署到生产方面,TensorFlow 显然是赢家。咱们能够直接使用 TensorFlow serving 在 TensorFlow 中部署模型,这是一种使用了 REST Client API 的框架。
用 PyTorch 和 TensorFlow 定义一个简单的神经网络
咱们比较一下如何在 PyTorch 和 TensorFlow 中声明神经网络。
近期 Keras 被合并到了 TensorFlow 库中,这是一个使用 TensorFlow 做为后端的神经网络框架。从那时起,在 TensorFlow 中声明层的句法就与 Keras 的句法相似了。首先,咱们声明变量并将其分配给咱们将要声明的架构类型,这里的例子是一个 Sequential() 架构。
TensorFlow和PyTorch各有其优缺点。
简单的内置高级 API
使用 TensorBoard 可视化训练
经过 TensorFlow serving 容易实现生产部署
很容易的移动平台支持
开源
良好的文档和社区支持
静态图
调试方法
难以快速修改
类 Python 的代码
动态图
轻松快速的编辑
良好的文档和社区支持
开源
不少项目都使用 PyTorch
可视化须要第三方
生产部署须要 API 服务器
PyTorch 安装
pip3 install torch torchvision复制代码
pip3 install https://download.pytorch.org/whl/cu90/torch-1.1.0-cp36-cp36m-win_amd64.whlpip3 install https://download.pytorch.org/whl/cu90/torchvision-0.3.0-cp36-cp36m-win_amd64.whl复制代码
macOS、Linux 和 Windows
# Current stable release for CPU-onlypip install tensorflow# Install TensorFlow 2.0 Betapip install tensorflow==2.0.0-beta1复制代码