TF动态图处理速度大幅提升!

tensorflow发布重大功能改进autograph,能自动将python代码转换为tensorflow graph,tf动态图处理速度大幅提升!
今天,tensorflow团队发布新功能“autograph”,能自动将python代码(包括控制流,print () 和其他python原生特征)转换为纯tensorflow图代码(pure tensorflow graph code)。
不使用eager execution编写tensorflow代码需要进行一些元编程(metaprogramming) ——先编写一个创建图(graph)的程序,稍后再执行这个graph。这可能令人困惑,尤其是对开发者新手来说。一些特别棘手的情况涉及更复杂的模型,比如要使用 if 和 while 的模型,或者有 print () 等副作用或接受结构化输入的模型。
为什么我们需要graph呢?graph允许各种优化,例如删除常见的子表达式和融合内核(fusing kernel)。再者,graph简化了分布式训练和部署到各种环境的过程,因为它们形成了独立于平台的模型计算过程。这对于模型在多个gpu或tpu上的分布式训练尤为重要,如果你通过tensorflow lite、移动端、物联网等其他平台分发模型,graph也很重要。
下面是一个很简单的、你可能希望添加到graph里的操作:
defhuber_loss(a):iftf.abs(a)<=delta:loss=a*a/2else:loss=delta*(tf.abs(a)-delta/2)returnloss
通过eager execution,只是能做到这一点,但是由于python解释器开销(interpreter overheads)或错过的程序优化机会,此类操作可能会很慢。
为了准备执行graph,你需要重写这个以使用像 tf.cond () 这样的结构,但那样实现起来可能会耗时耗力而且很困难。autograph可以为自动执行此类转换,将动态图编程的简易性保持很低的同时,获得基于graph执行的性能优势。
在示例中,我们可以使用 autograph.convert () 来修饰函数,autograph将自动生成 graph-ready 的代码。
使用autograph,这段代码:
@autograph.convert()defhuber_loss(a):iftf.abs(a)=0:whilen<5:n+=1print(n)returnn
autograph允许你将元素追加到循环内的数组中。 为了达到这个要求,我们使用一些autograph助手,例如set_element_type和stack。
deff(n):z=[]#weaskyoutotellustheelementdtypeofthelistautograph.set_element_type(z,tf.int32)foriinrange(n):z.append(i)#whenyou'redonewiththelist,stackit#(thisisjustlikenp.stack)returnautograph.stack(z)
我们还支持像break,continue,甚至print和assert这样的结构。 转换后,该片段的python将转换为图形(使用恰当的tf.assert)。
deff(x):assertx!=0,'donotpasszero!'returnx*x
能够轻松地添加循环,控制流程以及更多图表意味着可以轻松地将训练循环移动到图形中。 这个例子可以在这个notebook中找到,我们采用rnn训练循环并用一个sess.run()调用执行它。 在需要将整个训练循环传递给加速器而不是通过cpu控制器管理训练的情况下,这可能是很有用的。
autograph开辟了构建和训练模型的新思路。我们期待根据开发者社区的建议为autograph添加更多功能,所以请提出你的建议和问题吧!
autograph和eager execution
在使用eager execution时,你仍然可以通过tf.contrib.eager.defun对代码的某些部分使用图执行。这要求你使用tensorflow图形操作,如tf.cond()。 将来,autograph将与defun无缝集成,以允许在简单的eager 风格的python中创作图形代码。 当该实现可用时,你可以通过选择性地将eager代码转换为graph fragments来使用autograph加速热点。
结论
autograph是一款工具,可让你轻松构建直观,复杂的模型,在tensorflow图中轻松运行。 这是一个现在在contrib中的实验工具,但我们希望尽快将其转移到核心tensorflow中。
告诉我们您使用autograph的经历! 如果你有反馈,建议或想法,请提交问题并向tensorflow开发人员小组发送消息。

马丁代尔耐磨仪如何正确进行起毛起球测试
继电器的可靠性影响因素和测量方法
特斯拉semi兆瓦级充电技术详解
官方华为鸿蒙os升级入口 鸿蒙系统正式体验
Redmi K30首销战报告捷 赢得了双12新品首卖销量冠军
TF动态图处理速度大幅提升!
四种霍尔元件的感应方式分别是什么呢?
人工现实系统可以识别已知手势并相应地做出响应
锡膏在使用时要遵守这些使用要求?
4K电视/平板手机设计主流:UHD/大屏幕
山西:到2025年底公共充电桩桩车比不低于1:8
华为P10和华为P10plus详细区别对比
高精度定位助NOA从高速到城市跃迁
无人机公路巡检,傲势用科技助力智慧交通
阿里巴巴全面进军物联网打造安全里程碑
6位数显频率计数器,Digital frequency meter
基于Traefik自研的微服务网关
滤波电感的功能和工作原理
PLC如何工作?如何远程监控PLC的工作状态?
高通将在新加坡设立IC设计及技术研发中心