0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一项名为“AutoGraph”的TensorFlow新功能

Tensorflowers 来源:未知 作者:李倩 2018-08-15 11:07 次阅读

今天,我们将介绍一项名为 “AutoGraph” 的 TensorFlow 新功能。AutoGraph 可以将 Python 代码(包括控制流、print() 和其他 Python 原生功能)转换为纯 TensorFlow 图代码。

要在不使用即时执行的情况下编写 TensorFlow 代码,您需要进行一些元编程,即编写一个用于创建图的程序,然后再执行该图。这种方式可能会令人困惑,特别是对于新开发者而言。一些特别棘手的情况涉及更复杂的模型,例如使用 if 和 while 的模型,或者具有 print() 等副作用或接受结构化输入的模型。

那么,我们为什么需要图呢?图允许各种优化,如移除常见的子表达式和融合内核。此外,由于图形成了一种独立于平台的计算模型,可简化分布式训练和针对各种环境的部署。这对于多个 GPU 或 TPU 上的分布式训练或者通过TensorFlow Lite在移动或物联网等其他平台上分发模型尤为重要。

下面这个简单示例显示了您可能要添加到图的运算:

1def huber_loss(a):

2if tf.abs(a) <= delta:    

3loss = a * a / 2

4else:

5loss = delta * (tf.abs(a) - delta / 2)

6return loss

如果使用即时执行,也可以满足要求,但是由于 Python 解释器开销或错过程序优化机会,这样可能会很慢。

要准备好执行图,您需要进行重写以使用类似 tf.cond() 的语句,但这可能比较繁琐并且难以实现。AutoGraph 可以为您自动执行此转换,既保持了即时编程的简易性,同时又获得了图执行的性能优势。

在本例中,我们可以使用 autograph.convert() 装饰函数,AutoGraph 将自动生成可生成图的代码。

使用 AutoGraph 时,由于装饰器的原因,以下代码:

1@autograph.convert()

2def huber_loss(a):

3if tf.abs(a) <= delta:    

4loss = a * a / 2

5else:

6loss = delta * (tf.abs(a) - delta / 2)

7return loss

在执行时变为以下代码。

1def tf__huber_loss(a):

2with tf.name_scope('huber_loss'):

3

4def if_true():

5with tf.name_scope('if_true'):

6loss = a * a / 2

7 return loss,

8

9def if_false():

10with tf.name_scope('if_false'):

11 loss = delta * (tf.abs(a) - delta / 2)

12 return loss,

13 loss = ag__.utils.run_cond(tf.less_equal(tf.abs(a), delta), if_true,

14if_false)

15 return loss

然后,您可以将这些代码视为 TensorFlow 运算进行调用:

1with tf.Graph().as_default():

2x_tensor = tf.constant(9.0)

3

4# The converted function works like a regular op: tensors in, tensors out.

5huber_loss_tensor = huber_loss(x_tensor)

6

7with tf.Session() as sess:

8print('TensorFlow result: %2.2f\n' % sess.run(huber_loss_tensor))

如您所见,AutoGraph 填补了即时执行与图之间的差距。AutoGraph 接收即时风格的 Python 代码并将其转换为生成图的代码。

AutoGraph 不仅仅是一组有用的宏,它还使用源代码转换来允许替换 Python 语言的任意部分,包括控制流、函数应用和赋值、生成模板代码,以及重构惯用 Python 以便轻松转换成图。

使用任何编译器,都会对错误消息的可读性产生担忧;为此,AutoGraph 设置为创建错误消息和堆叠追踪,以显示原始源代码中的错误源,而不是仅显示对生成代码的引用。

可运行示例

那么,AutoGraph 可以为我们做什么呢?以下是一些代码示例,现在可以直接转换为图代码而无需任何更改。如果您想实际运行所有这些操作,我们提供了一个笔记本,您可以在Colab中打开或在GitHub中查看。

注:GitHub 链接https://github.com/tensorflow/models/blob/master/samples/core/guide/autograph.ipynb

接下来,我们使用循环和分支来检查Collatz 猜想。请注意,出于多样性考虑,我们将不使用装饰器,而使用 AutoGraph 的 .to_graph() 函数将其转换为图。

1def collatz(a):

2counter = 0

3while a != 1:

4if a % 2 == 0:

5a = a // 2

6else:

