python-3.x 升级到TensorFlow 2.8.0后无法解析导入“tensorflow.keras”

rhfm7lfc  于 2023-01-22  发布在  Python
关注(0)|答案(8)|浏览(863)

最近发布了TensorFlow 2.8,我一出来就安装了它。我确实需要它来支持更高的NumPy版本和一些新功能。然而,在我的conda环境中安装了它之后,
python3 -m pip install --upgrade tensorflow
PyCharm和VSCode都无法解析导入的from tensorflow.keras import ...
导入本身似乎在运行时工作,但由于导入无法解析,我无法使用代码完成、可视化函数签名等。有人遇到过类似的问题吗?
所有的东西都可以在TF2.7下工作--我以前的版本。
注意:我使用的是Python 3.8
Vs代码x1c 0d1x
物理魔咒

我试着通过PyCharm解释器标签检查版本,这是我看到的。由于某种原因,PyCharm不知道有2.0之后的版本(我在那个环境中安装了最新版本的pip)。我猜这是相关的,但不知道该怎么做。

ttvkxqim

ttvkxqim1#

我遇到了同样的问题,通过将其导入为

from tensorflow.python.keras.layers import Dense
qnakjoqk

qnakjoqk2#

这是当前版本的tensorflow中的一个bug,如this issue中所述。
您可以通过以下任一方法解决此问题
1.按照引用问题的回答中所述修改文件site-packages/tensorflow/__init__.py,或者
1.使用import keras.api._v2.keras as keras,因为这看起来就是tensorflow加载的包本身(尽管这里需要引用受保护的成员_v2,这违反了python的约定)。
这里的原因是tensorflow试图以一种懒惰的方式加载keras模块,这意味着它只保留了对模块的引用,直到模块被使用为止,只有到那时keras模块才会被实际加载,因此IDE只知道tensorflow对keras模块的引用,而不知道它的内容。

cu6pst1q

cu6pst1q3#

我在Google Colab中也发现了这个问题。虽然运行代码时运行正常。这只是IDE的一个抱怨,据说它找不到导入。非常奇怪。我希望TensorFlow团队的人尽快提供反馈。

pepwfjgg

pepwfjgg4#

消退中

import tensorflow
foo = tenstorflow.keras.foo
# if foo is a submodule but not an attribute, this will fail

以及

from tensorflow.keras import foo
# if foo is an attribute, this is (roughly) equivalent to
import tensorflow.keras
foo = tenstorflow.keras.foo
# if foo is a submodule but not an attribute, this is (roughly) equivalent to
import tensorflow.keras.foo as foo

是不同的。
第一个需要tensorflow具有keras属性,在类型检查期间静态地具有正确的类型。
但是第二个需要tensorflow.__path__在类型检查期间静态地包含keras模块。
顺便说一句,对于from tensorflow import keras:如果tensorflow具有keras属性,则使用该属性,否则将keras作为子模块导入。
理论上,第二种方法应该只适用于2.2.0 <= TF < 2.6.02.2.0 <= TF < 2.6.0tensorflow/keras文件夹,因为根据TF 2.6 Release Log,tensorflow/keras应该在TF 2.6中删除,否则from tensorflow import keras(由keras PIP包支持的tensorflow.keras)将不同于import tensorflow.keras as keras(由tensorflow/python/keras支持的tensorflow/keras)。
然而,事实上,第二种方法适用于2.2.0 <= TF < 2.8.0,因为tensorflow/keras直到TF 2.8才被删除。有趣的是,tensorflow/python/keras还没有被删除(Release 2.9.1),这违反了TF 2.6 Release Log中的声明,即"......将在未来的版本(2.7)中被删除"。
由于TF 2.5中引入的keras延迟加载,TF >= 2.5.0的第一个错误被破坏了,虽然相关的提交已经被合并到master分支中,但还没有被修复(Release 2.9.1)。
参见https://github.com/tensorflow/tensorflow/pull/54104https://github.com/tensorflow/tensorflow/commit/e65b68a0914408118995d2f8b55c4286859362f8
另请参见www.example.comhttps://github.com/tensorflow/tensorflow/pull/54104#issuecomment-1067102133

yquaqz18

yquaqz185#

我在tensorflow-macos 2.10.0中就遇到了这种情况。

gz5pxeao

gz5pxeao6#

这是this post in GitHub显示的模式。我得到了相同的。忽略它,因为代码仍然运行,但宁愿没有黄色。我希望来自张流的人可以插话。:)

cidc1ykv

cidc1ykv7#

这一条对我很有效:

from keras.utils.np_utils import to_categorical
t2a7ltrp

t2a7ltrp8#

您可以在tensorflow目录中创建指向keras源代码的符号链接,如下所示:

cd ./virtualenvs/myenv/lib/python3.x/site-packages/tensorflow
ln -s ../keras/api/_v2/keras/ keras

相关问题