检查Python中的TensorFlow版本 - “tf .__ version__”vs“tf.VERSION”?

时间:2018-05-19 16:46:35

标签: python tensorflow

问题的最短版本:

在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方式:

enter image description here

在PyCharm中解决此问题的方法是在每个# noinspection PyUnresolvedReferences用法之上添加tf.__version__条评论,以解决警告:

enter image description here

但是,如果没有tf.VERSION评论,# noinspection PyUnresolvedReferences方式在PyCharm中不显示警告:

enter image description here

我在这篇文章中询问了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方式,有这个原因吗?

2 个答案:

答案 0 :(得分:3)

答案的最短版本

他们是一样的。

&#34;轻微&#34;更长版本的答案

这两个符号都是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__

走下兔子洞,别名最终指向__version__的{​​{1}},这基本上是张量流的C ++库,它确实是动态加载的 - 最后,python&# 39; s _pywrap_tensorflow_internal只是C ++ API的TF_VERSION_STRING的别名。

现在为什么PyCharm会对第二个发出警告,这可能是PyCharm解析的一个限制(一个错误?),它无法处理最后定义的__version__的复杂定义同一个文件。搜索&#34; PyCharm __all__&#34;在这个网站上你会发现一些暗示。

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

答案 1 :(得分:0)

在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'
>>>