揭开 TensorFlow 2 和 Keras 之间关系的神秘面纱

PyTorch

PyTorch icon

PyTorch是在修改后的 Berkeley Software Distribution 许可下发布的开源 Python 包。Facebook、Idiap 研究所、纽约大学 (NYU) 和 NEC Labs America 拥有 PyTorch 的版权。尽管 Python 是数据科学的首选语言,但 PyTorch 在深度学习领域是一个相对较新的语言。

本部分概述了 PyTorch 系统,并提供了有关以下主题的更多详细信息:

  • PyTorch 的背景

  • 使用 PyTorch 的好处

  • PyTorch 的典型应用

神经网络算法通常计算损失函数的峰值或波谷,大多数算法使用梯度下降函数来执行此操作。在 Torch 中,PyTorch 的前身 Torch Autograd 包(由 Twitter 贡献)计算梯度函数。Torch Autograd 基于 Python Autograd。

PyTorch 的主要用例是研究。Facebook 使用 PyTorch 进行创新研究,并切换到 Caffe2 进行生产。一种名为开放式神经网络交换允许用户在 PyTorch 和 Caffe2 之间转换模型,并减少研究和生产之间的滞后时间。

Autograd 和 Chainer 等 Python 包都使用一种称为基于磁带的自动区分计算梯度。因此,这些包极大地影响和启发了 PyTorch 的设计。

基于磁带的自动微分的工作原理与磁带录音机类似,因为它记录执行的操作,然后重放它们以计算梯度,这种方法也称为反向模式自动微分.PyTorch Autograd 是此功能实现最快的方法之一。

使用此功能,PyTorch 用户可以以任意方式调整他们的神经网络,而不会产生开销或滞后惩罚。因此,与大多数知名框架不同,PyTorch 用户可以动态构建图形,框架的速度和灵活性有助于研究和开发新的深度学习算法。

这种性能部分来自 PyTorch 核心中使用的模块化设计。PyTorch 将 CPU 和 GPU 的大多数张量和神经网络后端实现为独立且精益的基于 C 的模块,并集成了数学加速库以提高速度。

PyTorch 与 Python 无缝集成,并在设计上使用命令式编码风格。此外,该设计保留了使其基于 Lua 的前身流行的可扩展性。用户可以使用 C/C++ 和基于 Python 的 C 外部函数接口 (cFFI) 的扩展 API 进行编程。

什么是Torch

Torch 是一个用于机器学习和科学计算的模块化开源库。纽约大学的研究人员首先开发了用于学术研究的火炬。该库对 LuaJIT 编译器的使用提高了性能,基于 C 语言的 NVIDIA CUDA 扩展使 Torch 能够利用 GPU 加速。

许多开发人员使用 Torch 作为支持 GPU 的 NumPy 替代品;其他人则使用它来开发深度学习算法。火炬因其被 Facebook 和 Twitter 使用而声名鹊起。Google DeepMind AI 项目最初使用 Torch,然后切换到 TensorFlow。

什么是 Lua 和 LuaJIT

Lua 是一种轻量级脚本语言,支持多种编程模型;它起源于应用程序可扩展性。Lua 结构紧凑,用 C 语言编写,这使得它能够在受约束的嵌入式平台上运行。巴西里约热内卢天主教大学于 1993 年首次引入 Lua。

LuaJIT 是一种即时 (JIT) 编译器,具有特定于平台的优化,可提高 Lua 的性能。它还扩展和增强了标准 Lua 的 C API。

什么是 PyTorch

存在两种 PyTorch 变体。最初,Hugh Perkins 开发了“pytorch”作为基于 LuaJIT 的 Torch 框架的 Python 包装器。但是,这里讨论的 PyTorch 变体是一个全新的发展。与旧版本不同,PyTorch 不再使用 Lua 语言和 LuaJIT。相反,它是一个本机 Python 包。

PyTorch 在 Python 中重新设计和实现 Torch,同时为后端代码共享相同的核心 C 库。PyTorch 开发人员调整了此后端代码以高效运行 Python。他们还保留了基于 GPU 的硬件加速以及可扩展性功能,这些功能使基于 Lua 的 Torch 受到研究人员的欢迎。

PyTorch 的优势

