Keras图像分类代码报错:存在.jpeg图片却提示未找到
问题:Keras image_dataset_from_directory无法识别文件夹中的.jpeg图片
问题详情
文件夹中确实存在.jpeg格式图片,但运行Keras代码加载数据集时,系统提示未找到任何图片,且报错信息明确说明允许的格式包含.jpeg。
运行代码
image_size = (180,180) batch_size =1 train_ds = tf.keras.preprocessing.image_dataset_from_directory( 'both_new', # 注:原代码中写的是'foldername',实际运行时使用的是'both_new' validation_split=0.9, subset= 'training', seed = 20, image_size = image_size, batch_size= batch_size, ) val_ds = tf.keras.preprocessing.image_dataset_from_directory( 'both_new', validation_split=0.9, subset = 'validation', seed = 20, image_size = image_size, batch_size = batch_size, )
运行结果与报错
运行结果
Found 0 files belonging to 0 classes. Using 0 files for training
报错信息
ValueError Traceback (most recent call last) Input In [4], in <cell line: 4>() 1 image_size = (180,180) 2 batch_size =1 ----> 4 train_ds = tf.keras.preprocessing.image_dataset_from_directory( 5 'both_new', 6 validation_split=0.9, 7 subset= 'training', 8 seed = 20, 9 image_size = image_size, 10 batch_size= batch_size, 11 ) 12 val_ds = tf.keras.preprocessing.image_dataset_from_directory( 13 'both_new', 14 validation_split=0.9, (...) 18 batch_size = batch_size, 19 ) File ~\anaconda3\lib\site-packages\keras\utils\image_dataset.py:209, in image_dataset_from_directory(directory, labels, label_mode, class_names, color_mode, batch_size, image_size, shuffle, seed, validation_split, subset, interpolation, follow_links, crop_to_aspect_ratio, **kwargs) 206 image_paths, labels = dataset_utils.get_training_or_validation_split( 207 image_paths, labels, validation_split, subset) 208 if not image_paths: --> 209 raise ValueError(f'No images found in directory {directory}. ' 210 f'Allowed formats: {ALLOWLIST_FORMATS}') 212 dataset = paths_and_labels_to_dataset( 213 image_paths=image_paths, 214 image_size=image_size, (...) 219 interpolation=interpolation, 220 crop_to_aspect_ratio=crop_to_aspect_ratio) 221 dataset = dataset.prefetch(tf.data.AUTOTUNE) ValueError: No images found in directory both_new. Allowed formats: ('.bmp', '.gif', '.jpeg', '.jpg', '.png')
原因分析与解决方法
1. 目录结构不符合要求
image_dataset_from_directory的核心要求是:目标目录下必须包含以类别命名的子文件夹,所有图片需放在对应类别的子文件夹中,不能直接把图片放在目标目录根目录。
- 正确目录结构示例:
both_new/ cat/ cat1.jpeg cat2.jpeg dog/ dog1.jpeg - 解决:创建类别子文件夹,将对应图片移动到子文件夹内。
2. 路径错误
代码中使用的'both_new'是相对路径,需确保该文件夹位于代码运行的当前工作目录下。
- 排查:运行
import os; print(os.getcwd())查看当前工作目录,确认both_new是否在该目录下。 - 解决:要么将
both_new移动到当前工作目录,要么改用绝对路径(如'C:/Users/YourName/Documents/both_new')。
3. 文件后缀或文件本身问题
- 可能是文件真实后缀被隐藏(如Windows默认隐藏已知文件类型扩展名,实际文件是
xxx.jpeg.txt); - 可能是后缀为大写(
.JPEG),虽然理论上兼容,但部分环境下会识别失败; - 可能文件损坏或文件名包含特殊字符/空格。
- 解决:显示文件真实后缀,修改为小写
.jpeg,确保文件名正常,且图片能正常打开。
4. 验证集比例设置不合理
代码中validation_split=0.9意味着训练集仅占总数据的10%,若总图片数极少(如1张),训练集可能分到0张,但这不是本次报错的核心原因(本次报错是未找到任何图片)。建议调整为合理比例,如validation_split=0.2。
内容的提问来源于stack exchange,提问作者Anshu_p
相关产品推荐
相关产品推荐

