0

本官方指南解释了如何将 TF 1 代码迁移到 TF 2。然而,这不是我想要的。我希望我的代码在 TF 1 和 TF 2 上都能正常运行(而且我只想要非急切模式)。另外,我慢慢想使用一些新功能,但以一种可选的方式。(例如,用户可以传递一些选项,例如--use-fancy-new-tf2-feature,它只适用于 TF 2。这很好。)也许在一两年后,我会慢慢放弃对 TF 1 的支持。但我绝对需要这个过渡阶段,同时支持两个 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任何地方做。但这有点难看。
  • 这可能会使代码变得复杂,实际上想要使用一些新的 TF 2 功能。

我也许可以这样做:

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。但这可能会使其他一些代码更难兼容 TF 1 和 TF 2。

(我在这个 GitHub 问题中为我们的项目RETURNN收集了其中的一些想法。)

4

0 回答 0