大家好,我的名字是karmel Allison,我是tensorflow的工程管理,martin刚刚告诉你有关tensorflow2的信息,以及如何获取它,我将告诉你一些,有关我们引入高级api的内容,以及你使用后会发现什么。

首先,当我提到高级api,但这是什么?

在构建机器学习模型时,有很多常见的部分和常式,就像建造房子一样,借助我们高级api和我们为你带来的工具,帮你更轻松,可复用地构建模型并进行扩展,正如martin提到的那样,几年前,tensorflow采用了keras,作为我们的高级api之一,keras的核心是更规范的建立模型,它适用于多个机器学习框架,它提供了一套共享语言,用于定义图层,模型,损耗,优化器等。

我们实现了一个针对tensorflow优化的keras版本,并称之为tensorflow的核心,我们称之为tf keras,我们的高级api之一,如果你已经在使用tf keras,请举手,好的有很多,这很好,因为将会对下一张幻灯片很熟悉。

在最简单的形式中,keras就是这么简单,它是从最基础开始构建的,发展成python的样子并且易于学习,因此,他在机器学习世界方面发挥了重要作用。这里的代码代表了整个模型定义和训练循环,这意味著涉及和修改模型框架非常容易,而不需要编写大量的样板。

同样,依靠继承和介面,keras非常灵活和可定制,这对机器学习应用至关重要,这里我们有个子类模型,我可以定义任意模型架构,修改每个训练步骤发生的事情,如果我愿意,甚至可以改变整个训练循环。

也就是说,keras简单有效,以至于任何人都可以清楚的知道如何使用它,但我嗯遇到了一个问题,tf keras是为小模型设计的,还有很多机器学习问题,包括我们google内部看到的那些,需要以更大的规模运作,。

所以我们需要估算器,估算器是从头开始建立的,在数百台机器上具有容错能力,并且没有任何问题,并且没有任何问题。这是广受欢迎的广度和深度模型,机器学习的世界主力军,花了多年的研究,可以作为一个内置工具用于训练和部署,也就是说估算器是强大的机器,但是你告诉我们学习的曲线陡峭,并不是很容易找出,那些部分连接到哪里。

过去两年我们在tf teras建立估算器,我们学到了很多东西,我们已经到了这样地步,我们认为你不应该,简单的api和可扩展api之间做出选择,我们想要一个更高级的api,他可以把毫无问题的你从inaudible带到行星级。

所以在tensorflow2中,我们正在标准化keras api用于构建图层和模型,但是我们正在将估算器引入tf keras,这样你就可以从原型到分散式训练,在到生产服务一气呵成,

好的,我们怎么做这个,这是tensorflow1.13中的tf keras 模型定义,这与2.0中的模型定义相同,

有些人可能会注意到代码完全一样,好的,实际上有什么不同呢。好吧,我们已经做了很多工作来整合keras,和tensorflow2带给我们的其他功能,例如在1.13中,著构建了一个运行在引擎会话下基于图形的模型,在2.0中,形同模型的定义,将在没有任何修改的情况下以edger模式运行。

这让你可以用edger做到这些,在这里我们看到我们的数据集管道的做法,就像一个numpy数组,易于调试,并且开始导入到我们的keras模型中,但与持同时,已经针对数据集的性能进行了优化,方便你可以以最小的性能开销迭代并训练数据集。

即使在eager的环境中,我们也能通过利用图标在keras的数据集上实现,eager使调试和模型设计变得简单,keras建立了一个eager友好的功能,在hold下,跟踪你的模型,然后tensoflow运行时会关注,性能优化和扩展,也就是说,你可以在eager模式直接地一步步地使用flag run_eagerly的模型中运行,即使对于这个例子,它可能矫枉过正,你可以看到run_eagerly允许,你使用python控制流和eager模式,以你的模型进行调试。

Tensorflow2的另一个最大变化是,我们在tensorflow中整合了很多api,在keras下,减少重复类,并使你更容易指导应该使用什么,以及何时使用。

我们现在有一系列优化器,这些优化器跨tensorflow在一个机器上,或分散式以eager模式工作,你可以检索和设置超参数,如普通的python属性,这些优化器完全可以序列化,权重和配置可以在tensorflow检查点格式和后端诊断keras格式保存。

我们有一些系列包含所有以前的tf和keras的评估标准,如果你想更多的评价标准,也可以很容易进行子类化。

类似地,损耗已经被整合到单独的集合中,如果你愿意,还有很多常用的内置插件。和一个自定义的界面。

我们有一组采用了keras的样式构建的图层,这意味著他们是基于类的,并且完全可配置,有很多内置图层,包括所有的keras api 规范。

