【问题标题】:What is the difference in purpose between tf.py_function and tf.function?tf.py_function 和 tf.function 在用途上有什么区别?
【发布时间】:2020-05-02 18:55:19
【问题描述】:
尽管急切和不急切之间存在细微差别,但两者之间的区别在我的脑海中一直模糊不清。据我所知,@tf.function 装饰器有两个好处
- 它将函数转换为 TensorFlow 图以提高性能,并且
- 通过将许多(但不是全部)常见的 Python 操作解释为张量操作(例如
if 变成 tf.cond 等。
从tf.py_function 的定义来看,似乎只是上面的#2。因此,当tf.function 的工作在启动时性能得到提升并且没有前者无法序列化的情况下,为什么还要打扰tf.py_function?
【问题讨论】:
标签:
tensorflow
tensorflow2.0
【解决方案1】:
随着改进,它们确实开始彼此相似,因此了解它们的来源很有用。最初,不同之处在于:
-
@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。