如何使用tf.data.Dataset.ignore_errors处理TensorFlow数据集错误?
处理TensorFlow加载目录图片时的无效文件问题
用tf.keras.utils.image_dataset_from_directory从目录构建图片数据集时,常碰到标注为.jpg、.png、.gif、.bmp格式但实际无效的文件,需要跳过这些错误数据,理想情况下还要记录无效文件名,方便后续修复、移除或删除。以下是几种可行的处理方法:
现有错误处理方案
tf.contrib.data.ignore_errors:仅支持TensorFlow 1.x版本,TF2.x已不再提供该接口tf.data.experimental.ignore_errors:虽已被标记为弃用,但当前版本仍能正常运行,可直接调用以跳过加载失败的数据- 官方推荐的
tf.data.Dataset.ignore_errors:存在使用限制,当处理BatchDataset对象时会抛出AttributeError: BatchDataset object has no attribute ignore_errors错误,无法直接应用在批量数据集上
替代方案:使用filter过滤无效文件
可以通过自定义过滤函数提前校验文件有效性,再决定是否加载。示例思路如下(未测试):
def is_valid_image(file_path): try: # 这里可添加具体的文件有效性校验逻辑,比如读取文件头验证格式 return True except Exception: # 打印或记录无效文件名 tf.print("发现无效文件:", file_path) return False # 先构建数据集,打散批量后过滤,再重新批量 dataset = tf.keras.utils.image_dataset_from_directory("your_image_dir") dataset = dataset.unbatch().filter(lambda img, label: is_valid_image(img)).batch(32)
内容的提问来源于stack exchange,提问作者Ian Boyd
相关产品推荐
相关产品推荐

