全文共3412字,预计学习时长7分钟

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

非竞争性特点

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

TensorFlow

· 开发者:Google

· 2017年1月发布1.0版本

PyTorch

· 开发者:Facebook

· 2018年10月发布1.0版本

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

Keras

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

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

· 本身并不是一个库

竞争性区别

下面将介绍这三个框架更加具有竞争性的区别。本文着重分析比较了这三个框架用于自然语言处理(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的未来

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

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

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

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

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

但这并不是说PyTorch已经远远地落在了后面。Huggingface的GitHub已经发布了很多预训练的PyTorch transformer模型:https://github.com/huggingface/pytorch-transformers。

另外,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作为所有深度学习任务专业框架的地位将会得到巩固,甚至变得更好!

留言 点赞 关注

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

编译组:王努铱、杨月

相关链接:

https://dzone.com/articles/tensorflow-vs-pytorch-vs-keras-for-nlp

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

keras cnn注意力机制_TensorFlow、PyTorch、Keras:NLP框架哪家强相关推荐

  1. keras cnn注意力机制_从发展历史视角解析Transformer:从全连接CNN到Transformer

    编译 | bluemin校对 | 陈彩娴Transformer架构在机器学习领域(尤其是NLP里)是一项热门研究,为我们带来了许多重要成果,比如:GPT-2.GPT-3等写稿机器人:第一代GPT及其性 ...

  2. keras cnn注意力机制_2019 SSA-CNN(自注意力机制)目标检测算法论文阅读笔记

    背景 <SSA-CNN Semantic Self-Attention CNN for Pedestrian Detection>是2019 的工作,其作者来自于南洋理工.这篇文章主要是做 ...

  3. Attention 扫盲:注意力机制及其 PyTorch 应用实现

    点击上方"MLNLP",选择"星标"公众号 重磅干货,第一时间送达 来自 | 知乎 作者 | Lucas 地址 | https://zhuanlan.zhihu ...

  4. 聊一聊计算机视觉中常用的注意力机制 附Pytorch代码实现

    聊一聊计算机视觉中常用的注意力机制以及Pytorch代码实现 注意力机制(Attention)是深度学习中常用的tricks,可以在模型原有的基础上直接插入,进一步增强你模型的性能.注意力机制起初是作 ...

  5. 论文浅尝 | 用于学习知识图谱嵌入的一种基于注意力机制的新型异构 GNN 框架HRAN...

    笔记整理 | 李爽,天津大学 链接:http://hfbix45521e79b0484907sowxo0fubpp9b6xwx.fiiz.eds.tju.edu.cn/stamp/stamp.jsp? ...

  6. Pytext简介:facebook的基于PyTorch的NLP框架

    自然语言处理(NLP)在现代深度学习生态中越来越常见.从流行的深度学习框架到云端API的支持,例如Google云.Azure.AWS或Bluemix,NLP是深度学习平台不可或缺的部分.尽管已经取得了 ...

  7. 深度学习框架哪家强?MXNet称霸CNN、RNN和情感分析,TensorFlow仅擅长推断特征提取

    深度学习框架哪家强:TensorFlow?Caffe?MXNet?Keras?PyTorch?对于这几大框架在运行各项深度任务时的性能差异如何,各位读者不免会有所好奇. 微软数据科学家Ilia Kar ...

  8. keras实现注意力机制

    分别来用keras实现通道注意力模块和空间注意力模块. #通道注意力机制 def channel_attention(input_feature, ratio=8):channel_axis = 1 ...

  9. 机器翻译注意力机制及其PyTorch实现

    前面阐述注意力理论知识,后面简单描述PyTorch利用注意力实现机器翻译 Effective Approaches to Attention-based Neural Machine Translat ...

最新文章

  1. 深入理解Java中为什么内部类可以访问外部类的成员
  2. MNE-Python专辑 | MNE-Python详细安装与使用(更新)
  3. 音频在计算机中的存储
  4. 牛客小白月赛5 E 面积 计算三角形面积模板 波尔约-格维也纳定理 匹克公式
  5. ssm上传文件进度条_ssm学习笔记-三种文件上传方式
  6. 前端学习(3012):vue+element今日头条管理--axios的create字段
  7. 融资 6 亿元后,端点科技将致力于类SaaS化软件服务
  8. Oracle自增主键的添加[sequence]--表数据已存在
  9. flex自定义更新UI
  10. 计算机专业教研成绩,2018学年第一学期计算机组教研组工作计划
  11. android xml 加密,AndroidManifest.xml和MAIN.xml文件都是加密的,请问怎么解决
  12. bouncing-balls-evil-circle
  13. html空格字符转义存入数据库,HTML中多种空格转义字符
  14. 蚁群算法(Ant Colony Optimization,ACO)介绍及MATLAB代码(求解旅行商问题TSP)
  15. 2500个常用汉字列表
  16. 神经网络预测模型基本原理与编程实现
  17. 判别分析分为r型和q型吗_r型聚类分析
  18. tp6多表联合查询的几种方式(模糊搜索+分页+字段限制)
  19. 网页配色不用愁!6条网页设计配色原则
  20. python中合法的赋值语句是_以下( )是合法的Python赋值语句。_学小易找答案

热门文章

  1. cacti 安装过程笔记
  2. 树莓派(Raspberry Pi 3) - 系统烧录及系统使用
  3. JAVA-retry 重试
  4. ListListObject list = new ArrayListListObject(); 求回答补充问题 list.get(position).add(Object);为什么会...
  5. mysql node
  6. Ants UVA - 1411(km板题竟然让我换了个板子)
  7. 显示mac电脑中隐藏的文件和文件夹
  8. 超神线段树 山海经
  9. 支持多个版本的ASP.NET Core Web API
  10. JAVA 双重检查锁定和延迟初始化