作为我们迁移到 TensorFlow 2 的一部分,我想在 TensorFlow v1(特别是 TensorFlow 1.14)中启用 TensorFlow v2 行为。我知道我可以调用 tf.enable_v2_behavior() 来执行此操作,但我想隐式执行此操作(通过环境变量或类似变量)而不必显式调用此函数。
我想这样做的原因是人们不会忘记这样做,也不会意外地以 v1 行为结束。我可以确保在运行任何测试之前调用 tf.enable_v2_behavior(),但是我们代码的底层行为在测试环境之外可能会有所不同(测试可能通过,但代码失败在测试环境之外运行时)。
任何环境变量都可能有效,因为我几乎可以保证在我们所有的 docker 镜像中都设置了它,但我对替代方案持开放态度。我可以在导入特定模块时执行此操作,但我不能保证始终导入特定模块(tensorflow 除外!)。
enable_v2_behavior 的文档声明“此函数在主 TensorFlow __init__.py 文件中调用,用户不需要调用它,除非在复杂的迁移过程中。” ,但这似乎不是真的(至少在 TensorFlow 1.14 中是这样;我猜 TensorFlow 2.0 是这样)。
请您参考如下方法:
这确实存在,如果您将环境变量 TF2_BEHAVIOR 设置为 1,它将启用 2.x 行为。我没有找到关于它的文档,但您可以在 the source code 的评论中看到它:
# 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
