导入张量流时出错“AlreadyExistsError:另一个同名的指标已存在。”

Rod*_*iro 43 python tensorflow

我在 Spyder 3.3 上使用 Python 3.7 和 Tensorlow 2.0 运行这个简单的代码:

import tensorflow as tf
print(tf.__version__)
Run Code Online (Sandbox Code Playgroud)

当我尝试在同一个 IPython 控制台中再次运行它时,出现以下错误:

文件“/home/rodrigo/.local/lib/python3.7/site-packages/tensorflow_core/python/eager/monitoring.py”,第121行,在init self._metric = self._metric_methods[self._label_length].create中(*参数)

AlreadyExistsError:另一个同名的指标已存在。

如果我关闭 IPython 控制台,然后再次打开它,它就可以正常工作。我在导入 Tensorflow 的每个代码中都会遇到此错误。有谁知道如何解决这个问题?

系统配置:

  • 乌班图19.04
  • 蜘蛛3.3.2
  • Python 3.7.3
  • IPython 5.8.0
  • TensorFlow 2.0.0-rc2

use*_*323 62

TL;DR:确保 Keras 版本与 Tensorflow 版本匹配

我也遇到同样的事情:

  • 视窗
  • Python3.8
  • 张量流-2.6.1

核心问题似乎是安装了两个 Keras 软件包:

<site-packages>/keras
<site-packages/tensorflow/python/keras
Run Code Online (Sandbox Code Playgroud)

如果您查看 2.6 的发行说明: https://github.com/tensorflow/tensorflow/releases/tag/v2.6.0

Keras 被拆分成一个单独的 PIP 包(keras),其代码已移至 GitHub 存储库keras-team/keras。tf.keras 的 API 端点保持不变,但现在由 keras PIP 包支持。tensorflow/python/keras 中的现有代码是过时的副本,将在未来版本 (2.7) 中删除。请删除对tensorflow.python.keras的所有导入,并将其替换为公共tf.keras API。

由于某种原因,它仍然从两个包中导入,这会触发有效的异常(只应导入一个 Keras 实例)

进一步挖掘,似乎正在安装 Keras-2.7,恢复到 Keras-2.6 解决了问题:

pip install keras==2.6.*
Run Code Online (Sandbox Code Playgroud)

由于某种原因: https://github.com/tensorflow/tensorflow/blob/v2.6.1/tensorflow/tools/pip_package/setup.py#L106

不起作用,也许是 PIP 中的错误?


Mih*_*eac 10

Tensorflow 在导入过程中构建单例作为副作用。导入两次会导致再次创建单例,这是不支持的。请不要导入两次。

  • @MihaiMaruseac 您能详细说明一下导入两次有何影响吗?因为导入发生在子流程中?我试图理解,因为我认为重新导入已经导入的模块是不行的。我可以在我的机器上“导入tensorflow”两次,并且同样处理具有副作用的其他文件(例如单行“print(“test”)”包)。 (4认同)

小智 6

经过一番查询,问题应该与Keras包版本问题有关。一种解决方案,我还不知道为什么,但经过验证,如下:
1 --> 卸载现有的 Keras 包(博主当前错误的版本是 2.7):

pip uninstall keras
Run Code Online (Sandbox Code Playgroud)

2 --> 安装特定版本的 Keras 包;我已经安装了 2.6.0 版本:

pip install keras==2.6.0
Run Code Online (Sandbox Code Playgroud)