我们特别关注的一组图层是tensorflow中的rnn层,如果您在tensorflow中使用了rnn图层,请举手。

在tensorflow v1中,我们有几个不同版本lstm和gru,你必须提前知道你在是什么设备上优化,以便利用cudnn内核获得最高性能。

在tensorflow2中,有一个专门的lstm和一个专门的gru层,他们在运行时为可用的设备选择写操作,这样你就不必这么做了,

上面代码是有关cudnn内核运行的,如果你有gpu可用则会运行,如果你没有可用gpu,则会退回到cpu操作模式,

除了这些,如果内置未包含你需要的图层,tf keras 提供了一个易于子类化和自定义的api,以便你可以在现有图图层上进行创新,事实上,这就是社区存储库tensorflow附加组件的运行方式,他们提供了专门的,特别复杂的层,评价标准,优化器等,通过在keras基类之上构建到tensorflow社区。

所以我们简化了api,这是一个开始,我们做的下一件事上将keras,集成到tensorflow里的所有工具和功能中。

我们发现对开发至关重要的工具之一估算器很容易配置结构花的数据和传递特征列。你可以在tensorflow2中使用特征列,解析你的数据并直接进入下游keras层,这些特征列适用于keras和估算器,搜一你可以混合搭配来创建可重复使用的数据输入管道。

所以你的模型中有数据,你准备好训练数据了,我们用于训练的罪受欢迎的工具之一是tensorboard,我很高兴在tensorflow2中说,tensorboard与keras的集成就像一行一样简单,在这里,我们向模型训练的时候添加了tensorboard回调,这让我们的训练取得进展。

在上图我们可以看到准确性和损耗,以及我们模型逐层构建的概念图,作为额外的好处,

同样回调甚至包括对你的模型的完整分析,这样你就可以更好的了解模型的性能和设备放置,你可以更容易找到,减少性能瓶颈的方法。

说到性能,令人兴奋的作品之一,我们带来tensorflow2 tf.distribute.strategy api,在tensorflow2中我们有一系列内置的训练策略,和keras本地工作的工作流程,这些api设计易于使用,且拥有初涉的即插即用的性能,并且能够处理许多不同的分散式架构和设备,那他们怎么工作呢?使用keras,你只需要几行代码,

就可以添加和切换分散式策略,在这里,我们通过定义模型网路,编译和在分散式策略范围内进行调整,你可以通过多个通用分散式处理器上看到的相同模型,因为我们已经在tensorflow的整个keras集成了分散式策略,你可以从上面几行代码中获得更多,数据将逐批预取到gpu,变数将在所有导出可用设备上同步镜像,我们看到多个cpu使用率超过90%,这意味著你可以在不更改代码的情况下扩展模型,并且不会失去keras的任何便利。

一旦训练好你的模型,你可能想把它打包起来,勇于生产系统,行动电话或其他编程语言,keras模型现在可以直接导出到saved_model,这是一种跨tensorflow生态系统工作的序列化格式,此功能是实验性的,虽然我们解决了一些api细节,但今天2.0版本,你可以很容易地到处你的模型,以便与tf serving,tf lite等一起使用,你可以很轻松的在python继续训练重载这些模型,和使用在你的正常工作流程中,

这就是我们今天在alpha中完成的进度

但我们显然还没有完成所有我们想要的做的,那么让我告诉你一些在接下来的几个月里即将发生的事情。

我们谈过多gpu的分散式,但那只是一个开始,即使使用相同的型号代码,我们也可以换掉我们的策略,并拓展到多个节点,在这里,我们采用形同的keras模型,我们只是在多台机器上看到并分发它,所有人可以同步工作。使用集体协作比以往任何时候都更快地训练你的模型,多工作镜像策略目前全面之时ring和nickel,这使我们能够实现出色的开箱即用性能,此api仍然你在开发中,但你今天可以在night版本上尝试,如果你对同步多人员训练tensorflow原生解决方案感兴趣,

我们非常兴奋的说,使用keras和分散式策略,你也可以使用相同的代码在tpu上分发你的模型,你不得不等待下一个tensorflow版本,才能在tpu上实际工作,但是当他发布策略时,这个策略,将适用与google cloud tpu和colab,后者现在可以直接访问tpu,

当我们接近最终的2.0版本时候,我们将继续为keras带来可扩展性,我们将通过参数服务实现分散式策略,这是多节点非同步训练估算器今天做的,我们还将向那些想要更高级别api的人,直接开放像keras api这样的封装估算器,我们将添加对分区变数的支持,对于一些在许多机器上大规模的模型,就像我们在google上运行的一样。

这是潜在的热点,请查看tensorflow2,如果你还没有尝试tf keras,请去试一试吧。

推荐阅读:

相关文章