Keras训练CNN模型触发ValueError结构报错求助
报错原因分析
ValueError: Must provide at least one structure的核心触发原因是数据集生成代码的参数误用,具体有两处关键问题:
subset参数无匹配的划分规则:你在flow_from_directory中指定了subset="training"和subset="validation",但初始化ImageDataGenerator时没有配置validation_split参数。subset仅在ImageDataGenerator设置了validation_split(比如validation_split=0.2)时才会生效,否则生成器无法识别子集划分逻辑,导致数据集结构异常。- 验证集目录搭配
subset参数逻辑矛盾:你的验证集指向独立的new_heatmaps/test目录,该目录本身就是完整的验证数据集,无需再用subset="validation"划分。添加该参数后,生成器会尝试从该目录中拆分验证子集,但因无validation_split配置,最终导致验证数据集没有有效数据结构。
修复方案
根据你的数据集结构,选择以下两种修复方式之一:
方式1:单目录拆分训练/验证集
如果训练和验证数据都在train目录下,通过validation_split划分:
# 初始化时添加验证集拆分比例 image_generator = ImageDataGenerator(rescale=1 / 255, validation_split=0.2) train_dataset = image_generator.flow_from_directory( batch_size=5, directory="new_heatmaps/train", shuffle=True, target_size=(32, 128), subset="training", class_mode="binary", ) validation_dataset = image_generator.flow_from_directory( batch_size=5, directory="new_heatmaps/train", shuffle=True, target_size=(32, 128), subset="validation", class_mode="binary", )
方式2:独立目录作为验证集(匹配你的原始逻辑)
直接移除subset参数,读取独立的测试目录:
image_generator = ImageDataGenerator(rescale=1 / 255) train_dataset = image_generator.flow_from_directory( batch_size=5, directory="new_heatmaps/train", shuffle=True, target_size=(32, 128), class_mode="binary", ) validation_dataset = image_generator.flow_from_directory( batch_size=5, directory="new_heatmaps/test", shuffle=True, target_size=(32, 128), class_mode="binary", )
额外提示:model.fit中设置的batch_size=1会覆盖flow_from_directory的batch_size=5,建议保持参数一致,避免训练逻辑混淆。
内容的提问来源于stack exchange,提问作者MiXen
相关产品推荐
相关产品推荐

