TensorFlow导入报错AlreadyExistsError:同名指标已存在的解决求助
我之前在Ubuntu 19.04环境下用Spyder 3.3.2搭配Python 3.7.3、TensorFlow 2.0.0-rc2开发时,也碰到过完全一样的问题:第一次在IPython控制台运行这段代码一切正常:
import tensorflow as tf print(tf.__version__)
但同一控制台再次执行时,直接抛出这个错误:
File "/home/rodrigo/.local/lib/python3.7/site-packages/tensorflow_core/python/eager/monitoring.py", line 121, in init
self._metric = self._metric_methods[self._label_length].create(*args)
AlreadyExistsError: Another metric with the same name already exists.
每次只能关掉重开IPython控制台才能继续,但只要涉及TensorFlow导入的代码,重复运行必触发这个错误。下面几个亲测有效的解决方案,你可以挨个试试:
调整Spyder的IPython绘图后端
这是最省心的解决办法。打开Spyder的设置面板(点击顶部菜单栏的Tools > Preferences),找到IPython console > Graphics选项,把Backend从默认的Inline改成Automatic或者Qt5。改完重启Spyder,大部分情况下这个冲突问题就直接消失了——本质是Inline后端和TensorFlow的监控指标系统存在资源释放不彻底的问题。在代码中手动重置TensorFlow会话状态
如果改后端没用,可以在每次运行代码前加入重置会话的逻辑,强制清理TensorFlow的内部状态:import tensorflow as tf # 清除Keras会话并重置TensorFlow监控指标 tf.keras.backend.clear_session() # 执行你的核心代码 print(tf.__version__)clear_session()会彻底清除之前会话中的所有模型、变量和指标,避免重复创建同名指标导致的冲突。升级Spyder到最新兼容版本
你当前用的Spyder 3.3.2对TensorFlow 2.x的支持还不够完善,后续的Spyder 4.x及以上版本修复了大量和IPython控制台交互的bug。可以用pip直接升级:pip install --upgrade spyder升级完成后重启Spyder,重复运行代码的问题大概率会被解决。
用"新进程运行"模式执行代码
每次运行代码时,不要直接点顶部的运行按钮,而是右键你的脚本文件,选择Run in new process。这样每次运行都会启动一个全新的Python进程,完全隔离之前的TensorFlow状态,从根源上避免了重复指标的问题。
内容的提问来源于stack exchange,提问作者rvimieiro




