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

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

原创: Hujun 专知 今天

【导读】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带来了效率和可移植性。

TensorFlow 将发布v2.0 — TensorFlow 招牌特性回顾_第1张图片

 

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等重要特性,每一个特性官方都做了很强的支撑,这里就不一一介绍了。

 

 

 

你可能感兴趣的:(TensorFlow 将发布v2.0 — TensorFlow 招牌特性回顾)