在 TensorFlow v1 中隐式启用 TensorFlow v2 行为

2023-12-01

作为迁移到 TensorFlow 2 的一部分,我希望在 TensorFlow v1(特别是 TensorFlow 1.14)中启用 TensorFlow v2 行为。我知道我可以打电话tf.enable_v2_behavior()来执行此操作,但我想隐式执行此操作(通过环境变量或类似变量),而不必显式调用此函数。

我想这样做的原因是为了让人们不会忘记这样做,并且不会意外地以 v1 行为告终。我可以保证tf.enable_v2_behavior()在运行任何测试之前调用,但是代码的底层行为在测试环境之外可能会有所不同(测试可能会通过,但在测试环境之外运行时代码会失败)。

任何环境变量都可能有效,因为我几乎可以保证在我们所有的 docker 镜像中都设置了这个变量,但我对替代方案持开放态度。我可以在导入特定模块时执行此操作,但我不能保证始终导入特定模块(除了tensorflow!).

的文档enable_v2_behaviorstate“这个函数在主 TensorFlow 中被调用__init__.py文件中,用户不需要调用它,除非在复杂的迁移期间。”,但这似乎并非如此(至少在 TensorFlow 1.14 中;我猜对于 TensorFlow 2.0 来说也是如此)。


如果您设置环境变量,那么它实际上存在TF2_BEHAVIOR to 1它将启用 2.x 行为。我还没有找到有关它的文档,但您可以在评论中看到它源代码:

# TF2 behavior is enabled if either 1) enable_v2_behavior() is called or
# 2) the TF2_BEHAVIOR=1 environment variable is set.  In the latter case,
# the modules below independently check if tf2.enabled().

我在 1.15.0 中测试了它,它似乎有效:

import os
os.environ['TF2_BEHAVIOR'] = '1'
import tensorflow as tf

print(tf.constant([1, 2, 3]))  # Eager mode is enabled
# tf.Tensor([1 2 3], shape=(3,), dtype=int32)
print(tf.TensorShape([1, 2])[1])  # TensorShape dimensions are int
# 2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 TensorFlow v1 中隐式启用 TensorFlow v2 行为 的相关文章

随机推荐