深度模型框架(持续更新)
文章目录
- 1.翻译
- 1.1.快照
- 1.2.详解
- 2.reading comprehension
- 快照
- 详解
- 展望
在各个领域,在一项技术渐于成熟的时候,就会摒弃掉一些底层枯燥的东西,一步步抽象出更加高层的framework,正因如此,才让人摒弃掉更多底层枯燥的工作,专注于更加有利于科技、人类社会发展的事务。而在程序猿的世界里,更是如此,前后端出现了laravel、thinkPhp,爬虫出现了scrapy、scrapyd,前端出现vue、bootstrap等优秀的框架~
扯远了,今天我想整理介绍下深度模型界的framework,深度学习涉及很多不同的主题和很多我们需要学习的东西,所以一个好的策略就是开始研究人们已经为我们构建好了的东西。这就是为什么框架非常棒的原因。框架使我们不必太过于关心如何构建模型的细节,使得我们可以更多地关注我们想要完成的任务(而不是专注于如何实现)。因为深度学习发展迅速,越来越专注于model本身,至于数据处理啊,调参啊,都交给framework去做吧~
下面就整理下相关深度模型框架,相关介绍也是抛砖引玉,更多详细内容可参考相关链接。
1.翻译
1.1.快照
framework | Programming language |
---|---|
tensor2tensor | tensorflow |
allennlp | pytorch |
OpenNMT-py | pytorch |
NMT | tenforflow |
seq2seq | tensorflow |
更多参考:NMT framework
1.2.详解
tensor2tensor(tensorflow)
Google Brain在发布了“attention is all you need”之后,也发布了Tensor2Tensor (T2T),这是一个用于在TensorFlow中训练深度学习模型的开源系统。
T2T有助于开发顶尖水平的模型,并适用各类机器学习应用,例如翻译、分析和图像标注等。这意味着,对各种不同想法的探索要比以往快得多。
此次发布的这个版本还提供了由数据集和模型构成的库文件,包括近期几篇论文中最优秀的模型(文末列举了这几篇论文),从而推动你自己的深度学习研究。
T2T库利用TensorFlow工具来开发,定义了一个深度学习系统中需要的多个部分:数据集、模型架构、优化工具、学习速率衰减计划,以及超参数等等。实现了架构的模块化,因此输入数据和预期输出结果之间所有部分都是张量到张量的函数。
源码地址:tensor2tensor
tensor2tensor参考链接:- 官方文档
- Google开源模块化多任务训练库Tensor2Tensor
- Accelerating Deep Learning Research with the Tensor2Tensor Library
- T2T: Tensor2Tensor Transformers
- “变形金刚”为何强大:从模型到代码全面解析Google Tensor2Tensor系统
allennlp(Pytorch)
建立在PyTorch上,AllenNLP可以轻松设计和评估几乎任何NLP问题的新的深入学习模型,以及轻松将其运行在云端或笔记本电脑上的基础架构。AllenNLP设计有以下原则:- 超模块化和轻量化。使用您喜欢的部件与PyTorch无缝连接。
- 经过广泛测试,易于扩展。测试覆盖率高于90%,示例模型提供了贡献的模板。
- 认真填充和掩蔽,轻松实现正确的模型,无需痛苦。
- 实验友好。 通过综合测井从json规范运行可重复的实验。
AllenNLP包括语义角色标签,问答和双向优化(EntDAment)(可分解关注)等高质量模型的参考实现。
AllenNLP由Allen人造智能研究所建立和维护,与华盛顿大学和其他地方的研究人员密切合作。拥有一流的现场研究人员和软件工程师团队,AllenNLP项目具有独特的优势,能够为高品质工程提供最先进的模型。
package instructions allennlp 一个基于PyTorch的开源NLP研究库 allennlp.commands CLI和Web服务的功能 allennlp.data 数据处理模块,用于将数据集和编码字符串加载为矩阵中的整数 allennlp.models 收集最先进的模型 allennlp.modules 一组用于文本的PyTorch模块 allennlp.nn 张量效用函数,如初始化器和激活函数 allennlp.service 一个Web服务器来为我们的演示和API提供服务 allennlp.training 训练模型的功能 源码地址:AllenNLP
allennlp参考链接:- 官方文档
- 都说AllenNLP好用,我们跑一遍看看究竟多好用
openNMT-py
OpenNMT是一个开放源代码(MIT)神经机器翻译系统,OpenNMT的Pytorch 端口。本系统的设计基于简洁的使用性以及便捷的扩展性,同时保持高效性和最先进的翻译准确度。功能包括:高性能GPU训练的速度和内存优化。界面简单而且通用,方便部署。 扩展性强以允许其他序列生成任务,如生成汇总和图像字幕。
实现以下OpenNMT功能:- 多层双向RNN具有注意力和缺点
- 数据预处理
- 从检查站保存和加载
- 推荐(翻译)与批量和波束搜索
- 多GPU
测试版功能:
- 上下文门
- 多源和目标RNN(lstm / gru)类型和注意(dotprod / mlp)类型
- 图像到文本处理
- 源词功能
- “注意就是你需要的”
- TensorBoard /蜡笔记录
- 复制,覆盖和结构化注意
源码地址:openNMT-py
openNMT参考链接- 官方文档
- 使用pytorch通过OpenNMT-py实现开源神经机器翻译
2.reading comprehension
快照
framework | Programming language |
---|---|
gluon-nlp | mxnet |
详解
- GluonNLP
GluonNLP提供NLP中最先进(SOTA)深度学习模型的实现,并为文本数据管道和模型构建模块。它专为工程师,研究人员和学生设计,可以基于这些模型快速研究原型和产品的原型。
该工具包提供四个主要功能:- 培训脚本以重现研究论文中报告的SOTA结果。
- 针对常见NLP任务的预训练模型。
- 精心设计的API大大降低了实现的复杂性。
- 社区支持。
源码链接 :GluonNLP
GluonNLP参考链接:
- 官方文档
- GluonNLP - 基于MXNet的深度学习自然语言处理包
展望
博主在做了相关的调研之后发现,现在的framework多数有以下优缺点:
优点:
- 很多fm封装的特别棒,代码条例,便于扩展
- 特别适合商业化
- 如果想入门,速度回很快
- 源码开源,社区多个contributor
- 相关教程比较丰富
缺点:
- 为了便于扩展,导致的一些函数的实现往往有好多层,为了实现函数A,需要调用函数B,函数B又要调用函数C,而真正的实现可能也就几行,如此一来看明白某个函数的思路往往需要花费不少精力(里面还有好多的空函数,ORZ…)
- 由于函数的高度抽象,运行代码很简单,但是很多特别多相关细节都会屏蔽掉,不适合模型细节trick学习
- 系统支持多任务,任务混杂,导致代码结构比较复杂。在实现的时候,要考虑到整体的结构,所以会存在各种封装、继承、多态的实现。可能你只想用其中的一个功能,理解该功能对应的代码,但是却需要排除掉大量的不相关的代码。
- 系统基于Tensorflow封装较高的API。使用了Tensorflow中比较高的API来管理模型的训练和预测,Experiment,Monitor,Estimator,Dataset对象的使用隐藏了比较多的控制流程,对于侧重应用的用户来说,可能是是好事情,设一设参数就能跑。但是对于想了解更多的开发人员来说,TF该部分的文档实在很少,说的也不清楚,很多时候需要去阅读源代码才能知道实验到底是不是按照自己预期的进行的。这种方式也不太方便找bug和调试。
- 某些方法调用比较深。原因应该还是出于整体结构和扩展性的考虑。这导致了实现一点很小功能的方法A,需要再调一个其他方法B,B再去调用方法C,实际上每个方法中就几行代码,甚至有的方法就是空操作。
- 多层继承和多态也降低了代码的可读性。追溯一个类的某个方法的时候,需要看到其父类的父类的父类。。。这些父类和子类之间的方法又存在着调来调去的关系,同名方法又存在着覆盖的关系,所以要花一些时间来确定当前的方法名到底是调用的的哪个类中的方法。
- 要求开发者有模型层面的理解和与代码实现的挂钩。肯定是要提高对模型逻辑的理解,但在读代码的过程中,会遇到两种问题:第一个,代码实现的是论文中的功能,但不是论文中的原始公式,可能要做变形以规避溢出的问题,或是实现更高的效率;第二个,某些代码实现与其论文中的表述存在不一致的情况。
基于此,本博打算在最近一段时间里做出一个rc的框架,结合之前的相关代码和比赛经验,打造一个适合比赛、学生、初学者使用的简单framework,敬请期待~
深度模型框架(持续更新)相关推荐
- 快速了解深度学习框架--tensorflow(更新中)
深度学习框架(工具)简单来说即库,需要import,比如tensorflow,Caffe- 深度学习框架提供了一系列的深度学习的组件(对于通用的算法,里面会有实现),当需要使用新的算法的时候就需要用户 ...
- iOS之github第三方框架(持续更新)
1.MBProgressHUD MBProgressHUD是一个开源项目,实现了很多种样式的提示框 使用上简单.方便,并且可以对显示的内容进行自定义,功能很强大,很多项目中都有使用到. 到Github ...
- 李宏毅 深度学习【持续更新】
目录 pytorch快速入门 csdn快速入门 OS包 PIL包 Opencv包 Dataset类 Tensorboard的使用 torchvision.transforms 的使用 torchvis ...
- iOS开发常用第三方开源框架 持续更新中...[转]
键盘管理 TPKeyboardAvoiding IQKeyboardManager(1.2.8) 弹窗HUD MBProgressHUD(0.9.2) SVProgressHUD UIView+Toa ...
- ThinkPhp5开发实战1:搭建环境配置TP5框架(持续更新收藏关注)
文章目录 前言 一.下载thinkphp5.0.10和安装本地环境 二.下载H-UI后端模板 三.静态文件引入 四.创建后台页面首页 前言 php框架有助于促进快速应用开发,不仅节省时间,有助于建立更 ...
- TKDragView_iOS开发常用第三方开源框架 持续更新中...
网络请求 AFNetworking Alamofire AFNetworking swift版本 YTKNetwork AFNetworking的封装 YQNetworking 基于AFNetwork ...
- Java进阶学习 - Dubbo框架(持续更新中~~)
Java进阶学习 - Dubbo框架 1.简介 Dobbo是一个高性能的RPC框架,解决了分布式钟的调用问题 优点:解决了分布式系统中互相调用问题 缺点:缺少统一管理的调度中心 2.为什么Dubbo说 ...
- 嵌入式机器学习知识框架 持续更新
学习框架V1.0 学习框架V2.0
- golang 分布式框架 (持续更新)
源码地址: https://github.com/MwlLj/go-micro-service go-micro-service golang分布式框架 zookeeper 安装与启动 http:// ...
最新文章
- Struts从2.1升级到2.3版本过程
- 使用Akka处理1000万条消息
- 【渝粤教育】国家开放大学2019年春季 2773特种动物养殖 参考试题
- OkHttp协议介绍以及文件下载和上传+OkHttp协议封装+OkHttp拦截器____SpringBoot——集成Okhttp3
- marquee标签、插入百度地图
- 异常记录——使用Mybatis报BindingException
- 使用src.rpm包安装软件
- 软件测试人员需不需要懂代码
- Maven Helper插件下载
- [CSP-S模拟测试]:游戏(最短路)
- 16k Star!一个开源的命令行视频播放器
- 又多了一重身份,继续前行
- 计算机专业各种书籍整理
- 小心肝队-冲刺日志(第二天)
- 批量添加用户脚本--Linux bash
- 云南怒江---地狱与天堂的边缘
- 手写算法-python代码实现Ridge(L2正则项)回归
- Spring Cloud OpenFeign - - - > 契约配置
- 机器学习实战之朴素贝叶斯
- 20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises26