Eager Execution 与 tf.function 的关系

uj1*_*j14 5 python tensorflow tensorflow2.0

我的代码分布在多个文件和函数中,因此在这里引用它是不切实际的。我想,如果我很好地理解了eager execution和tf.function,我可以自己解决。有人可以帮我解决以下问题吗?

  1. @tf.function 装饰器仅在禁用急切执行时才起作用吗?
  2. @tf.function 装饰器和 Eager 执行模式有什么关系?
  3. TensorFlow 如何在内部切换 Eager 模式和非 Eager 模式?当我禁用 Eager Execution 并且我的代码中有一些错误时,我仍然会引用文件,这些文件向我建议 Eager Execution 可能正在内部发生。

don*_*njy 3

让我尝试解释一下。希望它会有用。

  • @tf.function 装饰器仅在禁用急切执行时才工作? 不,实际上 tf.function 是在启用 eager 模式时加速执行的东西
  • @tf.function 装饰器和 eager 执行模式之间有什么关系? @tf.function 将导致张量流签名工作并加速其中操作的执行。
  • TensorFlow内部如何在eager模式和非eager模式之间切换? tf.function 和 AutoGraph 的工作原理是生成代码并将其跟踪到 TensorFlow 图中。因此,当您第一次调用 @tf.function 修饰的函数时,tensorflow 会首先将其转换为图,然后执行它,之后,当您再次调用该函数时,它只会执行该图。

您还可以查看张量流文档。 https://www.tensorflow.org/guide/function

  • 我注意到,如果我为函数打开 tf.function ,我无法打印出其中张量项的值。也就是说,如果我在用 tf.function 注释的方法中生成损失函数值,则在打印时损失是 tf.tensor。而没有的话,我得到的是实际的浮点值。 (2认同)