TensorFlow 2.0中有多处更改,以使TensorFlow用户使用更高效。TensorFlow 2.0删除冗余 APIs,使API更加一致(统一 RNNs,统一优化器),并通过Eager execution模式更好地与Python运行时集成
许多RFCs已经解释了TensorFlow 2.0所带来的变化。本指南介绍了TensorFlow 2.0应该是什么样的开发,假设您对TensorFlow 1.x有一定的了解。
主要变化的简要总结
1.API清理
许多API在tensorflow 2.0中消失或移动。一些主要的变化包括删除tf.app、tf.flags和tf.logging ,转而支持现在开源的absl-py,重新安置tf.contrib中的项目,并清理主要的 tf.*命名空间,将不常用的函数移动到像 tf.math这样的子包中。一些API已被2.0版本等效替换,如tf.summary, tf.keras.metrics和tf.keras.optimizers。自动应用这些重命名的最简单方法是使用v2升级脚本。
2.Eager execution
TensorFlow 1.X要求用户通过进行tf.* API调用,手动将抽象语法树(图形)拼接在一起。然后要求用户通过将一组输出张量和输入张量传递给session.run()来手动编译抽象语法树。TensorFlow 2.0 默认Eager execution模式,马上就执行代码(就像Python通常那样),在2.0中,图形和会话应该像实现细节一样。
Eager execution的一个值得注意的地方是不在需要tf.control_dependencies() ,因为所有代码按顺序执行(在tf.function中,带有副作用的代码按写入的顺序执行)。
3.没有更多的全局变量
TensorFlow 1.X严重依赖于隐式全局命名空间。当你调用tf.Variable()时,它会被放入默认图形中,保留在那里,即使你忘记了指向它的Python变量。
然后,您可以恢复该tf.Variable,但前提是您知道它已创建的名称,如果您无法控制变量的创建,这很难做到。结果,各种机制激增,试图帮助用户再次找到他们的变量,并寻找框架来查找用户创建的变量:变量范围、全局集合、辅助方法如tf.get_global_step(), tf.global_variables_initializer()、优化器隐式计算所有可训练变量的梯度等等。
TensorFlow 2.0取消了所有这些机制(Variables 2.0 RFC),支持默认机制:跟踪变量!如果你失去了对tf.Variable的追踪,就会垃圾收集回收。
跟踪变量