在开始对 TensorFlow、PyTorch 和 Keras 进行功能比较之前,让我们介绍它们之间的一些软的、非竞争性的差异。
非竞争性事实:
下面,我们介绍 3 之间的一些差异,它们应作为 TensorFlow、PyTorch 和 Keras 的介绍。这些差异不是本着比较另一种的精神而写成的,而是本着在本文中介绍我们讨论的主题的精神。
张力流
- 由谷歌创建
- 2017 年 2 月版本 1.0
皮托奇
- 由 Facebook 创建
- 2018 年 10 月版本 1.0
- 基于火炬,另一个基于 Lua 的深度学习框架
喀纳斯
- 高级 API 可简化深度学习框架的复杂性
- 在其他深度学习 API 之上运行 – TensorFlow、Theano 和 CNTK
- 它本身不是图书馆
天速、皮托奇和喀纳斯的竞争差异:
现在,让我们来看看关于他们3更具竞争力的事实。我们特别希望对以自然语言处理为重点的框架进行比较分析。
1. 可用的 RNN 类型
当寻找 NLP 问题的深入学习解决方案时,循环神经网络 (RNN) 是开发人员最受欢迎的热门体系结构。因此,从这个角度比较框架是有意义的。
所有考虑的框架都有模块,使我们能够创建简单的RNN,以及其更进化的变体 – 门定期单位 (GRU) 和长期短期内存(LSTM) 网络。
皮托奇:
PyTorch 提供 2 级类来构建此类循环网络:
- 多层类 = nn。RNN,nn.GRU,和nn.LSTM.这些类的对象能够表示深层双向循环神经网络。
- 单元格级类 = nn。RNNCell, nn.GRUCell 和 nn.LSTMCell。这些类的对象只能表示一个单元(同样,一个简单的RNN或LSTM或GRU单元),它可以处理输入数据的一个时间步长。
因此,在不需要神经网络中太多自定义时,多层类就像是单元级类的一个很好的包装器。
此外,使 RNN 双向与在多层类中将双向参数设置为True一样简单!
张力流:
TensorFlow 为我们提供了一个tf.nn.rnn_cell模块,可帮助我们满足标准 RNN 需求。
本模块中一些最重要的类 tf.nn.rnn_cell
如下所示:
- 单元格级类用于定义 RNN、可视化 +
BasicRNNCell
和 LSTMCell 的单个单元格GRUCell
- MultiRNNCell 类用于堆叠各种单元以创建深层 RNN
- 辍学Wrapper类用于实现辍学正则化
喀纳斯:
以下是 Keras 库中提供的循环图层。其中一些层是:
- SimpleRNN = 完全连接的 RNN,其中输出将反馈到输入
- GRU = 门控循环单元层
- LSTM = 长短期记忆层
TensorFlow、PyTorch 和 Keras 具有内置功能,使我们能够创建流行的 RNN 架构
Keras 具有一个简单的接口,包含一小小列表,包含定义良好的参数,这使得上述类易于实现。作为位于 TensorFlow 之上的高级 API,我们可以说 Keras 使 TensorFlow 变得简单。虽然 PyTorch 提供了与 TensorFlow 类似的灵活性级别,但它的界面要简洁得多。
当我们讨论这个话题时,让我们深入探讨基于每个框架的易用性的比较研究。
2. 易用性: TensorFlow vs. PyTorch vs. Keras
TensorFlow 经常因其不全面的 API 而受到谴责。PyTorch 是更友好和易于使用的方式。总体而言,PyTorch 框架与 Python 语言集成得更紧密,大多数时候感觉更原生。当你在TensorFlow中写作时,有时你会觉得你的模型在砖墙后面,有几个小孔可以交流。
让我们根据三个因素的易用性来讨论一下比较这三个因素:
静态计算图与动态计算图:
此因素在 NLP 中尤其重要。张力流使用静态图形进行计算,而 PyTorch 使用动态计算图。
这意味着在 Tensorflow 中,在运行模型之前静态定义计算图。与外部世界的所有通信都通过 tf 执行。会话对象和 tf。占位符,这是将在运行时由外部数据替换的张数。
在 PyTorch 中,事情更加必要和动态:您可以定义、更改和执行节点;没有特殊会话接口或占位符。
在 RNN 中,使用静态图形时,输入序列长度将保持不变。这意味着,如果为英语句子开发情绪分析模型,则必须将句子长度固定为一些最大值,并将所有较小的序列填充零。不太方便,对吧?
调试:
由于 PyTorch 中的计算图是在运行时定义的,因此您可以使用我们喜爱的 Python 调试工具,如 pdb、ipdb、PyCharm 调试器或旧的可信打印语句。
张力流不是这样。您可以选择使用名为tfdbg的特殊工具,该工具允许您在运行时计算 TensorFlow 表达式,并浏览会话作用域中的所有张量和操作。当然,您将无法使用它调试任何 python 代码,因此需要单独使用 pdb。
- 社区规模:
张力流比 PyTorch 更成熟。与 PyTorch 和 Keras 的总和相比,它有一个更大的社区。其用户群的增长速度比 PyTorch 和 Keras 都快。
这意味着:
- 更大的 StackOverFlow 社区,帮助您解决问题
- 更多的在线学习材料 – 博客,视频,课程等。
- 更快地采用最新的深度学习技术
NLP 的未来:
虽然循环神经网络已经作为 NLP 任务的”去”体系结构已有一段时间了,但它可能不会永远如此。我们已经有一个基于关注机制的较新的变压器模型在研究人员中越来越受欢迎。
它已经被誉为新的NLP标准,取代了循环神经网络。一些评论家认为,变形金刚将成为2019年NLP深度学习架构的主要。
张力流似乎在这场比赛中领先:
- 首先,基于注意力的架构是由谷歌自己引入的。
- 其次,只有 TensorFlow具有稳定的变压器架构版本
这并不是说 PyTorch 远远落后,许多预先训练的变压器型号可在 Huggingface 的 GitHub 中提供:com/拥抱面/割炬变压器。
所以,这就是关于比较。但在分手之前,让我告诉你一些可能使整个谈话在1年内过时的事情!
张力流 2.0
谷歌最近宣布了Tensorflow2.0,这是一个游戏改变者!
工作方式:
- 展望未来,Keras将成为天源的高级 API,并且扩展了该 API,以便您可以直接从tf.keras使用 TensorFlow 的所有高级功能。因此,所有使用 Keras 的简单性的所有 TensorFlow,在每一个规模和所有硬件上都具有简单性。
- 在 TensorFlow 2.0 中,现在默认执行。即使在渴望的上下文中,您也可以利用图形,这便于调试和原型设计,而 TensorFlow 运行时则负责在引擎盖下进行性能和缩放。
- 张力板与喀纳斯集成,这是现在…一线!
所以,我想,这减轻了人们对于TensorFlow的几乎所有抱怨。这意味着 TensorFlow 将巩固其作为所有深度学习任务的前进框架的地位,现在甚至更好了!