PyTorch 有很多好处。让我们看一些主要项目。

  • 动态计算图。大多数使用计算图的深度学习框架都会在运行时之前生成和分析图。相比之下,PyTorch 在运行时使用反向模式自动微分来构建图形。因此,对模型的任意更改不会增加运行时滞后或重新生成模型的开销。PyTorch 是反向模式自动微分实现最快的方法之一。除了更易于调试之外,动态图还允许 PyTorch 处理可变长度的输入和输出,这在文本和语音的自然语言处理中特别有用。

  • 精益后端。PyTorch 不是使用单个后端,而是对 CPU 和 GPU 以及不同的功能特性使用单独的后端。例如,CPU 的张量后端是 TH,而 GPU 的张量后端是 THC。同样,CPU 和 GPU 的神经网络后端分别是 THNN 和 THCUNN。单个后端导致精简代码,这些代码紧密专注于在特定类别的处理器上运行的特定任务,具有高内存效率。使用单独的后端可以更轻松地在受约束的系统(例如嵌入式应用程序中使用的系统)上部署 PyTorch。

  • Python 优先方法。虽然它是 Torch 的衍生产品,但 PyTorch 在设计上是一个原生 Python 包。它不用作 Python 语言绑定,而是作为 Python 的组成部分。PyTorch 将其所有函数构建为 Python 类。因此,PyTorch 代码可以与 Python 函数和其他 Python 包无缝集成。

  • 命令式编程风格。由于对程序状态的直接更改会触发计算,因此代码执行不会延迟并生成简单的代码,从而避免了许多可能影响代码执行方式的异步执行。在操作数据结构时,这种样式直观且易于调试。

  • 高度可扩展。用户可以使用 C/C++ 进行编程,方法是使用基于 Python 的 cFFI 并为 CPU 编译的扩展 API,或使用 CUDA 进行 GPU 操作。此功能允许将 PyTorch 扩展到新的和实验性的用途,并使其对研究用途具有吸引力。例如,PyTorch 音频扩展允许加载音频文件。

PyTorch 的典型应用

Torch 和 PyTorch 共享相同的后端代码,在文献中,基于 Lua 的 Torch 和 PyTorch 之间经常存在很多混淆。因此,除非您查看时间线,否则很难区分两者。例如,Google DeepMind AI 项目在切换到 TensorFlow 之前使用了 Torch。由于切换发生在 PyTorch 出现之前,因此不能将其视为 PyTorch 应用程序的示例。Twitter 是 Torch 的贡献者,现在使用 TensorFlow 和 PyTorch 来微调其时间轴上的排名算法。

Torch 和 PyTorch 都在 Facebook 上被大量用于研究文本和语音的 NLP。Facebook 已经发布了许多开源 PyTorch 项目,包括与以下内容相关的项目:

  • 聊天机器人

  • 机器翻译

  • 文本搜索

  • 文字转语音

  • 图像和视频分类

PyTorch Torchvision 包使用户能够访问常用图像分类模型(如 AlexNet、VGG 和 ResNet)的模型架构和预训练模型。

由于其灵活、可扩展和模块化的设计,PyTorch 不会将您限制在特定的模型或应用程序上。您可以使用 PyTorch 作为 NumPy 的替代品或实现机器学习和深度学习算法。有关应用程序和贡献的模型的更多信息,请参阅 PyTorch 示例页面,网址为GitHub - pytorch/examples: A set of examples around pytorch in Vision, Text, Reinforcement Learning, etc..

TensorFlow 与 PyTorch

