问题的最短版本:
在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中解决此问题的方法是在每个# noinspection PyUnresolvedReferences
用法之上添加tf.__version__
条评论,以解决警告:
但是,如果没有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
方式,有这个原因吗?
答案 0 :(得分:3)
他们是一样的。
这两个符号都是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'
>>>