tf.py_function 和 tf.function 在目的上有什么区别?

Tfo*_*vid 5 tensorflow tensorflow2.0

两者之间的区别在我的脑海中模糊不清,尽管在渴望和不渴望之间存在细微差别。据我所知,@tf.function装饰器有两个好处

  1. 它将函数转换为 TensorFlow 图以提高性能,并且
  2. 通过将许多(但不是全部)常见的 Python 操作解释为张量操作,例如ifintotf.cond等,允许使用更 Pythonic 风格的编码。

从 的定义来看tf.py_function,它似乎只是上面的#2。因此,为什么要费心在tf.py_function什么时候tf.function启动具有性能改进的工作并且前者无法序列化呢?

Edw*_*elm 10

随着它们的改进,它们确实开始彼此相似,因此了解它们的来源很有用。最初,不同之处在于:

  • @tf.function 将 python 代码转换为一系列 TensorFlow 图节点。
  • tf.py_function 将现有的 python 函数包装到单个图形节点中。

这意味着tf.function要求您的代码相对简单,同时tf.py_function可以处理任何python代码,无论多么复杂。

虽然这条线确实很模糊,但tf.py_function做了更多的解释并tf.function接受了很多复杂的 python 命令,一般规则保持不变:

  • 如果您的 Python 代码中有相对简单的逻辑,请使用tf.function.
  • 当您使用复杂的代码时,例如大型外部库(例如连接到数据库或加载大型外部 NLP 包),请使用tf.py_function.