当前位置: 首页 > 编程日记 > 正文

TensorFlow 2.0发布在即,高级API变化抢先看

640?wx_fmt=jpeg


作者 | Sandeep Gupta, Josh Gordon, and Karmel Allison

整理 | 非主流、Jane

出品 | AI科技大本营


【导语】早在今年 8 月的时候,谷歌开源战略师 Edd Wilder-James 在一封公开邮件中表示正在研发 TensorFlow 2.0,并将于今年晚些时候发布预览版。在 2018 年最后半个月的日子里,我们就要迎来了新版本的发布。


在之前的公开邮件中,Edd Wilder-James 曾提到过一些 TensorFlow 2.0 的设计思想和重大改变:易用性将成为重点、Eager Execution 将会是核心功能、支持更多的平台和语言等。


而且未来所有的 tf.contrib 都会被弃用,对于每个 contrib 模块,要么 a)将项目集成到 TensorFlow 中;b)将其移至单独的存储库;c)完全将其移除。


在这篇文章中,我们将预览 TensorFlow 中高级 API 的未来方向,并回答大家常问的一些问题。


Keras 是广受开发者社区欢迎的高级 API,主要用于构建和训练深度学习模型。它可以用于快速原型设计、最先进的研究以及实际生产。虽然 TensorFlow 已经支持 Keras,但是 2.0 版本将实现更加紧密的集成。


Keras有以下几大关键优点:用户友好、模块化、可组合、容易扩展,既适合新手,也适合专家。这些优点加起来。可以让学习、研究、开发、部署的工作流更加容易,效率更高。通过将 Keras 构建为 TensorFlow 的高级 API,机器学习领域的新手可以更容易上手。通过单一的高级 API 可以减少混淆,让我们能够专注于为研究人员提供高级功能。


TensorFlow 2.0 版本发布在即。我们会先解答下大家比较关注的几个问题,然后我们会介绍 TensorFlow 2.0 中关于Keras 的一些新功能和重大变化,如Sequential API、Functional API、Model Subclassing API 与 Estimators 等。


FAQ


1、问:Keras 是否是一个独立的库?


答:其实,更应该把 Keras 视为一个 API。Keras 一直作为一个开源项目进行维护,大家可以在 (www.keras.io.)中找到。这个项目一直独立于 TensorFlow,并且拥有一个活跃的贡献者社区和用户社区。在 tf.keras 模块里,TensorFlow 有一个特定增强功能的完整 Keras API 实现。


2、问:Keras 只是 TensorFlow 或其他库的一个包装器吗?


答:不,这是一个常见的(但可以理解的)错误观念。 Keras 用于定义和训练机器学习模型的 API 标准,它与特定实现无关:除了 TensorFlow,Keras API 还可以用于 MXNet,TypeScript,JavaScript,CNTK,Theano,PlaidML,Scala,CoreML 和其他库的实现。


3、问:TensorFlow 内置的 Keras 版本与 keras.io 上的版本有什么区别?


答:TensorFlow 包含 Keras API(在 tf.kerasmodule 中)的实现,具有 TensorFlow 特定的增强功能,包括支持 Eager Execution,方便直观调试和快速迭代,支持 TensorFlow SavedModel模型交换格式,以及分布式训练(包括 TPU)。


