Leo*_*Leo 5 machine-learning neural-network deep-learning tensorflow tensorflow2.0
我开始了 Tensorflow 之旅,当它已经来到 2.0.0 时,所以从来没有像在 version1 中那样使用过图形和会话。但是最近遇到了适合我的 tf.function 和 autographs。(但我知道它仅用于训练步骤)
现在在阅读项目代码时,很多人在想要构建图形时会在许多其他函数上使用 tf.function 装饰器。但我不完全明白他们的意思。如何知道何时使用图形,何时不使用?
谁能帮我?
装饰器可以@tf.function方便地将 python 函数转换为静态张量流图。从 version 开始,TensorFlow 默认以 Eager 模式运行2.0.0。尽管 Eager 模式可以帮助您逐行执行,但与静态图相比,TensorFlow 代码执行速度相对较慢。将某个函数转换为静态图可以在训练模型时提高执行速度。
引用tf.function文档:
函数可以比 Eager 代码更快,尤其是对于具有许多小操作的图。但是对于具有一些昂贵操作(如卷积)的图,您可能看不到太多加速。
静态图创建一次,如果使用不同的值(不作为输入参数传递)重复调用该函数,则该图不会更新。您应该避免@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
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,函数func()虽然依赖于var,但它不var通过它的参数访问变量。因此,当@tf.function第一次应用时,它会为func(). 但是,当var将来的值发生变化时,这不会在静态图中更新。看到这个更清楚。另外,我强烈建议您查看参考资料部分。
引用来源
您可以将
tf.config.experimental_run_functions_eagerly(暂时禁用作为函数运行的函数)用于调试目的。
| 归档时间: |
|
| 查看次数: |
1324 次 |
| 最近记录: |