2017-02-16 87 views
1

我在Keras中使用ImageDataGenerator来读取图像的目录。我想将结果保存在一个numpy数组中,这样我可以进一步操作并将其保存到磁盘中的一个文件中。将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()功能,但我想不出我失败的地方。

+0

我部分地通过添加解决了问题一个'[0]''后面itr.next()'。然而,这只能给我x数据,我必须再次用'[1]'做y数据。然后我不能合并两个给定的'(A,B,C,D)'和'(A,E)'来塑造'(A,B,C,D,E)'。 – pietz

回答

2

我有同样的问题,并以下列方式解决它: 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_generator = train_datagen.flow_from_directory(
train_data_dir, 
target_size=(img_width, img_height), 
batch_size=1481, 
class_mode='categorical') 

X, y = itr.next()