7a = 3 * a + 1

8counter = counter + 1

9return counter

10

11graph_mode_collatz = autograph.to_graph(collatz)

12# The code is human-readable, too

13print(autograph.to_code(collatz))

14

15collatz_tensor = graph_mode_collatz(tf.constant(n))

AutoGraph 可以支持任意的嵌套控制流,例如:

1def f(n):

2if n >= 0:

3while n < 5:    

4n += 1

5print(n)

6return n

AutoGraph 允许在循环内向数组追加元素。为此,我们将使用一些 AutoGraph 辅助工具,set_element_type 和 stack。

1def f(n):

2z = []

3# We ask you to tell us the element dtype of the list

4autograph.set_element_type(z, tf.int32)

5for i in range(n):

6z.append(i)

7# when you're done with the list, stack it

8# (this is just like np.stack)

9return autograph.stack(z)

我们还支持 break、continue,甚至 print 和 assert 等语句。转换后,此代码段的 Python assert 转换为使用适当的 tf.Assert 的图。

1def f(x):

2assert x != 0, 'Do not pass zero!'

3return x * x

能够轻松向图添加循环和控制流等,这意味着可以轻松将训练循环转移到图中。您可以在此笔记本中找到相关示例,其中,我们接受一个 RNN 训练循环并用一个 sess.run() 调用执行。在需要将整个训练循环传递给加速器而不是通过 CPU 控制器管理训练的情况下,这样做十分有用。

注:笔记本链接

https://colab.research.google.com/github/tensorflow/models/blob/master/samples/core/guide/autograph.ipynb#scrollTo=4LfnJjm0Bm0B

AutoGraph 开启了构建和训练模型的新思路。我们期待根据开发者社区的建议为 AutoGraph 添加更多功能,因此欢迎您提交问题并给出建议!

图性能与即时执行

即时执行非常简单易用,但图的速度通常要更快。虽然二者的比较基准较为复杂(并且取决于应用和硬件配置),但在这个简单的示例中,我们可以看到,从即时切换到大量使用 if 和 while 的 AutoGraph 代码时,速度有了显著提升。

最终,AutoGraph 允许您在加速器硬件(如 GPU 和Cloud TPU)上使用动态和流控制较多的模型,这在基于大量数据训练大型模型时十分必要。

我们刚刚开始着手分析性能。如果您发现某个图语句的运行速度低于预期,请提交问题!

AutoGraph 和即时执行

虽然使用即时执行时,您仍然可以通过tf.contrib.eager.defun对部分代码使用图执行,但这要求您使用 tf.cond() 等 TensorFlow 图运算。将来,AutoGraph 将与 defun 无缝集成,允许用简单的即时式 Python 语言编写图代码。实现此功能后,您可以通过选择性地将即时代码转换为图片段来使用 AutoGraph 加速热点。

结论

AutoGraph 是一款新工具,可帮您轻松构建能够在 TensorFlow 图中轻松运行的直观、复杂的模型。此工具目前为 contrib 中的实验性工具,但我们希望尽快将它加入到核心 TensorFlow 中。

跟我们分享您的 AutoGraph 使用体验!如果您有任何反馈、建议或想法,请提交问题并向TensorFlow 开发者群组发送消息。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 物联网
    +关注

    关注

    2909

    文章

    44625

    浏览量

    373185
  • tensorflow
    +关注

    关注

    13

    文章

    329

    浏览量

    60532

原文标题:AutoGraph 将 Python 转换为 TensorFlow 图

