You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

TensorFlow导入报错AlreadyExistsError:同名指标已存在的解决求助

解决Spyder中重复运行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

火山引擎 最新活动