gpt4 book ai didi

tensorflow - 何时使用 @tf.function 装饰器,何时不使用?我知道 tf.function 构建图形。但是如何知道何时构建图呢?

转载 作者:行者123 更新时间:2023-12-03 16:11:18 25 4
gpt4 key购买 nike

我开始了 Tensorflow 之旅,当它已经来到 2.0.0 时,所以从来没有像在 version1 中那样使用过图形和 session 。但是最近遇到了适合我的 tf.function 和 autographs。 (但我知道它仅用于训练步骤)

现在在阅读项目代码时,很多人在想要构建图形时会在许多其他函数上使用 tf.function 装饰器。但我不完全明白他们的意思。如何知道何时使用图形,何时不使用?

谁能帮我?

最佳答案

解决方案

装修工,@tf.function方便地将 python 函数转换为静态 tensorflow 图。自版本 2.0.0 起,TensorFlow 默认以 Eager 模式运行.尽管 Eager 模式可以帮助您逐行执行,但与静态图相比,TensorFlow 代码执行速度相对较慢。将某个函数转换为静态图可以在训练模型时提高执行速度。

报价 tf.function 文档:

Functions can be faster than eager code, especially for graphs with many small ops. But for graphs with a few expensive ops (like convolutions), you may not see much speedup.



静态图创建一次,如果使用不同的值(不作为输入参数传递)重复调用该函数,则该图不会更新。你应该避免使用 @tf.function在这种情况下或更新函数定义(如果可能)以通过输入参数包含所有必要的可变性。然而,
现在,如果您的函数通过函数参数获取其所有输入,那么如果您应用 @tf.function你不会看到任何问题。

这是一个例子。

### When not to use @tf.function ###
# some variable that changes with time
var = timestamp()

@tf.function
def func(*args, **kwargs):
# your code
return var

在上面的例子中,函数 func()虽然取决于 var ,它不访问变量 var通过其论据。因此,当 @tf.function第一次应用,它为 func() 创建了一个静态图.然而,当值 var将来发生变化,这不会在静态图中得到更新。见 this为了更清楚。另外,我强烈建议您查看引用资料部分。

用于调试

报价 source

You can use tf.config.experimental_run_functions_eagerly (which temporarily disables running functions as functions) for debugging purposes.



引用
  • Better performance with tf.function
  • When to utilize tf.function
  • TensorFlow 2.0: tf.function and AutoGraph
  • 关于tensorflow - 何时使用 @tf.function 装饰器,何时不使用?我知道 tf.function 构建图形。但是如何知道何时构建图呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61608188/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com