Skip to main content
 Web开发网 » 站长学院 » 浏览器插件

TensorFlow、PyTorch、Keras:NLP框架哪家强

2021年11月03日5240百度已收录

全文共3412字,预计学习时长7分钟TensorFlow、PyTorch、Keras:NLP框架哪家强  Tensorflow框架 第1张

在对TensorFlow、PyTorch和Keras做功能对比之前,先来了解一些它们各自的非竞争性柔性特点吧。

TensorFlow、PyTorch、Keras:NLP框架哪家强  Tensorflow框架 第2张

非竞争性特点

下文介绍了TensorFlow、PyTorch和Keras的几个不同之处,便于读者对这三个框架有初步了解。列出这些区别的重点不在于对三者做比较,而在于做一个初步介绍。

TensorFlow

· 开发者:Google

· 2017年1月发布1.0版本

PyTorch

· 开发者:Facebook

· 2018年10月发布1.0版本

· 基于Torch开发(Torch是基于Lua开发的另一个深度学习框架)

Keras

· 是一个高级API,降低了深度学习框架的复杂程度

· 可以在其他深度学习API,如TensorFlow、Theano和CNTK上运行

· 本身并不是一个库

TensorFlow、PyTorch、Keras:NLP框架哪家强  Tensorflow框架 第3张

竞争性区别

TensorFlow、PyTorch、Keras:NLP框架哪家强  Tensorflow框架 第4张

下面将介绍这三个框架更加具有竞争性的区别。本文着重分析比较了这三个框架用于自然语言处理(Natural Language Processing,NLP)时的不同之处。

1. 可用的RNN类型

当试图用深度学习方法来解决NLP问题时,循环神经网络(Recurrent Neural Networks,RNNs)是开发者最常用的专业架构。因此,本文也选择从这一角度切入来比较TensorFlow、PyTorch和Keras框架。

本文比较的三种框架都具有可用于构建简单RNN以及更复杂的RNN——门控循环单元(Gated Recurrent Units,GRU)和长短时记忆网络(Long Short Term Memory networks,LSTM)的模块。

PyTorch:

PyTorch提供2种不同层次的类别(class)用于构建循环网络:

· 多层次类别(Multi-layer classes),包括nn.RNN、nn.GRU和nn.LSTM。这些类别的基类(Object)可用于表示深度双向循环神经网络。

· 单元层类别(Cell-level classes),包括nn.RNNCell、nn.GRUCell和nn.LSTMCell。这些类别的基类仅可用于表示单个单元(如简单RNN、LSTM及GRU的单元),即处理输入数据一个时间步长的单元。

因此,当神经网络中不需要太多定制时,多层次类别对单元层类别来说,就像是不错的包装类(wrapper)。

此外,构建一个双向RNN非常简单,只需在多层次类别中将双向实参设置为True就可以了。

TensorFlow:

TensorFlow提供tf.nn.rnn_cell模块用于构建标准RNN。

tf.nn.rnn_cell模块中最重要的类别包括:

· 单元层类别(Cell level classes):用于定义RNN的单个单元,即BasicRNNCell、GRUCell和LSTMCell。

· 多RNN单元类别(MultiRNNCell class):用于堆栈多个单元,以创建深度RNN。

· 随机失活包装类别(DropoutWrapper class):用于执行dropout正则化。

Keras:

Keras库提供的循环层包括:

· 简单RNN——全连接RNN,其输出被反馈到输入中

· GRU——门控循环单元层

· LSTM——长短时记忆层

TensorFlow、PyTorch和Keras都具有构建常见RNN架构的内置功能。它们的区别在于接口不同。

Keras的接口非常简单,包含一小串定义明确的参数,能够使上述类别的执行更加简单。作为一个能够在TensorFlow上运行的高级API,Keras使得TensorFlow更加简单。TensorFlow和PyTorch两者的灵活性差不多,但是后者的接口更加简洁明了。

2. TensorFlow、PyTorch、Keras易用性对比

