Как преобразовать Keras ImageDataGenerator в массив Numpy? - PullRequest
0 голосов
/ 05 апреля 2020

Я работаю над моделью CNN, и мне любопытно, как преобразовать вывод, предоставленный datagen.flow_from_directory (), в неровный массив. Формат datagen.flow_from_directory () - каталог каталогов.

Помимо ImageDataGenerator есть и любой другой способ извлечения данных из каталога.

img_width = 150
img_height = 150

datagen = ImageDataGenerator(rescale=1/255.0, validation_split=0.2)

train_data_gen =  directory='/content/xray_dataset_covid19',
                                             target_size = (img_width, img_height),
                                             class_mode='binary',
                                             batch_size=16,
                                             subset='training')

vali_data_gen = datagen.flow_from_directory(directory='/content/xray_dataset_covid19',
                                             target_size = (img_width, img_height),
                                             class_mode='binary',
                                             batch_size=16,
                                             subset='validation')

1 Ответ

0 голосов
/ 08 апреля 2020

Первый метод:

import numpy as np    

data_gen = ImageDataGenerator(rescale = 1. / 255)

data_generator = datagen.flow_from_directory(
    data_dir,
    target_size=(img_height, img_width),
    batch_size=batch_size,
    class_mode='categorical')
data_list = []
batch_index = 0

while batch_index <= data_generator.batch_index:
    data = data_generator.next()
    data_list.append(data[0])
    batch_index = batch_index + 1

# now, data_array is the numeric data of whole images
data_array = np.asarray(data_list)

Кроме того, вы можете использовать PIL и numpy для обработки изображения самостоятельно:

from PIL import Image
import numpy as np

def image_to_array(file_path):
    img = Image.open(file_path)
    img = img.resize((img_width,img_height))
    data = np.asarray(img,dtype='float32')
    return data
    # now data is a tensor with shape(width,height,channels) of a single image

Второй метод: Вы должны использовать ImageDataGenerator.flow , который принимает numpy массивы напрямую. Это заменяет вызов flow_from_directory, весь другой код, использующий генератор, должен быть таким же

...