You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TensorFlow与Keras环境中.py文件终端运行报错咨询(ipynb正常)

解决TensorFlow 2.3.0终端运行.py脚本出现的_CheckpointRestoreCoordinatorDeleter.__del__ TypeError

这个问题我之前碰到过,本质是TensorFlow 2.3.0的一个已知垃圾回收bug:当终端里的.py脚本运行结束时,Python的垃圾回收机制会触发_CheckpointRestoreCoordinatorDeleter的__del__方法,但此时相关的TF内部对象已经被销毁,导致调用了一个NoneType的对象,从而抛出这个被忽略的异常。而Jupyter Lab的交互式会话会维持TF上下文的状态,垃圾回收的时机和独立脚本不同,所以不会触发这个问题。

下面是几个针对性的解决办法,按推荐程度排序:

1. 升级TensorFlow版本(最推荐)

这个bug在TensorFlow 2.4.0及以上版本已经被官方修复,而且Keras 2.4.3正好和TensorFlow 2.4.x系列兼容(Keras 2.4.3是TF 2.4的配套版本)。你可以直接升级到GPU版本的TF 2.4.0:

pip install tensorflow-gpu==2.4.0 --upgrade

升级后这个异常会直接消失,同时还能获得TF后续版本的性能优化和bug修复。

2. 手动控制垃圾回收时机

如果暂时不想升级版本,可以在脚本训练完成后,手动触发垃圾回收,强制清理TF相关对象,避免脚本结束时的无序回收:

import gc

# 你的训练代码...
model.fit(...)

# 训练结束后手动清理
gc.collect()

如果你的代码里显式使用了tf.train.Checkpoint或ModelCheckpoint回调,也可以先删除这些对象再触发回收:

del checkpoint  # 替换成你实际的检查点对象名
del model_checkpoint_callback  # 替换成你的回调对象名
gc.collect()

3. 抑制特定异常(治标不治本)

这个异常本身是“被忽略”的(Exception ignored),不会影响你的训练结果,只是终端输出看起来烦人。如果只是想屏蔽这个错误,可以在脚本开头添加以下代码,专门拦截这个特定的TypeError:

import sys
from types import TracebackType

def ignore_checkpoint_del_error(exctype: type, value: Exception, traceback: TracebackType) -> None:
    # 只拦截_CheckpointRestoreCoordinatorDeleter.__del__的NoneType调用错误
    if (exctype is TypeError 
        and "'NoneType' object is not callable" in str(value)
        and "_CheckpointRestoreCoordinatorDeleter.__del__" in str(traceback)):
        return
    # 其他异常正常处理
    sys.__excepthook__(exctype, value, traceback)

sys.excepthook = ignore_checkpoint_del_error

内容的提问来源于stack exchange,提问作者Stupid420

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:29:11