【问题标题】:All input arrays (x) should have the same number of samples. Got array shapes: [(52, 224, 224, 3), (64, 35)]所有输入数组 (x) 应具有相同数量的样本。得到数组形状:[(52, 224, 224, 3), (64, 35)]
【发布时间】:2020-02-16 23:53:15
【问题描述】:

我收到了这个错误,很奇怪第一个时期已经圆满完成,而第二个时期的尺寸不匹配。 All input arrays (x) should have the same number of samples. Got array shapes: [(52, 224, 224, 3), (64, 35)] see error screenshot

我第一次使用 ImageDataGenerator() 和方法 flow_from_directory() 从数据集中获取所有图像。这是我认为应该是错误的代码的一部分:

# generator function - two inputs (images and histogram vector) and one label (OCEAN labels)
def generator(dataset_path, OCEAN_histogram, batch_size):

    gen = ImageDataGenerator()
    gen_faces = gen.flow_from_directory(dataset_path,
                                          target_size = (224, 224),
                                          class_mode = None,
                                          batch_size = batch_size,
                                          shuffle=True)    


    batch_OCEAN = np.zeros((batch_size, 5))
    batch_histogram = np.zeros((batch_size, n_features))

    # loop where we continually feed the nn in batches
    while True:

    # it takes the next batch of images
    batch_faces = gen_faces.next()


    # list with all images names in the current batch
    all_faces = [f.rsplit('.', 1)[0].rsplit('/', 1)[1] for f in gen_faces.filenames]

    for i in range(batch_size):
        batch_OCEAN[i] = OCEAN_histogram[all_faces[i]][0]
        batch_histogram[i] = OCEAN_histogram[all_faces[i]][1]

    # shapes : batch_faces -> (64, 224, 224, 3)  batch_histogram -> (64, 35) batch_OCEAN -> (64, 5)
    yield [ batch_faces, batch_histogram ], batch_OCEAN


train_generator = generator(train_path, train_OCEAN_histogram, batch_size)
validation_generator = generator(validation_path, validation_OCEAN_histogram, batch_size)

# Train model on dataset
print("[INFO] training model...")
custom_vgg_model.fit_generator(train_generator, epochs = 50, steps_per_epoch = train_size//batch_size,
                               validation_data = validation_generator,
                               validation_steps = validation_size//batch_size, verbose = 1)

这个错误怎么可能发生?有什么想法吗?

提前致谢!

【问题讨论】:

    标签: python-2.7 tensorflow keras


    【解决方案1】:

    原因是因为您的总训练样本为 55,796,如果您的批量大小为 64,您将有 871 个步骤,余数为 52。在 871 步之后,您的生成器将在下一次迭代中返回一个形状为 (52, 224, 224, 3) 的张量。

    我建议在每个 epoch 之后,对数据集进行洗牌,并且只在生成器中保留 55,796//64 样本。

    【讨论】:

    • 嗨@zihaozhihao!我尝试在 fit_generator 中将参数 shuffle 更改为 True。但它没有用。正如你所说,我怎么能只在我的生成器中保留55796//64 样本?谢谢。
    • 也许你可以看看这篇文章。 stanford.edu/~shervine/blog/…
    • 嗯,那篇文章中的生成器与我的完全不同。我显然至少解决了这个错误,检查每个批次的大小以及是否与变量 batch_size 不同,然后我执行 generator.reset() 但我完全不确定这是否是一个真正的解决方案。你怎么看?
    • 我认为重置不会起作用。检查这个stackoverflow.com/questions/48729107/…
    • 在我提供的第一篇文章中,生成批处理数据的想法可能会有所帮助。基本上,您可以编写自己的逻辑来在 while 循环中生成批处理数据。
    猜你喜欢
    • 2019-11-21
    • 2021-02-12
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 2019-04-20
    • 2020-01-13
    • 2021-06-24
    相关资源
    最近更新 更多