2017-02-16 3 views
1

Я использую ImageDataGenerator внутри Keras для чтения каталога изображений. Я хотел бы сохранить результат в массиве 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) Так что вы можете сделать batch_size для flow_from_directory до размера всего набора данных вашего поезда.

Пример, весь мой обучающий набор состоит из 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() 
Смежные вопросы