You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 08:13:34