【问题标题】:keras list of Numpy arrays not the size model expectedNumpy 数组的 keras 列表不是预期的大小模型
【发布时间】:2018-06-29 10:51:38
【问题描述】:

我无法找到将多个输入传递给模型的正确方法。该模型有 2 个输入

  • 形状的噪点图像(256, 256, 3)
  • 形状(256, 256, 3)的输入图像

和 1 个输出

  • 输出图形(256, 256, 3)

我正在通过ImageDataGenerator制作图像:

x_data_gen = ImageDataGenerator(
    horizontal_flip=True,
    validation_split=0.2)

我正在通过 python 生成器生成示例:

def image_sampler(datagen, batch_size, subset="training"):

    for imgs in datagen.flow_from_directory('data/r_cropped', batch_size=batch_size, class_mode=None, seed=1, subset=subset):

        g_y = []

        noises = []
        bw_images = []
        for i in imgs:
            # append to expected output the original image
            g_y.append(i/255.0)

            noises.append(generate_noise(1, 256, 3)[0])
            bw_images.append(iu_rgb2gray(i))

        yield(np.array([noises, bw_images]), np.array(g_y))

当尝试使用以下方法训练模型时:

    generator.fit_generator(
       image_sampler(x_data_gen, 32),
       validation_data=image_sampler(x_data_gen,32,"validation"),
       epochs=EPOCHS,
       steps_per_epoch= 540,
       validation_steps=160 )

我收到一条错误消息:

检查模型输入时出错:您传递给模型的 Numpy 数组列表不是模型预期的大小。预计会看到 2 个数组,但得到了以下 1 个数组的列表

虽然消息很清楚,但我不明白如何修复生成过程来解决它。

我试过了:

    yield([noises, bw_images], np.array(g_y))

但这不起作用,因为它会遇到不同的错误:

AttributeError: 'list' 对象没有属性 'shape'

我错过了什么?

【问题讨论】:

    标签: python tensorflow machine-learning neural-network keras


    【解决方案1】:

    当您有多个输入/输出时,您应该将它们作为 numpy 数组列表传递。因此,您的第二种方法是正确的,但您忘记在第二种方法中将列表转换为 numpy 数组:

    yield ([np.array(noises), np.array(bw_images)], np.array(g_y))
    

    确保一切正确的更详细的方法是为输入和输出层选择名称。示例:

    input_1 = layers.Input(# other args, name='input_1')
    input_2 = layers.Input(# other args, name='input_2')
    

    然后,在你的生成器函数中使用这样的名称:

    yield ({'input_1': np.array(noises), 'input_2': np.array(bw_images)}, {'output': np.array(g_y)})
    

    通过这样做,您可以确保映射正确完成。

    【讨论】:

    • 非常感谢!现在由于某种原因,它似乎在开始之前就已经饱和了内存,但至少这个问题已经解决了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    相关资源
    最近更新 更多