文章出处:【微信号:tensorflowers,微信公众号:Tensorflowers】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    下图中的与打开文件相连的枚举常量是自己一项一项编辑...

    下图中的与打开文件相连的枚举常量是自己一项一项编辑的还是自动就有的?
    发表于 03-17 21:39

    51单片机的个引脚是否只能执行一项功能

    51单片机的个引脚是否只能执行一项功能?比如说,控制蜂鸣器的引脚如果用来控制蜂鸣器的话,还可以用作其他的功能来控制其他元件吗?单片机控制步进电机时,可以另外用电源给步进电机供电吗?还
    发表于 06-22 18:03

    AppleWatchSeries4两新功能获FDA的许可

    据外媒报道,当地时间9月12日,苹果公司宣布,Apple Watch Series 4的两新功能获得了美国食品与药品管理局(FDA)的许可。其中一项被称为心电图(EKG)的心脏监测功能
    发表于 09-17 14:32 1438次阅读

    捷豹F-Pace展开一项名为GLOSA的V2X功能测试

    捷豹路虎集团近日宣布,已在其旗下的捷豹F-Pace车型展开一项名为GLOSA的V2X功能测试,GLOSA全称为Green Light Optimal Speed Advisory,从其命名可得知,该系统并不会介入车辆的控制,仅提
    的头像 发表于 11-22 10:17 5455次阅读

    科技巨头公司结盟,,共同建立一项名为“计算快速链接”的新行业标准

    据报道,英特尔与微软、阿里巴巴、思科、戴尔EMC、Facebook、谷歌、惠普和华为宣布成立联盟,共同建立一项名为“计算快速链接”(Compute Express Link,以下简称CXL)的新行业标准,以便为数据中心中央处理单元(CPU)和加速芯片之间提供超快速互连。
    的头像 发表于 03-28 10:01 3094次阅读

    特斯拉打盹模式新功能,可设置闹钟和空调系统

    据外媒报道,特斯拉车主很快就能享受到一项名为“打盹模式”(Nap Mode)的新功能,这项新功能近期将通过车机软件OTA更新推送给车主。
    的头像 发表于 01-02 17:07 6892次阅读

    Facebook正在测试一项名为“校园”的新功能

    据报道,Facebook正在测试一项名为“校园”的新功能,大学生可以使用其大学ID登录并与大学中的其他人建立联系。学生可以写下他们的预期毕业年份,专业和辅修学位,甚至还可以输入宿舍编号以与他人联系。
    的头像 发表于 04-22 14:26 1735次阅读

    Netflix向电话应用程序添加了一项新功能

    最近,Netflix向电话应用程序添加了一项新功能,可让您锁定屏幕。这些新的屏幕锁定控件有助于防止您不小心跳到节目或电影的上个或下个部分。
    的头像 发表于 04-23 14:39 1856次阅读

    Facebook直在努力为WhatApp引入系列新功能

    多设备支持并不是一项新功能。去年我们第次听说了它。从那时起,跟踪WhatsApp开发的博客WABetaInfo多次报告了该公司在开发一项功能
    的头像 发表于 07-29 17:00 1788次阅读

    cnvrg.io是第个集成MIG的ML平台,这是一项突破性的新功能

    cnvrg.io用于机器学习的AI OS宣布将NVIDIA多实例GPU(MIG)技术与其数据科学平台进行了原生集成。cnvrg.io是第个集成MIG的ML平台,这是一项突破性的新功能
    的头像 发表于 09-16 16:53 2546次阅读

    WhatsApp正在开发一项新功能,它将引入自动删除对话中发送的图像

    正如WABeta Info的专家告诉我们的那样,WhatsApp正在开发一项新功能,它将引入自动删除对话中发送的图像,视频和GIF的功能。在测试版WhatsApp Beta Android
    的头像 发表于 09-23 16:01 1733次阅读

    WhatsApp正在开发一项新功能

    WhatsApp正在开发一项新功能,该功能将使用户能够共享消失得无影无踪的媒体文件。本周,我们将了解有关此功能的更多详细信息。对于初学者来说,即将到期的媒体
    的头像 发表于 09-30 10:22 1786次阅读

    Google带来一项新功能,用户可以将照片内容通知互联网巨头

    Google Photos Android应用程序的最新更新带来了一项新功能。借助此功能,用户可以将其照片内容通知互联网巨头。
    的头像 发表于 11-13 14:12 1499次阅读

    Zoom推出一项软件新功能

    据外媒报道,视频会议软件厂商Zoom推出了一项新的功能——“At-Risk Meeting Notifier”:当在线视频遇到Zoombombing攻击产生风险时,新增的功能就会像会议发起人发出提醒。 
    的头像 发表于 12-06 09:03 1987次阅读

    华为公布一项名为“钠电池复合正极材料及其应用”的发明专利

    近日,华为于4月2日公布一项名为“钠电池复合正极材料及其应用”的发明专利,该专利技术可实现复合正极材料包括内核和包覆内核的包覆层,内核包括层状钠正极活性材料,包覆层材料的脱钠电势高于内核。
    的头像 发表于 04-07 10:54 1121次阅读