问题的最短版本:
tf.__version__在检查 Python 中的 TensorFlow 版本时,有人可以解释/澄清和之间的区别吗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
Run Code Online (Sandbox Code Playgroud)
这似乎也有效:
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
Run Code Online (Sandbox Code Playgroud)
我注意到的一个区别是编辑器 PyCharm 显示了该tf.__version__方式的警告,但没有显示 tf.VERSION 方式的警告:
PyCharm 中的解决方法是在# noinspection PyUnresolvedReferences每个tf.__version__用法上方添加注释,从而解决了警告:
然而,如果tf.VERSION没有注释,PyCharm 中不会显示警告# noinspection PyUnresolvedReferences:
tf.__version__我在这篇文章中询问了 PyCharm警告:
PyCharm 中的 TensorFlow Python 警告 - 在 __init__.py 中找不到引用 __version__
唯一的响应者表示这tf.__version__是动态生成的。特别是在 Python 的上下文中,我不太明白这意味着什么。
所以此时我有以下问题:
1)为什么这两者都存在?
2) 通常推荐其中一种而不是另一种吗?
3) 为什么 PyCharm 对其中一个显示警告,而对另一个不显示警告?
tf.__version__4)动态生成是什么意思?tf.VERSION如果方式不同又是如何生成的呢?
5)为了避免添加# noinspection PyUnresolvedReferences我更喜欢使用的评论tf.VERSION,有什么理由不这样做?
6) TensorFlow 存储库https://github.com/tensorflow/tensorflow和相关存储库(例如模型https://github.com/tensorflow/models )中的大多数示例都使用该tf.__version__方式,但有些使用该tf.VERSION方式,是否有一个原因?
他们是一样的。
这两个符号都是别名,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__
Run Code Online (Sandbox Code Playgroud)
深入兔子洞,别名最终指向 of __version__,_pywrap_tensorflow_internal它基本上是 TensorFlow 的 C++ 库,它确实是动态加载的——最后,python 的只是C++ API 的__version__别名。TF_VERSION_STRING
现在为什么 PyCharm 会发出第二个警告,这可能是 PyCharm 解析的限制(错误?),无法处理__all__同一文件末尾定义的复杂定义。在此站点上搜索“PyCharm __all__”,您会发现一些提示。
因此,在 的特定情况下,这两个选项都应该没问题,并且如果它为您消除了警告,则tensorflow可以使用。tf.VERSION然而,这个习惯用法更常见(有些人会说标准),因为它是PEP8__version__的推荐,所以我可能会坚持使用.tf.__version__
| 归档时间: |
|
| 查看次数: |
17773 次 |
| 最近记录: |