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

基于Cats Vs Dogs数据集的图像增强CNN训练中,TensorFlow 2.5的model.fit()报错问题求助

解决ValueError: y argument is not supported when using keras.utils.Sequence as input错误

这个错误的原因很明确,咱们一步一步拆解问题并修复:

1. 直接错误:model.fit()参数传递错误

你当前调用model.fit()的方式是:

model.fit(train_data_gen, val_data_gen, batch_size = batch_size, epochs = 5)

这里的问题在于:model.fit()的第二个位置参数是y(训练数据的标签),但你的train_data_gen是ImageDataGenerator.flow_from_directory()生成的DirectoryIterator(属于keras.utils.Sequence类型),它本身已经包含了输入图像和对应的标签,完全不需要额外传入y参数。你把验证数据集val_data_gen放在第二个参数位置,Keras会误以为你要手动传入训练标签,而Sequence类型的输入不支持这种手动传标签的方式,所以抛出了错误。

修复方式

把验证数据放在专门的validation_data参数中,同时因为生成器已经定义了batch_size,不需要在fit里重复指定:

model.fit(
    train_data_gen,
    validation_data=val_data_gen,
    epochs=5
)

2. 验证数据集生成器的潜在问题

你对验证数据集做了这样的处理:

val_data_gen = val_data_gen.take(batch_size).cache().repeat()

这里的take(batch_size)会让验证集只取batch_size个批次(也就是64个批次,对应64*64=4096张图,但你的验证集只有1000张),这会导致验证数据被错误截断,完全不符合预期。

修复方式

恢复你之前注释掉的正确处理方式,用prefetch提升性能,去掉多余的take()和repeat()(repeat()会让验证集无限重复,但model.fit()每个epoch只会遍历验证集一次,不需要重复):

AUTOTUNE = tf.data.AUTOTUNE
val_data_gen = val_data_gen.cache().prefetch(buffer_size=AUTOTUNE)

3. 模型配置的优化建议(非必要但更规范)

你的模型最后一层用了Dense(2, activation='sigmoid'),搭配sparse_categorical_crossentropy损失,虽然能运行,但不是最匹配的配置:

  • sparse_categorical_crossentropy通常对应**softmax激活**(输出所有类别的概率和为1,适配多分类场景)
  • sigmoid更适合二分类场景下输出单个单元(输出0-1的概率,代表其中一类的可能性)

你可以二选一调整:

选项1:适配多分类规范

把最后一层改成softmax激活:

model.add(
    Dense(
        units=2,
        activation='softmax'
    )
)

损失保持sparse_categorical_crossentropy即可。

选项2:适配二分类规范

把最后一层改成单个单元,损失换成binary_crossentropy:

model.add(
    Dense(
        units=1,
        activation='sigmoid'
    )
)

编译时修改损失:

model.compile(
    optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),
    loss='binary_crossentropy',
    metrics=['accuracy']
)

这样的配置会更符合Keras的设计规范,也能避免潜在的逻辑混淆。

内容的提问来源于stack exchange,提问作者Arun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 20:09:05