我在Keras中使用ImageDataGenerator读取图像目录。我想将结果保存在一个numpy数组中,因此我可以做进一步的操作,并将其保存到一个文件中的磁盘上。
flow_from_directory()返回一个迭代器,这就是我尝试以下操作的原因

itr = gen.flow_from_directory('data/train/', batch_size=1, target_size=(32,32))
imgs = np.concatenate([itr.next() for i in range(itr.nb_sample)])

但是那产生了
ValueError: could not broadcast input array from shape (32,32,3) into shape (1)

我认为我在滥用concatenate()函数,但我不知道失败的地方。

最佳答案

我遇到了同样的问题,并通过以下方式解决了该问题:
itr.next返回下一批图像作为两个numpy.ndarray对象:batch_x,batch_y。 (来源:keras/preprocessing/image.py)
因此,您可以将flow_from_directory的batch_size设置为整个火车数据集的大小。
例如,我的整个训练集包含1481张图像:

train_datagen = ImageDataGenerator(rescale=1. / 255)
itr = train_datagen.flow_from_directory(
train_data_dir,
target_size=(img_width, img_height),
batch_size=1481,
class_mode='categorical')

X, y = itr.next()

关于python - 将ImageDataGenerator结果分配给Numpy数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42284873/

10-12 22:50