TensorFlow 将发布v2.0 — TensorFlow 招牌特性回顾

【导读】TensorFlow 2.0要来了,伴随着一些令人期待的改进,但同时也带来了版本上的一些不兼容。本文介绍TensorFlow 2.0即将带来的一些变化,以及老版本TensorFlow中的一些招牌特性。


TensorFlow 2.0的变化


近几天,TensorFlow在Google Group中发布了关于TensorFlow 2.0的消息:

https://groups.google.com/a/tensorflow.org/forum/?utm_medium=email&utm_source=footer#!topic/announce/qXfsxr2sF-0



消息中主要提到了以下几点:


  • Eager execution will be a central feature of 2.0:动态图模式(eager)是在TensorFlow 1.x中途被加入的,在1.x中仍有一定的不成熟,然而TensorFlow 2.0会将动态图模式(eager)作为一个核心特性。


  • Support for more platforms and languages:支持更多的平台和语言。


  • Compatibility and Continuity: 由于遵循semantic versioning,一些不合理的接口在1.x中无法进行直接的修改。2.0的发布使得官方有机会来纠正这些错误。TensorFlow官方会提供从1.x代码向2.x代码转换的工具,在TensorFlow 0.x向TensorFlow 1.0升级时官方就提供了类似的工具。然而并不是所有的转换都可以被自动完成,因为有一些1.x中的方法在2.x中并没有等价物。因此,TensorFlow 2.x提供了tensorflow.compat.v1模块,这是一个兼容模块,它包含了TensorFlow 1.x完整的API,并且会在整个TensorFlow 2.x的生命周期中被维护。


  • On-disk compatibility:对于TensorFlow 2.0沿用了1.x中SavedModels和GraphDefs的内核,并没有对他们做太大的改进,但如果要和2.0版本兼容,1.x版中的checkpoints中的变量名需要做一定的转换。 


  • tf.contrib:在以前的版本中,tf.contrib模块一直和TensorFlow核心代码在一个仓库中维护。TensorFlow 2.0将移除tf.contrib,以独立的extension(扩展)来代替tf.contrib。


TensorFlow历史版本招牌特性


在TensorFlow 2.0到来之前,我们先来回顾一下TensorFlow的历史版本中有哪些招牌特性:


静态图


  • 官方链接:https://www.tensorflow.org/guide/graphs


  • 简介:静态图为TensorFlow带来了执行效率和可移植性。算法工程师用TensorFlow Python API将训练好的静态图保存为模型,开发工程师可以利用C++/Java/Javascript等直接高效地调用训练好的模型。看起来笨拙的静态图实际上为TensorFlow带来了效率和可移植性。


tf.data.Dataset


  • 官方链接:https://www.tensorflow.org/api_docs/python/tf/data/Dataset

  • 简介:tf.data.Dataset提供了强大的数据预处理流水线,例如数据自动shuffle、划分batch等。在静态图模式中,tf.data.Dataset的数据预处理可以被看做静态图的一部分,在动态图模式中,tf.data.Dataset可以被当做强大的Generator,例如我们可以直接用python的for in语句来获取每个batch的数据:


dataset = tf.data.Dataset.from_tensor_slices((data.train.images, data.train.labels))...
...
for (batch, (images, labels)) in enumerate(dataset):
...
xxxx


动态图模式(eager)


  • 官方链接:https://www.tensorflow.org/guide/eager

  • 简介:早期TensorFlow的静态图一直被开发者诟病难以调试,一大波开发者从而转向有动态图的PyTorch,然而TensorFlow在去年推出了动态图模式eager,这是一个革命性的特性,使开发者能够像PyTorch一样使用TensorFlow。另外,TensorFlow的动态图并没有使用独立的API,而是使用和静态图里一样的API,在程序顶部通过一个开关来开启或关闭动态图模型,因此学习和迁移的成本都很低。


x = [[2.]]
m = tf.matmul(x, x)
print("hello, {}".format(m)) # => "hello, [[4.]]"


AutoGraph


  • 官方链接:https://www.tensorflow.org/guide/autograph

  • 简介:想构建静态图却又想像动态图那样编写代码,可以试试autograph注解。在动态图一样写法的函数上加上@autograph.convert()注解,就可以将其转换为实际的静态图构建函数。既能享受静态图在模型发布等上的优势,又可以像编写动态图那样方便地控制图的结构。


@autograph.convert()
def nearest_odd_square(x):
if x > 0:
x = x * x
if x % 2 == 0:
x = x + 1
 
return x

with tf.Graph().as_default():
with tf.Session() as sess:
print(sess.run(nearest_odd_square(tf.constant(4))))
print(sess.run(nearest_odd_square(tf.constant(5))))
print(sess.run(nearest_odd_square(tf.constant(6))))


TensorFlow.js


  • 官方链接:https://js.tensorflow.org/


  • 简介:TensorFlow.js使得我们可以在浏览器或Node.js中使用TensorFlow。它可以导入、训练和调整模型,可以与用Python等训练的模型兼容。另外,TensorFlow.js的效率已经和Python版TensorFlow的效率相同。


 

TensorFlow历史版本中还有Estimator、分布式计算、TensorFlow Serving、TensorFlow Lite等重要特性,每一个特性官方都做了很强的支撑,这里就不一一介绍了。


-END-

专 · 知


人工智能领域主题知识资料查看与加入专知人工智能服务群

专知AI知识技术服务会员群加入人工智能领域26个主题知识资料全集获取欢迎微信扫一扫加入专知人工智能知识星球群,获取专业知识教程视频资料和与专家交流咨询


请PC登录www.zhuanzhi.ai或者点击阅读原文,注册登录专知,获取更多AI知识资料

请加专知小助手微信(扫一扫如下二维码添加),加入专知主题群(请备注主题类型:AI、NLP、CV、 KG等)交流~


 AI 项目技术 & 商务合作:bd@zhuanzhi.ai, 或扫描上面二维码联系!


关注专知公众号,获取人工智能的专业知识!

点击“阅读原文”,使用专知

展开全文
Top
微信扫码咨询专知VIP会员