【发布时间】:2018-11-25 23:39:59
【问题描述】:
背景
我正在训练一个将两个图像作为输入的模型。由于数据太大而无法放入我的机器 RAM,我使用 flow_from_dataframe 创建用于训练和验证的生成器 - 两个训练生成器,每个生成器提供各自的图像之一(前视图和后视图,如 @ 所示987654322@参数)和两个生成器分别进行验证。
像这样:
datagen=ImageDataGenerator(rescale=1. / 255)
X1_train_generator =datagen.flow_from_dataframe(dataframe=train, directory=data_dir, x_col="front", y_col=target, has_ext=True, class_mode="categorical", target_size=(224,224), batch_size=batch_size,seed = 1)
X2_train_generator=datagen.flow_from_dataframe(dataframe=train, directory=data_dir, x_col="back", y_col=target, has_ext=True, class_mode="categorical", target_size=(224,224), batch_size=batch_size,seed = 1)
X1_validation_generator =datagen.flow_from_dataframe(dataframe=test, directory=data_dir, x_col="front", y_col=target, has_ext=True, class_mode="categorical", target_size=(224,224), batch_size=batch_size,seed = 1)
X2_validation_generator=datagen.flow_from_dataframe(dataframe=test, directory=data_dir, x_col="back", y_col=target, has_ext=True, class_mode="categorical", target_size=(224,224), batch_size=batch_size,seed = 1)
为了结合训练和验证生成器进行训练,我正在使用:
def format_gen_outputs(gen1,gen2):
x1 = gen1[0]
x2 = gen2[0]
y1 = gen1[1]
return [x1, x2], y1
train_combo_gen= map(format_gen_outputs, X1_train_generator , X2_train_generator )
validation_combo_gen= map(format_gen_outputs, X1_validation_generator , X2_validation_generator )
现在我使用fit_generator 训练我的模型,将train_combo_gen 传递给训练目的,将validation_combo_gen 传递给validation_data 参数以进行验证
问题
但是,我意识到我的 X1_train_generator 和 X2_train_generator 显示的 .class_indices 映射与我的其他两个验证生成器 X1_validation_generator 和 X2_validation_generator 不同。
像这样(注意猫和狗是如何分配到不同的类的):
X1_train_generator.class_indices
>> {'cat': 0, 'dog': 1, 'car': 2, 'bike': 3}
X1_validation_generato.class_indices
>> {'dog': 0, 'cat': 1, 'car': 2, 'bike': 3}
问题
因此,我在训练期间不信任我的 val_loss 和 val_acc。有没有办法解决这个问题,即重新映射生成器中的类?
【问题讨论】:
标签: python tensorflow keras generator