Python 多输入神经网络中的数据发生器

Python 多输入神经网络中的数据发生器,python,tensorflow,keras,unity3d-unet,multiple-input,Python,Tensorflow,Keras,Unity3d Unet,Multiple Input,我正在用两个输入和一个输出在Keras中训练一个神经网络(U-net)。 第一个输入是数组(图像),第二个输入是单个值 input_img = Input(input_size, name='input_image') input_depth = Input((1,), name='input_depth') ... depth1 = RepeatVector(64)(input_depth) depth1 = Reshape((8,8, 1))(depth1) pool4 = concaten

我正在用两个输入和一个输出在Keras中训练一个神经网络(U-net)。 第一个输入是数组(图像),第二个输入是单个值

input_img = Input(input_size, name='input_image')
input_depth = Input((1,), name='input_depth')
...
depth1 = RepeatVector(64)(input_depth)
depth1 = Reshape((8,8, 1))(depth1)
pool4 = concatenate([pool4, depth1], -1)
....
Model([input_img, input_depth], conv10)
我已经构建了以下数据生成器来为模型提供数据:

def get_image_depth_generator_on_memory_v2(images, masks, depths, batch_size, data_gen_args):
    seed = 123
    image_datagen = ImageDataGenerator(**data_gen_args)
    mask_datagen = ImageDataGenerator(**data_gen_args)  

    image_f = image_datagen.flow(images, depths, batch_size=batch_size, shuffle=True, seed=seed)
    mask_f = mask_datagen.flow(masks, batch_size=batch_size, shuffle=True, seed=seed)

    while True:
        image_n = image_f.next()
        mask_n = mask_f.next()

        yield [image_n[0], image_n[1]], mask_n
model.fit_generator(generator = get_image_depth_generator_on_memory_v2(
            train_images, train_masks, train_depths,
            batch_size=512, data_gen_args={}), 
            steps_per_epoch=500)
当我在没有发电机的情况下输入模型时,培训有效:

model.fit([train_images, train_depths], train_masks)
但当我使用发电机为模型供电时,它不起作用:

def get_image_depth_generator_on_memory_v2(images, masks, depths, batch_size, data_gen_args):
    seed = 123
    image_datagen = ImageDataGenerator(**data_gen_args)
    mask_datagen = ImageDataGenerator(**data_gen_args)  

    image_f = image_datagen.flow(images, depths, batch_size=batch_size, shuffle=True, seed=seed)
    mask_f = mask_datagen.flow(masks, batch_size=batch_size, shuffle=True, seed=seed)

    while True:
        image_n = image_f.next()
        mask_n = mask_f.next()

        yield [image_n[0], image_n[1]], mask_n
model.fit_generator(generator = get_image_depth_generator_on_memory_v2(
            train_images, train_masks, train_depths,
            batch_size=512, data_gen_args={}), 
            steps_per_epoch=500)
我得到下一个错误:

ValueError: Error when checking model input: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 2 array(s), but instead got the following list of 1 arrays: ...

知道发生了什么吗?

错误是您的model.fit line生成1个输出,而model.generate需要2个输出,因此请提供2个输出或尝试使用np连接输出以适应。concatenate

最后,我通过将tensorflow gpu更新为最新版本,将cuda更新为9.0版本来解决此问题。但我仍然不确定这是否是问题所在