运行手语识别TensorFlow训练代码出现GeneratorDataset迭代器错误如何解决
报错解决方案
这个报错通常由TensorFlow与Keras版本不兼容、训练参数配置错误、数据生成器多进程加载异常三类原因导致,可按以下步骤依次排查修复:
1. 修正导入语句,解决版本兼容问题
高版本TensorFlow(2.6+)不再适配独立安装的Keras包,需要统一使用TensorFlow内置的Keras模块,将代码头部的Keras相关导入全部替换为以下写法:
import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Convolution2D, MaxPooling2D, Flatten, Dense, Dropout from tensorflow.keras.preprocessing.image import ImageDataGenerator import os os.environ["CUDA_VISIBLE_DEVICES"] = "1" # 可额外添加这行屏蔽TensorFlow冗余警告 os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
2. 替换废弃的fit_generator方法
TensorFlow 2.x版本开始fit方法原生支持生成器输入,fit_generator已被废弃,很容易触发迭代器相关错误,将训练代码修改为:
classifier.fit( training_set, steps_per_epoch=1284, # 总训练样本数/批次大小=12841//10 epochs=5, validation_data=test_set, validation_steps=426, # 总测试样本数/批次大小=4268//10 # 关闭多进程数据加载,避免解释器状态异常 workers=1, use_multiprocessing=False )
注意:你原来的steps_per_epoch和validation_steps参数配置错误,直接填写总样本数会导致生成器被耗尽后仍然被请求数据,是触发该报错的核心原因之一,必须修改为总样本数除以批次大小的整数值。
3. 可选兜底方案
如果修改后仍然报错,可尝试以下操作:
- 临时关闭GPU测试,将
os.environ["CUDA_VISIBLE_DEVICES"] = "1"改为os.environ["CUDA_VISIBLE_DEVICES"] = "-1",如果CPU能正常运行则说明是CUDA与TensorFlow版本不匹配,重新安装对应版本的TensorFlow即可 - 降级TensorFlow到2.8~2.10的稳定版本,该区间版本对传统ImageDataGenerator的适配性更好
内容的提问来源于stack exchange,提问作者user15180283
相关产品推荐
相关产品推荐

