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

如何使用Keras ImageDataGenerator为pix2pix CNN模型喂入训练数据

问题根因
  • 你直接调用两个独立flow_from_directory实例的next()方法,没有走你自定义JoinedGen的同步逻辑,两个生成器的迭代、随机增强参数都是独立生成的,自然无法得到配对的输入输出对
  • 即使使用JoinedGen封装,你当前没有为两个生成器绑定相同的随机种子,同位置的输入、目标图像会应用不同的空间变换(剪切、缩放、翻转等),也不符合pix2pix的训练要求
  • 若area和sat文件夹下的对应图像文件名不一一对应、排序不一致,即使索引同步也会读取到不匹配的图像对
修正方案

1. 为所有生成器绑定相同随机种子

在四个flow_from_directory调用时统一添加相同的seed参数,保证同位置的输入、目标图像应用完全一致的增强参数:

generator = ImageDataGenerator(shear_range=0.2,
       zoom_range=0.2,
       horizontal_flip=True,
       validation_split=0.3) 

input_gen = generator.flow_from_directory(path, 
                                          classes=['area'], 
                                          shuffle=False,
                                          target_size=(256, 256),   
                                          class_mode=None,
                                          batch_size=32,
                                          subset='training',
                                          seed=42) # 新增相同随机种子

target_gen = generator.flow_from_directory(path, 
                                          classes=['sat'],
                                          shuffle=False, 
                                          target_size=(256, 256),
                                          class_mode=None,
                                          batch_size=32,
                                          subset='training',
                                          seed=42) # 和输入生成器种子一致

input_gen_val = generator.flow_from_directory(path, 
                                          classes=['area'], 
                                          shuffle=False,
                                          target_size=(256, 256),   
                                          class_mode=None,
                                          batch_size=32,
                                          subset='validation',
                                          seed=42) # 验证集也用相同种子

target_gen_val = generator.flow_from_directory(path, 
                                          classes=['sat'],   
                                          shuffle=False, 
                                          target_size=(256, 256),
                                          class_mode=None,
                                          batch_size=32,
                                          subset='validation',
                                          seed=42) # 和验证输入生成器种子一致

2. 通过封装后的JoinedGen读取数据

不要单独调用两个生成器的next(),统一用你自定义的JoinedGen封装后读取,才会触发索引同步逻辑:

# 封装生成器
train_gen = JoinedGen(input_gen, target_gen)
val_gen = JoinedGen(input_gen_val, target_gen_val)

# 读取第一批配对数据
x_batch, y_batch = train_gen[0]
# 第一个配对对为 x_batch[0], y_batch[0]

3. 额外校验项

  • 确保area和sat文件夹下的对应图像文件名完全一致,排序规则相同
  • 如果需要开启shuffle,要把输入、目标生成器的shuffle参数同时设为True,依靠JoinedGen的on_epoch_end逻辑同步索引数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:36:00