TensorFlow常因其范围狭小的API而被诟病。相比之下,PyTorch对用户则更为友好,使用也更加简单。总之,PyTorch与Python语言的融合更为紧密,也更加自然。而在TensorFlow框架中编写程序时,程序员常感到自己与模型之间仿佛隔着一堵砖墙,只留下了几个洞孔用于交流。

下文将讨论并比较更多影响这三个框架易用性的因素:

· 静态计算图vs动态计算图:

计算图是NLP中非常重要的一个因素。TensorFlow使用静态计算图,PyTorch则使用动态计算图。

这也就意味着在TensorFlow中,需要先静态定义计算图,再运行模型。所有与外界的沟通都通过tf.Session对象和tf.Placeholder进行,而这两个张量在运行时库中都会被外部数据替代。

PyTorch中的计算图则更为重要和灵活。用户可以根据需要定义、改变和执行节点,无需依赖特殊的会话接口或占位符。

RNN静态图的输入序列长度通常是固定的。也就是说,开发一个英文句子情感分析模型必须将句子长度固定到某个最大值,并用0填充所有过短的序列。这真的很不方便。

· 调试:

由于PyTorch在运行时库中定义计算图,所以用户可以使用自己喜爱的调试工具,如pdb、ipdb、PyCharm debugger、old trusty print statements等。

但上述情况并不适用于TensorFlow。在TensorFlow中,用户可以选择使用一个名为tfdbg的特殊工具,用于评估运行时库的TensorFlow表达式和浏览会话作用域中的所有张量和操作。但是,这一工具显然不能调试python代码。所以用户还必须再使用pdb进行调试。

· 社区规模:

和PyTorch相比,TensorFlow更加成熟,其社区规模比PyTorch和Keras的社区规模加起来还要大得多,用户基数的增长也比PyTorch和Keras要快。

这也就意味着:

· 有更大规模的社区,如StackOverFlow上的社区,帮助你解决问题

· 有更多的线上学习资料,如博客、视频、课程等

· 能更快掌握最新的深度学习技术

NLP的未来

TensorFlow、PyTorch、Keras:NLP框架哪家强  Tensorflow框架 第5张

循环神经网络作为用作NLP任务的专业架构已经有相当长的一段时间了,但这一情况并不会长期不变。一个最新开发的基于注意力机制的变换模型(transformer model)已经在研究者之间流行开来。

这一模型已经代替RNN成为了新的NLP标准。一些评论家认为,Transformer将会成为2019年主流NLP深度学习架构。

在这场比赛中,TensorFlow似乎领先于另外两个框架:

· 首先,注意力架构是Google自己研发的。

· 其次,只有TensorFlow有Transformer稳定版架构。

但这并不是说PyTorch已经远远地落在了后面。Huggingface的GitHub已经发布了很多预训练的PyTorch transformer模型:。

另外,Google最近发布的TensorFlow 2.0很可能将带来翻天覆地的变化!

具体来说:

· Keras将会成为TensorFlow的高级API,其功能将会被扩展,使得用户能够在tf.keras上直接使用TensorFlow的最新功能。任一范围的TensorFlow及其硬件设备都将具备Keras的简便性。

· TensorFlow 2.0默认为动态图机制(eager execution)。用户甚至在eager context中也可以使用计算图,这将使调试和原型设计更为简单。TensorFlow运行时库则会在后台调控性能和规模。

· TensorBoard会和Keras整合——这在目前无法实现。

所以,本文猜想,TensorFlow 2.0将会消除几乎所有TensorFlow的不足。TensorFlow作为所有深度学习任务专业框架的地位将会得到巩固,甚至变得更好!

TensorFlow、PyTorch、Keras:NLP框架哪家强  Tensorflow框架 第6张

留言 点赞 关注

我们一起分享AI学习与发展的干货

编译组:王努铱、杨月

相关链接:

如需转载,请后台留言,遵守转载规范

评论列表暂无评论
发表评论
微信