TensorFlow 2.16.1调用tfds.load赋值变量时出现无意义TypeError
问题现象
使用TensorFlow 2.16.1和tensorflow_datasets库,执行ds = tfds.load('stl-10')(或其他任意数据集)时,会重复三次抛出如下错误:
Exception ignored in: <function AtomicFunction.del at 0x0000024C114AA160>
Traceback (most recent call last):
File "C:\Users\Toby\AppData\Local\Programs\Python\Python312\Lib\site-packages\tensorflow\python\eager\polymorphic_function\atomic_function.py", line 291, in del
TypeError: 'NoneType' object is not subscriptable
直接执行tfds.load('stl-10')不赋值给变量时无错误,且本地atomic_function.py文件与官方完全一致。
可行解决方案
显式触发垃圾回收
错误源于对象销毁阶段的空引用问题,可手动调用垃圾回收提前清理无效对象:import gc ds = tfds.load('stl-10') gc.collect()降级TensorFlow版本
该问题是TensorFlow 2.16.1的已知兼容性bug,降级到2.15.x稳定版本可解决:pip install tensorflow==2.15.1 tensorflow-datasets==4.9.4 --force-reinstall指定数据集加载模式
使用as_supervised=True参数改变返回结构,避免默认字典对象触发异常:# 按拆分加载监督式数据集 ds_train, ds_test = tfds.load('stl-10', split=['train', 'test'], as_supervised=True)切换到非交互式环境运行
若在Jupyter/IPython中出现问题,尝试在普通Python脚本中执行,交互式环境的变量生命周期管理可能干扰垃圾回收逻辑。
内容的提问来源于stack exchange,提问作者Toby

