编写与TensorFlow 1和2兼容的代码的最佳实践

2024-03-28 12:51:11 发布

您现在位置:Python中文网/ 问答频道 /正文

This official guide explains how to migrate TF 1 code to TF 2。 然而,这不是我想要的。 我希望我的代码在TF1和TF2上都能正常运行(并且我只希望使用非急切模式)。 另外,我慢慢地想使用一些新功能,但是以一种可选的方式。(例如,用户可以传递一些选项,比如--use-fancy-new-tf2-feature,这只适用于tf2。这很好。) 也许一两年后,我会慢慢放弃对TF1的支持。但我确实需要这个过渡阶段,在这个阶段,两个TF版本都得到支持

我在迁移指南中看不到这个问题的答案。也许答案是,这根本没有“最佳实践”。虽然我认为其他更大的项目可能会想做类似的事情。或者答案可能是,这将是太多的努力,所以他们只是直接迁移

我也许可以这样做:

try:
  # https://www.tensorflow.org/guide/migrate
  import tensorflow.compat.v1 as tf
  tf.disable_v2_behavior()
except ImportError:
  import tensorflow as tf

但是,这有一些缺点:

  • 我需要将这个代码片段放在我使用TF的每个模块中。
    • 我可以把它放在一些自己的模块中,比如tf_import.py,然后简单地到处做from tf_import import tf。但这有点难看
  • 这可能会使代码变得复杂,而实际上它想要使用一些新的TF2特性

我也许可以这样做:

try:
  # https://www.tensorflow.org/guide/migrate
  import tensorflow.compat.v1 as tf1
  tf1.disable_v2_behavior()
  import tensorflow as tf2
except ImportError:
  import tensorflow as tf1
  tf2 = None

这可能更干净。但我不确定这是不是一条路。或者其他人是怎么做的

另外,我可以直接调用disable_v2_behavior,而不是调用disable_eager_execution。但这可能会使其他一些代码更难兼容TF1和TF2

(我正在为我们的项目RETURNN收集这些想法。)


Tags: 答案代码importtftensorflowasmigratev2