当用到 tf.keras 模块的子类 API 时,Eager Execution 特别有用。这类 API 受到 Chainer 的启发,大家通过命令行就可以编写模型。tf.keras 与 TensorFlow 的生态系统紧密结合,可以支持:


  • tf.data 用于构建高性能的输入流。你可以用 Numpy 处理的数据来训练模型,或者用 tf.data 来衡量规模和性能。

  • 分布策略。在跨各种计算平台时进行分布式训练,包括分布在很多机器上的 GPU 和 TPU。

  • 输出模型。通过 tf.keras APIs 创建的模型可以在 TensorFlow SavedModel 格式下进行序列化,并且可以使用 TensorFlow Serving 或通过其他语言(Java、Go、Rust、C#等)进行绑定。

  • 模型可以使用 TensorFlow Lite 部署在移动或嵌入式设备上,也可以使用 TensorFlow.js。(也可以使用与此相同的 Keras API 直接在 JavaScript 中开发模型。)

  • 特征列,用于有效地表示和分类结构化数据。


如何安装 tf.keras?我是否需要先通过 pip 安装 Keras ?


因为 tf.keras 是包含在 TensorFlow 内的,所以,大家不用单独安装 Keras。如果在 Colab 中你可以直接运行下面的代码:


640?wx_fmt=jpeg


然后你就可以使用 tf.keras 了。如果你是安装新手,可以通过近期教程中的一些例子来检查是否导入成功。


5、TensorFlow 为专家和新手提供了不同 API,如何使用?


TensorFlow 的开发者们经验、层次都不同,有刚接触 ML 的学生们、也有 ML 领域的专家或研究者。而 TensorFlow 的一个优点就是它提供了不同的 APIs 支持不同的工作流和目标。这也是 TensorFlow 的 Keras 集成的一个主要目标,可以让用户选择对自己更有益处的部分,而无需采用 Keras 的整体框架。


Sequential API


如果你正在学习机器学习,我们 建议你从 tf.keras Sequential API 开始,它非常直观、简洁,适用于机器学习中 95% 的问题。使用这个 API,10 行代码就能搭建一个神经网络。


参考案例:

https://colab.research.google.com/github/tensorflow/docs/blob/master/site/en/tutorials/_index.ipynb


640?wx_fmt=png


定义模型的最常用方法是构建神经网络的层图,最简单的模型类型是把这些层堆叠起来。 你可以使用 Sequential API 来定义这样的模型,如下所示:


640?wx_fmt=jpeg


在 “Learn and UseML”章节下面,你可以找到更多使用 the Sequential API 的教程,参考链接:

https://www.tensorflow.org/tutorials/


640?wx_fmt=png


Functional API


当然,顺序模型是一个简单的神经网络层堆栈,不能代表任何模型。不过,你可以使用 Functional API 来构建更高级的模型,定义复杂的拓扑结构,包括多输入和多输出模型,具有共享层的模型以及具有残差连接的模型。


使用 Functional API 构建模型时,神经层是可调用的,并可以返回张量作为输出。然后可以使用这些输入张量和输出张量来定义模型。 例如:


640?wx_fmt=jpeg


上面的模型同样可以使用简单的代码来进行编译和训练。


Model Subclassing API


如果你想搭建完全可自定义的模型,那么可以使用 Model Subclassing API。在类方法(class method)的主体中,你必须以这种方式定义前向传播。


640?wx_fmt=jpeg


这样的模型更灵活,但是也更难调试。所有这三种类型的模型三种类型的模型都可以使用前面显示的简单编译和调整命令来编译和训练,或者你可以编写自己的定制训练循环来实现完全控制。


例如:


640?wx_fmt=jpeg


更多 the Model Subclassing 的案例,可以在“research and experimentation”章节中查看教程,参考链接:

https://www.tensorflow.org/tutorials/


640?wx_fmt=png

使用 the Model Subclassing API 实现的 Neural Machine Translation with Attention 


640?wx_fmt=jpeg

使用 the Model Subclassing API实现的 GAN 


如果这些模型都无法满足你的研究?


  • 如果你发现 tf.keras 限制了你的应用领域,你还有其他选择:


使用独立于 Keras 模型定义的 tf.keras 神经层,并编写自己的梯度和训练代码。类似地,你可以单独使用tf.keras.optimizers,tf.keras.initializers,tf.keras.losses或tf.keras.metrics。


  • 同时,你也可以完全忽略 tf.keras,使用较低层级的 TensorFlow,Python 和 AutoGraph 来获得你想要的结果。


这完全取决于你!请注意,tf.layers 中的非面向对象层将被弃用,tf.contribution(包括高级API,如 tf.contribution.slim 和 tf.contribution.learn)在 TF 2.0 中将不可用。


Estimators会发生哪些变化?


Estimator 在 Google 和 TensorFlow 社区的应用都十分广泛。 我们已经将几种模型打包为 Premade Estimators,包括线性分类器,DNN 分类器,组合 DNN 线性分类器(又名 宽深模型)和梯度增强树。 这些模型已经投入生产并得到广泛部署,由于这些原因,包括 Premade Estimators 在内的Estimator API 将包含在 TensorFlow 2.0 中。


对于 Premade Estimators 的用户来说,Keras 和 Eager Execution 焦点变化带来的的影响将是微乎其微的。我们可能会更改 Premade Estimators 的实现,同时保持 API 的界面相同。我们还将努力添加作为 Premade Estimators 实现的模型的 Keras 版本,并扩展 Keras 以更好地满足大规模生产的要求。


也就是说,如果你正在开发自定义体系结构,那我们建议使用 tf.keras 来构建模型而不是Estimator。如果你正在构建需要用到 Estimators 的基础架构,那么可以使用model_to_estimator() 来转换模型,同时我们也努力确保Keras可以跨TensorFlow生态系统工作。


进击到TensorFlow 2.0!


希望大家可以和我们一样喜欢使用 tf.keras 。在接下来几个月的时间,TensorFlow 团队将关注于提升开发者们的体验。在我们的文档和教程里也将会体现这点。我们也期待您的想法和反馈,并通过 Github issues 和 PRs 为项目作出贡献。感谢大家!


社区资源:

https://www.tensorflow.org/community/

原文链接:

https://medium.com/tensorflow/standardizing-on-keras-guidance-on-high-level-apis-in-tensorflow-2-0-bad2b04c819a


本文为AI科技大本营原创文章,转载请联系微信1092722531。


公开课预告

文本分类

文本分类问题是企业在NLP领域中处理文本数据时经常会遇到的一个问题,很多时候,我们需要将文本信息进行分类,或提相关的接口以供外部进行文本上传,在针对于用户所上传的文档信息就需要进行文档内容的分类,那么针对于这个需求我们就需要使用到文本分类的相关模型和算法进行处理。本次演讲就是从这个角度入手,通过对比来阐述不同的算法、模型在实际的应用过程中的区别,以及在文本分类实践中所遇到的各种坑。


640?wx_fmt=jpeg

推荐阅读

  • 免费报名 | WPS专家教你文本分类在企业中的应用实践

  • 如何自学CS?

  • 招聘 | 年薪百万, 超多职位等你选! 技术为王的时代, We Want You !

  • 漫画:如何实现大整数相加?

  • 程序员沉迷 Bug 可以有多疯?

  • 调查 20500 名开发者发现,最流行的编程语言不是 Python 和 Java

  • Python的崛起,影响了80万程序员?真相...

相关文章:

mp4 android自动播放,Android 使用VideoView播放MP4的简单实现

使用VideoView播放MP4播放示例实现简单的播放功能,播放手机本地的MP4文件。不依赖任何第三方框架,不添加任何防腐剂。添加一个系统自带的控制条。申请权限读取存储中的MP4文件准备布局文件在frag_video_view.xml中放置VideoView;为了让内容居…

Sublime-text theme 颜色主题

主题文件下载:Monokai.rar 替换办法: Preferences -> Browser packages -> Color Scheme - DefalutPreferences -> Browser packages -> Color Scheme - Defalut 覆盖 文件物理位置(win7): C:\Users\用户名\AppData\Roaming\S…

android 自定义radiobutton 样式,RadioButton自定义点击时的背景颜色

一、应用场景:在使用 RadioButton 时,有时我们会需要自定义点击时改变背景颜色的效果。效果图:RadioButton自定义背景颜色.jpg二、实现步骤:1、新建一组 RadioButton :android:layout_width"match_parent"an…

如何让网页不受电信114劫持

每当出现输入网页错误时,电信总会把你劫持到他所在的网页下,如下:[url]http://game1.zj.vnet.cn/url1.php?MTwww.dsdsddsds.com[/url]看了这张老脸就觉得浑身不舒服。能不能想个办法不让他出现呢?嘿嘿,其实很简单&…

“男医生,女护士?”消除偏见,Google有大招

编译整理 | 若奇出品 | AI科技大本营如何消除 AI 带来的性别偏见是个令人头疼的问题,那究竟有没有方法去解决?12 月 6 日,Google 宣布他们迈出了减少 Google 翻译中性别偏见的第一步,并且还详细介绍了如何为 Google 翻译上的性别中…

Web Developer中文版下载

Web Developer是一款非常优秀的网页调试工具。Web Developer有IE和Firefox两个版本,主要功能表现在几个重要的方面:对页面中的文本、图像、媒体文件进行控制,对网页所应用的CSS文件的id与class辅助查看,表格辅助查看,可…

位置服务与地图应用

位置服务与地图应用: 位置服务(Location Based Services,LBS)又称为服务或基于位置的服务。Andorid平台支持提供位置服务的API,在开发过程中主要用到LocationManager 和LocationProviders对象。 为开发能够提供位置服务,首先需要得…

20分钟教你搞懂Git!

Git 是最流行的版本管理工具,也是程序员必备的技能之一。本文就来教你 20 分钟搞懂 Git!以下为译文:尽管每天你都会用到Git,但也有可能搞不懂它的工作原理。为什么Git可以管理版本?基本命令git add和git commit到底在干…

android 长按赋值功能,android实现WebView中长按选中复制文本操作

啥都不说了,老司机直接移步GITHUB看源码吧:https://github.com/deaboway/AndroidWebViewTextSelect万一不work,一定不是代码的问题,你可以自查链接中的如下情况CSS控制页面文字不能被选中user-select:none;body{-moz-user-select:…

如何找回丢失的Vista系统“休眠”菜单

如何让Vista系统“休眠”菜单重见天日一些使用Windows Vista的朋友为了节省磁盘空间,在命令提示符下使用命令关闭休眠功能。但是如果再用相同的方法打开休眠功能时,就会发现,即使恢复了功能,“休眠”菜单还是看不见,这…

go3--常量和类型转换

/* Go中不存在隐式转换&#xff0c;所有类型转换必须显式声明 转换只能发生在两种相互兼容的类型之间 类型转换的格式&#xff1a;<ValueA> [:] <TypeOfValueA>(<ValueB>)全局变量可以使用var&#xff08;&#xff09;的形式&#xff0c;局部变量不可以使用v…

android倒计时实现方法,Android实现倒计时方法汇总

Android开发中经常会有倒计时的功能&#xff0c;下面将总结出常见的集中实现方式。1.直接使用Handler的消息机制来实现xml布局中文件如下&#xff1a;android:layout_width"match_parent"android:layout_height"match_parent"android:orientation"hor…

今晚8点直播 | 详讲NLP的经典应用实践——文本分类

文本分类问题是企业在 NLP 领域中处理文本数据时经常会遇到的一个问题&#xff0c;很多时候&#xff0c;我们需要将文本信息进行分类&#xff0c;或提相关的接口以供外部进行文本上传&#xff0c;在针对于用户所上传的文档信息就需要进行文档内容的分类&#xff0c;那么针对于这…

谈论 嵌入式系统

引用 嵌入式系统嵌入式系统http://www.lumit.org/index.htm嵌入式相关的网站http://www.mcu123.com/news/Article/web/uc/200611/3939.html转载于:https://www.cnblogs.com/stoneresearch/archive/2008/10/21/4336381.html

SharePoint Server 2013 之四:部署SharePoint企业版

在上篇文章我们完成了SharePointServer 2013 必备的组件&#xff0c;用户可根据自己需求联网安装或离线安装。接下来我们进入SharePoint 企业版的部署。 运行SharePointServer 2013 SP1 安装程序&#xff0c;点击“安装SharePoint Server”如下图&#xff1a; 企业版安装是需要…

android 监测内存泄漏工具,LeakCanary:Android内存泄漏检测工具

LeakCanaryA memory leak detection library for Android and Java.“A small leak will sink a great ship.” - Benjamin FranklinGetting startedIn your build.gradle:dependencies {debugImplementation com.squareup.leakcanary:leakcanary-android:1.6.1releaseImplemen…

为什么说可视化编程是糟糕的想法?

可视化编程语言可以让程序员通过操纵图形元素来创建程序&#xff0c;而无需键入文本命令。众所周知的例子是 Scratch&#xff0c;这是一种麻省理工学院开发的可视化编程语言&#xff0c;用来教孩子们学编程。该语言的优势在于新手和普通用户可以更容易接触编程。二十世纪九十年…

7年增长16倍,清华AI+ML课程学生数暴增 | AI Index 2018

整理 | 非主流出品 | AI科技大本营用数据解读 AI。昨日&#xff0c;来自斯坦福大学、MIT、哈佛、OpenAI 等高校与企业的多位专家正式发布了 2018 年度 AI Index 报告&#xff0c;用一系列数据全面回顾了过去几年里 AI 领域的全球发展。营长挑了一些重点内容&#xff0c;为大家解…

RunTime的使用-Category改变整个项目全部字体

在项目比较成熟的基础上&#xff0c;遇到了这样一个需求&#xff0c;应用中需要引入新的字体&#xff0c;需要更换所有Label的默认字体&#xff0c;但是同时&#xff0c;对于一些特殊设置了字体的label又不需要更换。乍看起来&#xff0c;这个问题确实十分棘手&#xff0c;首先…

android 耳机红外线,红外线耳机制作方法

本文介绍的语音红外转发器具有结构简单、易于制作、无干扰、低噪声的特点。工作原理&#xff1a;转发器由发射和接收两部分组成。见附图1。鉴频后的伴音(音频)信号经三极管V放大后推动红外发射管。由于发射管的发光强度与通过的电流成正比&#xff0c;所以D1、D2所发出的红外光…

解决load cycle count的一个偏方,告别硬盘卡卡响

load cycle count猛增&#xff0c;笔记本电脑硬盘喀嚓喀嚓响&#xff0c;我倒不担心硬盘寿命&#xff0c;但是实在烦人那声音&#xff0c;系统也时常被卡一下。我曾使用了hdparm -B 254 /dev/sda 的方法&#xff0c;但是硬盘升温太明显&#xff0c;右掌托烫得忍无可忍。苦寻方法…

AI工程的实践者:普元积极将场景落地,为企业提供智能化解决方案

作者 | Jane出品 | AI科技大本营11 月 8-9 日&#xff0c;CSDN 和 AICamp 联合举办的 AI 开发者大会在北京顺利举行。普元移动产品线总经理郝振明发表了《基于机器学习的工程实践》的主题演讲&#xff0c;并接受了 AI科技大本营的专访。以下内容为郝振明的演讲与采访总结&#…

android用户界面设计:基本按钮,Android用戶界面設計:基本按鈕

本文向你展示了在你的android應用程序中創建一個簡單的Button或ImageButton控件的步驟。首先&#xff0c;你會學到如何向你的布局文件中添加按鈕控件。然後你會學習如何用兩種方法處理用戶對按鈕的點擊。最後&#xff0c;我們討論android中按鈕控件一些其它的可用特性。第1步&a…

快速浏览Silverlight3 Beta:当HLSL遇上Silverlight

HLSL高级着色器语言&#xff08;High Level Shader Language&#xff0c;简称HLSL&#xff09;&#xff0c;由微软拥 有及开发的一种语言&#xff0c;只能供微软的Direct3D使用。 HLSL是微软抗衡GLSL的产品&#xff0c;同时不能与OpenGL标准兼容。他跟Nvidia的Cg非常相似。 看…

“80后”财富新贵创业秘诀

"80后"财富新贵创业秘诀:具有冒险和创新精神 不论是文化市场&#xff0c;还是经济市场&#xff0c;当许多人还认为还是“60后”或“70后”的天下时&#xff0c;“80后”财富新贵已在不知不觉中浮出水面&#xff0c;并试图用自己的实力证明新一代的崛起。李想、戴志康…

小插件 打开Android程序动画,android-单击小部件后如何启动活动?

这就是对我有用的…onUpdate方法代码应为&#xff1a;Overridepublic void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {for (int i 0; i < appWidgetIds.length; i) {int appWidgetId appWidgetIds[i];try {Intent intent new …

“深度学习之父”大谈AI:寒冬不会出现,论文评审机制有损创新

整理 | 琥珀出品 | AI科技大本营【AI 科技大本营导读】近日《连线》杂志发表了一篇文章&#xff0c;记录了与“深度学习之父” Geoffrey Hinton 围绕人工智能伦理、技术、学术等领域的采访实录。当被问到如今人工智能是否将走进寒冬时&#xff0c;Hinton 的回答非常坚决&#x…

金山词霸2009牛津版

http://download.iciba.com/Pw2009_oxf/Powerword2009Oxf.25269.4011.exe新版本的词霸2009牛津版的 需要的朋友下载看看 转载于:https://blog.51cto.com/zmdzhangzhe/112418

面向对象之数值的悲剧(8月28日会议有感)

枚举的悲剧 枚举基本用法大家应该都很熟悉&#xff0c;在我们去避免硬编码&#xff0c;增强代码可读性&#xff0c;可维护性方面很好用。不过话说枚举底层还是比较复杂的&#xff0c;以前看过一些关于枚举的说明。至少C#里边的枚举是很复杂的&#xff0c;本身是结构类型&#x…

C++虚函数探索!

C中的虚函数实现了C中的多态。昨天C老师着重讲了讲虚函数。这个很重要&#xff0c;也有点玄机在里面。 下面阐述一下理论&#xff1a; C的类机制中有支持多态的技术来解决抽象编程。使用的是滞后捆绑技术。即预先设定其成员函数虚函数性质&#xff0c;使得任何捆绑该成员函数的…