如何使用TensorFlow的flow_from_directory函数正确加载验证集数据
问题根因
验证集加载为0的问题核心来自两处配置错误:
- 你已经提前将数据集拆分为
train和validation两个独立文件夹,无需使用subset参数,该参数仅适用于从单个文件夹自动拆分训练/验证集的场景,且必须搭配ImageDataGenerator的validation_split参数使用,你当前注释了该参数,导致subset配置生效后无法匹配到对应图片 - 验证集生成器错误使用了带数据增强的
train_datagen,验证阶段无需做增强处理,应该使用你预先定义的仅做归一化的test_datagen
修正代码
直接修改create_dataset函数即可,不需要调整其他逻辑:
def create_dataset(train_data_dir, validation_data_dir, img_height, img_width, batch_size): train_generator = train_datagen.flow_from_directory( train_data_dir, target_size=(img_width, img_height), batch_size=batch_size, shuffle=True, class_mode='categorical' # 移除subset参数 ) validation_generator = test_datagen.flow_from_directory( validation_data_dir, target_size=(img_width, img_height), batch_size=batch_size, shuffle=False, # 验证集无需打乱,保证评估结果稳定 class_mode='categorical' # 移除subset参数 ) return train_generator, validation_generator
异常排查项
如果修改后仍出现加载为0的问题,按以下顺序排查:
- 确认
../data/validation目录结构和训练集完全一致,下含6个对应类别的子文件夹,子文件夹内存储验证图片 - 调用函数前添加
print(os.path.exists(validation_data_dir))确认路径拼写正确、可正常访问
内容的提问来源于stack exchange,提问作者julgi
相关产品推荐
相关产品推荐

