keras cnn注意力机制_TensorFlow、PyTorch、Keras:NLP框架哪家强
全文共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框架哪家强相关推荐
- keras cnn注意力机制_从发展历史视角解析Transformer:从全连接CNN到Transformer
编译 | bluemin校对 | 陈彩娴Transformer架构在机器学习领域(尤其是NLP里)是一项热门研究,为我们带来了许多重要成果,比如:GPT-2.GPT-3等写稿机器人:第一代GPT及其性 ...
- keras cnn注意力机制_2019 SSA-CNN(自注意力机制)目标检测算法论文阅读笔记
背景 <SSA-CNN Semantic Self-Attention CNN for Pedestrian Detection>是2019 的工作,其作者来自于南洋理工.这篇文章主要是做 ...
- Attention 扫盲:注意力机制及其 PyTorch 应用实现
点击上方"MLNLP",选择"星标"公众号 重磅干货,第一时间送达 来自 | 知乎 作者 | Lucas 地址 | https://zhuanlan.zhihu ...
- 聊一聊计算机视觉中常用的注意力机制 附Pytorch代码实现
聊一聊计算机视觉中常用的注意力机制以及Pytorch代码实现 注意力机制(Attention)是深度学习中常用的tricks,可以在模型原有的基础上直接插入,进一步增强你模型的性能.注意力机制起初是作 ...
- 论文浅尝 | 用于学习知识图谱嵌入的一种基于注意力机制的新型异构 GNN 框架HRAN...
笔记整理 | 李爽,天津大学 链接:http://hfbix45521e79b0484907sowxo0fubpp9b6xwx.fiiz.eds.tju.edu.cn/stamp/stamp.jsp? ...
- Pytext简介:facebook的基于PyTorch的NLP框架
自然语言处理(NLP)在现代深度学习生态中越来越常见.从流行的深度学习框架到云端API的支持,例如Google云.Azure.AWS或Bluemix,NLP是深度学习平台不可或缺的部分.尽管已经取得了 ...
- 深度学习框架哪家强?MXNet称霸CNN、RNN和情感分析,TensorFlow仅擅长推断特征提取
深度学习框架哪家强:TensorFlow?Caffe?MXNet?Keras?PyTorch?对于这几大框架在运行各项深度任务时的性能差异如何,各位读者不免会有所好奇. 微软数据科学家Ilia Kar ...
- keras实现注意力机制
分别来用keras实现通道注意力模块和空间注意力模块. #通道注意力机制 def channel_attention(input_feature, ratio=8):channel_axis = 1 ...
- 机器翻译注意力机制及其PyTorch实现
前面阐述注意力理论知识,后面简单描述PyTorch利用注意力实现机器翻译 Effective Approaches to Attention-based Neural Machine Translat ...
最新文章
- 深入理解Java中为什么内部类可以访问外部类的成员
- MNE-Python专辑 | MNE-Python详细安装与使用(更新)
- 音频在计算机中的存储
- 牛客小白月赛5 E 面积 计算三角形面积模板 波尔约-格维也纳定理 匹克公式
- ssm上传文件进度条_ssm学习笔记-三种文件上传方式
- 前端学习(3012):vue+element今日头条管理--axios的create字段
- 融资 6 亿元后,端点科技将致力于类SaaS化软件服务
- Oracle自增主键的添加[sequence]--表数据已存在
- flex自定义更新UI
- 计算机专业教研成绩,2018学年第一学期计算机组教研组工作计划
- android xml 加密,AndroidManifest.xml和MAIN.xml文件都是加密的,请问怎么解决
- bouncing-balls-evil-circle
- html空格字符转义存入数据库,HTML中多种空格转义字符
- 蚁群算法(Ant Colony Optimization,ACO)介绍及MATLAB代码(求解旅行商问题TSP)
- 2500个常用汉字列表
- 神经网络预测模型基本原理与编程实现
- 判别分析分为r型和q型吗_r型聚类分析
- tp6多表联合查询的几种方式(模糊搜索+分页+字段限制)
- 网页配色不用愁!6条网页设计配色原则
- python中合法的赋值语句是_以下( )是合法的Python赋值语句。_学小易找答案
热门文章
- cacti 安装过程笔记
- 树莓派(Raspberry Pi 3) - 系统烧录及系统使用
- JAVA-retry 重试
- ListListObject list = new ArrayListListObject(); 求回答补充问题 list.get(position).add(Object);为什么会...
- mysql node
- Ants UVA - 1411(km板题竟然让我换了个板子)
- 显示mac电脑中隐藏的文件和文件夹
- 超神线段树 山海经
- 支持多个版本的ASP.NET Core Web API
- JAVA 双重检查锁定和延迟初始化