Keras flow_from_directory用于多输出模型

时间:2019-12-04 16:04:20

标签: python keras

我已经将图像数据集安排在子文件夹中,因此可以使用以下代码创建图像数据生成器:

train_datagen = ImageDataGenerator(rescale=1. / 255, validation_split=0.2)

train = train_datagen.flow_from_directory(train_data_dir,
                                        target_size=(img_width, img_height),
                                        batch_size=batch_size,
                                        class_mode='categorical',
                                        subset='training')


validation = train_datagen.flow_from_directory(train_data_dir,
                                        target_size=(img_width, img_height),
                                        batch_size=batch_size,
                                        class_mode='categorical',
                                        subset='validation')

我的模型是双输出模型,所以我将需要使用自定义生成器,该生成器应接近:

def gen_flow_for_two_outputs(generator, X, Y1, Y2):
    genX = generator.flow(X, seed=7)
    genY1 = generator.flow(Y1, seed=7)
    while True:
            Xi = genX.next()
            Yi1 = genY1.next()
            Yi2 = function(Y2)
            yield Xi, [Yi1, Yi2]

但是,自定义生成器要求数据必须为numpy数组。

是否有一种方法可以将train_datagen.flow_from_directory的输出保存为一个完整的numpy数组,该数组将包含所有训练图像及其标签?

我已经尝试过HERE提出的解决方案,但是正如预期的那样,当为整个训练数据集提供单个批次时,我的系统内存不足。

最终,我希望开始拟合与以下类似的模型,但使用model.fit_generator而不是model.fit

model.fit(x_train, 
    {'logits_variance':y_train, 'softmax_output':y_train}, 
    callbacks=callbacks,
    verbose=FLAGS.verbose,
    epochs=FLAGS.epochs,
    batch_size=FLAGS.batch_size,
    validation_data=(x_test, {'logits_variance':y_test, 'softmax_output':y_test}))

有什么办法解决这个问题吗?

0 个答案:

没有答案