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

model.fit前如何拼接两个generator对象并解决单输入收双张量报错

问题原因

你的报错核心是:当前合并生成器输出了包含2个张量的列表,而你使用的new_model是单输入结构,仅能接收1组图像张量作为输入。
你原本的需求是将「归一化原图」和「增强生成图」合并为更大的训练样本集,而非作为两组独立输入送入模型,所以错误出在合并生成器的返回逻辑上。

修复方案

修改合并生成器的逻辑,将两个生成器产出的图像张量、标签张量在样本维度(第0维)拼接,作为单组输入返回:

# 两个合并生成器逻辑完全一致,可以复用同一个函数
def combine_generator(gen1, gen2):
    while True:
        data1 = gen1.next()
        data2 = gen2.next()
        # 沿样本维度拼接图像:两个batch的样本合并为一个更大的batch
        combined_x = np.concatenate([data1[0], data2[0]], axis=0)
        # 对应拼接标签
        combined_y = np.concatenate([data1[1], data2[1]], axis=0)
        yield combined_x, combined_y

# 生成器初始化时添加相同seed,保证样本读取顺序一致,避免标签错位
train_generator1 = train_datagen1.flow_from_directory(
    train_path,
    save_to_dir="train_augm/",
    target_size=(224, 224),
    batch_size=6,
    seed=123) # 添加固定seed
train_generator2 = train_datagen2.flow_from_directory(
    train_path,
    target_size=(224, 224),
    batch_size=6,
    seed=123) # 和上面同一个seed

validation_generator1 = validation_datagen1.flow_from_directory(
    valid_path,
    save_to_dir="valid_augm/",
    target_size=(224, 224),
    batch_size=3,
    seed=456) # 验证集用另一个固定seed
validation_generator2 = validation_datagen2.flow_from_directory(
    valid_path, 
    target_size=(224, 224), 
    batch_size=3,
    seed=456) # 和上面同一个seed

# 调用合并函数
train_generator = combine_generator(train_generator1, train_generator2)    
validation_generator = combine_generator(validation_generator1, validation_generator2)

# 训练时手动指定步数,keras无法自动推断自定义生成器的步数
train_steps = train_generator1.samples // train_generator1.batch_size
val_steps = validation_generator1.samples // validation_generator1.batch_size

history = new_model.fit(
    train_generator,
    epochs=5,
    steps_per_epoch=train_steps,
    validation_data = validation_generator,
    validation_steps=val_steps,
    shuffle = True,
    verbose = 1)
注意事项
  • 合并后的每个训练batch大小为两个生成器batch大小之和,上面的示例中训练batch总大小为6+6=12,验证batch总大小为3+3=6
  • 如果不需要每个batch同时包含原图和增强图,也可以直接先后用两个生成器训练,效率更高

内容的提问来源于stack exchange,提问作者Ayhan Sarı

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:45:03