【问题标题】:checking TensorFlow version in Python - "tf.__version__" vs "tf.VERSION"?在 Python 中检查 TensorFlow 版本 - “tf.__version__”与“tf.VERSION”?
【发布时间】:2019-09-03 17:08:29
【问题描述】:

问题的最短版本:

在 Python 中检查 TensorFlow 版本时,有人可以解释/澄清tf.__version__tf.VERSION 之间的区别吗??

略长的问题:

这似乎有效:

if tf.__version__ < "1.8.0":
    print("ERROR: currently running TensorFlow version " + tf.__version__ + ", at least version 1.8.0 is required")
    return
# end if

这似乎也有效:

if tf.VERSION < "1.8.0":
    print("ERROR: currently running TensorFlow version " + tf.VERSION + ", at least version 1.8.0 is required")
    return
# end if

我注意到的一个区别是,PyCharm 编辑器会针对 tf.__version__ 方式显示警告,但不会针对 tf.VERSION 方式显示警告:

在 PyCharm 中解决此问题的方法是在每个 tf.__version__ 使用上方添加 # noinspection PyUnresolvedReferences 注释,这解决了警告:

但是,tf.VERSION 方式不会在没有 # noinspection PyUnresolvedReferences 注释的情况下在 PyCharm 中显示警告:

我在这篇文章中询问了 PyCharm tf.__version__ 警告:

TensorFlow Python warning in PyCharm - Cannot find reference __version__ in __init__.py

唯一的响应者表示tf.__version__ 是动态生成的。特别是在 Python 的上下文中,我真的不明白这是什么意思。

所以此时我有以下问题:

1) 为什么两者都存在?

2) 通常推荐使用其中的一种吗?

3) 为什么 PyCharm 显示一个警告而不显示另一个?

4) 动态生成tf.__version__ 是什么意思?如果换一种方式,tf.VERSION 是如何生成的?

5) 为了避免添加# noinspection PyUnresolvedReferences 评论,我更喜欢使用tf.VERSION,有什么理由不这样做吗?

6) TensorFlow 存储库https://github.com/tensorflow/tensorflow 和相关存储库(例如模型https://github.com/tensorflow/models)中的大多数示例使用tf.__version__ 方式,但有些使用tf.VERSION 方式,这是有原因的吗?

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    答案的最短版本

    它们是一样的。

    答案的“稍微”更长的版本

    这两个符号都是tensorflow.python.framework.versions.VERSION的别名,在文件tools\api\generator\api\__init__.py中导入为

    from tensorflow.python.framework.versions import VERSION
    from tensorflow.python.framework.versions import VERSION as __version__
    

    走下兔子洞,别名最终指向_pywrap_tensorflow_internal__version__,这基本上是tensorflow的C++库,确实是动态加载的——最后,python的__version__只是@的别名C++ API 的 987654321@。

    现在为什么 PyCharm 会发出第二个警告,这可能是 PyCharm 解析的一个限制(一个错误?),它无法处理 __all__ 的复杂定义,因为定义在同一文件的末尾。在这个网站上搜索“PyCharm __all__”,你会发现一些提示。

    所以在tensorflow 的特殊情况下,这两个选项都应该没问题,如果它为您删除警告,您可以使用tf.VERSION。但是__version__ 成语更常见(有人会说标准),因为它是PEP8 的推荐,所以我可能会坚持tf.__version__

    【讨论】:

      【解决方案2】:

      在 TensorFlow 2.0 RC 中,VERSION 似乎消失了:

      Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32
      Type "help", "copyright", "credits" or "license" for more information.
      >>> import tensorflow as tf
      >>> print(tf.__version__)
      2.0.0-rc0
      >>> print(tf.VERSION)
      Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
      AttributeError: module 'tensorflow' has no attribute 'VERSION'
      >>>
      

      【讨论】:

      猜你喜欢
      • 2019-04-14
      • 2016-07-16
      • 2012-04-21
      • 1970-01-01
      • 2021-12-02
      • 2021-02-25
      • 1970-01-01
      • 2018-06-30
      • 1970-01-01
      相关资源
      最近更新 更多