【导读】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, 或扫描上面二维码联系!
请关注专知公众号,获取人工智能的专业知识!
点击“阅读原文”,使用专知