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

时间:2019-10-30 12:36:30

标签: python tensorflow

作为向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中是正确的)。

1 个答案:

答案 0 :(得分:2)

实际上存在,如果将环境变量Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production设置为TF2_BEHAVIOR,它将启用2.x行为。我尚未找到有关它的文档,但是您可以在the source code的注释中看到它:

1

我在1.15.0中对其进行了测试,它似乎可以正常工作:

# 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().