本节比较了目前最流行的两个深度学习框架:TensorFlow 和 PyTorch。

  • 易用性。TensorFlow 因其 API 不全面且难以使用而受到批评,但随着 TensorFlow 2.0 的出现,情况发生了重大变化,Keras 被整合到核心项目中。自 Keras 成立以来,消除了多个冗余和不一致之处,该框架提供了一个稳定和干净的工作环境。PyTorch 提供了一个相对低级的环境,使你能够更自由地编写自定义层并利用 Python 的全部功能。总体而言,PyTorch 框架与 Python 语言的集成更加紧密,并且大多数时候感觉更原生。当你在 TensorFlow 中编写时,有时你会觉得你的模型在砖墙后面,上面有几个小孔可以进行通信,而这正是 Keras 集成所处理的。

  • 静态计算图与动态计算图。TensorFlow 采用静态图概念。这意味着用户首先必须定义模型的计算图,然后运行机器学习模型。PyTorch 通过使用动态计算图提供了优势。这意味着在 Tensorflow 中,与外部实体的所有通信都是通过对象 和 执行的,它们是张量。在 PyTorch 中,一切都更加动态;您可以随时定义、更改和执行节点,而无需特殊的会话接口或占位符。tf.Session``tf.Placeholder

  • 调试和内省。PyTorch 中的计算图是在运行时定义的,您可以使用任何您喜欢的 Python 调试方法,这使得 Python 开发人员的调试体验更加简单。不幸的是,Tensorflow 并非如此。开发人员必须熟悉(TensorFlow 调试器),这有助于在运行时评估 TensorFlow 表达式。tfdbg

  • 数据可视化。TensorBoard 是一种工具,可用于可视化机器学习模型。它还可以帮助您快速发现任何错误。此工具可用于调试和比较不同的训练运行。另一方面,PyTorch 使用一个名为 的工具,但它不具备所有功能,并且有点不完整。有一些集成可让您将 TensorBoard 与 PyTorch 一起使用,但本机不支持它。visdom

  • 数据并行性。这是 PyTorch 与 TensorFlow 区别开来的最大特性之一,即声明式数据并行性。您可以使用它来包装任何模块,它将在批处理维度上并行化。这样,您可以毫不费力地使用多个 GPU。相比之下,TensorFlow 允许在特定设备上运行微调操作。尽管如此,在 Tensorflow 中定义数据并行性更加困难、手动且需要大量工作。torch.nn.DataParallel

  • 部署。借助 TensorFlow,您可以使用 TensorFlow-Serve 无缝部署模型并管理模型的不同版本。 然而,当谈到 PyTorch 时,有一个新推出的名为 PyTorch-Serve 的包于 2020 年 6 月发布,但尚未成熟。您可以在移动和 IoT 设备上部署 TensorFlow Lite(原始 TensorFlow 模型的轻量级版本)。TensorFlow 模型也可以使用 TensorFlow.js 在浏览器上运行。在 PyTorch 中,唯一的移动支持是 PyTorch Mobile。

  • 社区支持。在社区支持方面,这两个框架都得到了大量活跃用户和开发人员的大规模支持。然而,从生产端来看,TensorFlow 社区要大得多,也更活跃。转向研究行业,PyTorch 最适合它。在课程、学习资源和教程方面,Tensorflow 的内容更多,因为 PyTorch 是一个相对较新的框架——但它现在在深度学习行业获得了很大的发展势头。

Caffe

Caffe icon

另一个流行的深度学习框架是 Caffe。Caffe 最初是作为博士论文的一部分开发的,但现在在 Berkeley Software Distribution 许可下发布。Caffe 支持广泛的深度学习架构,包括 CNN 和 LSTM,但值得注意的是不支持 RBM 或 DBM(尽管 Caffe2 将包含此类支持)。

Caffe 已用于图像分类和其他视觉应用,它支持使用 NVIDIA CUDA 深度神经网络库进行基于 GPU 的加速。Caffe 支持开放式多处理 (OpenMP),用于在系统集群上并行化深度学习算法。Caffe 和 Caffe2 是用 C++ 编写的,以提高性能,并提供 Python 和 MATLAB 接口用于深度学习训练和执行。

theano

Theano icon

Theano 是一个低级 Python 库,用于定位与定义、优化和评估数学表达式相关的深度学习任务。虽然它具有相当令人印象深刻的计算性能,但对界面和错误消息有很多抱怨。因此,Theano 主要与 Keras、Lasagne 和 Blocks 等包装器结合使用,这三个旨在快速原型设计的高级框架。

DL4J

DL4J icon

Deeplearning4j是一个流行的深度学习框架,专注于Java技术,但它包括其他语言(如Scala、Python和Clojure)的应用程序编程接口。该框架在Apache许可下发布,包括对RBM、DBN、CNN和RNN的支持。 Deeplearning4j还包括与Apache Hadoop和Spark(大数据处理框架)配合使用的分布式并行版本。

Deeplearning4j已被应用于各种问题,包括金融领域的欺诈检测、推荐系统、图像识别和网络安全(网络入侵检测)。该框架与 CUDA 集成以进行 GPU 优化,并且可以与 OpenMP 或 Hadoop 一起分发。

结论

在本文中,我们概述了六个最流行的框架:TensorFlow、Keras、PyTorch、Caffe、Theano 和 Deeplearning4j。我们讨论了 TensorFlow 和 Keras 之间的关系,并提供了 TensorFlow 和 Pytorch 之间的比较研究。

你可能感兴趣的:(tensorflow,keras,人工智能)