最新版本: http://www. mashangxue123.com/tenso rflow/tf2-guide-effective_tf2
英文版本: https:// tensorflow.google.cn/al pha/guide/effective_tf2
翻译建议PR: https:// github.com/mashangxue/t ensorflow2-zh/edit/master/r2/guide/effective_tf2.md
TensorFlow 2.0中有多处更改,让用户使用更高效。TensorFlow 2.0删除冗余 APIs,使API更加一致(统一 RNNs,统一优化器),并通过Eager execution模式更好地与Python运行时集成。
许多RFCs已经解释了TensorFlow 2.0所带来的变化。本指南介绍了TensorFlow 2.0应该是什么样的开发,假设您对TensorFlow 1.x有一定的了解。
主要变化的简要总结
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升级脚本。
Eager execution
TensorFlow 1.X要求用户通过进行tf.*
API调用,手动将抽象语法树(图形)拼接在一起。然后要求用户通过将一组输出张量和输入张量传递给session.run()
来手动编译抽象语法树。 TensorFlow 2.0 默认Eager execution模式,马上就执行代码(就像Python通常那样),在2.0中,图形和会话应该像实现细节一样。
Eager execution的一个值得注意的地方是不在需要tf.control_dependencies()
,因为所有代码按顺序执行(在tf.function
中,带有副作用的代码按写入的顺序执行)。
没有更多的全局变量
TensorFlow 1.X严重依赖于隐式全局命名空间。当你调用tf.Variable()
时,它会被放入默认图形中,保留在那里,即使你忘记了指向它的Python变量。 然后,您可以恢复该tf.Variable
,但前提是您知道它已创建的名称,如果您无法控制变量的创建,这很难做到。结果,各种机制激增,试图帮助用户再次找到他们的变量,并寻找框架来查找用户创建的变量:变量范围、全局集合、辅助方法如tf.get_global_step()
, tf.global_variables_initializer()
、优化器隐式计算所有可训练变量的梯度等等。
TensorFlow 2.0取消了所有这些机制(Variables 2.0 RFC),支持默认机制:跟踪变量!如果你失去了对tf.V